[pnetcdf] 01/01: upstream release 1.9.0.pre1

Alastair McKinstry mckinstry at moszumanska.debian.org
Tue Dec 19 21:24:12 UTC 2017


This is an automated email from the git hooks/post-receive script.

mckinstry pushed a commit to tag upstream/1.9.0.pre.1
in repository pnetcdf.

commit 47aa29f791ec05fc4b82fbe6759ca0d29ecaa783
Author: Alastair McKinstry <mckinstry at debian.org>
Date:   Tue Dec 19 21:23:00 2017 +0000

    upstream release 1.9.0.pre1
---
 AUTHORS                                            |    14 +
 COPYING                                            |     1 +
 ChangeLog                                          |     1 +
 INSTALL                                            |   231 +-
 Makefile.am                                        |   112 +
 Makefile.in                                        |  1205 +-
 NEWS                                               |     3 +
 README                                             |    92 +-
 README.CRAY                                        |   110 -
 README.large_files                                 |    48 -
 RELEASE_NOTES                                      |     8 +-
 aclocal.m4 => acinclude.m4                         |   245 +-
 aclocal.m4                                         |  2863 +-
 benchmarks/C/Makefile.am                           |    40 +
 benchmarks/C/Makefile.in                           |   716 +-
 benchmarks/C/aggregation.c                         |    31 +-
 benchmarks/C/depend                                |     2 -
 benchmarks/C/write_block_read_column.c             |    31 +-
 benchmarks/FLASH-IO/Makefile.am                    |    76 +
 benchmarks/FLASH-IO/Makefile.in                    |  1133 +-
 benchmarks/FLASH-IO/README                         |     4 +-
 benchmarks/FLASH-IO/acinclude.m4                   |   189 +
 benchmarks/FLASH-IO/{configure.in => configure.ac} |    48 +-
 benchmarks/FLASH-IO/flash_benchmark_io.F90         |    38 +-
 benchmarks/Makefile.am                             |    49 +
 benchmarks/Makefile.in                             |   758 +-
 check_install.in                                   |    91 -
 cobalt.script                                      |    16 -
 configure                                          | 40163 ++++++++++++++-----
 configure.ac                                       |  1568 +
 configure.in                                       |  1387 -
 doc/Makefile.am                                    |    31 +
 doc/Makefile.in                                    |   762 +-
 doc/README.CRAY                                    |   204 +
 README.Fujitsu => doc/README.Fujitsu               |    10 +-
 README.IBM => doc/README.IBM                       |   131 +-
 README.INTEL => doc/README.INTEL                   |    12 +-
 README.K-Computer => doc/README.K-Computer         |    17 +-
 README.LINUX => doc/README.LINUX                   |     6 +-
 README.SGI => doc/README.SGI                       |     6 +-
 README.SX => doc/README.SX                         |     6 +
 doc/README.Ubuntu                                  |    33 +
 README.consistency => doc/README.consistency       |     7 +
 doc/README.large_files                             |    58 +
 pbs.script => doc/pbs.script                       |     4 +-
 doc/pnetcdf-api/Makefile.am                        |    40 +
 doc/pnetcdf-api/Makefile.in                        |   559 +
 doc/{ => pnetcdf-api}/c_api.tex                    |     0
 doc/{ => pnetcdf-api}/data_mode_api.tex            |     0
 doc/{ => pnetcdf-api}/flexible_api.tex             |     0
 doc/{ => pnetcdf-api}/latex8.sty                   |     2 +-
 doc/{ => pnetcdf-api}/multiple_io.tex              |     0
 doc/{ => pnetcdf-api}/nonblocking.tex              |     0
 doc/{ => pnetcdf-api}/pnetcdf-api.bbl              |     0
 doc/{ => pnetcdf-api}/pnetcdf-api.tex              |     0
 doc/porting_notes.txt                              |    50 -
 doc/symbol_renaming.txt                            |    23 -
 examples/C/Makefile.am                             |    92 +
 examples/C/Makefile.in                             |  1005 +-
 examples/C/block_cyclic.c                          |    20 +-
 examples/C/bput_varn_int64.c                       |    14 +-
 examples/C/bput_varn_uint.c                        |    14 +-
 examples/C/collective_write.c                      |    33 +-
 examples/C/column_wise.c                           |    29 +-
 examples/C/create_open.c                           |    12 +-
 examples/C/depend                                  |    23 -
 examples/C/fill_mode.c                             |    18 +-
 examples/C/flexible_api.c                          |    18 +-
 examples/C/get_info.c                              |    26 +-
 examples/C/get_vara.c                              |    12 +-
 examples/C/ghost_cell.c                            |    15 +-
 examples/C/global_attributes.c                     |    24 +-
 examples/C/hints.c                                 |    12 +-
 examples/C/i_varn_int64.c                          |    14 +-
 examples/C/mput.c                                  |    13 +-
 examples/C/nonblocking_write.c                     |    23 +-
 examples/C/nonblocking_write_in_def.c              |    13 +-
 examples/C/put_vara.c                              |    13 +-
 examples/C/put_varn_float.c                        |    12 +-
 examples/C/put_varn_int.c                          |    12 +-
 examples/C/req_all.c                               |    43 +-
 examples/C/transpose.c                             |    15 +-
 examples/C/vard_int.c                              |    15 +-
 examples/CXX/Makefile.am                           |    84 +
 examples/CXX/Makefile.in                           |   896 +-
 examples/CXX/SimpleXyWr.cpp                        |   131 +
 examples/CXX/block_cyclic.cpp                      |     9 +-
 examples/CXX/collective_write.cpp                  |     8 +-
 examples/CXX/column_wise.cpp                       |     9 +-
 examples/CXX/depend                                |    14 -
 examples/CXX/fill_mode.cpp                         |     9 +-
 examples/CXX/flexible_api.cpp                      |     9 +-
 examples/CXX/get_info.cpp                          |     8 +-
 examples/CXX/get_vara.cpp                          |     9 +-
 examples/CXX/hints.cpp                             |     9 +-
 examples/CXX/nonblocking_write.cpp                 |    16 +-
 examples/CXX/put_vara.cpp                          |     9 +-
 examples/CXX/put_varn_float.cpp                    |     9 +-
 examples/CXX/put_varn_int.cpp                      |     9 +-
 examples/CXX/transpose.cpp                         |     9 +-
 examples/CXX/vard_int.cpp                          |    10 +-
 examples/F77/Makefile.am                           |    91 +
 examples/F77/Makefile.in                           |   866 +-
 examples/F77/block_cyclic.f                        |     5 +-
 examples/F77/column_wise.f                         |     3 +-
 examples/F77/depend                                |    14 -
 examples/F77/fill_mode.f                           |    15 +-
 examples/F77/flexible_api.f                        |     4 +-
 examples/F77/utils.F90                             |    26 +-
 examples/F77/{vard_int.F => vard_int.f}            |    25 +-
 examples/F90/Makefile.am                           |    86 +
 examples/F90/Makefile.in                           |   841 +-
 examples/F90/block_cyclic.f90                      |     5 +-
 examples/F90/column_wise.f90                       |     3 +-
 examples/F90/depend                                |    12 -
 examples/F90/fill_mode.f90                         |    10 +-
 examples/F90/utils.F90                             |     4 +-
 examples/F90/vard_int.f90                          |     3 +-
 examples/Makefile.am                               |    64 +
 examples/Makefile.in                               |   770 +-
 examples/tutorial/Makefile.am                      |    71 +
 examples/tutorial/Makefile.in                      |   958 +-
 examples/tutorial/depend                           |    14 -
 examples/tutorial/pnetcdf-permute.c                |    14 +-
 examples/tutorial/pnetcdf-read-flexible.c          |    24 +-
 examples/tutorial/pnetcdf-read-from-master.c       |    29 +-
 examples/tutorial/pnetcdf-read-nb.c                |    22 +-
 examples/tutorial/pnetcdf-read-nfiles.c            |    25 +-
 examples/tutorial/pnetcdf-read-standard.c          |    22 +-
 examples/tutorial/pnetcdf-write-buffered.c         |    12 +-
 examples/tutorial/pnetcdf-write-bufferedf.f90      |    71 +-
 examples/tutorial/pnetcdf-write-bufferedf77.f      |    79 +-
 examples/tutorial/pnetcdf-write-flexible.c         |    13 +-
 examples/tutorial/pnetcdf-write-from-master.c      |    21 +-
 examples/tutorial/pnetcdf-write-nb.c               |     8 +-
 examples/tutorial/pnetcdf-write-nfiles.c           |    13 +-
 examples/tutorial/pnetcdf-write-standard.c         |    13 +-
 m4/aclocal_coverage.m4                             |    90 +
 {scripts => m4}/foreach.m4                         |     0
 m4/libtool.m4                                      |  8476 ++++
 m4/ltoptions.m4                                    |   437 +
 m4/ltsugar.m4                                      |   124 +
 m4/ltversion.m4                                    |    23 +
 m4/lt~obsolete.m4                                  |    99 +
 {scripts => m4}/utils.m4                           |   104 +-
 macros.make.in                                     |   159 -
 man/Makefile.am                                    |    32 +
 man/Makefile.in                                    |   656 +-
 man/pnetcdf.m4                                     |    34 +-
 man/pnetcdf_f90.m4                                 |    35 +-
 rules.make                                         |   264 -
 scripts/Makefile.in                                |    26 -
 scripts/compile                                    |   347 +
 scripts/config.guess                               |   532 +-
 scripts/config.sub                                 |   219 +-
 scripts/depcomp                                    |   791 +
 scripts/install-sh                                 |   374 +-
 scripts/ltmain.sh                                  | 11147 +++++
 scripts/missing                                    |   215 +
 scripts/test-driver                                |   148 +
 src/Makefile.am                                    |    24 +
 src/Makefile.in                                    |   744 +-
 src/binding/Makefile.am                            |    25 +
 src/binding/Makefile.in                            |   726 +
 src/binding/cxx/Makefile.am                        |    67 +
 src/binding/cxx/Makefile.in                        |   843 +
 src/{libcxx => binding/cxx}/ncmpiAtt.cpp           |     0
 src/{libcxx => binding/cxx}/ncmpiAtt.h             |     0
 src/{libcxx => binding/cxx}/ncmpiByte.cpp          |     0
 src/{libcxx => binding/cxx}/ncmpiByte.h            |     0
 src/{libcxx => binding/cxx}/ncmpiChar.cpp          |     0
 src/{libcxx => binding/cxx}/ncmpiChar.h            |     0
 src/{libcxx => binding/cxx}/ncmpiCheck.cpp         |     2 +
 src/{libcxx => binding/cxx}/ncmpiCheck.h           |     0
 src/{libcxx => binding/cxx}/ncmpiCompoundType.cpp  |     0
 src/{libcxx => binding/cxx}/ncmpiCompoundType.h    |     0
 src/{libcxx => binding/cxx}/ncmpiDim.cpp           |     0
 src/{libcxx => binding/cxx}/ncmpiDim.h             |     0
 src/{libcxx => binding/cxx}/ncmpiDouble.cpp        |     0
 src/{libcxx => binding/cxx}/ncmpiDouble.h          |     0
 src/{libcxx => binding/cxx}/ncmpiEnumType.cpp      |     0
 src/{libcxx => binding/cxx}/ncmpiEnumType.h        |     0
 src/{libcxx => binding/cxx}/ncmpiException.cpp     |     0
 src/{libcxx => binding/cxx}/ncmpiException.h       |     0
 src/{libcxx => binding/cxx}/ncmpiFile.cpp          |     0
 src/{libcxx => binding/cxx}/ncmpiFile.h            |     0
 src/{libcxx => binding/cxx}/ncmpiFloat.cpp         |     0
 src/{libcxx => binding/cxx}/ncmpiFloat.h           |     0
 src/{libcxx => binding/cxx}/ncmpiGroup.cpp         |     0
 src/{libcxx => binding/cxx}/ncmpiGroup.h           |     0
 src/{libcxx => binding/cxx}/ncmpiGroupAtt.cpp      |     0
 src/{libcxx => binding/cxx}/ncmpiGroupAtt.h        |     0
 src/{libcxx => binding/cxx}/ncmpiInt.cpp           |     0
 src/{libcxx => binding/cxx}/ncmpiInt.h             |     0
 src/{libcxx => binding/cxx}/ncmpiInt64.cpp         |     0
 src/{libcxx => binding/cxx}/ncmpiInt64.h           |     0
 src/{libcxx => binding/cxx}/ncmpiOpaqueType.cpp    |     0
 src/{libcxx => binding/cxx}/ncmpiOpaqueType.h      |     0
 src/{libcxx => binding/cxx}/ncmpiShort.cpp         |     0
 src/{libcxx => binding/cxx}/ncmpiShort.h           |     0
 src/{libcxx => binding/cxx}/ncmpiType.cpp          |     0
 src/{libcxx => binding/cxx}/ncmpiType.h            |     0
 src/{libcxx => binding/cxx}/ncmpiUbyte.cpp         |     0
 src/{libcxx => binding/cxx}/ncmpiUbyte.h           |     0
 src/{libcxx => binding/cxx}/ncmpiUint.cpp          |     0
 src/{libcxx => binding/cxx}/ncmpiUint.h            |     0
 src/{libcxx => binding/cxx}/ncmpiUint64.cpp        |     0
 src/{libcxx => binding/cxx}/ncmpiUint64.h          |     0
 src/{libcxx => binding/cxx}/ncmpiUshort.cpp        |     0
 src/{libcxx => binding/cxx}/ncmpiUshort.h          |     0
 src/{libcxx => binding/cxx}/ncmpiVar.cpp           |     0
 src/{libcxx => binding/cxx}/ncmpiVar.h             |     0
 src/{libcxx => binding/cxx}/ncmpiVarAtt.cpp        |     0
 src/{libcxx => binding/cxx}/ncmpiVarAtt.h          |     0
 src/{libcxx => binding/cxx}/ncmpiVlenType.cpp      |     0
 src/{libcxx => binding/cxx}/ncmpiVlenType.h        |     0
 src/{libcxx => binding/cxx}/ncmpi_notyet.cpp       |   108 -
 src/{libcxx => binding/cxx}/ncmpi_notyet.h         |     0
 src/{libcxx => binding/cxx}/pnetcdf.in             |     0
 src/binding/f77/Makefile.am                        |    46 +
 src/binding/f77/Makefile.in                        |   803 +
 src/binding/f77/README                             |    16 +
 src/{libf => binding/f77}/buildiface               |     6 +-
 src/{libf => binding/f77}/createffiles             |     2 +-
 src/{libf => binding/f77}/defs                     |    20 +-
 src/binding/f77/inq_libversf.f                     |     6 +
 src/{libf => binding/f77}/mpinetcdf_impl.h         |    14 +-
 src/{libf => binding/f77}/pnetcdf.inc.in           |    20 +-
 src/{libf => binding/f77}/strerrnof.f              |     7 +-
 src/binding/f77/strerrorf.f                        |     7 +
 src/binding/f90/Makefile.am                        |    58 +
 src/binding/f90/Makefile.in                        |   764 +
 src/binding/f90/api.fh.in                          |  4120 ++
 .../attributes.f90 => binding/f90/attributes.fh}   |     4 +-
 src/{libf90/dims.f90 => binding/f90/dims.fh}       |    12 +-
 src/{libf90/file.f90 => binding/f90/file.fh}       |    42 +-
 src/binding/f90/getput_text.m4                     |   355 +
 src/binding/f90/getput_var.m4                      |   750 +
 src/{libf90 => binding/f90}/getput_vard.m4         |     2 +-
 src/binding/f90/getput_varn.m4                     |   694 +
 .../f90/nf90_constants.fh}                         |    20 +-
 .../f90/nfmpi_constants.fh.in}                     |    62 +-
 .../overloads.f90 => binding/f90/overloads.fh}     |     6 +-
 src/{libf90 => binding/f90}/pnetcdf.f90.in         |    26 +-
 .../variables.f90 => binding/f90/variables.fh}     |   123 +-
 .../visibility.f90 => binding/f90/visibility.fh}   |    29 +-
 src/dispatchers/Makefile.am                        |    49 +
 src/dispatchers/Makefile.in                        |   726 +
 src/dispatchers/attr_getput.m4                     |   284 +
 src/dispatchers/attribute.c                        |   449 +
 src/dispatchers/dimension.c                        |   334 +
 src/{lib/error.c => dispatchers/error_codes.c}     |   152 +-
 src/dispatchers/file.c                             |  1501 +
 src/dispatchers/lib_version.c                      |    56 +
 src/dispatchers/var_getput.m4                      |   798 +
 src/dispatchers/variable.c                         |   686 +
 src/drivers/Makefile.am                            |    23 +
 src/drivers/Makefile.in                            |   725 +
 src/drivers/common/Makefile.am                     |    59 +
 src/drivers/common/Makefile.in                     |   739 +
 src/{lib/string.c => drivers/common/check_name.c}  |   206 +-
 src/drivers/common/convert_swap.m4                 |   520 +
 src/drivers/common/create_imaptype.c               |   119 +
 src/drivers/common/dtype_decode.c                  |   571 +
 src/drivers/common/error_mpi2nc.c                  |    95 +
 src/{lib/malloc.c => drivers/common/mem_alloc.c}   |   155 +-
 src/{lib => drivers/common}/ncx.m4                 |   364 +-
 src/drivers/common/pack_unpack.c                   |   127 +
 src/drivers/common/utf8proc.c                      |   874 +
 src/drivers/common/utf8proc.h                      |   723 +
 src/drivers/common/utf8proc_data.h                 | 14386 +++++++
 src/drivers/common/utils.c                         |    61 +
 src/drivers/include/Makefile.am                    |    26 +
 src/drivers/include/Makefile.in                    |   551 +
 src/drivers/include/common.h                       |   207 +
 src/{lib => drivers/include}/ncx_h.m4              |    61 +-
 src/drivers/ncfoo/Makefile.am                      |    55 +
 src/drivers/ncfoo/Makefile.in                      |   726 +
 src/drivers/ncfoo/ncfoo_attr.c                     |   160 +
 src/drivers/ncfoo/ncfoo_dim.c                      |    85 +
 src/drivers/ncfoo/ncfoo_driver.c                   |    76 +
 src/drivers/ncfoo/ncfoo_driver.h                   |   174 +
 src/drivers/ncfoo/ncfoo_file.c                     |   378 +
 src/drivers/ncfoo/ncfoo_var.c                      |   438 +
 src/drivers/ncmpio/Makefile.am                     |    80 +
 src/drivers/ncmpio/Makefile.in                     |   785 +
 src/drivers/ncmpio/TODO                            |    49 +
 src/drivers/ncmpio/ncmpio_NC.h                     |   547 +
 src/drivers/ncmpio/ncmpio_attr.m4                  |  1164 +
 src/drivers/ncmpio/ncmpio_bput.c                   |   146 +
 src/drivers/ncmpio/ncmpio_close.c                  |   159 +
 src/drivers/ncmpio/ncmpio_create.c                 |   287 +
 src/drivers/ncmpio/ncmpio_dim.c                    |   364 +
 src/drivers/ncmpio/ncmpio_driver.c                 |    77 +
 src/drivers/ncmpio/ncmpio_driver.h                 |   164 +
 src/drivers/ncmpio/ncmpio_enddef.c                 |  1041 +
 src/drivers/ncmpio/ncmpio_file_misc.c              |   456 +
 .../ncmpio/ncmpio_filetype.c}                      |   595 +-
 src/{lib/fill.c => drivers/ncmpio/ncmpio_fill.c}   |   715 +-
 src/drivers/ncmpio/ncmpio_getput.m4                |   685 +
 src/drivers/ncmpio/ncmpio_hash_func.c              |   401 +
 src/drivers/ncmpio/ncmpio_header_get.c             |  1389 +
 src/drivers/ncmpio/ncmpio_header_put.c             |   590 +
 .../ncmpio/ncmpio_i_getput.m4}                     |   393 +-
 src/drivers/ncmpio/ncmpio_i_varn.m4                |   263 +
 src/drivers/ncmpio/ncmpio_open.c                   |   220 +
 .../subfile.c => drivers/ncmpio/ncmpio_subfile.c}  |   429 +-
 src/drivers/ncmpio/ncmpio_subfile.h                |    36 +
 src/drivers/ncmpio/ncmpio_sync.c                   |   250 +
 src/drivers/ncmpio/ncmpio_util.c                   |   537 +
 src/drivers/ncmpio/ncmpio_var.c                    |   655 +
 src/drivers/ncmpio/ncmpio_vard.c                   |   412 +
 src/drivers/ncmpio/ncmpio_varn.m4                  |   279 +
 .../nonblocking.c => drivers/ncmpio/ncmpio_wait.c} |   914 +-
 src/include/Makefile.am                            |    15 +
 src/include/Makefile.in                            |   682 +
 src/{lib/ncconfig.h.in => include/config.h.in}     |   269 +-
 src/include/dispatch.h                             |   147 +
 src/{lib => include}/nctypes.h                     |    14 +-
 src/include/pnc_debug.h                            |    78 +
 src/{lib => include}/pnetcdf.h.in                  |   357 +-
 src/lib/Makefile.in                                |   133 -
 src/lib/attr.m4                                    |  1550 -
 src/lib/bput.m4                                    |   220 -
 src/lib/convert_swap.m4                            |   405 -
 src/lib/depend                                     |    32 -
 src/lib/dim.c                                      |   737 -
 src/lib/fbits.h                                    |    26 -
 src/lib/getput.m4                                  |   753 -
 src/lib/hash_func.c                                |   114 -
 src/lib/header.c                                   |  2660 --
 src/lib/i_varn.m4                                  |   327 -
 src/lib/m_getput_varx.m4                           |  1090 -
 src/lib/macro.h                                    |   207 -
 src/lib/mpincio.c                                  |   633 -
 src/lib/mpinetcdf.c                                |  1430 -
 src/lib/nc.c                                       |  1727 -
 src/lib/nc.h                                       |   861 -
 src/lib/ncio.h                                     |    95 -
 src/lib/ncmpidtype.c                               |   583 -
 src/lib/ncmpidtype.h                               |    24 -
 src/lib/rnd.h                                      |    19 -
 src/lib/subfile.h                                  |    53 -
 src/lib/utf8proc.c                                 |   624 -
 src/lib/utf8proc.h                                 |   415 -
 src/lib/utf8proc_data.h                            | 13393 -------
 src/lib/util.c                                     |   278 -
 src/lib/var.c                                      |  1233 -
 src/lib/vard.c                                     |   439 -
 src/lib/varn.m4                                    |   368 -
 src/libcxx/Makefile.in                             |    89 -
 src/libcxx/depend                                  |    67 -
 src/libf/Makefile.in                               |    87 -
 src/libf/inq_libversf.f                            |    10 -
 src/libf/nfconfig_inc.in                           |    91 -
 src/libf/strerrorf.f                               |    10 -
 src/libf90/Makefile.in                             |    91 -
 src/libf90/api.f90.in                              |  4121 --
 src/libf90/getput_text.m4                          |   251 -
 src/libf90/getput_var.m4                           |   678 -
 src/libf90/getput_varn.m4                          |   666 -
 src/libs/Makefile.am                               |    70 +
 src/libs/Makefile.in                               |   829 +
 src/packaging/Makefile.am                          |    15 +
 src/packaging/Makefile.in                          |   596 +
 pnetcdf_pc.in => src/packaging/pnetcdf.pc.in       |    10 +-
 src/utils/Makefile.am                              |    32 +
 src/utils/Makefile.in                              |   814 +-
 src/utils/ncmpidiff/Makefile.am                    |    29 +
 src/utils/ncmpidiff/Makefile.in                    |   832 +-
 src/utils/ncmpidiff/depend                         |     1 -
 src/utils/ncmpidiff/ncmpidiff.1                    |    12 +-
 src/utils/ncmpidiff/ncmpidiff.c                    |   112 +-
 src/utils/ncmpidump/Makefile.am                    |    43 +
 src/utils/ncmpidump/Makefile.in                    |   853 +-
 src/utils/ncmpidump/depend                         |     3 -
 src/utils/ncmpidump/ncmpidump.1                    |     6 +-
 src/utils/ncmpidump/ncmpidump.c                    |    21 +-
 src/utils/ncmpidump/ncmpidump.h                    |     4 +-
 src/utils/ncmpidump/vardata.c                      |    27 +-
 src/utils/ncmpigen/Makefile.am                     |    79 +
 src/utils/ncmpigen/Makefile.in                     |   975 +-
 src/utils/ncmpigen/depend                          |     9 -
 src/utils/ncmpigen/genlib.c                        |    15 +-
 src/utils/ncmpigen/genlib.h                        |     4 +-
 src/utils/ncmpigen/load.c                          |    20 +-
 src/utils/ncmpigen/main.c                          |     4 +-
 src/utils/ncmpigen/ncmpigen.1                      |     4 +-
 src/utils/ncmpivalid/Makefile.am                   |    33 +
 src/utils/ncmpivalid/Makefile.in                   |   838 +-
 src/utils/ncmpivalid/depend                        |     1 -
 src/utils/ncmpivalid/ncmpivalid.1                  |    24 +-
 src/utils/ncmpivalid/ncmpivalid.c                  |  1714 +-
 src/utils/ncoffsets/Makefile.am                    |    25 +
 src/utils/ncoffsets/Makefile.in                    |   817 +-
 src/utils/ncoffsets/ncoffsets.1                    |     4 +-
 src/utils/ncoffsets/ncoffsets.c                    |    51 +-
 pnetcdf-config.in => src/utils/pnetcdf-config.in   |    88 +-
 src/utils/pnetcdf_version/Makefile.am              |    36 +
 src/utils/pnetcdf_version/Makefile.in              |   831 +-
 src/utils/pnetcdf_version/depend                   |     1 -
 src/utils/pnetcdf_version/pnetcdf_version.1        |     8 +-
 src/utils/pnetcdf_version/pnetcdf_version.c        |    20 +-
 stamp-h.in                                         |     1 -
 test/C/Makefile.am                                 |    60 +
 test/C/Makefile.in                                 |  1122 +-
 test/C/pres_temp_4D_rd.c                           |    64 +-
 test/C/pres_temp_4D_wr.c                           |    23 +-
 test/C/seq_runs.sh                                 |    12 +
 test/CXX/Makefile.am                               |    61 +
 test/CXX/Makefile.in                               |  1124 +-
 test/CXX/nctst.cpp                                 |     9 +-
 test/CXX/seq_runs.sh                               |    12 +
 test/CXX/test_classic.cpp                          |     6 +-
 test/F90/Makefile.am                               |   103 +
 test/F90/Makefile.in                               |  1286 +-
 test/F90/depend                                    |    13 -
 test/F90/seq_runs.sh                               |    15 +
 test/F90/test_intent.f90                           |     4 +-
 test/Makefile.am                                   |    79 +
 test/Makefile.in                                   |   833 +-
 test/cdf_format/Makefile.am                        |    69 +
 test/cdf_format/Makefile.in                        |  1170 +-
 test/cdf_format/bad_begin.nc5                      |   Bin 0 -> 220 bytes
 test/cdf_format/bad_dimid.nc1                      |   Bin 0 -> 160 bytes
 test/cdf_format/bad_dimid.nc2                      |   Bin 0 -> 168 bytes
 test/cdf_format/bad_dimid.nc5                      |   Bin 0 -> 256 bytes
 test/cdf_format/bad_nattrs.nc1                     |   Bin 0 -> 184 bytes
 test/cdf_format/bad_nattrs.nc2                     |   Bin 0 -> 192 bytes
 test/cdf_format/bad_nattrs.nc5                     |   Bin 0 -> 288 bytes
 test/cdf_format/bad_ndims.nc1                      |   Bin 0 -> 160 bytes
 test/cdf_format/bad_ndims.nc2                      |   Bin 0 -> 168 bytes
 test/cdf_format/bad_ndims.nc5                      |   Bin 0 -> 256 bytes
 test/cdf_format/bad_xtype.nc1                      |   Bin 0 -> 64 bytes
 test/cdf_format/bad_xtype.nc2                      |   Bin 0 -> 68 bytes
 test/cdf_format/bad_xtype.nc5                      |   Bin 0 -> 100 bytes
 test/cdf_format/cdf_type.c                         |    21 +-
 test/cdf_format/depend                             |     3 -
 test/cdf_format/dim_cdf12.c                        |   289 +-
 test/cdf_format/seq_runs.sh                        |    26 +
 test/cdf_format/test_inq_format.c                  |    56 +-
 test/cdf_format/tst_corrupt.c                      |   145 +
 test/cdf_format/tst_open_cdf5.c                    |   103 +
 test/common/Makefile.am                            |    50 +
 test/common/Makefile.in                            |   748 +-
 test/common/testutils.h                            |    26 +-
 test/common/testutilsf.F90                         |    18 +-
 test/fandc/Makefile.am                             |    74 +
 test/fandc/Makefile.in                             |   873 +-
 test/fandc/README                                  |     3 +
 test/fandc/csnap.c                                 |    66 +-
 test/fandc/depend                                  |     2 -
 test/fandc/pnctest.c                               |    22 +-
 test/fandc/pnctestf.f                              |     4 +-
 test/fandc/pnf_test.f                              |    19 +-
 test/header/Makefile.am                            |    71 +
 test/header/Makefile.in                            |   741 +-
 test/header/README                                 |     5 +
 test/header/header_consistency.c                   |   214 +-
 test/header/seq_runs.sh                            |     9 +
 test/largefile/Makefile.am                         |   102 +
 test/largefile/Makefile.in                         |  1213 +-
 test/largefile/high_dim_var.c                      |   171 +
 test/largefile/large_dims_vars_attrs.c             |   135 +
 test/largefile/large_files.c                       |     4 +-
 test/largefile/large_var.c                         |    58 +-
 test/largefile/seq_runs.sh                         |    12 +
 test/largefile/tst_cdf5_begin.c                    |   110 +
 test/nc_test/Makefile.am                           |    85 +
 test/nc_test/Makefile.in                           |  1315 +-
 test/nc_test/depend                                |    33 -
 test/nc_test/nc_test.c                             |     7 +-
 test/nc_test/seq_runs.sh                           |    29 +
 test/nc_test/t_nc.c                                |    12 +-
 test/nc_test/test_get.m4                           |   117 +-
 test/nc_test/test_iput.m4                          |   118 +-
 test/nc_test/test_put.m4                           |   109 +-
 test/nc_test/test_read.m4                          |    29 +-
 test/nc_test/test_write.m4                         |    90 +-
 test/nc_test/tests.h.m4                            |    42 +-
 test/nc_test/tst_atts.c                            |     6 +-
 test/nc_test/tst_atts3.c                           |     6 +-
 test/nc_test/tst_misc.c                            |    15 +-
 test/nc_test/tst_names.c                           |    11 +-
 test/nc_test/tst_nofill.c                          |     6 +-
 test/nc_test/tst_norm.c                            |     6 +-
 test/nc_test/tst_small.c                           |     6 +-
 test/nc_test/util.c                                |    35 +-
 test/nf90_test/Makefile.am                         |    77 +
 test/nf90_test/Makefile.in                         |  1174 +-
 test/nf90_test/depend                              |    28 -
 test/nf90_test/fortlib.c                           |     7 +-
 test/nf90_test/nf90_test.F90                       |     8 +-
 test/nf90_test/seq_runs.sh                         |    21 +
 test/nf90_test/test_read.F90                       |     6 +-
 test/nf90_test/test_write.F90                      |    13 +-
 test/nf90_test/{tests.inc => tests.inc.in}         |     7 +-
 test/nf90_test/util.F90                            |    24 +-
 test/nf_test/Makefile.am                           |    86 +
 test/nf_test/Makefile.in                           |  1191 +-
 test/nf_test/depend                                |    31 -
 test/nf_test/fortlib.c                             |     7 +-
 test/nf_test/nf_test.F                             |    47 +-
 test/nf_test/seq_runs.sh                           |    20 +
 test/nf_test/test_read.F                           |    12 +-
 test/nf_test/test_write.F                          |    17 +-
 test/nf_test/tests.inc.in                          |     7 +-
 test/nonblocking/Makefile.am                       |   132 +
 test/nonblocking/Makefile.in                       |  1420 +-
 test/nonblocking/bput_varn.m4                      |   208 +-
 test/nonblocking/column_wise.m4                    |    92 +-
 test/nonblocking/depend                            |    14 -
 test/nonblocking/flexible_bput.c                   |    60 +-
 test/nonblocking/i_varn_indef.c                    |   152 +-
 test/nonblocking/i_varn_int64.c                    |   123 +-
 test/nonblocking/interleaved.c                     |   251 +-
 test/nonblocking/mcoll_perf.c                      |   341 +-
 test/nonblocking/mcoll_testf.f90                   |     4 +-
 test/nonblocking/mcoll_testf77.f                   |     6 +-
 test/nonblocking/req_all.c                         |    36 +-
 test/nonblocking/seq_runs.sh                       |    20 +
 test/nonblocking/test_bput.c                       |    54 +-
 test/nonblocking/test_bputf.f90                    |    52 +-
 test/nonblocking/test_bputf77.f                    |    56 +-
 test/nonblocking/wait_after_indep.c                |    44 +-
 test/subfile/Makefile.am                           |    67 +
 test/subfile/Makefile.in                           |  1117 +-
 test/subfile/depend                                |     2 -
 test/subfile/seq_runs.sh                           |    12 +
 test/subfile/test_subfile.c                        |   175 +-
 test/testcases/Makefile.am                         |   179 +
 test/testcases/Makefile.in                         |  1900 +-
 test/testcases/add_var.c                           |    44 +-
 test/testcases/alignment_test.c                    |    94 +-
 test/testcases/attrf.f                             |     4 +-
 test/testcases/bigrecords.f                        |     6 +-
 test/testcases/buftype_free.c                      |    45 +-
 test/testcases/buftype_freef.f                     |     6 +-
 test/testcases/check_striping.c                    |    24 +-
 test/testcases/check_type.c                        |   124 +-
 test/testcases/collective_error.c                  |    53 +-
 test/testcases/depend                              |    39 -
 test/testcases/erange_fill.m4                      |   137 +-
 test/testcases/flexible.c                          |    49 +-
 test/testcases/flexible2.c                         |    44 +-
 test/testcases/flexible_varm.c                     |    44 +-
 test/testcases/geopotential.ncdump                 |    48 -
 test/testcases/inq_num_vars.c                      |    71 +-
 test/testcases/inq_num_varsf.f90                   |     6 +-
 test/testcases/inq_recsize.c                       |    41 +-
 test/testcases/inq_recsizef.f90                    |     6 +-
 test/testcases/interop1.sh                         |    37 -
 test/testcases/ivarn.c                             |   149 +-
 test/testcases/large_var_cdf5.c                    |    90 +
 test/testcases/last_large_var.c                    |   216 +-
 test/testcases/mix_collectives.c                   |   299 +
 test/testcases/modes.c                             |   107 +-
 test/testcases/ncmpi_vars_null_stride.c            |    87 +-
 test/testcases/noclobber.c                         |    15 +-
 test/testcases/nonblocking.c                       |    42 +-
 test/testcases/null_args.c                         |   278 +
 test/testcases/one_record.c                        |    36 +-
 test/testcases/put_all_kinds.m4                    |   251 +
 test/testcases/put_parameter.f                     |     6 +-
 test/testcases/record.c                            |   138 +-
 test/testcases/redef1.c                            |    54 +-
 test/testcases/redef1.sh                           |    22 -
 test/testcases/scalar.c                            |    78 +-
 test/testcases/seq_runs.sh                         |    24 +
 test/testcases/test_erange.c                       |    70 +-
 test/testcases/test_vard.c                         |    91 +-
 test/testcases/test_vardf.F                        |     8 +-
 test/testcases/test_vardf90.f90                    |     8 +-
 test/testcases/test_varm.c                         |   127 +-
 test/testcases/tst_dimsizes.c                      |   145 +
 test/testcases/tst_max_var_dims.c                  |    99 +
 test/testcases/varn_contig.c                       |    24 +-
 test/testcases/varn_int.c                          |    61 +-
 test/testcases/varn_intf.f                         |     6 +-
 test/testcases/varn_real.f90                       |     4 +-
 test/testcases/vectors.c                           |    34 +-
 581 files changed, 150915 insertions(+), 60447 deletions(-)

diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..b67ba45
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,14 @@
+Authors of Parallel-netCDF
+
+Alok Choudhary	(Northwestern University)
+Kui Gao		(Northwestern University)
+Jianwei Li	(Northwestern University)
+Wei-keng Liao	(Northwestern University)
+Seung Woo Son	(Northwestern University)
+
+Bill Gropp	(Argonne National Laboratory)
+Rob Latham	(Argonne National Laboratory)
+Rob Ross	(Argonne National Laboratory)
+Rajeev Thakur	(Argonne National Laboratory)
+
+See also file "CREDITS" for additional contributors.
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..613bbe5
--- /dev/null
+++ b/COPYING
@@ -0,0 +1 @@
+See file "COPYRIGHT".
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..b2405f9
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1 @@
+See file "RELEASE_NOTES".
diff --git a/INSTALL b/INSTALL
index 1d045a7..90da984 100644
--- a/INSTALL
+++ b/INSTALL
@@ -17,7 +17,7 @@ default configuration of PnetCDF up and running.
 
 (a) You will need the following prerequisites.
 
-    - REQUIRED: This tar file
+    - REQUIRED: This compressed tar file
 
     - REQUIRED: An MPI C compiler
 
@@ -43,13 +43,13 @@ default configuration of PnetCDF up and running.
     different command syntax. Command "echo $SHELL" prints out the current
     shell used by your terminal program.
 
-(b) Unpack the tar file and go to the top level directory:
+(b) Unpack the tar file and go to the top level directory, for example:
 
-      gunzip parallel-netcdf-1.6.0.tar.gz
-      tar xf parallel-netcdf-1.6.0.tar
-      cd parallel-netcdf-1.6.0
+      gunzip parallel-netcdf-1.8.0.tar.gz
+      tar xf parallel-netcdf-1.8.0.tar
+      cd parallel-netcdf-1.8.0
 
-(c) Choose an installation directory, say $HOME/PnetCDF
+(c) Choose an installation directory, for example $HOME/PnetCDF
 
 (d) Configure PnetCDF specifying the installation directory:
 
@@ -71,15 +71,16 @@ default configuration of PnetCDF up and running.
 
       make install prefix=/OTHER/INSTALL/DIRECTORY
 
-(g) Add the bin subdirectory of the installation directory to your path in your
-    startup script (.bashrc for bash, .cshrc for csh, etc.):
+(g) Add the bin subdirectory of the installation directory to your path
+    environment variable in your startup script (.bashrc for bash, .cshrc for
+    csh, etc.):
 
     for csh and tcsh:
 
       setenv PATH $HOME/PnetCDF/bin:$PATH
 
     for bash and sh:
-  
+
       PATH=$HOME/PnetCDF/bin:$PATH ; export PATH
 
     Check that everything is in order at this point by doing:
@@ -105,25 +106,21 @@ options can be found using:
 
 Here lists a few important options:
 
-  --prefix=PREFIX         install PnetCDF files in PREFIX [/usr/local]
-  --enable-echo           Turn on strong echoing. [default: disabled]
-  --disable-largefile     omit support for large files
-  --disable-mpi-io-test   Disable check for MPI-IO support in MPI
-                          implementation, if you know your MPI implementation
-                          has MPI-IO support but the configure test fails to
-                          find it. [default: enabled]
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [/usr/local]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [PREFIX]
+
   --disable-cxx           Turn off support for the C++ interface, if you only
                           need the C interface. [default: enabled]
-  --enable-strict         Turn on strict debugging with gcc. [default:
-                          disabled]
   --disable-fortran       Turn off support for the Fortran interface, if you
                           only need the C interface. [default: enabled]
+  --enable-shared[=PKGS]  build shared libraries [default=no]
+  --enable-static[=PKGS]  build static libraries [default=yes]
   --enable-debug          Enable PnetCDF internal debug mode. This also
                           enables safe mode. [default: disabled]
   --disable-in-place-swap Disable memory in-place byte swap on Little Endian
                           machines. [default: enabled]
-  --enable-coverage       Compile with coverage support (gcc-based only).
-                          [default: disabled]
   --enable-subfiling      Enable subfiling support. [default: disabled]
   --disable-erange-fill   Disable use of fill value when out-of-range type
                           conversion causes NC_ERANGE error. [default:
@@ -132,42 +129,51 @@ Here lists a few important options:
                           Enable relaxed error NC_EINVALCOORDS to allow
                           coordinate start argument equal to dimension size
                           when argument count is zero. [default: disabled]
+  --enable-doxygen        Enable generation of documentation. [default:
+                          disabled]
   --disable-file-sync     Disable MPI file sync if you know your file system
                           can provide data consistency. [default: enabled]
   --enable-large-file-test
                           Enable testing for large (>4GB) file/variable I/O.
-                          Note "make testing" can run very slow. [default:
+                          Note "make check" can run very slow. [default:
                           disabled]
+  --disable-versioning    Disable library versioning. [default: enabled]
+
+Optional Packages:
 
   --with-mpi=/path/to/implementation
-                          installation prefix for MPI implementation
+                          The installation prefix path for MPI implementation.
 
 Some influential environment variables:
-  RM          Command for deleting files or directories. default: rm
-  MPICC       MPI C compiler
-  MPICXX      MPI C++ compiler
-  MPIF77      MPI Fortran 77 compiler
-  MPIF90      MPI Fortran 90 compiler
-  CC          Overwritten by MPICC if MPICC is set
-  CXX         Overwritten by MPICXX if MPICXX is set
-  F77         Overwritten by MPIF77 if MPIF77 is set
-  FC          Overwritten by MPIF90 if MPIF90 is set
-  CFLAGS      Debugging and optimization options for the C compiler
-  CPPFLAGS    Preprocessor options for C and C++ compilers, e.g. -I<include
-              dir> if you have headers in a nonstandard directory <include dir>
-  CXXFLAGS    Debugging and optimization options for the C compiler
-  FFLAGS      Debugging and optimization options for the Fortran 77 compiler
-  FCFLAGS     Debugging and optimization options for the Fortran 90 compiler
-  FPPFLAGS    Preprocessor options for Fortran compilers, e.g. -I<include dir>
+  RM          Command for deleting files or directories. [default: rm]
+  MPICC       MPI C compiler, [default: CC]
+  MPICXX      MPI C++ compiler, [default: CXX]
+  MPIF77      MPI Fortran 77 compiler, [default: F77]
+  MPIF90      MPI Fortran 90 compiler, [default: FC]
+  CC          C compiler command
+  CFLAGS      C compiler flags
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LT_SYS_LIBRARY_PATH
+              User-defined run-time library search path.
   CPP         C preprocessor
-  TEST_SEQRUN Run command (on one process) for make target check on
+  CXXCPP      C++ preprocessor
+  FC          Fortran compiler command
+  FCFLAGS     Fortran compiler flags
+  F77         Fortran 77 compiler command
+  FFLAGS      Fortran 77 compiler flags
+  GCOV        name/path for the gcov utility
+  TESTSEQRUN  Run command (on one MPI process) for "make check" on
               cross-compile environment. Example: "aprun -n 1". [default:
               none]
-  TEST_MPIRUN MPI run command for make target ptest, [default: mpiexec -n NP]
-  TEST_OUTDIR Output file directory for make target ptest, [default: ./]
+  TESTMPIRUN  MPI run command for "make ptest", [default: mpiexec -n NP]
+  TESTOUTDIR  Output file directory for "make check" and "make ptest",
+              [default: ./]
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -183,8 +189,8 @@ Some influential environment variables:
 
     MPICC, MPICXX, MPIF77, MPIF90
     Setting these variables would result in the PnetCDF library being built
-    with these compilers. CC, CXX, F77, and F90 will be ignored if these MPI
-    variables are present.
+    with these compilers. CC, CXX, F77, FC, and F90 will be overwritten by
+    their corresponding MPI compiler variables.
 
     Note the compile flags, such as -O2 or -g, should be given in CFLAGS and
     other flag environment variables. Please do not set them in compiler
@@ -192,7 +198,7 @@ Some influential environment variables:
     of compiler not found.
 
  - For platform-specific build instructions, see one of the README.<ARCH>
-   files.  
+   files in directory doc/.
 
 
 ----
@@ -218,6 +224,41 @@ Note on configure option "--disable-in-place-swap"
    allocate additional memory space, due to performance concern. Users are
    discouraged to use Fortran PARAMETER buffers in put APIs.
 
+----
+Note on configure option "--disable-erange-fill"
+----
+   Prior to 1.8.0, data type conversion for out-of-bound elements proceeds
+   even if the out-of-bound error is detected, and the contents (in both files
+   and read buffers) are left up to the user to handle. This behavior conforms
+   with NetCDF. See the URL below for details.
+   http://www.unidata.ucar.edu/software/netcdf/docs/group__error.html
+
+   Starting from 1.8.0, when the out-of-bound error is detected, instead of
+   proceeding the type conversion, PnetCDF fills the out-of-bound data elements
+   with their "fill values", as specified by the variable's attribute
+   "_FillValue" or default CDF fill values if the attribute is not defined.
+   Specifically, for PnetCDF put APIs, the value of attribute _FillValue, if
+   defined, will be used when writing to files. For get APIs, the default CDF
+   _FillValue corresponding to the internal data type will be used to fill the
+   read buffer. This feature can be disabled by adding option
+   "--disable-erange-fill" to the configure command line. In this case, the
+   conventional NetCDF method described above is used.
+
+----
+Note on configure option "--enable-relax-coord-bound"
+----
+   Starting from version 1.8.0, a new configure option
+   --enable-relax-coord-bound is added to provide a more relaxed boundary check
+   for argument start. Traditionally, both NetCDF and PnetCDF detect the error
+   code NC_EINVALCOORDS when the value of start is larger than or equal to the
+   defined dimension size. This can be inconvenient for some applications that
+   make a zero-length request with start being the dimension size, usually the
+   last process. The new configure option relaxes the boundary check by
+   allowing the above exception, i.e. start[i] can be the size of dimension i
+   only when count[i] is zero. The default of this feature is disabled. For
+   more detailed information, see discussion in:
+   http://lists.mcs.anl.gov/pipermail/parallel-netcdf/2016-March/001839.html
+
 -------------------------------------------------------------------------
 
 3. Testing the PnetCDF installation
@@ -236,25 +277,26 @@ executables built before submitting a batch job could save a lot of time.
 
 There are three environment variables that can be used to run make check/ptest
 on a cross compile platform.
- - TEST_MPIRUN : command to launch MPI jobs. default: mpiexec
- - TEST_SEQRUN : command to run MPI executable sequentially. default: ./
- - TEST_OUTDIR : output directory. default: ./
+ - TESTMPIRUN : command to launch MPI jobs. default: mpiexec -n NP
+ - TESTSEQRUN : command to run MPI executable sequentially. default: none
+ - TESTOUTDIR : output directory. default: ./
 
 Examples:
-    make check TEST_OUTDIR=/scratch
-    make ptest TEST_MPIRUN="aprun -n NP" TEST_OUTDIR=/scratch
+    make check TESTOUTDIR=/scratch
+    make ptest TESTMPIRUN="aprun -n NP" TESTOUTDIR=/scratch
 
-Note the keyword "NP" used in the environment variable string TEST_MPIRUN.  It
+Note the keyword "NP" used in the environment variable string TESTMPIRUN.  It
 will be replaced with the different numbers of MPI processes used in testing.
 Currently, the testing uses up to 8 processes. Hence, please make sure the
 process allocation at least contains 8 processes.
 
 One can also run "make ptest" on batch queue systems. One example PBS script is
-provide "pbs.script". It is recommended to build all the testing executables
-before submitting the batch job. This can be done by running the below command.
-    cd test ; make ; cd ../examples ; make ; cd ..
+provide "pbs.script" in directory doc/. It is recommended to build all the
+testing executables before submitting the batch job. This can be done by
+running the below command.
+    make tests
 
-Note on setting TEST_OUTDIR. In order to run parallel test correctly, the
+Note on setting TESTOUTDIR. In order to run parallel test correctly, the
 output directory must be on a file system accessible to all MPI processes.  We
 recommend to use parallel file systems or POSIX compliant file systems (Using
 NFS will most likely fail the parallel test.)
@@ -273,84 +315,3 @@ Issue with older MPI-IO implementation.
 
 Please send an email to parallel-netcdf at mcs.anl.gov
 
-
-
------------------------------------------------------------------------------
-Notes from previous releases
------------------------------------------------------------------------------
-
-To INSTALL parallel netCDF library:
-
-    1. 'autoreconf' (only necessary if you make changes to configure.in or
-        other configure-related files)
-
-    2. ./configure --prefix=<install dir> --with-mpi=/path/to/implementation
-	the --with-mpi argument should specify the prefix of where the mpi
-	implementation was installed.  If your mpicc is in
-	/usr/local/mpich-1.2.3/bin/mpicc then use the prefix
-	--with-mpi=/usr/local/mpich-1.2.3
-
-    NOTE: If configure cannot find your MPI implementation's C and/or
-	  Fortran compilers, define MPICC, MPICXX, MPIF77 and MPIF90
-	  environment variables to be the name of those compilers.  The
-	  configure script will then use those values instead of trying
-	  to guess.
-
-    3. make 
-
-       We have tried to make the Makefiles platform-independent.
-       However, each platform has its own make quirks:  if you run into
-       problems, please send a report to the developers at
-       parallel-netcdf at mcs.anl.gov.  If you have GNU Make, try using
-       that.
-
-    4. make install
-
-IF THIS DOESN'T WORK:
-
-Autoconf should do the right thing: using the system compiler to perform
-autoconf tests and then use the MPI compilers to build parallel-netcdf.
-If you need to set specific flags for a platform, and autoconf does not
-set them for you, then you will have to set some environment variables
-to help out the configure script.   Here are some suggested settings:
-
-       For Solaris
-            MPICC=mpicc
-
-       For SGI Origin2000
-            MPICC = mpicc
-            ------------ OR -------------
-            CC='/bin/cc -64 -mips4 -lmpi'
-            CPPFLAGS=-DNDEBUG
-            CFLAGS=-O
-            FC='/bin/f90 -64'
-            FFLAGS=-O
-            F90='/bin/f90 -64'
-            CXX='/bin/CC -64'
-            CXXFLAGS=-O
-
-       For Linux
-            MPICC=mpicc
-            CPPFLAGS='-DNDEBUG -Df2cFortran'
-            CFLAGS=-O
-            CXX=g++
-            FFLAGS='-O -W'
-
-       For IBM SP-2
-            MPICC mpcc_r
-            MPIF77 /bin/mpxlf_r
-            F90 /bin/mpxlf90_r
-            F90FLAGS -qsuffix=f=f90
-            CXX /bin/mpxlC_r
-            ------------- OR -------------
-            CC xlc
-            FC /bin/xlf
-            F90 /bin/xlf90
-            F90FLAGS -qsuffix=f=f90
-            CXX /bin/xlC
-                then manually edit macros.make:
-            CC = mpcc_r
-            FC = mpxlf_r
-            F90 = mpxlf90_r
-            F90FLAGS = -qsuffix=f=f90
-            CXX = mpxlC_r
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..a534ffd
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,112 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3498 2017-11-01 22:56:57Z wkliao $
+#
+# @configure_input@
+
+ACLOCAL_AMFLAGS = -I m4
+
+SUBDIRS = src man examples benchmarks test
+DIST_SUBDIRS = src man examples benchmarks test doc
+
+if BUILD_DOCS
+SUBDIRS += doc
+endif
+
+EXTRA_DIST = COPYRIGHT \
+             CREDITS \
+             INSTALL \
+             README \
+             RELEASE_NOTES \
+             m4/foreach.m4 \
+             m4/utils.m4
+
+# Below is a trick to build all test executables, without running them
+# tests:
+# 	$(MAKE) $(AM_MAKEFLAGS) check TESTS=
+
+# below is the alternative when AM_EXTRA_RECURSIVE_TARGETS is not defined
+# AM_EXTRA_RECURSIVE_TARGETS macro was introduced into automake 1.13.
+# TESTS_SUBDIRS = test examples benchmarks
+# TESTS_DIRS = $(TESTS_SUBDIRS:%=tests-%)
+# tests: all $(TESTS_DIRS)
+# $(TESTS_DIRS): 
+# 	$(MAKE) $(MFLAGS) -C $(@:tests-%=%) tests
+
+if BUILD_COVERAGE
+   PTEST_SUBDIRS =
+else
+   PTEST_SUBDIRS = test examples benchmarks
+endif
+
+ptest:
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest $$* ; \
+	done ) ;
+
+ptests:
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptests $$* ; \
+	done ) ;
+
+install-data-hook:
+	@echo '+----------------------------------------------------------------------------+'
+	@echo '|'
+	@echo '|  PnetCDF has been successfully installed under'
+	@echo '|          $(prefix)'
+	@echo '|'
+	@echo '|  * PnetCDF header files have been installed in'
+	@echo '|          $(prefix)/include'
+	@echo '|  * PnetCDF library files have been installed in'
+	@echo '|          $(exec_prefix)/lib'
+	@echo '|  * PnetCDF utility programs have been installed in'
+	@echo '|          $(exec_prefix)/bin'
+	@echo '|  * PnetCDF man pages have been installed in'
+	@echo '|          $(prefix)/share/man'
+	@echo '|'
+	@if test 'x$(has_fortran)' = xyes && test 'x$(FC_MODINC)' = 'x-I' ; then \
+	 echo '|  To compile your PnetCDF programs, please add the following to the command' ; \
+	else \
+	 echo '|  To compile your PnetCDF C programs, please add the following to the command' ; \
+	fi
+	@echo '|  line, so the compiler can find the PnetCDF header files:'
+	@echo '|      -I$(prefix)/include'
+	@if test "x$(has_fortran)" = xyes && test 'x$(FC_MODINC)' != 'x-I' ; then \
+	 echo '|  Use the following line to compile your Fortran programs'; \
+	 echo '|      $(FC_MODINC)$(prefix)/include' ; \
+	fi
+	@echo '|'
+	@echo '|  Add the following line to link your program to PnetCDF library:'
+	@echo '|      -L$(exec_prefix)/lib -lpnetcdf'
+	@echo '|'
+	@if test "x$(enable_shared)" = xyes ; then \
+	 echo '|  Add the following to your run-time environment variable LD_LIBRARY_PATH,' ; \
+	 echo '|  if your executable is linked with the PnetCDF shared libraries.' ; \
+	 echo '|      $(exec_prefix)/lib' ; \
+	 echo '|' ; \
+	fi
+	@echo '|  PnetCDF is jointly developed by a team at Northwestern University and'
+	@echo '|  Argonne National Laboratory.'
+	@echo '|'
+	@echo '|  Visit PnetCDF web sites for more information'
+	@echo '|      http://cucis.ece.northwestern.edu/projects/PnetCDF'
+	@echo '|      http://trac.mcs.anl.gov/projects/parallel-netcdf'
+	@echo '|'
+	@echo '+----------------------------------------------------------------------------+'
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
+
+.PHONY: ptest ptests tests
+
+dist-hook:
+	-rm -rf `find $(distdir) -type d -name .svn`
+
+
diff --git a/Makefile.in b/Makefile.in
index 7730d8c..b827242 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,133 +1,974 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2743 2016-12-28 16:23:27Z wkliao $
+# $Id: Makefile.am 3498 2017-11-01 22:56:57Z wkliao $
 #
 # @configure_input@
-
-srcdir = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at BUILD_DOCS_TRUE@am__append_1 = doc
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+	$(am__configure_deps) $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	cscope distdir dist dist-all distcheck
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/compile \
+	$(top_srcdir)/./scripts/config.guess \
+	$(top_srcdir)/./scripts/config.sub \
+	$(top_srcdir)/./scripts/install-sh \
+	$(top_srcdir)/./scripts/ltmain.sh \
+	$(top_srcdir)/./scripts/missing ./scripts/compile \
+	./scripts/config.guess ./scripts/config.sub ./scripts/depcomp \
+	./scripts/install-sh ./scripts/ltmain.sh ./scripts/missing \
+	AUTHORS COPYING ChangeLog INSTALL NEWS README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = src man examples benchmarks test $(am__append_1)
+DIST_SUBDIRS = src man examples benchmarks test doc
+EXTRA_DIST = COPYRIGHT \
+             CREDITS \
+             INSTALL \
+             README \
+             RELEASE_NOTES \
+             m4/foreach.m4 \
+             m4/utils.m4
+
+ at BUILD_COVERAGE_FALSE@PTEST_SUBDIRS = test examples benchmarks
+
+# Below is a trick to build all test executables, without running them
+# tests:
+# 	$(MAKE) $(AM_MAKEFLAGS) check TESTS=
+
+# below is the alternative when AM_EXTRA_RECURSIVE_TARGETS is not defined
+# AM_EXTRA_RECURSIVE_TARGETS macro was introduced into automake 1.13.
+# TESTS_SUBDIRS = test examples benchmarks
+# TESTS_DIRS = $(TESTS_SUBDIRS:%=tests-%)
+# tests: all $(TESTS_DIRS)
+# $(TESTS_DIRS): 
+# 	$(MAKE) $(MFLAGS) -C $(@:tests-%=%) tests
+ at BUILD_COVERAGE_TRUE@PTEST_SUBDIRS = 
+all: all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+	-rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__post_remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__post_remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__post_remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__post_remove_distdir)
+
+dist-tarZ: distdir
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__post_remove_distdir)
+
+dist-shar: distdir
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__post_remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__post_remove_distdir)
+
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir)
+	chmod u+w $(distdir)
+	mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build/sub \
+	  && ../../configure \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	    --srcdir=../.. --prefix="$$dc_install_base" \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__post_remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-local distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
 
-include macros.make
+install-info-am:
 
-PACKAGE_NAME      = @PACKAGE_NAME@
-PACKAGE_VERSION   = @PACKAGE_VERSION@
-PACKAGE_STRING    = @PACKAGE_STRING@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
 
-PACKAGE_FILENAME  = $(PACKAGE_NAME)-$(PACKAGE_VERSION)
-
-INSTALL_SUBDIRS	= src man
-
-SUBDIRS		= src \
-		  test \
-		  scripts \
-		  doc \
-		  man \
-		  benchmarks \
-		  examples
-
-GARBAGE		= pnetcdf_pc
-
-DIST_GARBAGE	= config.cache \
-		  config.status \
-		  config.log \
-		  macros.make \
-		  stamp-h \
-                  pnetcdf.pc \
-                  pnetcdf-config \
-                  check_install
-
-PACKING_LIST	= Makefile.in \
-		  aclocal.m4 \
-		  configure \
-		  configure.in \
-		  macros.make.in \
-		  rules.make \
-		  COPYRIGHT \
-		  CREDITS \
-		  INSTALL \
-		  README \
-		  README.CRAY \
-                  README.Fujitsu \
-                  README.INTEL \
-		  README.IBM \
-                  README.K-Computer \
-		  README.LINUX \
-		  README.SGI \
-		  README.SX \
-                  README.consistency \
-		  README.large_files \
-		  RELEASE_NOTES \
-		  pbs.script \
-		  cobalt.script \
-		  stamp-h.in \
-                  pnetcdf_pc.in \
-                  pnetcdf-config.in \
-                  check_install.in
-
-PACKING_SUBDIRS	= $(SUBDIRS)
-
-all:
-	$(MAKE) $(MFLAGS) -C src
-
-TESTS_SUBDIRS = test examples benchmarks
-TESTS_DIRS = $(TESTS_SUBDIRS:%=tests-%)
-tests: $(TESTS_DIRS)
-$(TESTS_DIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:tests-%=%)
-
-check testing:
-	$(MAKE) $(MFLAGS) -C test testing
-
-verbose_check verbose_testing:
-	$(MAKE) $(MFLAGS) -C test verbose_testing
-
-PTEST_SUBDIRS = test examples benchmarks
-PTEST_DIRS = $(PTEST_SUBDIRS:%=ptest-%)
-ptest: tests $(PTEST_DIRS)
-$(PTEST_DIRS): 
-ifeq (@enable_coverage@, yes)
-	echo "Parallel test is disabled because coverage analysis was enabled"
-else
-	$(MAKE) $(MFLAGS) -C $(@:ptest-%=%) ptest
-endif
-# make sure ptest runs one directory after another
-ptest-examples: ptest-test
-ptest-benchmarks: ptest-examples
-
-PTESTS_DIRS = $(PTEST_SUBDIRS:%=ptests-%)
-ptests: tests $(PTESTS_DIRS)
-$(PTESTS_DIRS): 
-ifeq (@enable_coverage@, yes)
-	echo "Parallel test is disabled because coverage analysis was enabled"
-else
-	$(MAKE) $(MFLAGS) -C $(@:ptests-%=%) ptests
-endif
-# make sure ptests runs one directory after another
-ptests-examples: ptests-test
-ptests-benchmarks: ptests-examples
-
-INSTALLDIRS = $(INSTALL_SUBDIRS:%=install-%)
-install: $(INSTALLDIRS) install_PKGCONFIG install_CONFIG
+tests: tests-recursive
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-data-am \
+	install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+	am--refresh check check-am clean clean-cscope clean-generic \
+	clean-libtool cscope cscopelist-am ctags ctags-am dist \
+	dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
+	dist-tarZ dist-xz dist-zip distcheck distclean \
+	distclean-generic distclean-libtool distclean-local \
+	distclean-tags distcleancheck distdir distuninstallcheck dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-data-hook install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-am tests-am tests-local uninstall \
+	uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ptest:
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest $$* ; \
+	done ) ;
+
+ptests:
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptests $$* ; \
+	done ) ;
+
+install-data-hook:
 	@echo '+----------------------------------------------------------------------------+'
 	@echo '|'
-	@echo '|  PnetCDF has been successfully installed under $(prefix)'
+	@echo '|  PnetCDF has been successfully installed under'
+	@echo '|          $(prefix)'
 	@echo '|'
-	@echo '|  * PnetCDF header files are installed in $(prefix)/include'
-	@echo '|  * PnetCDF library file is installed in $(prefix)/lib'
-	@echo '|  * PnetCDF utility programs are installed in $(prefix)/bin'
-	@echo '|  * PnetCDF man pages are installed in $(prefix)/man/man1 and'
-	@echo '|    $(prefix)/man/man3'
+	@echo '|  * PnetCDF header files have been installed in'
+	@echo '|          $(prefix)/include'
+	@echo '|  * PnetCDF library files have been installed in'
+	@echo '|          $(exec_prefix)/lib'
+	@echo '|  * PnetCDF utility programs have been installed in'
+	@echo '|          $(exec_prefix)/bin'
+	@echo '|  * PnetCDF man pages have been installed in'
+	@echo '|          $(prefix)/share/man'
 	@echo '|'
-	@echo '|  To compile your PnetCDF programs, please add the following to the command'
+	@if test 'x$(has_fortran)' = xyes && test 'x$(FC_MODINC)' = 'x-I' ; then \
+	 echo '|  To compile your PnetCDF programs, please add the following to the command' ; \
+	else \
+	 echo '|  To compile your PnetCDF C programs, please add the following to the command' ; \
+	fi
 	@echo '|  line, so the compiler can find the PnetCDF header files:'
 	@echo '|      -I$(prefix)/include'
+	@if test "x$(has_fortran)" = xyes && test 'x$(FC_MODINC)' != 'x-I' ; then \
+	 echo '|  Use the following line to compile your Fortran programs'; \
+	 echo '|      $(FC_MODINC)$(prefix)/include' ; \
+	fi
 	@echo '|'
 	@echo '|  Add the following line to link your program to PnetCDF library:'
-	@echo '|      -L$(prefix)/lib -lpnetcdf'
+	@echo '|      -L$(exec_prefix)/lib -lpnetcdf'
 	@echo '|'
+	@if test "x$(enable_shared)" = xyes ; then \
+	 echo '|  Add the following to your run-time environment variable LD_LIBRARY_PATH,' ; \
+	 echo '|  if your executable is linked with the PnetCDF shared libraries.' ; \
+	 echo '|      $(exec_prefix)/lib' ; \
+	 echo '|' ; \
+	fi
 	@echo '|  PnetCDF is jointly developed by a team at Northwestern University and'
 	@echo '|  Argonne National Laboratory.'
 	@echo '|'
@@ -137,135 +978,19 @@ install: $(INSTALLDIRS) install_PKGCONFIG install_CONFIG
 	@echo '|'
 	@echo '+----------------------------------------------------------------------------+'
 
-$(INSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:install-%=%) install
-
-PKGCONFIG_IN = pnetcdf_pc
-PKGCONFIG    = pnetcdf.pc
-
-install_PKGCONFIG:
-	$(RM) -f $(PKGCONFIG)
-	$(SED) -e "s%INSTALL_PREFIX%${prefix}%g" $(PKGCONFIG_IN) > $(PKGCONFIG)
-	$(INSTALL) -d -m 755 $(LIBDIR)/pkgconfig
-	$(INSTALL_DATA) $(PKGCONFIG) $(LIBDIR)/pkgconfig/$(PKGCONFIG)
-
-install_CONFIG:
-	$(INSTALL) -d $(BINDIR)
-	$(INSTALL) -m 755 pnetcdf-config $(BINDIR)/pnetcdf-config
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
 
-UNINSTALLDIRS = $(INSTALL_SUBDIRS:%=uninstall-%)
-uninstall: $(UNINSTALLDIRS) uninstall_PKGCONFIG uninstall_CONFIG
-$(UNINSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:uninstall-%=%) uninstall
-
-uninstall_PKGCONFIG:
-	$(RM) -f $(LIBDIR)/pkgconfig/$(PKGCONFIG)
-
-uninstall_CONFIG:
-	$(RM) -f $(BINDIR)/pnetcdf-config
-
-################################################################################
-# Distribution:
-
-# The following rule checks to see that were on the right system.  If we're
-# not, then the distribution mightn't contain the intended ncgen(1) (not
-# to mention that dvips(1) is necessary for building the C++ User's Guide).
-#
-check_system:	FORCE
-	@case "$(OVERRIDE)" in \
-	'') case `uname -sr` in \
-	    'SunOS 5'*) \
-		exit 0;; \
-	    *)  echo 1>&2 "Error: Not on a SunOS 5 system."; \
-		echo 1>&2 "Set macro OVERRIDE to override."; \
-		exit 1;; \
-	    esac;; \
-	*) exit 0;; \
-	esac
-
-# Make a compressed, tar(1) file of the source distribution in the current 
-# directory.
-#
-tar.Z:		check_system FORCE
-	$(MAKE) $(MFLAGS) $(PACKAGE_FILENAME).tar.Z
-
-dist: ensure_manifest MANIFEST
-	id=$(PACKAGE_FILENAME) \
-	&& $(RM) -fr $$id \
-	&& $(LN_S) $(srcdir) $$id \
-	&& tar $(TARFLAGS) - `$(SED) "s|^|$$id/|" MANIFEST` | gzip  > $(PACKAGE_FILENAME).tar.gz \
-	&& tar $(TARFLAGS) - `$(SED) "s|^|$$id/|" MANIFEST` | bzip2 > $(PACKAGE_FILENAME).tar.bz2 \
-	&& $(RM) -f $$id MANIFEST
-
-MANIFEST:	FORCE
-	$(MAKE) $(MFLAGS) -s MANIFEST.echo >$@
-
-# Make a compressed, tar(1) file of the source distribution in the
-# appropriate FTP directory.
-#
-# NOTE: Making "ftp" will cause the "tar.Z" file to be made even if it
-# already exists.  This is because the MANIFEST file upon which it
-# depends must be remade every time.  This is not a waste of time,
-# however, if the "tar.Z" target is made in private directories and the
-# "ftp" target is made in the "/upc/$(PACKAGE_FILENAME)/build/" directory.
-#
-ftp:		check_system FORCE
-	$(MAKE) $(MFLAGS) $(FTPDIR)/$(PACKAGE_FILENAME).tar.Z \
-	test -r $(FTPDIR)/$(PACKAGE_FILENAME).tar.Z || exit 0; \
-	    cd $(FTPDIR) || exit 1;
-
-$(FTPDIR)/$(PACKAGE_FILENAME).tar.Z:	$(PACKAGE_FILENAME).tar.Z
-	$(RM) -f $@
-	cp $(PACKAGE_FILENAME).tar.Z $@ 
-	chmod u+rw,g+rw,o=r $@
-
-# Make a compressed, tar(1) file of the binary distribution in the 
-# appropriate FTP directory.
-#
-binftp:		FORCE
-	$(MAKE) $(MFLAGS) $(FTPBINDIR)/$(PACKAGE_FILENAME).tar.Z \
-
-ftpbin:		binftp
-
-$(FTPBINDIR)/$(PACKAGE_FILENAME).tar.Z:
-	$(RM) -f $@
-	id=$(PACKAGE_FILENAME) \
-	&& $(RM) -f $$id \
-	&& $(LN_S) $(prefix) $$id \
-	&& tar $(TARFLAGS) - README $$id/bin $$id/include \
-	    $$id/lib $$id/man | compress > $@ \
-	&& $(RM) -f $$id
-	chmod u+rw,g+rw,o=r $@
-	test -r $(FTPBINDIR)/$(PACKAGE_FILENAME).tar.Z || exit 0; \
-	    cd $(FTPBINDIR) || exit 1;
-
-
-# rule for generating cscope information
-cscope:
-	find $(srcdir) -iname "*.[ch]" > $(srcdir)/cscope.files
-	( cd $(srcdir); cscope -be -i $(srcdir)/cscope.files )
-
-# The following dependency is for configure.in and configure
-# See autoconf manual 2.69, Section 4.8.5 Automatic Remaking
-$(srcdir)/configure: configure.in aclocal.m4
-	cd '$(srcdir)' && autoconf
-     
-# autoheader might not change src/lib/ncconfig.h.in so touch a stamp file.
-$(srcdir)/src/lib/ncconfig.h.in: stamp-h.in
-$(srcdir)/stamp-h.in: configure.in aclocal.m4
-	cd '$(srcdir)' && autoheader
-	echo timestamp > '$(srcdir)/stamp-h.in'
-     
-src/lib/ncconfig.h: stamp-h
-stamp-h: src/lib/ncconfig.h.in config.status
-	./config.status
-     
-Makefile: Makefile.in config.status
-	./config.status
-     
-config.status: configure
-	./config.status --recheck
-
-include $(srcdir)/rules.make
+.PHONY: ptest ptests tests
 
+dist-hook:
+	-rm -rf `find $(distdir) -type d -name .svn`
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..8806561
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,3 @@
+Please see Parallel-netCDF project web sites:
+http://cucis.ece.northwestern.edu/projects/PnetCDF
+http://trac.mcs.anl.gov/projects/parallel-netcdf
diff --git a/README b/README
index 2e9b374..38e9a6b 100644
--- a/README
+++ b/README
@@ -1,50 +1,51 @@
 
 Parallel netCDF (PnetCDF) is a library providing high-performance parallel I/O
 while still maintaining file-format compatibility with Unidata's NetCDF,
-specifically the CDF and CDF-2 formats. Although NetCDF supports parallel I/O
-starting from version 4, the files must be in HDF5 format. PnetCDF is currently
-the only choice for carrying out parallel I/O on files that are in classic
-formats (CDF-1 and 2).
+specifically the classic CDF 1, 2, and 5 formats. Although NetCDF supports
+parallel I/O starting from version 4, it is built on top of HDF5 and thus its
+parallel feature requires files in HDF5 format. PnetCDF is currently the only
+option for parallel I/O on files in classic formats.
 
-In addition, PnetCDF supports the CDF-5 file format, an extension of CDF-2,
-that supports more data types and allows users to define large dimensions,
-attributes, and variables (>2B elements).
+Starting from version 1.1.0, PnetCDF supports the CDF-5 file format, an
+extension of CDF-2, that supports more atomic data types and allows users to
+define large dimensions, attributes, and variables (>2B array elements).
 
 NetCDF gives scientific programmers a space-efficient and portable means for
-storing data. However, it does so in a serial manner, making it difficult to
-achieve high I/O performance. By making some small changes to the NetCDF APIs,
-PnetCDF can use MPI-IO to achieve high-performance parallel I/O.
+storing data.  By making some small changes to the NetCDF APIs, PnetCDF can use
+MPI-IO to achieve high-performance parallel I/O.
 
 More extensive installation guides can be found in file INSTALL.  Additional
-information regarding the contents of the release can be found in
-the RELEASE_NOTES file in the top-level directory.  Finally, the PnetCDF web
-sites:
+information regarding the contents of the release can be found in the
+RELEASE_NOTES file in the top-level directory.  Finally, the PnetCDF project
+web sites below contain information on bug fixes and software releases.
     http://trac.mcs.anl.gov/projects/parallel-netcdf
     http://cucis.ece.northwestern.edu/projects/PnetCDF
-contain information on bug fixes and new releases.
 
 
 Requirements:
-
-    - Parallel-NetCDF relies on MPI-IO.  ROMIO, the most common MPI-IO
-      implementation, can make use of a prefix in front of the file name to
-      specify the underlying file system and override ROMIO's auto detection. A
-      typical prefix would look like "nfs:" or "pvfs2:".  Bear this in mind if
-      you use a file name with ':' characters.  In some cases, ROMIO might
-      think you are passing in a prefix and will complain about an unsupported
-      file system type.  If that happens, add a file-system prefix to your file
-      name.   
-      
-    - To build parallel-netcdf you will need some additional programs:
-        - autotools (autoconfig, autoreconf, m4, etc.)
-        - Optional:
+    - PnetCDF relies on MPI-IO.  ROMIO, the most common MPI-IO implementation,
+      can make use of a prefix in front of the file name to specify the
+      underlying file system and override ROMIO's auto detection. A typical
+      prefix would look like "nfs:" or "pvfs2:".  Bear this in mind if you use
+      a file name with ':' characters.  In some cases, ROMIO might think you
+      are passing in a prefix and will complain about an unsupported file
+      system type.  If that happens, add a file-system prefix to your file
+      name.
+    - To build parallel-netcdf, you will need the following additional programs:
+        - autotools (autoconfig, automake, libtool, m4, etc.)
+        - Optional: (for PnetCDF developers)
              - either yacc or bison
 	     - either lex or flex
       These are usually part of your operating system's development tools.
 
 
 Build recipes:
-    Several machine- and platform-specific build recipes are available.
+    The process of building and installation of PnetCDF library is usually
+    simple: by just running commands "./configure" and "make install". Several
+    configure options are also available to customize it.
+
+    Several machine- and compiler-specific build recipes are available under
+    the directory of doc.
     - README.IBM        (BlueGene systems)
     - README.SX         (NEC SX systems)
     - README.CRAY       (Cray systems)
@@ -53,18 +54,35 @@ Build recipes:
     - README.Fujitsu    (Fujitsu systems)
     - README.K-Computer (the K computer @RIKEN)
     - README.SGI        (SGI systems, such as Endeavour @NASA)
+    - README.Ubuntu     (Ubuntu)
+
 
+PnetCDF User Documents:
+    C API References
+      http://cucis.ece.northwestern.edu/projects/PnetCDF/doc/pnetcdf-c
+    Questions & Answers
+      http://cucis.ece.northwestern.edu/projects/PnetCDF/faq.html
 
 Note on supporting large files and large variables.
+    - Some Fortran APIs contain arguments of 64-bit integer data type, which
+      corresponds to MPI_Offset data type in their peer C APIs. Declare those
+      arguments as 'integer(kind=MPI_OFFSET_KIND)'.
+
+    - In places where you might use NF_UNLIMITED to define an unlimited
+      dimension in one of the nfmpi_ routines, use NFMPI_UNLIMITED.
+      NFMPI_UNLIMITED has been defined as the proper 64-bit integer type for
+      nfmpi_def_dim, whereas NF_UNLIMITED might be too small. Similarly, for
+      Fortran 90, use NF90MPI_UNLIMITED instead of NF90_UNLIMITED.
+
 
-    - Fortran routines will pass in a 64 bit integer for some parameters (those
-      corresponding to MPI_Offset type in the C routines).  Declare those
-      parameters as 'integer(kind=MPI_OFFSET_KIND)'
+Mailing List
+    PnetCDF user community discusses the design and use of the library on the
+    parallel-netcdf at mcs.anl.gov mailing list. Anyone interested in developing
+    or using PnetCDF is encouraged to join. Visit the list information page
+    https://lists.mcs.anl.gov/mailman/listinfo/parallel-netcdf
+    for subscription instructions. This mailing list is also for announcements,
+    bug reports, and questions about PnetCDF software.
 
-    - In places where you might use NF_UNLIMITED to define an unlimited 
-      dimension in one of the nfmpi_ routines, use NFMPI_UNLIMITED. 
-      NFMPI_UNLIMITED will be defined as the proper type for nfmpi_def_dim, 
-      whereas nf_unlimited might be too small. Similarly, for Fortran 90,
-      use NF90MPI_UNLIMITED instead of NF90_UNLIMITED.
+    The past discussions in the mailing list are available in the follow URL:
+    http://lists.mcs.anl.gov/pipermail/parallel-netcdf/.
 
-Please send an email to parallel-netcdf at mcs.anl.gov
diff --git a/README.CRAY b/README.CRAY
deleted file mode 100644
index 5c3094c..0000000
--- a/README.CRAY
+++ /dev/null
@@ -1,110 +0,0 @@
-# $Id: README.CRAY 1605 2014-05-01 20:22:23Z wkliao $
-
-===============================================================================
-    Cray XC30
-===============================================================================
-
-Building PnetCDF on the Cray XC30 (tested on Edison @ NERSC)
-http://www.nersc.gov/systems/edison-cray-xc30/
-
-The configure options are the same as Cray XE6, except when using the Intel
-compiler (the default on Edison) with optimization flag "-fast". According
-to the NERSC URL below, the flag "-no-ipo" must be used together with flag
-"-fast" to build a library.
-http://www.nersc.gov/users/software/compilers/intel-fortran-c-and-c/
-
-./configure --prefix=/path/to/install \
-            --with-mpi=/path/to/mpi/implementation \
-            CFLAGS="-fast -no-ipo" CXXFLAGS="-fast -no-ipo" \
-            FFLAGS="-fast -no-ipo" FCFLAGS="-fast -no-ipo"
-
-
-Note if running make is slow, try parallel make, e.g.
-
-    make -j8
-
-===============================================================================
-    Cray XE6
-===============================================================================
-
-Building PnetCDF on the Cray XE6 (tested on Hopper @ NERSC)
-http://www.nersc.gov/systems/hopper-cray-xe6/
-
-./configure --prefix=/path/to/install \
-            --with-mpi=/path/to/mpi/implementation \
-            CFLAGS=-fast CXXFLAGS=-fast FFLAGS=-fast FCFLAGS=-fast
-
-
-The configure command above works for PGI, GNU, and Intel
-compilers, i.e. when one of the module load commands below is used:
-
-    module load PrgEnv-pgi
-    module load PrgEnv-gnu
-    module load PrgEnv-intel
-
-
-For Pathscale compilers, i.e.
-    module load PrgEnv-pathscale
-    use command below:
-    ./configure --prefix=/path/to/install \
-                --with-mpi=/path/to/mpi/implementation \
-                CFLAGS=-Ofast CXXFLAGS=-Ofast FFLAGS=-Ofast FCFLAGS=-Ofast
-
-
-For Cray compilers, i.e.
-    module load PrgEnv-cray
-    use command below:
-    ./configure --prefix=/path/to/install \
-                --with-mpi=/path/to/mpi/implementation \
-                CFLAGS=-O2 CXXFLAGS=-O2 FFLAGS=-O2 FCFLAGS="-O2 -emf" \
-                LDFLAGS=-Wl,-z,muldefs
-
-    Check crayftn man page for using option "-emf" in FCFLAGS:
-    to creates .mod files to hold module and allows the creation
-    of lower-case module .mod file names.
-
-    Option "-Wl,-z,muldefs" in LDFLAGS is to get around the
-    error of multiple definitions of `tc_version', etc.
-
-
-===============================================================================
-    Cray X1
-===============================================================================
-
-2 May 2005
-
-I performed the following steps to get Parallel-NetCDF to build on the Cray X1
-at Oak Ridge (phoenix.ccs.ornl.gov).   Note that out-of-tree (or VPATH) builds
-do not work for the Fortran interface as of 1.0.0-pre2, but we will try to
-address this issue in a future release.  
-
-prompt:$ module load mpt
-prompt:$ export CC=cc
-prompt:$ export FC=ftn
-prompt:$ export MPIF77=$FC
-prompt:$ export MPICC=$CC
-prompt:$ export FFLAGS="-eh"
-prompt:$ ./configure --prefix=/path/to/install
-# note: configure takes a fairly long time. 
-prompt:$ make
-
-The "nc_test" test will exhaust the available MPI datatypes on the X1.  Your
-application might see this error:
-
-   MPI has run out of internal datatype entries.                  
-   Please set the environment variable MPI_TYPE_MAX for additional space.
-   The current value of MPI_TYPE_MAX is 2098                      
-
-I did as asked and nc_test completed with MPI_TYPE_MAX set to 4096
-
-If you run on the login node, expect to see a lot of these messages:
-
-  Process [nc_test] 89345 generated trap, but has signal 8 held or ignored
-        epc 0x1219bb4 ra 0x1219b94 badvaddr 0x40004f0004000020 
-
-The messages don't *appear* to impact the program results, and additionally do
-not show up if you submit the job to PBS.
-
-Fortran codes should use '-eh' so that the Cray ftn compiler will use 1 byte
-for int*1 and 2 bytes for int*2.  Otherwise, our Fortran bindings will pass
-incorrect values to the C routines.   
diff --git a/README.large_files b/README.large_files
deleted file mode 100644
index 09096de..0000000
--- a/README.large_files
+++ /dev/null
@@ -1,48 +0,0 @@
-==== BACKGROUND
-
-The "traditional" netcdf file format (CDF-1) uses a 4-byte value to hold
-the offset into the file where one can find a variable's data
-
-Recently (October 2003), Greg Sjaardema <gdsjaar at sandia.gov> proposed a
-new file format (CDF-2) which uses an 8-byte value for the offset.
-We use his approach in parallel netcdf, though we have modified his
-patch against netcdf-3.5-beta1 to apply to our codebase.  
-
-I couldn't find a URL to Greg's original message, but here's Russ Rew's 
-followup: 
-http://www.unidata.ucar.edu/projects/coohl/mhonarc/MailArchives/netcdf/msg04811.html
-
-This means there are two different but compatible implementations of the
-CDF-2 file format.  We (the parallel netcdf developers) will make our
-best effort to keep our implementation compatible with the serial netcdf
-implementation.  Please report any incompatibilities to the developers
-at parallel-netcdf at mcs.anl.gov. 
-
-==== PRELIMINARIES
-
-First, it is important that your MPI-IO implementation uses an 8 byte
-type to represent the 'MPI_Offset'
-
-Second, your platform should use an 8 byte type to represent the 'off_t'
-type.  On Linux, solaris, IRIX64 (and quite possibly others), parallel-netcdf
-will automatically add the right options to the compiler to make this
-happen.   
-
-Run configure as you normally would.  Let the developers know if
-configure says your 'off_t' is 4 bytes.  Proceed to compile and install
-the library.
-
-==== USAGE
-
-By default, parallel-netcdf will create CDF-1 formatted files.  This
-will ensure that datasets created by our library will be compatible with
-the large body of applications which expect NetCDF files to be CDF-1
-formatted.
-
-To write a CDF-2 formatted file, add the flag 'NC_64BIT_OFFSET' to the
-ncmpi_create() function call ( or nfmpi_create() if using the Fortran
-interface)
-
-The parallel-netcdf library will detect the format of the dataset.
-There are no special options needed to read back files created with the
-NC_64BIT_OFFSET flag set.
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index b6374a8..ad4feaa 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -374,7 +374,7 @@ version  1.6.1 (June 1, 2015)
   o New features
     * PnetCDF now supports fill mode. ncmpi_set_fill() can be used to set the
       fill mode for the entire data set. Note the differences from netCDF:
-      1. The default mode in PnetCDF is NC_NOFILL. 
+      1. The default mode in PnetCDF is NC_NOFILL.
       2. Setting fill mode for the entire file or individual variables must be
          done in define mode.
       3. For non-record variables, they are filled at the time ncmpi_enddef()
@@ -768,7 +768,7 @@ version  1.5.0 (July 8, 2014)
       processes used to run the tests. The testing uses up to 8 MPI processes.
 
     * A sample PBS script file is provided to test "make ptest" on machines
-      with a batch queue system: pbs.script. This example script can be
+      with a batch queue system: doc/pbs.script. This example script can be
       submitted from the build root directory (where you run "make" command to
       build PnetCDF library).
 
@@ -1211,11 +1211,11 @@ version  1.0.0 (July 27, 2005)
 
     - The Parallel-NetCDF developers are quite happy to announce our 1.0.0
       release.  This release reflects the culmination of several years of
-      work and lots of community feedback.  
+      work and lots of community feedback.
 
       A brief list of the major changes since 0.9.4:
 
-    - Has both the high level and flexible data mode interfaces 
+    - Has both the high level and flexible data mode interfaces
     - Improved support for many more platforms
     - Support for all serial NetCDF access patterns (var, vara, vars,
       varm) and types (text, char, uchar, schar, short, int, float, long,
diff --git a/aclocal.m4 b/acinclude.m4
similarity index 88%
copy from aclocal.m4
copy to acinclude.m4
index 8299646..1557975 100644
--- a/aclocal.m4
+++ b/acinclude.m4
@@ -1,5 +1,5 @@
-dnl $Id: aclocal.m4 2682 2016-12-07 06:30:01Z wkliao $
-dnl UD macros for netcdf configure
+dnl $Id: acinclude.m4 3490 2017-10-28 17:09:38Z wkliao $
+dnl UD macros for PnetCDF configure
 
 
 dnl Convert a string to all uppercase.
@@ -10,7 +10,7 @@ define([uppercase],
 dnl
 dnl Check for an m4(1) preprocessor utility.
 dnl
-AC_DEFUN(UD_PROG_M4,
+AC_DEFUN([UD_PROG_M4],
 [
     dnl AS_MESSAGE([checking for m4 preprocessor...])
     case "${M4-unset}" in
@@ -42,7 +42,7 @@ AC_DEFUN(UD_PROG_M4,
 dnl
 dnl Check for an ar(1) utility.
 dnl
-AC_DEFUN(UD_PROG_AR,
+AC_DEFUN([UD_PROG_AR],
 [
     dnl AS_MESSAGE([checking for ar utility...])
     case "${AR-unset}" in
@@ -60,7 +60,7 @@ AC_DEFUN(UD_PROG_AR,
 dnl
 dnl Check for an nm(1) utility.
 dnl
-AC_DEFUN(UD_PROG_NM,
+AC_DEFUN([UD_PROG_NM],
 [
     dnl AS_MESSAGE([checking for nm utility...])
     case "${NM-unset}" in
@@ -78,7 +78,7 @@ AC_DEFUN(UD_PROG_NM,
 dnl
 dnl Set the top-level source-directory.
 dnl
-AC_DEFUN(UD_SRCDIR,
+AC_DEFUN([UD_SRCDIR],
 [
     AC_MSG_CHECKING(for top-level source-directory)
     SRCDIR=`(cd $srcdir && pwd)`
@@ -91,7 +91,7 @@ dnl Check for a Standard C compiler.  Prefer a native one over the
 dnl GNU one to reduce the chance that the environment variable LIBS
 dnl will have to be set to reference the GNU C runtime library.
 dnl
-AC_DEFUN(UD_PROG_CC,
+AC_DEFUN([UD_PROG_CC],
 [
     # Because we must have a C compiler, we treat an unset CC
     # the same as an empty CC.
@@ -151,7 +151,7 @@ dnl Check for a C++ compiler.  Prefer a native one over the
 dnl GNU one to reduce the chance that the environment variable LIBS
 dnl will have to be set to reference the GNU C runtime library.
 dnl
-AC_DEFUN(UD_PROG_CXX,
+AC_DEFUN([UD_PROG_CXX],
 [
     case "${CXX-unset}" in
 	unset)
@@ -225,7 +225,7 @@ AC_DEFUN(UD_PROG_CXX,
 dnl
 dnl like AC_TYPE_LONG_DOUBLE, except checks for 'long long'
 dnl
-AC_DEFUN(UD_C_LONG_LONG,
+AC_DEFUN([UD_C_LONG_LONG],
 [AC_MSG_CHECKING(for long long)
 AC_CACHE_VAL(ac_cv_c_long_long,
 [if test "$GCC" = yes; then
@@ -249,7 +249,7 @@ dnl If the 'double' is not an IEEE double
 dnl or the 'float' is not and IEEE single,
 dnl define NO_IEEE_FLOAT
 dnl
-AC_DEFUN(UD_CHECK_IEEE,
+AC_DEFUN([UD_CHECK_IEEE],
 [
 AC_MSG_CHECKING(for IEEE floating point format)
 AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifndef NO_FLOAT_H
@@ -291,7 +291,7 @@ fi
 dnl Check for utility for generating makefile dependencies.
 dnl Should only be used at the UPC.
 dnl
-AC_DEFUN(UD_PROG_CC_MAKEDEPEND,
+AC_DEFUN([UD_PROG_CC_MAKEDEPEND],
 [
     AC_MSG_CHECKING(how to make dependencies)
     case `uname -s` in
@@ -334,7 +334,7 @@ AC_DEFUN(UD_PROG_CC_MAKEDEPEND,
 
 dnl Check for Fortran-90 compiler.
 dnl
-AC_DEFUN(UD_PROG_F90,
+AC_DEFUN([UD_PROG_F90],
 [
     case "${F90+set}" in
 	set)
@@ -454,7 +454,7 @@ EOF
 
 dnl Check for Fortran-77 compiler.
 dnl
-AC_DEFUN(UD_PROG_FC,
+AC_DEFUN([UD_PROG_FC],
 [
     AC_BEFORE([UD_FORTRAN_TYPES])
     case "${FC+set}" in
@@ -641,7 +641,7 @@ EOF
 
 dnl Check for Fortran preprocessor.
 dnl
-AC_DEFUN(UD_PROG_FPP,
+AC_DEFUN([UD_PROG_FPP],
 [
     AC_MSG_CHECKING(for Fortran preprocessor)
     case "$FPP" in
@@ -659,7 +659,7 @@ dnl Check for a Fortran type equivalent to a netCDF type.
 dnl
 dnl UD_CHECK_FORTRAN_NCTYPE(forttype, possibs, nctype)
 dnl
-AC_DEFUN(UD_CHECK_FORTRAN_NCTYPE,
+AC_DEFUN([UD_CHECK_FORTRAN_NCTYPE],
 [
     AC_MSG_CHECKING([for Fortran-equivalent to netCDF "$3"])
 dnl     for type in $2; do
@@ -695,7 +695,7 @@ dnl Check for a Fortran type equivalent to a C type.
 dnl
 dnl UD_CHECK_FORTRAN_CTYPE(v3forttype, v2forttype, ctype, min, max)
 dnl
-AC_DEFUN(UD_CHECK_FORTRAN_CTYPE,
+AC_DEFUN([UD_CHECK_FORTRAN_CTYPE],
 [
     AC_MSG_CHECKING([for Fortran-equivalent to C "$3"])
     AC_LANG_PUSH([Fortran])
@@ -769,7 +769,7 @@ dnl Check for a Fortran data type.
 dnl
 dnl UD_CHECK_FORTRAN_TYPE(varname, ftypes)
 dnl
-AC_DEFUN(UD_CHECK_FORTRAN_TYPE,
+AC_DEFUN([UD_CHECK_FORTRAN_TYPE],
 [
     AC_LANG_PUSH([Fortran])
     for ftype in $2; do
@@ -815,7 +815,7 @@ dnl Check for a C type equivalent to a Fortran type.
 dnl
 dnl UD_CHECK_CTYPE_FORTRAN(ftype, ctypes, fmacro_root)
 dnl
-AC_DEFUN(UD_CHECK_CTYPE_FORTRAN,
+AC_DEFUN([UD_CHECK_CTYPE_FORTRAN],
 [
     cat >conftestf.f <<EOF
            $1 values(4)
@@ -922,7 +922,7 @@ dnl	UD_CHECK_FORTRAN_CTYPE(NF_DOUBLE_T, $NCDOUBLE_T, double, DBL_MIN, DBL_MAX)
 
 dnl Setup for making a manual-page database.
 dnl
-AC_DEFUN(UD_MAKEWHATIS,
+AC_DEFUN([UD_MAKEWHATIS],
 [
     #
     # NB: We always want to define WHATIS to prevent the
@@ -978,7 +978,7 @@ AC_DEFUN(UD_MAKEWHATIS,
 
 dnl Check for the math library.
 dnl
-AC_DEFUN(UD_CHECK_LIB_MATH,
+AC_DEFUN([UD_CHECK_LIB_MATH],
 [
     dnl AS_MESSAGE([checking for math library...])
     case "${MATHLIB}" in
@@ -1035,14 +1035,13 @@ if test "x$ac_cv_fc_pp_srcext_$1" = xunknown; then
 else
   ac_fc_srcext=$1
   if test "x$ac_cv_fc_pp_srcext_$1" = xnone; then
-    FCFLAGS_SRCEXT=""
-    ac_cv_fc_pp_srcext_$1=""
-    dnl FCPPFLAGS_[]$1[]=""
+    ac_fcflags_srcext=""
+    FCFLAGS_[]$1[]=""
   else
-    FCFLAGS_SRCEXT=$ac_cv_fc_pp_srcext_$1
-    dnl FCPPFLAGS_[]$1[]=$ac_cv_fc_pp_srcext_$1
+    ac_fcflags_srcext=$ac_cv_fc_pp_srcext_$1
+    FCFLAGS_[]$1[]=$ac_cv_fc_pp_srcext_$1
   fi
-  dnl AC_SUBST(FCPPFLAGS_[]$1)
+  AC_SUBST(FCFLAGS_[]$1)
   $2
 fi
 AC_LANG_POP(Fortran)dnl
@@ -1155,6 +1154,12 @@ AC_SUBST([FC_MODEXT])dnl
 ])
 
 dnl steal from autoconf 2.69
+dnl Fix a bug that mistakenly sets FC_MODINC to -M when Fujitsu frtpx is used.
+dnl The correct one should be -I. The fix is shown below.
+dnl bug<    for ac_flag in -M -I '-I ' '-M ' -p '-mod ' '-module ' '-Am -I'; do
+dnl ---
+dnl fix>    for ac_flag in -I '-I ' -M '-M ' -p '-mod ' '-mdir ' '-module ' '-Am -I'; do
+dnl
 # UD_FC_MODULE_FLAG([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
 # ---------------------------------------------------------------------
 # Find a flag to include Fortran 90 modules from another directory.
@@ -1204,7 +1209,7 @@ AC_COMPILE_IFELSE([[
       program main
       use conftest_module
       call conftest_routine
-      end]],
+      end program]],
        [ac_cv_fc_module_flag="$ac_flag"])
      if test "$ac_cv_fc_module_flag" != unknown; then
        break
@@ -1294,7 +1299,11 @@ AC_CONFIG_COMMANDS_PRE([case $FC_MODOUT in #(
 esac])dnl
 ])
 
+dnl
 dnl steal from autoconf 2.69
+dnl customized AC_FC_FREEFORM: to just get ac_cv_fc_freeform without
+dnl appending ac_cv_fc_freeform to FCFLAGS
+dnl
 # AC_FC_FREEFORM([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
 # ------------------------------------------------------------------
 # Look for a compiler flag to make the Fortran (FC) compiler accept
@@ -1356,7 +1365,11 @@ fi
 AC_LANG_POP([Fortran])dnl
 ])# AC_FC_FREEFORM
 
+dnl
 dnl steal from autoconf 2.69
+dnl customized AC_FC_FIXEDFORM: to just get ac_cv_fc_fixedform without
+dnl appending ac_cv_fc_fixedform to FCFLAGS
+dnl
 # AC_FC_FIXEDFORM([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
 # ------------------------------------------------------------------
 # Look for a compiler flag to make the Fortran (FC) compiler accept
@@ -1556,7 +1569,11 @@ AC_DEFUN([UD_CHECK_PGF77],[
 ])
 
 dnl Check if Fortran compiler is NAG
-dnl According to nagfor manual the command-line option to should version is -V
+dnl According to nagfor manual the command-line option to get version is -V
+dnl % nagfor -V
+dnl NAG Fortran Compiler Release 6.1(Tozai) Build 6106
+dnl Product NPL6A61NA for x86-64 Linux
+dnl Copyright 1990-2016 The Numerical Algorithms Group Ltd., Oxford, U.K.
 dnl
 AC_DEFUN([UD_CHECK_FC_NAG],[
     AC_CACHE_CHECK([if Fortran compiler is NAG], [ac_cv_fc_compiler_nag],
@@ -1635,55 +1652,90 @@ rm -f conftest.$ac_ext
 AC_LANG_PUSH([C])
 ])
 
+dnl check the availability of one MPI executable
+AC_DEFUN([UD_MPI_PATH_PROG], [
+   dnl 1st token in $2 must be the program name, rests are command-line options
+   ac_first_token=`echo $2 | cut -d" " -f1`
+   ac_rest_tokens=`echo $2 | cut -d" " -s -f2-`
+   UD_MSG_DEBUG(ac_first_token=$ac_first_token)
+   UD_MSG_DEBUG(ac_rest_tokens=$ac_rest_tokens)
+
+   ac_mpi_prog_$1=
+   if test "x$MPI_INSTALL" != x ; then
+      dnl Check if MPI_INSTALL is a substring of first_token
+      if test "$ac_first_token" != "${ac_first_token%$MPI_INSTALL*}" ; then
+         UD_MSG_DEBUG("MPI_INSTALL is a substring of ac_first_token")
+         ac_prog=`echo $ac_first_token | rev | cut -d"/" -f1 |rev`
+      else
+         ac_prog=$ac_first_token
+      fi
+      UD_MSG_DEBUG(ac_prog=$ac_prog)
+      UD_MSG_DEBUG(--with-mpi=$MPI_INSTALL is used)
+      if test -d "${MPI_INSTALL}/bin" ; then
+         UD_MSG_DEBUG(search $ac_prog under $MPI_INSTALL/bin)
+         AC_PATH_PROG([ac_mpi_prog_$1], [$ac_prog], [], [$MPI_INSTALL/bin])
+      else
+         dnl ${MPI_INSTALL}/bin does not exist, search $MPI_INSTALL
+         UD_MSG_DEBUG(search $ac_prog under $MPI_INSTALL)
+         AC_PATH_PROG([ac_mpi_prog_$1], [$ac_prog], [], [$MPI_INSTALL])
+      fi
+   else
+      UD_MSG_DEBUG(--with-mpi=$MPI_INSTALL is NOT used)
+      UD_MSG_DEBUG(search $ac_first_token under $PATH)
+      AC_PATH_PROG([ac_mpi_prog_$1], [$ac_first_token])
+   fi
+   UD_MSG_DEBUG([ac_mpi_prog_$1=${ac_mpi_prog_$1}])
+   if test "x${ac_mpi_prog_$1}" = x ; then
+      dnl AC_CHECK_FILE fails when $ac_first_token is not found in cross compile
+      dnl AC_CHECK_FILE([$ac_first_token], [ac_mpi_prog_$1=$2])
+      AC_CHECK_PROG([ac_mpi_prog_$1], [$ac_first_token])
+      dnl AC_CHECK_PROGS([ac_mpi_prog_$1], [$2], [], [/])
+      dnl ac_first_token=`echo $2 | cut -d" " -f1`
+      dnl UD_MSG_DEBUG(check first token $ac_first_token of $2)
+      dnl if test -f $ac_first_token ; then
+         dnl UD_MSG_DEBUG(use file $ac_first_token as it exits)
+         dnl ac_mpi_prog_$1=$2
+      dnl fi
+   else
+      if test "x$ac_rest_tokens" != x ; then
+         ac_mpi_prog_$1="$ac_mpi_prog_$1 $ac_rest_tokens"
+      fi
+   fi
+   $1=${ac_mpi_prog_$1}
+])
 
-AC_DEFUN([UD_CHECK_MPI_COMPILER], [
+dnl check the availability of a list of MPI executables
+AC_DEFUN([UD_MPI_PATH_PROGS], [
+   ac_mpi_prog_$1=
    if test "x$MPI_INSTALL" != x ; then
       UD_MSG_DEBUG(--with-mpi=$MPI_INSTALL is used)
-      if test "x$$1" = x ; then
-         dnl If $1 is not defined, first search under ${MPI_INSTALL}/bin
-         if test -d "${MPI_INSTALL}/bin" ; then
-            UD_MSG_DEBUG(search possible $1 under $MPI_INSTALL/bin)
-            AC_PATH_PROGS([$1], [$2], [], [$MPI_INSTALL/bin])
-         fi
-         dnl If no valid $1 can be found under ${MPI_INSTALL}/bin, search
-         dnl under ${MPI_INSTALL}
-         if test "x$$1" = x ; then
-             UD_MSG_DEBUG(search possible $1 under $MPI_INSTALL)
-             AC_PATH_PROGS([$1], [$2], [], [$MPI_INSTALL])
-         fi
+      if test -d "${MPI_INSTALL}/bin" ; then
+         UD_MSG_DEBUG(search $2 under $MPI_INSTALL/bin)
+         AC_PATH_PROGS([ac_mpi_prog_$1], [$2], [], [$MPI_INSTALL/bin])
       else
-         dnl if $1 is defined, check whether the file exists
-         UD_MSG_DEBUG(check if file $$1 exists)
-         if ! test -f "$$1" ; then
-            dnl file does not exist in the current directory, check under
-            dnl MPI_INSTALL
-            UD_MSG_DEBUG(File $1= $$1 cannot be found ... check under $MPI_INSTALL)
-            if test -f "$MPI_INSTALL/$$1" ; then
-               UD_MSG_DEBUG(File $1= $$1 is found under $MPI_INSTALL)
-               $1="$MPI_INSTALL/$$1"
-            elif test -f "$MPI_INSTALL/bin/$$1" ; then
-               UD_MSG_DEBUG(File $1= $$1 is found under $MPI_INSTALL/bin)
-               $1="$MPI_INSTALL/bin/$$1"
-            else
-               UD_MSG_DEBUG(File $1= $$1 cannot be found under $MPI_INSTALL)
-               $1=
-            fi
-         fi
+         dnl ${MPI_INSTALL}/bin does not exist, search $MPI_INSTALL
+         UD_MSG_DEBUG(search $2 under $MPI_INSTALL)
+         AC_PATH_PROGS([ac_mpi_prog_$1], [$2], [], [$MPI_INSTALL])
       fi
    else
-       UD_MSG_DEBUG(--with-mpi=$MPI_INSTALL is NOT used)
-       UD_MSG_DEBUG([check if $1 is defined. If yes, check if file exists])
-       if test "x$$1" != x && (! test -f "$$1") ; then
-          UD_MSG_DEBUG(check if file $$1 exists under user's PATH)
-          AC_PATH_PROGS([$1], [$$1])
-       fi
+      UD_MSG_DEBUG(--with-mpi=$MPI_INSTALL is NOT used)
+      UD_MSG_DEBUG(search $2 under $PATH)
+      AC_PATH_PROGS([ac_mpi_prog_$1], [$2])
    fi
-   dnl if $$1 is not empty, then compiler file does exist
-   dnl if $$1 is empty, search under user's PATH
-   if test "x$$1" = x ; then
-      UD_MSG_DEBUG(find possible $1 under user's PATH)
-      AC_PATH_PROGS([$1], [$2])
+   UD_MSG_DEBUG([ac_mpi_prog_$1=${ac_mpi_prog_$1}])
+   if test "x${ac_mpi_prog_$1}" = x ; then
+      dnl AC_CHECK_FILES fails when $2 is not found in cross compile
+      dnl AC_CHECK_FILES([$2], [ac_mpi_prog_$1=$2])
+      AC_CHECK_PROGS([ac_mpi_prog_$1], [$2])
+      dnl AC_CHECK_PROGS([ac_mpi_prog_$1], [$2], [], [/])
+      dnl ac_first_token=`echo $2 | cut -d" " -f1`
+      dnl UD_MSG_DEBUG(check first token $ac_first_token of $2)
+      dnl if test -f $ac_first_token ; then
+         dnl UD_MSG_DEBUG(use file $ac_first_token as it exits)
+         dnl ac_mpi_prog_$1=$2
+      dnl fi
    fi
+   $1=${ac_mpi_prog_$1}
 ])
 
 dnl Check for presence of an MPI constant.
@@ -1704,19 +1756,21 @@ AC_DEFUN([UD_HAS_MPI_CONST], [
 
 dnl Check for presence of an MPI datatype.
 dnl These could be enums, so we have to do compile checks.
-AC_DEFUN([UD_HAS_MPI_DATATYPE], [
+AC_DEFUN([UD_CHECK_MPI_DATATYPE], [
    AC_MSG_CHECKING(if MPI datatype $1 is defined )
    AC_COMPILE_IFELSE(
       [AC_LANG_SOURCE([
           #include <mpi.h>
           MPI_Datatype dummy = $1;
       ])],
-      [AC_MSG_RESULT(yes)
-       AC_DEFINE(HAVE_$1$2, 1, available)
-      ],
-      [AC_MSG_RESULT(no)]
-   )]
-)
+      [ac_cv_CHECK_MPI_DATATYPE_$1=yes],
+      [ac_cv_CHECK_MPI_DATATYPE_$1=no]
+   )
+   AC_MSG_RESULT($ac_cv_CHECK_MPI_DATATYPE_$1)
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_$1" = xyes; then
+       AC_DEFINE(HAVE_DECL_$1, 1, available)
+   fi
+])
 
 dnl Check if older Intel MPI C compiler (4.x) for issue of redefined SEEK_SET
 dnl See https://software.intel.com/en-us/articles/intel-cluster-toolkit-for-linux-error-when-compiling-c-aps-using-intel-mpi-library-compilation-driver-mpiicpc
@@ -1734,10 +1788,10 @@ AC_DEFUN([UD_CHECK_MPI_CPP_SEEK_SET], [
       [ac_cv_CHECK_MPI_CPP_SEEK_SET=yes]
    )
    AC_MSG_RESULT([$ac_cv_CHECK_MPI_CPP_SEEK_SET])
-   AC_LANG_POP(C++)]
-)
+   AC_LANG_POP(C++)
+])
 
-AC_DEFUN(UD_CHECK_F77_GNU_INT,
+AC_DEFUN([UD_CHECK_F77_GNU_INT],
 [
     AC_MSG_CHECKING([for Fortran 77 GNU intrinsic INT])
     AC_LANG_PUSH([Fortran 77])
@@ -1764,7 +1818,7 @@ AC_DEFUN(UD_CHECK_F77_GNU_INT,
     AC_MSG_RESULT([$ac_cv_f77_gnu_int])
 ])
 
-AC_DEFUN(UD_CHECK_F77_INT1,
+AC_DEFUN([UD_CHECK_F77_INT1],
 [
     AC_MSG_CHECKING([for Fortran 77 intrinsic INT1])
     AC_LANG_PUSH([Fortran 77])
@@ -1785,7 +1839,7 @@ AC_DEFUN(UD_CHECK_F77_INT1,
     AC_MSG_RESULT([$ac_cv_f77_int1])
 ])
 
-AC_DEFUN(UD_CHECK_F77_INT2,
+AC_DEFUN([UD_CHECK_F77_INT2],
 [
     AC_MSG_CHECKING([for Fortran 77 intrinsic INT2])
     AC_LANG_PUSH([Fortran 77])
@@ -1806,7 +1860,7 @@ AC_DEFUN(UD_CHECK_F77_INT2,
     AC_MSG_RESULT([$ac_cv_f77_int2])
 ])
 
-AC_DEFUN(UD_CHECK_F77_INT8,
+AC_DEFUN([UD_CHECK_F77_INT8],
 [
     AC_MSG_CHECKING([for Fortran 77 intrinsic INT8])
     AC_LANG_PUSH([Fortran 77])
@@ -1827,3 +1881,30 @@ AC_DEFUN(UD_CHECK_F77_INT8,
     AC_MSG_RESULT([$ac_cv_f77_int8])
 ])
 
+dnl
+dnl Check how sed command handling in-place option -i and define SED_I
+dnl
+AC_DEFUN([UD_PROG_SED_I],
+[
+   AC_REQUIRE([AC_PROG_SED])
+   AC_CACHE_CHECK([for sed handling option -i ], ac_cv_SED_I,[
+   cat > conftest.sed_i <<EOF
+   test str1
+EOF
+   ac_cv_err=`$SED -i '' -e 's|str1|str2|g' conftest.sed_i 2>&1`
+   if test "x$ac_cv_err" = x ; then
+      ac_cv_SED_I="$SED -i ''"
+   else
+      ac_cv_err=`sed -i'' -e 's|str1|str2|g' conftest.sed_i 2>&1`
+      if test "x$ac_cv_err" = x ; then
+         ac_cv_SED_I="$SED -i''"
+      else
+         AC_MSG_ERROR("No proper sed -i option found")
+      fi
+   fi
+   AS_UNSET(ac_cv_err)])
+   SED_I="$ac_cv_SED_I"
+   AC_SUBST(SED_I)
+   ${RM} -f conftest.sed_i
+])
+
diff --git a/aclocal.m4 b/aclocal.m4
index 8299646..b6142a9 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,1829 +1,1212 @@
-dnl $Id: aclocal.m4 2682 2016-12-07 06:30:01Z wkliao $
-dnl UD macros for netcdf configure
+# generated automatically by aclocal 1.15 -*- Autoconf -*-
 
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 
-dnl Convert a string to all uppercase.
-dnl
-define([uppercase],
-[translit($1, abcdefghijklmnopqrstuvwxyz, ABCDEFGHIJKLMNOPQRSTUVWXYZ)])
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-dnl
-dnl Check for an m4(1) preprocessor utility.
-dnl
-AC_DEFUN(UD_PROG_M4,
-[
-    dnl AS_MESSAGE([checking for m4 preprocessor...])
-    case "${M4-unset}" in
-	unset) AC_CHECK_PROGS(M4, m4 gm4, m4) ;;
-	*) AC_CHECK_PROGS(M4, $M4 m4 gm4, m4) ;;
-    esac
-    AC_MSG_CHECKING(m4 flags)
-    case "${M4FLAGS-unset}" in
-	unset) dnl test if M4 runs fine without option -B10000
-               `${M4} /dev/null > conftest.err 2>&1`
-               ac_cv_m4_stdout=`cat conftest.err`
-               if test "x$ac_cv_m4_stdout" != x; then
-                  M4FLAGS=-B10000
-               fi
-               ${RM} -f conftest.err
-               ;;
-    esac
-    if test "x$M4FLAGS" = x; then
-       AC_MSG_RESULT("none")
-    else
-       AC_MSG_RESULT($M4FLAGS)
-    fi
-    M4FFLAGS=`echo $M4FLAGS | sed 's/-s *//g'`
-    dnl AC_MSG_NOTICE(M4FFLAGS=$M4FFLAGS)
-    AC_SUBST(M4FLAGS)
-    AC_SUBST(M4FFLAGS)
-])
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
 
-dnl
-dnl Check for an ar(1) utility.
-dnl
-AC_DEFUN(UD_PROG_AR,
-[
-    dnl AS_MESSAGE([checking for ar utility...])
-    case "${AR-unset}" in
-	unset) AC_CHECK_PROGS(AR, ar, ar) ;;
-	*) AC_CHECK_PROGS(AR, $AR ar, ar) ;;
-    esac
-    AC_MSG_CHECKING(ar flags)
-    case "${ARFLAGS-unset}" in
-	unset) ARFLAGS=cru ;;
-    esac
-    AC_MSG_RESULT($ARFLAGS)
-    AC_SUBST(ARFLAGS)
-])
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-dnl
-dnl Check for an nm(1) utility.
-dnl
-AC_DEFUN(UD_PROG_NM,
-[
-    dnl AS_MESSAGE([checking for nm utility...])
-    case "${NM-unset}" in
-	unset) AC_CHECK_PROGS(NM, nm, nm) ;;
-	*) AC_CHECK_PROGS(NM, $NM nm, nm) ;;
-    esac
-    AC_MSG_CHECKING(nm flags)
-    case "${NMFLAGS-unset}" in
-	unset) NMFLAGS= ;;
-    esac
-    AC_MSG_RESULT($NMFLAGS)
-    AC_SUBST(NMFLAGS)
-])
-
-dnl
-dnl Set the top-level source-directory.
-dnl
-AC_DEFUN(UD_SRCDIR,
-[
-    AC_MSG_CHECKING(for top-level source-directory)
-    SRCDIR=`(cd $srcdir && pwd)`
-    AC_MSG_RESULT($SRCDIR)
-    AC_SUBST(SRCDIR)
+# Copyright (C) 2002-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.15'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.15], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
 ])
 
-dnl
-dnl Check for a Standard C compiler.  Prefer a native one over the
-dnl GNU one to reduce the chance that the environment variable LIBS
-dnl will have to be set to reference the GNU C runtime library.
-dnl
-AC_DEFUN(UD_PROG_CC,
-[
-    # Because we must have a C compiler, we treat an unset CC
-    # the same as an empty CC.
-    case "${CC}" in
-	'')
-	    case `uname` in
-		ULTRIX)
-		    # The native ULTRIX C compiler isn't standard.
-		    ccs='gcc cc'
-		    ;;
-		*)
-		    # xlc is before c89 because AIX's sizeof(long long)
-		    # differs between the two.
-		    #
-		    ccs='xlc c89 acc cc gcc'
-		    ;;
-	    esac
-	    for cc in $ccs; do
-		AC_CHECK_PROG(CC, $cc, $cc)
-		case "$CC" in
-		    '') ;;
-		    *)  break
-			;;
-		esac
-	    done
-	    case "${CC}" in
-		'')
-		    AC_MSG_ERROR("Could not find C compiler")
-		    ;;
-	    esac
-	    ;;
-    esac
-    #
-    # On some systems, a discovered compiler nevertheless won't
-    # work (due to licensing, for example); thus, we check the
-    # compiler with a test program.
-    # 
-    AC_MSG_CHECKING([C compiler "$CC"])
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
-                      [AC_MSG_RESULT(works)],
-                      [AC_MSG_RESULT(failed to compile test program)])
-    AC_SUBST(CC)
-    case "$CC" in
-	*gcc*)
-	    GCC=yes		# Expected by autoconf(1) macros
-	    ;;
-    esac
-    case `uname -sr` in
-	'HP-UX A.09'*)
-	    AC_DEFINE(_HPUX_SOURCE)
-	    ;;
-    esac
-])
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.15])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-dnl
-dnl Check for a C++ compiler.  Prefer a native one over the
-dnl GNU one to reduce the chance that the environment variable LIBS
-dnl will have to be set to reference the GNU C runtime library.
-dnl
-AC_DEFUN(UD_PROG_CXX,
-[
-    case "${CXX-unset}" in
-	unset)
-	    case `uname` in
-		AIX)
-		    preferred_cxx='xlC'
-		    ;;
-	    esac
-	    possible_cxxs="${preferred_cxx} CC cxx c++ g++ gcc"
-	    ;;
-	'') AC_MSG_WARN("Empty CXX variable")
-	    possible_cxxs=
-	    ;;
-	*)  possible_cxxs=$CXX
-	    ;;
-    esac
-    case "${possible_cxxs}" in
-	'') CXX=
-	    ;;
-	*)  AC_LANG_PUSH([C++])
-	    for cxx in $possible_cxxs; do
-		AC_CHECK_PROG(CXX, $cxx, $cxx)
-		case "$CXX" in
-		    '') ;;
-		    *)  # On some systems, a discovered compiler nevertheless
-			# won't work (because it's a script to a non-existent
-			# executable, for example); thus, we check the
-			# compiler with a test program.  We also test
-			# for <iostream.h> and the standard C++ library
-			# because we need these to work.
-			# 
-			AC_MSG_CHECKING(C++ compiler \"$CXX\")
-			AC_RUN_IFELSE([AC_LANG_SOURCE([[
-				#include <iostream.h>
-				int main() {
-				    cout << "";
-				    return 0;
-				}
-			    ]])],[
-				AC_MSG_RESULT(works)
-				break
-			    ],[
-				AC_MSG_WARN($CXX failed on test program)
-				CXX=
-				unset ac_cv_prog_CXX
-			    ],[])
-			;;
-		esac
-	    done
-	    AC_LANG_POP([C++])
-	    case "${CXX}" in
-		'') AC_MSG_WARN("Could not find working C++ compiler")
-		    AC_MSG_WARN(Setting CXX to the empty string)
-		    ;;
-	    esac
-	    ;;
-    esac
-    case "${CXX}" in
-	'') AC_MSG_WARN(The C++ interface will not be built)
-	    ;;
-    esac
-    AC_SUBST(CXX)
-    case `uname` in
-	'HP-UX A.09'*)
-	    AC_DEFINE(_HPUX_SOURCE)
-	    ;;
-    esac
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
 ])
 
+# AM_CONDITIONAL                                            -*- Autoconf -*-
 
-dnl
-dnl like AC_TYPE_LONG_DOUBLE, except checks for 'long long'
-dnl
-AC_DEFUN(UD_C_LONG_LONG,
-[AC_MSG_CHECKING(for long long)
-AC_CACHE_VAL(ac_cv_c_long_long,
-[if test "$GCC" = yes; then
-  ac_cv_c_long_long=yes
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
 else
-AC_RUN_IFELSE([AC_LANG_SOURCE([[int main() {
-long long foo = 0;
-return(sizeof(long long) < sizeof(long)); }]])],
-[ac_cv_c_long_long=yes],
-[ac_cv_c_long_long=no],[:])
-fi])dnl
-AC_MSG_RESULT($ac_cv_c_long_long)
-if test $ac_cv_c_long_long = yes; then
-  AC_DEFINE(HAVE_LONG_LONG)
+  $1_TRUE='#'
+  $1_FALSE=
 fi
-])
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
 
-dnl 
-dnl UD_CHECK_IEEE
-dnl If the 'double' is not an IEEE double
-dnl or the 'float' is not and IEEE single,
-dnl define NO_IEEE_FLOAT
-dnl
-AC_DEFUN(UD_CHECK_IEEE,
-[
-AC_MSG_CHECKING(for IEEE floating point format)
-AC_RUN_IFELSE([AC_LANG_SOURCE([[#ifndef NO_FLOAT_H
-#include <float.h>
-#endif
-
-#define EXIT_NOTIEEE	1
-#define EXIT_MAYBEIEEE	0
-
-int
-main()
-{
-#if	defined(FLT_RADIX)	&& FLT_RADIX != 2
-		return EXIT_NOTIEEE;
-#elif	defined(DBL_MAX_EXP)	&& DBL_MAX_EXP != 1024
-		return EXIT_NOTIEEE;
-#elif	defined(DBL_MANT_DIG)	&& DBL_MANT_DIG != 53
-		return EXIT_NOTIEEE;
-#elif 	defined(FLT_MAX_EXP)	&& !(FLT_MAX_EXP == 1024 || FLT_MAX_EXP == 128)
-		return EXIT_NOTIEEE;
-#elif	defined(FLT_MANT_DIG)	&& !(FLT_MANT_DIG == 53 || FLT_MANT_DIG == 24)
-		return EXIT_NOTIEEE;
-#else
-	/* (assuming eight bit char) */
-	if(sizeof(double) != 8)
-		return EXIT_NOTIEEE;
-	if(!(sizeof(float) == 4 || sizeof(float) == 8))
-		return EXIT_NOTIEEE;
-
-	return EXIT_MAYBEIEEE;
-#endif
-}]])],[ac_cv_c_ieeefloat=yes],[ac_cv_c_ieeefloat=no],[:])
-AC_MSG_RESULT($ac_cv_c_ieeefloat)
-if test x$ac_cv_c_ieeefloat = xno; then
-  AC_DEFINE(NO_IEEE_FLOAT)
-fi
-])
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-dnl Check for utility for generating makefile dependencies.
-dnl Should only be used at the UPC.
-dnl
-AC_DEFUN(UD_PROG_CC_MAKEDEPEND,
-[
-    AC_MSG_CHECKING(how to make dependencies)
-    case `uname -s` in
-	IRIX*|OSF1)
-	    CC_MAKEDEPEND='cc -M'
-	    ;;
-	SunOS)
-	    case `uname -r` in
-		4*)
-		    CC_MAKEDEPEND='cc -M'
-		    ;;
-		5*|*)
-		    CC_MAKEDEPEND='cc -xM'
-		    ;;
-	    esac
-	    ;;
-	ULTRIX)
-	    case `uname -m` in
-		RISC)
-		    CC_MAKEDEPEND='cc -M'
-		    ;;
-		VAX)	# Can't handle prototypes in netcdf.h
-		    ;;
-	    esac
-	    ;;
-	AIX)	# Writes to .u files rather than standard out
-	    ;;
-	HP-UX)	# Writes escaped newlines to standard error
-	    ;;
-    esac
-    case "${CC_MAKEDEPEND}" in
-	'')
-	    CC_MAKEDEPEND=false
-	    ;;
-    esac
-    AC_MSG_RESULT($CC_MAKEDEPEND)
-    AC_SUBST(CC_MAKEDEPEND)
-])
 
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
 
-dnl Check for Fortran-90 compiler.
-dnl
-AC_DEFUN(UD_PROG_F90,
-[
-    case "${F90+set}" in
-	set)
-	    AC_MSG_CHECKING(user-defined Fortran-90 compiler \"$F90\")
-            AC_LANG_PUSH([Fortran])
-            AC_COMPILE_IFELSE(
-               [AC_LANG_SOURCE([
-		   subroutine foo(bar)
-		   integer, intent(in) :: bar
-		   end subroutine foo
-               ])],
-               [AC_MSG_RESULT(works)],
-               [AC_MSG_RESULT(failed to compile test program)
-		unset F90
-               ]
-            )
-            AC_LANG_POP([Fortran])
-	    ;;
-	*)
-	    case "${FC+set}" in
-		set)
-		    F90=$FC
-		    F90FLAGS="${F90FLAGS-${FFLAGS--O}}"
-		    F90LIBS="${F90LIBS-${FLIBS}}"
-		    cat <<EOF >conftest.f90
-			program foo
-			call bar(1)
-			end
-			subroutine bar(bof)
-			integer, intent(in) :: bof
-			end
-EOF
-		    AC_MSG_CHECKING(\"$F90\" as Fortran-90 compiler)
-		    doit='$F90 -o conftest ${F90FLAGS} conftest.f90 ${F90LIBS}'
-		    if AC_TRY_EVAL(doit); then
-			doit=./conftest
-			if AC_TRY_EVAL(doit); then
-			    AC_MSG_RESULT(works)
-			else
-			    AC_MSG_RESULT(failed to build executable program)
-			    unset F90
-			fi
-		    else
-			AC_MSG_RESULT(failed to build test program)
-			unset F90
-		    fi
-		    ${RM} -f conftest*
-		    ;;
-	    esac
-	    case "${F90-unset}" in
-		unset)
-		    cat <<EOF >conftest.f90
-			program foo
-			call bar(1)
-			end
-			subroutine bar(bof)
-			integer, intent(in) :: bof
-			end
-EOF
-		    for f90 in xlf90 pgf90 f90; do
-			AC_CHECK_PROG(F90, $f90, $f90)
-			case "${F90}" in
-			    '')
-				;;
-			    *)
-				AC_MSG_CHECKING(Fortran-90 compiler \"$F90\")
-				doit='$F90 -o conftest ${F90FLAGS} conftest.f90 ${F90LIBS}'
-				if AC_TRY_EVAL(doit); then
-				    doit=./conftest
-				    if AC_TRY_EVAL(doit); then
-					AC_MSG_RESULT(works)
-					break
-				    else
-					AC_MSG_RESULT(
-					    failed to build executable program)
-					unset F90
-					unset ac_cv_prog_F90
-				    fi
-				else
-				    AC_MSG_RESULT(failed to build test program)
-				    unset F90
-				    unset ac_cv_prog_F90
-				fi
-				;;
-			esac
-		    done
-		    ${RM} -f conftest*
-		    case "${F90}" in
-			'') AC_MSG_WARN(
-			    "Could not find working Fortran-90 compiler")
-			    ;;
-		    esac
-		    ;;
-	    esac
-	    ;;
-    esac
-    case "${F90}" in
-	'')
-	    AC_MSG_WARN("The Fortran-90 interface will not be built")
-	    ;;
-	*f90*)
-	    case `uname -s` in
-		IRIX*)
-		    NETCDF_MOD=NETCDF.mod
-		    ;;
-		*)
-		    NETCDF_MOD=netcdf.mod
-		    ;;
-	    esac
-	    AC_SUBST(NETCDF_MOD)
-	    ;;
-    esac
-    AC_SUBST(F90)
-    AC_SUBST(F90FLAGS)
-    AC_SUBST(F90LIBS)
-])
 
-dnl Check for Fortran-77 compiler.
-dnl
-AC_DEFUN(UD_PROG_FC,
-[
-    AC_BEFORE([UD_FORTRAN_TYPES])
-    case "${FC+set}" in
-	set)
-	    case "$FC" in
-		'')
-		    AC_MSG_WARN(Fortran-77 compiler is explicitly set to null)
-		    ;;
-		*)
-		    AC_MSG_CHECKING(user-defined Fortran-77 compiler \"$FC\")
-                    AC_LANG_PUSH([Fortran 77])
-                    AC_COMPILE_IFELSE([AC_LANG_CALL([],[FOO])],
-                       [AC_MSG_RESULT(works)],
-                       [AC_MSG_RESULT(failed to compile test program)
-                        FC=
-                       ]
-                    )
-                    AC_LANG_POP([Fortran 77])
-		    ;;
-	    esac
-	    ;;
-	*)
-            dnl FC is not set, let's try F90 as FC if F90 is set
-	    case "${F90+set}" in
-		set)
-		    FC=$F90
-		    FFLAGS="${FFLAGS-${F90FLAGS--O}}"
-		    FLIBS="${FLIBS-${F90LIBS-}}"
-		    AC_MSG_CHECKING(\"$FC\" as Fortran-77 compiler)
-                    AC_LANG_PUSH([Fortran])
-                    AC_COMPILE_IFELSE([AC_LANG_CALL([],[FOO])],
-                       [AC_MSG_RESULT(works)],
-                       [AC_MSG_RESULT(failed to compile test program)
-			unset FC
-                       ]
-                    )
-                    AC_LANG_POP([Fortran])
-		    ;;
-		*)
-		    ;;
-	    esac
-	    case "${FC-unset}" in
-		unset)
-		    case `uname -sr` in
-			AIX*)
-			    # xlf90(1) thinks fortran/ftest.F has bad syntax.
-			    forts="xlf f77 gfortran"
-			    ;;
-			BSD/OS*|FreeBSD*)
-			    forts="f77 fort77 g77 gfortran"
-			    ;;
-			HP-UX*)
-			    # f77(1) doesn't have the -L option.
-			    forts=fort77
-			    FLIBS=-lU77
-			    ;;
-			IRIX*)
-			    # f90(1) can't link with c89(1)-compiled objects
-			    forts=f77
-			    ;;
-			IRIX64*)
-			    forts='f77 g77 gfortran fort77 '
-			    ;;
-			Linux*)
-			    forts="pgf90 f77 fort77 g77 gfortran"
-			    ;;
-			OSF1*)
-			    # The use of f90(1) results in the following for
-			    # an unknown reason (`make' works in the fortran/
-			    # directory):
-			    # f90 -c -I../libsrc ftest.F 
-			    # Last chance handler: pc = 0xa971b8, 
-			    # sp = 0x3fece0, ra = 0xa971b8
-			    # Last chance handler: internal exception: unwinding
-			    forts="f77 gfortran"
-			    ;;
-			'SunOS 4'*)
-			    forts='f77 g77 gfortran fort77'
-			    ;;
-			'SunOS 5'*)
-			    # SunOS's f90(1) has problems passing a C `char'
-			    # as a Fortran `integer*1' => use f77(1)
-			    forts="pgf90 f77"
-			    ;;
-			sn*|UNICOS*|unicos*)
-			    forts="fort77 cf77 f77 g77 gfortran f90"
-			    ;;
-			*)
-			    forts="xlf fort77 ghf77 f77 cf77 g77 gfortran xlf90 f90"
-			    ;;
-		    esac
-		    for fc in $forts; do
-			AC_CHECK_PROG(FC, $fc, $fc)
-			case "${FC}" in
-			    '')
-				;;
-			    *)
-				#
-				# On some systems, a discovered compiler
-				# nevertheless won't work (due to licensing,
-				# for example); thus, we check the compiler
-				# with a test program.
-				# 
-                                AC_LANG_PUSH([Fortran])
-                                AC_COMPILE_IFELSE([AC_LANG_CALL([],[FOO])],
-                                   [AC_MSG_RESULT(works)],
-                                   [AC_MSG_RESULT(failed to compile test program)
-			            unset FC
-				    unset ac_cv_prog_FC
-                                   ]
-                                )
-                                AC_LANG_POP([Fortran])
-				;;
-			esac
-		    done
-		    ${RM} -f conftest.*
-		    case "${FC}" in
-			'') AC_MSG_WARN(
-				"Could not find working Fortran-77 compiler")
-			    ;;
-		    esac
-		    ;;
-	    esac
-	    ;;
-    esac
-    case "${FC}" in
-	'') AC_MSG_WARN("The Fortran-77 interface will not be built")
-	    ;;
-    esac
-    AC_SUBST(FC)
-    AC_SUBST(FFLAGS)
-    AC_SUBST(FLIBS)
-    #
-    # Set the make(1) macro for compiling a .F file.
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
     #
-    case "${FPP-}" in
-    '')
-	AC_MSG_CHECKING(for Fortran .F compiler)
-	AC_MSG_RESULT($COMPILE_F)
-	case "${COMPILE_F-unset}" in
-	unset)
-	    case "${FC}" in
-	    '')
-		COMPILE_F=
-		;;
-	    *)
-		cat >conftest.h <<\EOF
-#define J 1
-EOF
-                AC_LANG_PUSH([Fortran])
-                AC_FC_SRCEXT([F])
-		AC_MSG_CHECKING(if Fortran-77 compiler handles *.F files)
-                AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[
-#include "conftest.h"
-#define N 5
-		  real r(J,N)
-                   ])],
-                   [AC_MSG_RESULT(yes)
-                    COMPILE_F='$(COMPILE.f)'],
-                   [AC_MSG_RESULT(no)
-		    COMPILE_F=
-                   ]
-                )
-                AC_FC_SRCEXT([f])
-                AC_LANG_POP([Fortran])
-		${RM} -f conftest.h
-		;;
-	    esac
-	    ;;
-	esac
-	;;
-    *)
-	unset COMPILE_F
-	;;
-    esac
-    case "${COMPILE_F-}" in
-	'') UD_PROG_FPP;;
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
     esac
-    AC_SUBST(COMPILE_F)
-    FPPFLAGS=${FPPFLAGS-}
-    AC_SUBST(FPPFLAGS)
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
 ])
 
 
-dnl Check for Fortran preprocessor.
-dnl
-AC_DEFUN(UD_PROG_FPP,
-[
-    AC_MSG_CHECKING(for Fortran preprocessor)
-    case "$FPP" in
-    '')
-	AC_REQUIRE([AC_PROG_CPP])
-	FPP="$CPP"
-	;;
-    esac
-    AC_MSG_RESULT($FPP)
-    AC_SUBST(FPP)
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
 ])
 
 
-dnl Check for a Fortran type equivalent to a netCDF type.
-dnl
-dnl UD_CHECK_FORTRAN_NCTYPE(forttype, possibs, nctype)
-dnl
-AC_DEFUN(UD_CHECK_FORTRAN_NCTYPE,
-[
-    AC_MSG_CHECKING([for Fortran-equivalent to netCDF "$3"])
-dnl     for type in $2; do
-dnl         cat >conftest.f <<EOF
-dnl                $type foo
-dnl                end
-dnl EOF
-dnl         doit='$FC -c ${FFLAGS} conftest.f'
-dnl         if AC_TRY_EVAL(doit); then
-dnl             break
-dnl         fi
-dnl     done
-dnl     ${RM} -f conftest.f conftest.o
-
-    AC_LANG_PUSH([Fortran])
-    for type in $2; do
-        AC_COMPILE_IFELSE(
-           [AC_LANG_SOURCE([
-               $type foo
-               end
-           ])],
-           [break]
-        )
-    done
-    AC_LANG_POP([Fortran])
-    AC_DEFINE_UNQUOTED($1, $type)
-    AC_MSG_RESULT($type)
-    $1=$type
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
 ])
 
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
 
-dnl Check for a Fortran type equivalent to a C type.
-dnl
-dnl UD_CHECK_FORTRAN_CTYPE(v3forttype, v2forttype, ctype, min, max)
-dnl
-AC_DEFUN(UD_CHECK_FORTRAN_CTYPE,
-[
-    AC_MSG_CHECKING([for Fortran-equivalent to C "$3"])
-    AC_LANG_PUSH([Fortran])
-    AC_COMPILE_IFELSE(
-       [AC_LANG_SOURCE([
-        subroutine sub(values, minval, maxval)
-        implicit        none
-        $2              values(5), minval, maxval
-        minval = values(2)
-        maxval = values(4)
-        if (values(2) .ge. values(4)) then
-            minval = values(4)
-            maxval = values(2)
-        endif
-        end
-       ])],
-       [found_f2c=yes], [found_f2c=no]
-    )
-    AC_LANG_POP([Fortran])
-    if test "x${found_f2c}" = xyes ; then
-dnl     cat >conftest.f <<EOF
-dnl         subroutine sub(values, minval, maxval)
-dnl         implicit        none
-dnl         $2              values(5), minval, maxval
-dnl         minval = values(2)
-dnl         maxval = values(4)
-dnl         if (values(2) .ge. values(4)) then
-dnl             minval = values(4)
-dnl             maxval = values(2)
-dnl         endif
-dnl         end
-dnl EOF
-dnl     doit='$FC -c ${FFLAGS} conftest.f'
-dnl     if AC_TRY_EVAL(doit); then
-dnl         mv conftest.o conftestf.o
-	cat >conftest.c <<EOF
-#include <limits.h>
-#include <float.h>
-void main()
-{
-$3		values[[]] = {0, $4, 0, $5, 0};
-$3		minval, maxval;
-int	$FCALLSCSUB($3*, $3*, $3*);
-$FCALLSCSUB(values, &minval, &maxval);
-return(!(minval == $4 && maxval == $5));
-}
-EOF
-	doit='$CC -o conftest ${CPPFLAGS} ${CFLAGS} ${LDFLAGS} conftest.c conftestf.o ${LIBS}'
-	if AC_TRY_EVAL(doit); then
-	    doit=./conftest
-	    if AC_TRY_EVAL(doit); then
-		AC_MSG_RESULT($2)
-		$1=$2
-		AC_DEFINE_UNQUOTED($1,$2)
-	    else
-		AC_MSG_RESULT(no equivalent type)
-		unset $1
-	    fi
-	else
-	    AC_MSG_ERROR(Could not compile-and-link conftest.c and conftestf.o)
-	fi
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Older Autoconf quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named 'Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`AS_DIRNAME("$mf")`
     else
-	AC_MSG_ERROR(Could not compile conftest.f)
+      continue
     fi
-    ${RM} -f conftest*
-    unset found_f2c
-])
-
-
-dnl Check for a Fortran data type.
-dnl
-dnl UD_CHECK_FORTRAN_TYPE(varname, ftypes)
-dnl
-AC_DEFUN(UD_CHECK_FORTRAN_TYPE,
-[
-    AC_LANG_PUSH([Fortran])
-    for ftype in $2; do
-	AC_MSG_CHECKING([for Fortran "$ftype"])
-        AC_COMPILE_IFELSE(
-           [AC_LANG_SOURCE([
-               subroutine sub(value)
-               $ftype value
-               end
-           ])],
-           [AC_MSG_RESULT(yes)
-	    $1=$ftype
-	    AC_DEFINE_UNQUOTED([$1], [$ftype])
-            break],
-           [AC_MSG_RESULT(no)]
-        )
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running 'make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "$am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`AS_DIRNAME(["$file"])`
+      AS_MKDIR_P([$dirpart/$fdir])
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
     done
-    AC_LANG_POP([Fortran])
-])
+  done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
 
 
-dnl Check for the name format of a Fortran-callable C routine.
-dnl
-dnl UD_CHECK_FCALLSCSUB
-AC_DEFUN([UD_CHECK_FCALLSCSUB],
-[
-    dnl AC_REQUIRE([UD_PROG_FC])
-    case "$FC" in
-	'') ;;
-	*)
-	    AC_REQUIRE([UD_PROG_NM])
-	    AC_BEFORE([UD_CHECK_FORTRAN_CTYPE])
-	    AC_BEFORE([UD_CHECK_CTYPE_FORTRAN])
-	    AC_MSG_CHECKING([for C-equivalent to Fortran routine "SUB"])
-            AC_FC_FUNC([sub], [FCALLSCSUB])
-            AC_MSG_RESULT([$FCALLSCSUB])
-	    ;;
-    esac
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
 ])
 
+# AM_EXTRA_RECURSIVE_TARGETS                                -*- Autoconf -*-
 
-dnl Check for a C type equivalent to a Fortran type.
-dnl
-dnl UD_CHECK_CTYPE_FORTRAN(ftype, ctypes, fmacro_root)
-dnl
-AC_DEFUN(UD_CHECK_CTYPE_FORTRAN,
-[
-    cat >conftestf.f <<EOF
-           $1 values(4)
-           integer status, sub
-           data values /-1, -2, -3, -4/
-           status = sub(values)
-           end
-EOF
-    ac_cv_ctype_fortran=no
-    AC_MSG_CHECKING([if Fortran "$1" is ])
-    for ctype in $2; do
-	dnl AC_MSG_CHECKING(if Fortran \"$1\" is C \"$ctype\")
-	cat >conftest.c <<EOF
-	    int $FCALLSCSUB($ctype values[[4]])
-	    {
-		return(values[[1]] != -2 || values[[2]] != -3);
-	    }
-EOF
-	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
-	if AC_TRY_EVAL(doit); then
-	    doit='$FC ${FFLAGS} -c conftestf.f'
-	    if AC_TRY_EVAL(doit); then
-	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
-	        if AC_TRY_EVAL(doit); then
-		    doit=./conftest
-		    if AC_TRY_EVAL(doit); then
-		        dnl AC_MSG_RESULT(yes)
-		        AC_MSG_RESULT(["$ctype" in C])
-		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
-			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
-		        AC_DEFINE_UNQUOTED(NF_$3[]_IS_C_$cname)
-                        ac_cv_ctype_fortran=yes
-		        break
-		    fi
-	        else
-		    AC_MSG_ERROR([Could not link conftestf.o and conftest.o])
-	        fi
-	    else
-		AC_MSG_ERROR([Could not compile conftestf.f])
-	    fi
-	else
-	    AC_MSG_ERROR([Could not compile conftest.c])
-	fi
-    done
-    ${RM} -f conftest*
-
-    if test "$ac_cv_ctype_fortran" = no ; then
-        AC_MSG_RESULT(no correspond data type in C)
-    fi
-    unset ac_cv_ctype_fortran
-])
+# Copyright (C) 2012-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_EXTRA_RECURSIVE_TARGETS
+# --------------------------
+# Define the list of user recursive targets.  This macro exists only to
+# be traced by Automake, which will ensure that a proper definition of
+# user-defined recursive targets (and associated rules) is propagated
+# into all the generated Makefiles.
+# TODO: We should really reject non-literal arguments here...
+AC_DEFUN([AM_EXTRA_RECURSIVE_TARGETS], [])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
 
-dnl Get information about Fortran data types.
-dnl
-AC_DEFUN([UD_FORTRAN_TYPES],
-[
-    dnl AC_REQUIRE([UD_PROG_FC])
-    case "$FC" in
-    '')
-	;;
-    *)
-	AC_REQUIRE([UD_CHECK_FCALLSCSUB])
-	UD_CHECK_FORTRAN_TYPE([NF_INT1_T], [integer*1 byte "integer(kind=1)"])
-	UD_CHECK_FORTRAN_TYPE([NF_INT2_T], [integer*2 "integer(kind=2)"])
-	UD_CHECK_FORTRAN_TYPE([NF_INT8_T], [integer*8 "integer(kind=8)"])
-
-	case "${NF_INT1_T}" in
-	    '') ;;
-	    *)  UD_CHECK_CTYPE_FORTRAN($NF_INT1_T, "signed char" short int long, INT1)
-		;;
-	esac
-	case "${NF_INT2_T}" in
-	    '') ;;
-	    *)  UD_CHECK_CTYPE_FORTRAN($NF_INT2_T, short int long, INT2)
-		;;
-	esac
-	case "${NF_INT8_T}" in
-	    '') ;;
-	    *)  UD_CHECK_CTYPE_FORTRAN($NF_INT8_T, int long "long long", INT8)
-		;;
-	esac
-	UD_CHECK_CTYPE_FORTRAN(integer, int long, INT)
-	UD_CHECK_CTYPE_FORTRAN(real, float double, REAL)
-	UD_CHECK_CTYPE_FORTRAN(doubleprecision, double float, DOUBLEPRECISION)
-
-	UD_CHECK_FORTRAN_NCTYPE(NCBYTE_T, byte integer*1 integer, byte)
-
-	UD_CHECK_FORTRAN_NCTYPE(NCSHORT_T, integer*2 integer, short)
-dnl	UD_CHECK_FORTRAN_CTYPE(NF_SHORT_T, $NCSHORT_T, short, SHRT_MIN, SHRT_MAX)
-
-dnl	UD_CHECK_FORTRAN_NCTYPE(NCLONG_T, integer*4 integer, long)
-dnl	UD_CHECK_FORTRAN_CTYPE(NF_INT_T, integer, int, INT_MIN, INT_MAX)
-
-dnl	UD_CHECK_FORTRAN_NCTYPE(NCFLOAT_T, real*4 real, float)
-dnl	UD_CHECK_FORTRAN_CTYPE(NF_FLOAT_T, $NCFLOAT_T, float, FLT_MIN, FLT_MAX)
-
-dnl	UD_CHECK_FORTRAN_NCTYPE(NCDOUBLE_T, real*8 doubleprecision real, double)
-dnl	UD_CHECK_FORTRAN_CTYPE(NF_DOUBLE_T, $NCDOUBLE_T, double, DBL_MIN, DBL_MAX)
-	;;
-    esac
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
 ])
 
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
 
-dnl Setup for making a manual-page database.
-dnl
-AC_DEFUN(UD_MAKEWHATIS,
-[
-    #
-    # NB: We always want to define WHATIS to prevent the
-    # $(MANDIR)/$(WHATIS) make(1) target from being just $(MANDIR)/ and
-    # conflicting with the (directory creation) target with the same name.
-    #
-    WHATIS=whatis
-    case `uname -sr` in
-	BSD/OS*|FreeBSD*)
-	    # Can't generate a user-database -- only /usr/share/man/whatis.db.
-	    MAKEWHATIS_CMD=
-	    ;;
-	'IRIX64 6.5'|'IRIX 6.5')
-	    MAKEWHATIS_CMD='/usr/lib/makewhatis -M $(MANDIR) $(MANDIR)/whatis'
-	    ;;
-	'IRIX 6'*)
-	    # Can't generate a user-database.
-	    MAKEWHATIS_CMD=
-	    ;;
-	HP-UX*)
-	    # Can't generate a user-database -- only /usr/lib/whatis.
-	    MAKEWHATIS_CMD=
-	    ;;
-	'Linux '*)
-	    # /usr/sbin/makewhatis doesn't work
-	    MAKEWHATIS_CMD=
-	    ;;
-	ULTRIX*)
-	    # Can't generate a user-database -- only /usr/lib/whatis.
-	    MAKEWHATIS_CMD=
-	    ;;
-	*)
-	    if test -r /usr/man/windex; then
-		WHATIS=windex
-	    fi
-	    AC_CHECK_PROGS(prog, catman makewhatis /usr/lib/makewhatis)
-	    case "$prog" in
-		*catman*)
-		    MAKEWHATIS_CMD=$prog' -w -M $(MANDIR)'
-		    ;;
-		*makewhatis*)
-		    MAKEWHATIS_CMD=$prog' $(MANDIR)'
-		    ;;
-	    esac
-	    ;;
-    esac
-    AC_SUBST(WHATIS)
-    AC_SUBST(MAKEWHATIS_CMD)
-    AC_MSG_CHECKING(for manual-page index command)
-    AC_MSG_RESULT($MAKEWHATIS_CMD)
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+	      [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+			     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+		  [_AM_DEPENDENCIES([CC])],
+		  [m4_define([AC_PROG_CC],
+			     m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+		  [_AM_DEPENDENCIES([CXX])],
+		  [m4_define([AC_PROG_CXX],
+			     m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+		  [_AM_DEPENDENCIES([OBJC])],
+		  [m4_define([AC_PROG_OBJC],
+			     m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+		  [_AM_DEPENDENCIES([OBJCXX])],
+		  [m4_define([AC_PROG_OBJCXX],
+			     m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
 ])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
 
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
 
-dnl Check for the math library.
-dnl
-AC_DEFUN(UD_CHECK_LIB_MATH,
-[
-    dnl AS_MESSAGE([checking for math library...])
-    case "${MATHLIB}" in
-	'')
-	    AC_CHECK_LIB(c, floor, MATHLIB=,
-		    AC_CHECK_LIB(m, floor, MATHLIB=-lm, MATHLIB=))
-	    ;;
-	*)
-	    AC_MSG_RESULT($MATHLIB (user defined))
-	    ;;
-    esac
-    AC_SUBST(MATHLIB)
-])
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
 
-dnl steal from autoconf 2.69
-AC_DEFUN([UD_FC_PP_SRCEXT],
-[AC_LANG_PUSH(Fortran)dnl
-AC_CACHE_CHECK([for Fortran flag to compile preprocessed .$1 files],
-                ac_cv_fc_pp_srcext_$1,
-[ac_ext=$1
-FCFLAGS_SRCEXT_save=$FCFLAGS_SRCEXT
-FCFLAGS_SRCEXT=
-ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_pp_srcext_$1=unknown
-case $ac_ext in #(
-  [[fF]]77) ac_try=f77-cpp-input;; #(
-  [[fF]]) ac_try=f77-cpp-input;; #(
-  *) ac_try=f95-cpp-input;;
-esac
-for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
-               -cpp -xpp=cpp -qsuffix=cpp=$1 "-x $ac_try" +cpp -Cpp; do
-  test "x$ac_flag" != xnone && FCFLAGS_SRCEXT="$ac_flag" && ac_fcflags_srcext="$ac_flag"
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
-#if 0
-#include <ac_nonexistent.h>
-      choke me
-#endif]])],
-    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
-#if 1
-#include <ac_nonexistent.h>
-      choke me
-#endif]])],
-       [],
-       [ac_cv_fc_pp_srcext_$1=$ac_flag; break])])
-done
-${RM} -f conftest.$ac_objext conftest.$1
-FCFLAGS_SRCEXT=$FCFLAGS_SRCEXT_save
-ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
-])
-if test "x$ac_cv_fc_pp_srcext_$1" = xunknown; then
-  m4_default([$3],
-             [AC_MSG_ERROR([Fortran could not compile preprocessed .$1 files])])
-else
-  ac_fc_srcext=$1
-  if test "x$ac_cv_fc_pp_srcext_$1" = xnone; then
-    FCFLAGS_SRCEXT=""
-    ac_cv_fc_pp_srcext_$1=""
-    dnl FCPPFLAGS_[]$1[]=""
-  else
-    FCFLAGS_SRCEXT=$ac_cv_fc_pp_srcext_$1
-    dnl FCPPFLAGS_[]$1[]=$ac_cv_fc_pp_srcext_$1
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
   fi
-  dnl AC_SUBST(FCPPFLAGS_[]$1)
-  $2
-fi
-AC_LANG_POP(Fortran)dnl
-])# UD_FC_PP_SRCEXT
-
-dnl steal from autoconf 2.69
-AC_DEFUN([UD_FC_PP_DEFINE],
-[AC_LANG_PUSH([Fortran])dnl
-ac_fc_pp_define_srcext_save=$ac_fc_srcext
-ac_ext_saved=$ac_ext
-UD_FC_PP_SRCEXT([F])
-ac_ext=F
-AC_CACHE_CHECK([how to define symbols for preprocessed Fortran],
-  [ac_cv_fc_pp_define],
-[ac_fc_pp_define_srcext_save=$ac_fc_srcext
-ac_cv_fc_pp_define=unknown
-ac_fc_pp_define_FCFLAGS_save=$FCFLAGS
-for ac_flag in -D -WF,-D -Wp,-D -Wc,-D
-do
-  FCFLAGS="$ac_fc_pp_define_FCFLAGS_save ${ac_flag}FOOBAR ${ac_flag}ZORK=42"
-  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
-#ifndef FOOBAR
-      choke me
-#endif
-#if ZORK != 42
-      choke me
-#endif]])],
-    [ac_cv_fc_pp_define=$ac_flag])
-  test x"$ac_cv_fc_pp_define" != xunknown && break
-done
-FCFLAGS=$ac_fc_pp_define_FCFLAGS_save
-])
-ac_fc_srcext=$ac_fc_pp_define_srcext_save
-if test "x$ac_cv_fc_pp_define" = xunknown; then
-  FC_DEFINE=
-  m4_default([$2],
-             [AC_MSG_ERROR([Fortran does not allow to define preprocessor symbols], 77)])
-else
-  FC_DEFINE=$ac_cv_fc_pp_define
-  $1
 fi
-ac_ext=$ac_ext_saved
-AC_SUBST([FC_DEFINE])dnl
-AC_LANG_POP([Fortran])dnl
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
 ])
 
-# AC_PROG_FC_MOD
-# ---------------
-dnl Note that Mac OSX file system is case-insensitive, so this function does
-dnl not work precisely on Mac. Hence, we check whether the file system can
-dnl find the file with name in lowercase. If not, we say the mod file is in
-dnl uppercase.
-AC_DEFUN([UD_PROG_FC_UPPERCASE_MOD],
-[
-AC_REQUIRE([UD_FC_MODULE_EXTENSION])
-AC_LANG_PUSH(Fortran)
-AC_MSG_CHECKING([if Fortran 90 compiler capitalizes .mod filenames])
-AC_COMPILE_IFELSE(
-    [AC_LANG_SOURCE([
-        module conftest
-        end module conftest
-    ])]
-)
-dnl ac_try='$F90 ${F90FLAGS} conftest.f90 ${F90LIBS}>&AS_MESSAGE_LOG_FD'
-dnl AC_TRY_EVAL(ac_try)
-if test -f conftest.${FC_MODEXT} ; then
-   ac_cv_prog_f90_uppercase_mod=no
-else
-   ac_cv_prog_f90_uppercase_mod=yes
-   ${RM} -f CONFTEST.${FC_MODEXT}
-fi
-AC_MSG_RESULT($ac_cv_prog_f90_uppercase_mod)
-${RM} -f conftest*
-AC_LANG_POP(Fortran)
-])
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
 
-dnl steal from autoconf 2.69
-# UD_FC_MODULE_EXTENSION
-# ----------------------
-# Find the Fortran 90 module file extension.  The module extension is stored
-# in the variable FC_MODEXT and empty if it cannot be determined.  The result
-# or "unknown" is cached in the cache variable ac_cv_fc_module_ext.
-AC_DEFUN([UD_FC_MODULE_EXTENSION],
-[AC_CACHE_CHECK([Fortran 90 module extension], [ac_cv_fc_module_ext],
-[AC_LANG_PUSH(Fortran)
-mkdir conftest.dir
-cd conftest.dir
-ac_cv_fc_module_ext=unknown
-AC_COMPILE_IFELSE([[
-      module conftest_module
-      contains
-      subroutine conftest_routine
-      write(*,'(a)') 'gotcha!'
-      end subroutine
-      end module]],
-  [ac_cv_fc_module_ext=`ls | sed -n 's,conftest_module\.,,p'`
-   if test x$ac_cv_fc_module_ext = x; then
-dnl Some F90 compilers use upper case characters for the module file name.
-     ac_cv_fc_module_ext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'`
-   fi])
-cd ..
-${RM} -rf conftest.dir
-AC_LANG_POP(Fortran)
-])
-FC_MODEXT=$ac_cv_fc_module_ext
-if test "$FC_MODEXT" = unknown; then
-  FC_MODEXT=
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
 fi
-AC_SUBST([FC_MODEXT])dnl
-])
+AC_SUBST([install_sh])])
 
-dnl steal from autoconf 2.69
-# UD_FC_MODULE_FLAG([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
-# ---------------------------------------------------------------------
-# Find a flag to include Fortran 90 modules from another directory.
-# If successful, run ACTION-IF-SUCCESS (defaults to nothing), otherwise
-# run ACTION-IF-FAILURE (defaults to failing with an error message).
-# The module flag is cached in the ac_cv_fc_module_flag variable.
-# It may contain significant trailing whitespace.
+# Copyright (C) 2003-2014 Free Software Foundation, Inc.
 #
-# Known flags:
-# gfortran: -Idir, -I dir (-M dir, -Mdir (deprecated), -Jdir for writing)
-# g95: -I dir (-fmod=dir for writing)
-# SUN: -Mdir, -M dir (-moddir=dir for writing;
-#                     -Idir for includes is also searched)
-# HP: -Idir, -I dir (+moddir=dir for writing)
-# IBM: -Idir (-qmoddir=dir for writing)
-# Intel: -Idir -I dir (-mod dir for writing)
-# Absoft: -pdir
-# Lahey: -mod dir
-# Cray: -module dir, -p dir (-J dir for writing)
-#       -e m is needed to enable writing .mod files at all
-# Compaq: -Idir
-# NAGWare: -I dir (-mdir dir for writing)
-# PathScale: -I dir  (but -module dir is looked at first)
-# Portland: -module dir (first -module also names dir for writing)
-# Fujitsu: -Am -Idir (-Mdir for writing is searched first, then '.', then -I)
-#                    (-Am indicates how module information is saved)
-AC_DEFUN([UD_FC_MODULE_FLAG],[
-AC_CACHE_CHECK([Fortran 90 module inclusion flag], [ac_cv_fc_module_flag],
-[AC_LANG_PUSH([Fortran])
-ac_cv_fc_module_flag=unknown
-mkdir conftest.dir
-cd conftest.dir
-AC_COMPILE_IFELSE([[
-      module conftest_module
-      contains
-      subroutine conftest_routine
-      write(*,'(a)') 'gotcha!'
-      end subroutine
-      end module]],
-  [cd ..
-   ac_fc_module_flag_FCFLAGS_save=$FCFLAGS
-   # Flag ordering is significant for gfortran and Sun.
-   for ac_flag in -I '-I ' -M '-M ' -p '-mod ' '-mdir ' '-module ' '-Am -I'; do
-     # Add the flag twice to prevent matching an output flag.
-     FCFLAGS="$ac_fc_module_flag_FCFLAGS_save ${ac_flag}conftest.dir ${ac_flag}conftest.dir"
-     AC_COMPILE_IFELSE([[
-      program main
-      use conftest_module
-      call conftest_routine
-      end]],
-       [ac_cv_fc_module_flag="$ac_flag"])
-     if test "$ac_cv_fc_module_flag" != unknown; then
-       break
-     fi
-   done
-   FCFLAGS=$ac_fc_module_flag_FCFLAGS_save
-])
-${RM} -rf conftest.dir
-AC_LANG_POP([Fortran])
-])
-if test "$ac_cv_fc_module_flag" != unknown; then
-  FC_MODINC=$ac_cv_fc_module_flag
-  $1
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
 else
-  FC_MODINC=
-  m4_default([$2],
-    [AC_MSG_ERROR([unable to find compiler flag for module search path])])
+  am__leading_dot=_
 fi
-AC_SUBST([FC_MODINC])
-# Ensure trailing whitespace is preserved in a Makefile.
-AC_SUBST([ac_empty], [""])
-AC_CONFIG_COMMANDS_PRE([case $FC_MODINC in #(
-  *\ ) FC_MODINC=$FC_MODINC'${ac_empty}' ;;
-esac])dnl
-])
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
 
+# Add --enable-maintainer-mode option to configure.         -*- Autoconf -*-
+# From Jim Meyering
 
-dnl steal from autoconf 2.69
-# UD_FC_MODULE_OUTPUT_FLAG([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
-# ----------------------------------------------------------------------------
-# Find a flag to write Fortran 90 module information to another directory.
-# If successful, run ACTION-IF-SUCCESS (defaults to nothing), otherwise
-# run ACTION-IF-FAILURE (defaults to failing with an error message).
-# The module flag is cached in the ac_cv_fc_module_output_flag variable.
-# It may contain significant trailing whitespace.
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
 #
-# For known flags, see the documentation of AC_FC_MODULE_FLAG above.
-AC_DEFUN([UD_FC_MODULE_OUTPUT_FLAG],[
-AC_CACHE_CHECK([Fortran 90 module output flag], [ac_cv_fc_module_output_flag],
-[AC_LANG_PUSH([Fortran])
-mkdir conftest.dir conftest.dir/sub
-cd conftest.dir
-ac_cv_fc_module_output_flag=unknown
-ac_fc_module_output_flag_FCFLAGS_save=$FCFLAGS
-# Flag ordering is significant: put flags late which some compilers use
-# for the search path.
-for ac_flag in -J '-J ' -fmod= -moddir= +moddir= -qmoddir= '-mod ' \
-	      '-mdir ' '-module ' -M '-Am -M' '-e m -J '; do
-  FCFLAGS="$ac_fc_module_output_flag_FCFLAGS_save ${ac_flag}sub"
-  AC_COMPILE_IFELSE([[
-      module conftest_module
-      contains
-      subroutine conftest_routine
-      write(*,'(a)') 'gotcha!'
-      end subroutine
-      end module]],
-    [cd sub
-     AC_COMPILE_IFELSE([[
-      program main
-      use conftest_module
-      call conftest_routine
-      end]],
-       [ac_cv_fc_module_output_flag="$ac_flag"])
-     cd ..
-     if test "$ac_cv_fc_module_output_flag" != unknown; then
-       break
-     fi])
-done
-FCFLAGS=$ac_fc_module_output_flag_FCFLAGS_save
-cd ..
-${RM} -rf conftest.dir
-AC_LANG_POP([Fortran])
-])
-if test "$ac_cv_fc_module_output_flag" != unknown; then
-  FC_MODOUT=$ac_cv_fc_module_output_flag
-  $1
-else
-  FC_MODOUT=
-  m4_default([$2],
-    [AC_MSG_ERROR([unable to find compiler flag to write module information to])])
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAINTAINER_MODE([DEFAULT-MODE])
+# ----------------------------------
+# Control maintainer-specific portions of Makefiles.
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well.  Anyway, the user
+# can override the default with the --enable/--disable switch.
+AC_DEFUN([AM_MAINTAINER_MODE],
+[m4_case(m4_default([$1], [disable]),
+       [enable], [m4_define([am_maintainer_other], [disable])],
+       [disable], [m4_define([am_maintainer_other], [enable])],
+       [m4_define([am_maintainer_other], [enable])
+        m4_warn([syntax], [unexpected argument to AM@&t at _MAINTAINER_MODE: $1])])
+AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+  dnl maintainer-mode's default is 'disable' unless 'enable' is passed
+  AC_ARG_ENABLE([maintainer-mode],
+    [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+      am_maintainer_other[ make rules and dependencies not useful
+      (and sometimes confusing) to the casual installer])],
+    [USE_MAINTAINER_MODE=$enableval],
+    [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+  AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
+  MAINT=$MAINTAINER_MODE_TRUE
+  AC_SUBST([MAINT])dnl
+]
+)
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
+  ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
 fi
-AC_SUBST([FC_MODOUT])
-# Ensure trailing whitespace is preserved in a Makefile.
-AC_SUBST([ac_empty], [""])
-AC_CONFIG_COMMANDS_PRE([case $FC_MODOUT in #(
-  *\ ) FC_MODOUT=$FC_MODOUT'${ac_empty}' ;;
-esac])dnl
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
 ])
 
-dnl steal from autoconf 2.69
-# AC_FC_FREEFORM([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
-# ------------------------------------------------------------------
-# Look for a compiler flag to make the Fortran (FC) compiler accept
-# free-format source code, and adds it to FCFLAGS.  Call
-# ACTION-IF-SUCCESS (defaults to nothing) if successful (i.e. can
-# compile code using new extension) and ACTION-IF-FAILURE (defaults to
-# failing with an error message) if not.  (Defined via DEFUN_ONCE to
-# prevent flag from being added to FCFLAGS multiple times.)
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997-2014 Free Software Foundation, Inc.
 #
-# The known flags are:
-#        -ffree-form: GNU g77, gfortran, g95
-#         -FR, -free: Intel compiler (icc, ecc, ifort)
-#              -free: Compaq compiler (fort), Sun compiler (f95)
-# -qfree=f90, -qfree: IBM compiler (xlf)
-# -Mfree, -Mfreeform: Portland Group compiler
-#          -freeform: SGI compiler
-#        -8, -f free: Absoft Fortran
-#       +source=free: HP Fortran
-#    (-)-nfix, -Free: Lahey/Fujitsu Fortran
-#              -free: NAGWare
-#         -f, -Wf,-f: f2c (but only a weak form of "free-form" and long lines)
-# We try to test the "more popular" flags first, by some prejudiced
-# notion of popularity.
-AC_DEFUN_ONCE([UD_FC_FREEFORM],
-[AC_LANG_PUSH([Fortran])dnl
-AC_CACHE_CHECK([for Fortran flag needed to accept free-form source],
-	       [ac_cv_fc_freeform],
-[ac_cv_fc_freeform=unknown
-ac_fc_freeform_FCFLAGS_save=$FCFLAGS
-for ac_flag in none -ffree-form -FR -free -qfree=f90 -qfree -Mfree -Mfreeform \
-	       -freeform "-f free" -8 +source=free -nfix --nfix -Free
-do
-  test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag"
-dnl Use @&t@ below to ensure that editors don't turn 8+ spaces into tab.
-  AC_COMPILE_IFELSE([[
-  program freeform
-       ! FIXME: how to best confuse non-freeform compilers?
-       print *, 'Hello ', &
-     @&t@     'world.'
-       end]],
-		    [ac_cv_fc_freeform=$ac_flag; break])
-done
-${RM} -f conftest.err conftest.$ac_objext conftest.$ac_ext
-FCFLAGS=$ac_fc_freeform_FCFLAGS_save
-])
-if test "x$ac_cv_fc_freeform" = xunknown; then
-  m4_default([$2],
-	     [AC_MSG_WARN([Fortran $FC does not accept free-form source], 77)])
-else
-  dnl Do not append to FCFLAGS
-  dnl if test "x$ac_cv_fc_freeform" != xnone; then
-  dnl   FCFLAGS="$FCFLAGS $ac_cv_fc_freeform"
-  dnl fi
-  if test "x$ac_cv_fc_freeform" = xnone; then
-     ac_cv_fc_freeform=
-  fi
-  $1
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
 fi
-AC_LANG_POP([Fortran])dnl
-])# AC_FC_FREEFORM
-
-dnl steal from autoconf 2.69
-# AC_FC_FIXEDFORM([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
-# ------------------------------------------------------------------
-# Look for a compiler flag to make the Fortran (FC) compiler accept
-# fixed-format source code, and adds it to FCFLAGS.  Call
-# ACTION-IF-SUCCESS (defaults to nothing) if successful (i.e. can
-# compile code using new extension) and ACTION-IF-FAILURE (defaults to
-# failing with an error message) if not.  (Defined via DEFUN_ONCE to
-# prevent flag from being added to FCFLAGS multiple times.)
-#
-# The known flags are:
-#       -ffixed-form: GNU g77, gfortran, g95
-#             -fixed: Intel compiler (ifort), Sun compiler (f95)
-#            -qfixed: IBM compiler (xlf*)
-#            -Mfixed: Portland Group compiler
-#         -fixedform: SGI compiler
-#           -f fixed: Absoft Fortran
-#      +source=fixed: HP Fortran
-#    (-)-fix, -Fixed: Lahey/Fujitsu Fortran
-#             -fixed: NAGWare
-# Since compilers may accept fixed form based on file name extension,
-# but users may want to use it with others as well, call AC_FC_SRCEXT
-# with the respective source extension before calling this macro.
-AC_DEFUN_ONCE([UD_FC_FIXEDFORM],
-[AC_LANG_PUSH([Fortran])dnl
-AC_CACHE_CHECK([for Fortran flag needed to accept fixed-form source],
-               [ac_cv_fc_fixedform],
-[ac_cv_fc_fixedform=unknown
-ac_fc_fixedform_FCFLAGS_save=$FCFLAGS
-for ac_flag in none -ffixed-form -fixed -qfixed -Mfixed -fixedform "-f fixed" \
-               +source=fixed -fix --fix -Fixed
-do
-  test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_fixedform_FCFLAGS_save $ac_flag"
-  AC_COMPILE_IFELSE([[
-C     This comment should confuse free-form compilers.
-      program main
-      end]],
-                    [ac_cv_fc_fixedform=$ac_flag; break])
-done
-${RM} -f conftest.err conftest.$ac_objext conftest.$ac_ext
-FCFLAGS=$ac_fc_fixedform_FCFLAGS_save
-])
-if test "x$ac_cv_fc_fixedform" = xunknown; then
-  m4_default([$2],
-             [AC_MSG_WARN([Fortran does not accept fixed-form source], 77)])
-  ac_cv_fc_fixedform=
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
 else
-  dnl Do not append to FCFLAGS
-  dnl if test "x$ac_cv_fc_fixedform" != xnone; then
-  dnl   FCFLAGS="$FCFLAGS $ac_cv_fc_fixedform"
-  dnl fi
-  if test "x$ac_cv_fc_fixedform" = xnone; then
-     ac_cv_fc_fixedform=
-  fi
-  $1
+  am_missing_run=
+  AC_MSG_WARN(['missing' script is too old or missing])
 fi
-AC_LANG_POP([Fortran])dnl
-])# AC_FC_FIXEDFORM
+])
 
-# AX_C_FLOAT_WORDS_BIGENDIAN# added by:
-#   Warren Turkal <wt at penguintechs.org>
-#
-# Copyright © 2006 Daniel Amelang <dan at amelang.net>
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
 #
-# Copying and distribution of this file, with or without modification, are
-# permitted in any medium without royalty provided the copyright notice and
-# this notice are preserved.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
 #
-# This macro will detect if double variables are words packed in big endian
-# order while the bits in the words are arranged in little endian order. This
-# macro was added to support the ARM architecture. The FLOAT_WORDS_BIGENDIAN
-# macro will be set to 1 if the word order is big endian. If the word order is
-# not big endian, FLOAT_WORDS_BIGENDIAN will be not be set.
-AC_DEFUN([AX_C_FLOAT_WORDS_BIGENDIAN],
-  [AC_CACHE_CHECK(whether float word ordering is bigendian,
-                  ax_cv_c_float_words_bigendian, [
-
-ax_cv_c_float_words_bigendian=unknown
-AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
-
-double d = 9090423496703681033747047890550501147621169273561563201479712084405348
-886581669527372346909785805625751702019124748742951693213050356065000232756451757
-0778480236724525140520121371739201496540132640109977779420565776568942592.0;
-
-]])], [
-
-if grep noonsees conftest.$ac_objext >/dev/null ; then
-  ax_cv_c_float_words_bigendian=yes
-fi
-if grep seesnoon conftest.$ac_objext >/dev/null ; then
-  if test "$ax_cv_c_float_words_bigendian" = unknown; then
-    ax_cv_c_float_words_bigendian=no
-  else
-    ax_cv_c_float_words_bigendian=unknown
-  fi
-fi
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-])])
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
 
-case $ax_cv_c_float_words_bigendian in
-  yes)
-    m4_default([$1],
-      [AC_DEFINE([FLOAT_WORDS_BIGENDIAN], 1,
-                 [Define to 1 if your system stores words within floats
-                  with the most significant word first])]) ;;
-  no)
-    $2 ;;
-  *)
-    m4_default([$3],
-      [AC_MSG_ERROR([
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
 
-Unknown float word ordering. You need to manually preset
-ax_cv_c_float_words_bigendian=no (or yes) according to your system.
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-    ])]) ;;
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \	]]*)
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
 esac
 
-])# AX_C_FLOAT_WORDS_BIGENDIAN
-
-dnl Find the full path of a header file
-dnl
-dnl UD_CHECK_HEADER_PATH(file, [action-if-found], [action-if-not-found])
-dnl Example:
-dnl UD_CHECK_HEADER_PATH([math.h])
-dnl AC_MSG_NOTICE([ac_cv_header_path_math_h=$ac_cv_header_path_math_h])
-dnl
-dnl
-AC_DEFUN([UD_CHECK_HEADER_PATH],
-[
-    AS_VAR_PUSHDEF([ac_Path], [ac_cv_header_path_$1])dnl
-    AC_CACHE_CHECK(
-       [for full path of header file \"$1\"], [ac_Path],
-       [AC_PREPROC_IFELSE(
-           [AC_LANG_PROGRAM([[#include <$1>]])],
-           [AS_VAR_SET([ac_Path], [`sed -n '/\.h"/s/.*"\(.*\)".*/\1/p' conftest.i | grep -m 1 $1`])],
-           [AC_MSG_RESULT([not found])]
-       )])
-    AS_VAR_SET_IF([ac_Path], [$2], [$3])
-    dnl eval AS_TR_SH([ac_cv_header_path_$1])=$ac_Path
-    AS_VAR_POPDEF([ac_Path])dnl
-])
-
-dnl Check if Fortran 77 compiler allows _8 modifier (a Fortran 90 feature)
-dnl for integer*8 parameter
-dnl NAG nagfor requires a modifier but does not like _8
-dnl xlf is OK with _8 but when none is used it strangely passes the
-dnl compilation with a warning message
-dnl
-AC_DEFUN([UD_FC_CONSTANT_MODIFIER],[
-    AC_CACHE_CHECK([Fortran compiler treating constant modifier], [ac_cv_fc_constant_modifier],
-    [AC_LANG_PUSH([Fortran 77])
-        AC_COMPILE_IFELSE([[
-         program main
-         integer*8  nf_fill_uint
-         integer*8  nf_fill_int64
-         parameter (nf_fill_uint  = 4294967295_8)
-         parameter (nf_fill_int64 = -9223372036854775806_8) 
-         end]],
-        [ac_cv_fc_constant_modifier=8],
-        [AC_COMPILE_IFELSE([[
-         program main
-         integer*8  nf_fill_uint
-         integer*8  nf_fill_int64
-         parameter (nf_fill_uint  = 4294967295)
-         parameter (nf_fill_int64 = -9223372036854775806) 
-         end]],
-        [ac_cv_fc_constant_modifier=none],
-        [AC_COMPILE_IFELSE([[
-         program main
-         integer, parameter :: EightByteInt = selected_int_kind(18)
-         integer*8  nf_fill_uint
-         integer*8  nf_fill_int64
-         parameter (nf_fill_uint  = 4294967295_EightByteInt)
-         parameter (nf_fill_int64 = -9223372036854775806_EightByteInt) 
-         end]],
-        [ac_cv_fc_constant_modifier=EightByteInt],
-        [AC_MSG_ERROR([no appropriate modifier found])])
-        ])
-        ])
-    ])
-    AC_LANG_POP([Fortran 77])
-])
-
-dnl Check if Fortran 77 compiler is pgf77
-dnl According to pgf77 manual the command-line option to should version is -V
-dnl
-AC_DEFUN([UD_CHECK_PGF77],[
-    AC_CACHE_CHECK([if Fortran 77 compiler is pgf77], [ac_cv_fc_compiler_pgf77],
-    [ac_cv_fc_compiler_pgf77=no
-     eval $MPIF77 -V </dev/null >& conftest.ver
-     _F77_VENDOR=`head -c 5 conftest.ver`
-     if test "x${_F77_VENDOR}" = xpgf77 ; then
-        ac_cv_fc_compiler_pgf77=yes
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
      fi
-     ${RM} -f conftest.ver
-     unset _F77_VENDOR
-    ])
-])
-
-dnl Check if Fortran compiler is NAG
-dnl According to nagfor manual the command-line option to should version is -V
-dnl
-AC_DEFUN([UD_CHECK_FC_NAG],[
-    AC_CACHE_CHECK([if Fortran compiler is NAG], [ac_cv_fc_compiler_nag],
-    [ac_cv_fc_compiler_nag=no
-     eval $MPIF90 -V </dev/null >& conftest.ver
-     _FC_VENDOR=`head -c 3 conftest.ver`
-     if test "x${_FC_VENDOR}" = xNAG ; then
-        ac_cv_fc_compiler_nag=yes
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+	&& test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
      fi
-     ${RM} -f conftest.ver
-     unset _FC_VENDOR
-    ])
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
 ])
 
-AC_DEFUN([UD_CXX_MACRO_FUNC],[
-   AC_CACHE_CHECK([if C++ macro __func__ or __FUNCTION__ is defined], [ac_cv_cxx_macro_func],
-   [ac_cv_cxx_macro_func=no
-    ac_cv_cxx_macro_function=no
-    AC_LANG_PUSH([C++])
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <iostream>]],
-                                       [[std::cout << __func__;]])],
-                                       [ac_cv_cxx_macro_func=yes],[])
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <iostream>]],
-                                       [[std::cout << __FUNCTION__;]])],
-                                       [ac_cv_cxx_macro_function=yes],[])
-    AC_LANG_POP([C++])
-   ])
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
 ])
-
-dnl
-dnl Borrowed macros from MPICH: aclocal_f77.m4
-dnl
-
-dnl
-dnl Check to see if a C program can be linked when using the libraries
-dnl needed by C programs
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
 dnl
-AC_DEFUN([PAC_PROG_FC_CHECK_FCLIBS],[
-AC_REQUIRE([AC_FC_LIBRARY_LDFLAGS])
-AC_MSG_CHECKING([whether $CC links with FCLIBS found by autoconf])
-AC_LANG_PUSH([C])
-# Create a simple C program for the tests.
-AC_LANG_CONFTEST([
-    AC_LANG_PROGRAM([],[int a;])
-])
-# Try to link a C program with all of these libraries
-saved_LIBS="$LIBS"
-LIBS="$FCLIBS $saved_LIBS"
-AC_LINK_IFELSE([],[
-    AC_MSG_RESULT([yes])
-],[
-    AC_MSG_RESULT([no])
-    AC_MSG_CHECKING([for which libraries can be used])
-    pac_ldirs=""
-    pac_libs=""
-    pac_other=""
-    for name in $FCLIBS ; do
-        case $name in 
-        -l*) pac_libs="$pac_libs $name"   ;;
-        -L*) pac_ldirs="$pac_ldirs $name" ;;
-          *) pac_other="$pac_other $name" ;;
-        esac
-    done
-    keep_libs=""
-    for name in $pac_libs ; do
-        LIBS="$saved_LIBS $pac_ldirs $pac_other $name"
-        AC_LINK_IFELSE([],[
-            keep_libs="$keep_libs $name"
-        ])
-    done
-    AC_MSG_RESULT($keep_libs)
-    FCLIBS="$pac_ldirs $pac_other $keep_libs"
-])
-LIBS="$saved_LIBS"
-rm -f conftest.$ac_ext
-AC_LANG_PUSH([C])
-])
-
-
-AC_DEFUN([UD_CHECK_MPI_COMPILER], [
-   if test "x$MPI_INSTALL" != x ; then
-      UD_MSG_DEBUG(--with-mpi=$MPI_INSTALL is used)
-      if test "x$$1" = x ; then
-         dnl If $1 is not defined, first search under ${MPI_INSTALL}/bin
-         if test -d "${MPI_INSTALL}/bin" ; then
-            UD_MSG_DEBUG(search possible $1 under $MPI_INSTALL/bin)
-            AC_PATH_PROGS([$1], [$2], [], [$MPI_INSTALL/bin])
-         fi
-         dnl If no valid $1 can be found under ${MPI_INSTALL}/bin, search
-         dnl under ${MPI_INSTALL}
-         if test "x$$1" = x ; then
-             UD_MSG_DEBUG(search possible $1 under $MPI_INSTALL)
-             AC_PATH_PROGS([$1], [$2], [], [$MPI_INSTALL])
-         fi
-      else
-         dnl if $1 is defined, check whether the file exists
-         UD_MSG_DEBUG(check if file $$1 exists)
-         if ! test -f "$$1" ; then
-            dnl file does not exist in the current directory, check under
-            dnl MPI_INSTALL
-            UD_MSG_DEBUG(File $1= $$1 cannot be found ... check under $MPI_INSTALL)
-            if test -f "$MPI_INSTALL/$$1" ; then
-               UD_MSG_DEBUG(File $1= $$1 is found under $MPI_INSTALL)
-               $1="$MPI_INSTALL/$$1"
-            elif test -f "$MPI_INSTALL/bin/$$1" ; then
-               UD_MSG_DEBUG(File $1= $$1 is found under $MPI_INSTALL/bin)
-               $1="$MPI_INSTALL/bin/$$1"
-            else
-               UD_MSG_DEBUG(File $1= $$1 cannot be found under $MPI_INSTALL)
-               $1=
-            fi
-         fi
-      fi
-   else
-       UD_MSG_DEBUG(--with-mpi=$MPI_INSTALL is NOT used)
-       UD_MSG_DEBUG([check if $1 is defined. If yes, check if file exists])
-       if test "x$$1" != x && (! test -f "$$1") ; then
-          UD_MSG_DEBUG(check if file $$1 exists under user's PATH)
-          AC_PATH_PROGS([$1], [$$1])
-       fi
-   fi
-   dnl if $$1 is not empty, then compiler file does exist
-   dnl if $$1 is empty, search under user's PATH
-   if test "x$$1" = x ; then
-      UD_MSG_DEBUG(find possible $1 under user's PATH)
-      AC_PATH_PROGS([$1], [$2])
-   fi
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
 ])
 
-dnl Check for presence of an MPI constant.
-dnl These could be enums, so we have to do compile checks.
-AC_DEFUN([UD_HAS_MPI_CONST], [
-   AC_MSG_CHECKING(if MPI constant $1 is defined )
-   AC_COMPILE_IFELSE(
-      [AC_LANG_SOURCE([
-          #include <mpi.h>
-          int dummy = $1;
-      ])],
-      [AC_MSG_RESULT(yes)
-       AC_DEFINE(HAVE_$1, 1, available)
-      ],
-      [AC_MSG_RESULT(no)]
-   )]
-)
-
-dnl Check for presence of an MPI datatype.
-dnl These could be enums, so we have to do compile checks.
-AC_DEFUN([UD_HAS_MPI_DATATYPE], [
-   AC_MSG_CHECKING(if MPI datatype $1 is defined )
-   AC_COMPILE_IFELSE(
-      [AC_LANG_SOURCE([
-          #include <mpi.h>
-          MPI_Datatype dummy = $1;
-      ])],
-      [AC_MSG_RESULT(yes)
-       AC_DEFINE(HAVE_$1$2, 1, available)
-      ],
-      [AC_MSG_RESULT(no)]
-   )]
-)
+# Copyright (C) 2001-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
 
-dnl Check if older Intel MPI C compiler (4.x) for issue of redefined SEEK_SET
-dnl See https://software.intel.com/en-us/articles/intel-cluster-toolkit-for-linux-error-when-compiling-c-aps-using-intel-mpi-library-compilation-driver-mpiicpc
-AC_DEFUN([UD_CHECK_MPI_CPP_SEEK_SET], [
-   AC_MSG_CHECKING(if MPI C++ compiler redefines SEEK_SET )
-   CXX=${MPICXX}
-   AC_LANG_PUSH(C++)
-   AC_COMPILE_IFELSE(
-      [AC_LANG_SOURCE([
-          #include <stdio.h>
-          #include <mpi.h>
-          int main() { return 0; }
-      ])],
-      [ac_cv_CHECK_MPI_CPP_SEEK_SET=no],
-      [ac_cv_CHECK_MPI_CPP_SEEK_SET=yes]
-   )
-   AC_MSG_RESULT([$ac_cv_CHECK_MPI_CPP_SEEK_SET])
-   AC_LANG_POP(C++)]
-)
+# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
 
-AC_DEFUN(UD_CHECK_F77_GNU_INT,
-[
-    AC_MSG_CHECKING([for Fortran 77 GNU intrinsic INT])
-    AC_LANG_PUSH([Fortran 77])
-    AC_COMPILE_IFELSE(
-       [AC_LANG_SOURCE([
-           program main
-           implicit none
-           real r
-           integer*1 i1
-           integer*2 i2
-           integer   i4
-           integer*8 i8
-           r = 12.34
-           i1 = INT(r, 1)
-           i2 = INT(r, 2)
-           i4 = INT(r)
-           i8 = INT(r, 8)
-           end
-       ])],
-       [ac_cv_f77_gnu_int="yes"],
-       [ac_cv_f77_gnu_int="no"]
-    )
-    AC_LANG_POP([Fortran 77])
-    AC_MSG_RESULT([$ac_cv_f77_gnu_int])
-])
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
 
-AC_DEFUN(UD_CHECK_F77_INT1,
-[
-    AC_MSG_CHECKING([for Fortran 77 intrinsic INT1])
-    AC_LANG_PUSH([Fortran 77])
-    AC_COMPILE_IFELSE(
-       [AC_LANG_SOURCE([
-           program main
-           implicit none
-           real r
-           integer*1 i1
-           r = 12.34
-           i1 = INT1(r)
-           end
-       ])],
-       [ac_cv_f77_int1="yes"],
-       [ac_cv_f77_int1="no"]
-    )
-    AC_LANG_POP([Fortran 77])
-    AC_MSG_RESULT([$ac_cv_f77_int1])
-])
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
 
-AC_DEFUN(UD_CHECK_F77_INT2,
-[
-    AC_MSG_CHECKING([for Fortran 77 intrinsic INT2])
-    AC_LANG_PUSH([Fortran 77])
-    AC_COMPILE_IFELSE(
-       [AC_LANG_SOURCE([
-           program main
-           implicit none
-           real r
-           integer*2 i2
-           r = 12.34
-           i2 = INT2(r)
-           end
-       ])],
-       [ac_cv_f77_int2="yes"],
-       [ac_cv_f77_int2="no"]
-    )
-    AC_LANG_POP([Fortran 77])
-    AC_MSG_RESULT([$ac_cv_f77_int2])
-])
+# Check how to create a tarball.                            -*- Autoconf -*-
 
-AC_DEFUN(UD_CHECK_F77_INT8,
-[
-    AC_MSG_CHECKING([for Fortran 77 intrinsic INT8])
-    AC_LANG_PUSH([Fortran 77])
-    AC_COMPILE_IFELSE(
-       [AC_LANG_SOURCE([
-           program main
-           implicit none
-           real r
-           integer*8 i8
-           r = 12.34
-           i8 = INT8(r)
-           end
-       ])],
-       [ac_cv_f77_int8="yes"],
-       [ac_cv_f77_int8="no"]
-    )
-    AC_LANG_POP([Fortran 77])
-    AC_MSG_RESULT([$ac_cv_f77_int8])
-])
+# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  for _am_tool in $_am_tools; do
+    case $_am_tool in
+    gnutar)
+      for _am_tar in tar gnutar gtar; do
+        AM_RUN_LOG([$_am_tar --version]) && break
+      done
+      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+      am__untar="$_am_tar -xf -"
+      ;;
+    plaintar)
+      # Must skip GNU tar: if it does not support --format= it doesn't create
+      # ustar tarball either.
+      (tar --version) >/dev/null 2>&1 && continue
+      am__tar='tar chf - "$$tardir"'
+      am__tar_='tar chf - "$tardir"'
+      am__untar='tar xf -'
+      ;;
+    pax)
+      am__tar='pax -L -x $1 -w "$$tardir"'
+      am__tar_='pax -L -x $1 -w "$tardir"'
+      am__untar='pax -r'
+      ;;
+    cpio)
+      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+      am__untar='cpio -i -H $1 -d'
+      ;;
+    none)
+      am__tar=false
+      am__tar_=false
+      am__untar=false
+      ;;
+    esac
 
+    # If the value was cached, stop now.  We just wanted to have am__tar
+    # and am__untar set.
+    test -n "${am_cv_prog_tar_$1}" && break
+
+    # tar/untar a dummy directory, and stop if the command works.
+    rm -rf conftest.dir
+    mkdir conftest.dir
+    echo GrepMe > conftest.dir/file
+    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    rm -rf conftest.dir
+    if test -s conftest.tar; then
+      AM_RUN_LOG([$am__untar <conftest.tar])
+      AM_RUN_LOG([cat conftest.dir/file])
+      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+    fi
+  done
+  rm -rf conftest.dir
+
+  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/aclocal_coverage.m4])
+m4_include([m4/libtool.m4])
+m4_include([m4/ltoptions.m4])
+m4_include([m4/ltsugar.m4])
+m4_include([m4/ltversion.m4])
+m4_include([m4/lt~obsolete.m4])
+m4_include([acinclude.m4])
diff --git a/benchmarks/C/Makefile.am b/benchmarks/C/Makefile.am
new file mode 100644
index 0000000..c7aab5a
--- /dev/null
+++ b/benchmarks/C/Makefile.am
@@ -0,0 +1,40 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c
+
+AM_CPPFLAGS = -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+
+check_PROGRAMS = aggregation \
+                 write_block_read_column
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+
+ptest ptests ptest4: $(check_PROGRAMS)
+	for i in $(check_PROGRAMS); do { \
+	$(TESTMPIRUN4) ./$$i -q 10 $(TESTOUTDIR)/testfile.nc ; \
+	if [ $$? = 0 ] ; then \
+	    echo "PASS:  C  parallel run on 4 processes --------------- $$i"; \
+	else \
+	    echo "FAILED:  C  parallel run on 4 processes ------------- $$i"; \
+	    exit 1; \
+	fi ; } ; done
+
+ptest2 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/benchmarks/C/Makefile.in b/benchmarks/C/Makefile.in
index 70baed8..d48b60e 100644
--- a/benchmarks/C/Makefile.in
+++ b/benchmarks/C/Makefile.in
@@ -1,48 +1,702 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2698 2016-12-11 20:02:52Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = aggregation$(EXEEXT) write_block_read_column$(EXEEXT)
+subdir = benchmarks/C
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+aggregation_SOURCES = aggregation.c
+aggregation_OBJECTS = aggregation.$(OBJEXT)
+aggregation_LDADD = $(LDADD)
+aggregation_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+write_block_read_column_SOURCES = write_block_read_column.c
+write_block_read_column_OBJECTS = write_block_read_column.$(OBJEXT)
+write_block_read_column_LDADD = $(LDADD)
+write_block_read_column_DEPENDENCIES =  \
+	$(top_builddir)/src/libs/libpnetcdf.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = aggregation.c write_block_read_column.c
+DIST_SOURCES = aggregation.c write_block_read_column.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c
+AM_CPPFLAGS = -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu benchmarks/C/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu benchmarks/C/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+aggregation$(EXEEXT): $(aggregation_OBJECTS) $(aggregation_DEPENDENCIES) $(EXTRA_aggregation_DEPENDENCIES) 
+	@rm -f aggregation$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(aggregation_OBJECTS) $(aggregation_LDADD) $(LIBS)
+
+write_block_read_column$(EXEEXT): $(write_block_read_column_OBJECTS) $(write_block_read_column_DEPENDENCIES) $(EXTRA_write_block_read_column_DEPENDENCIES) 
+	@rm -f write_block_read_column$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(write_block_read_column_OBJECTS) $(write_block_read_column_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/aggregation.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/write_block_read_column.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
 
-include ../../macros.make
+install-exec-am:
 
-# note the order of -L list matters
-INCLUDES  = -I../../src/lib
-LDFLAGS  := -L../../src/lib $(LDFLAGS)
-LIBS     := -lpnetcdf $(LIBS)
+install-html: install-html-am
 
-C_SRCS    = aggregation.c \
-            write_block_read_column.c
+install-html-am:
 
-PROGS     = $(C_SRCS:.c=)
-OBJS      = $(C_SRCS:.c=.o)
+install-info: install-info-am
 
-GARBAGE      = $(PROGS) *.nc
+install-info-am:
 
-PACKING_LIST = $(C_SRCS) Makefile.in depend
+install-man:
 
-all: $(PROGS)
+install-pdf: install-pdf-am
 
-install:
+install-pdf-am:
 
-uninstall:
+install-ps: install-ps-am
 
-aggregation: aggregation.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-ps-am:
 
-write_block_read_column: write_block_read_column.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+installcheck-am:
 
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-ptest: $(PROGS)
-	@for i in $(PROGS); do { \
-	$(TEST_MPIRUN_4) ./$$i -q 10 $(TEST_OUTDIR)/testfile.nc ; \
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ptest ptests ptest4: $(check_PROGRAMS)
+	for i in $(check_PROGRAMS); do { \
+	$(TESTMPIRUN4) ./$$i -q 10 $(TESTOUTDIR)/testfile.nc ; \
 	if [ $$? = 0 ] ; then \
 	    echo "PASS:  C  parallel run on 4 processes --------------- $$i"; \
 	else \
@@ -50,11 +704,13 @@ ptest: $(PROGS)
 	    exit 1; \
 	fi ; } ; done
 
-ptests:
-
-include $(srcdir)/depend
+ptest2 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/benchmarks/C/aggregation.c b/benchmarks/C/aggregation.c
index 414813a..9f30717 100644
--- a/benchmarks/C/aggregation.c
+++ b/benchmarks/C/aggregation.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: aggregation.c 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: aggregation.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -110,13 +110,9 @@
  *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NVARS 5
 
-#define ERR(e) {if((e)!=NC_NOERR)printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(e));}
+#define ERR(e) {if((e)!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(e));nerrs++;}}
 
 static int debug;
 
@@ -147,7 +143,7 @@ int benchmark_write(char       *filename,
                     MPI_Info   *w_info_used,
                     double     *timing)  /* [6] */
 {
-    int i, j, k, rank, nprocs, err, num_reqs;
+    int i, j, k, rank, nprocs, nerrs=0, err, num_reqs;
     int ncid, cmode, varid[NVARS], dimid[6], *reqs, *sts, psizes[2];
     void *buf[NVARS];
     double start_t, end_t;
@@ -348,7 +344,7 @@ int benchmark_write(char       *filename,
     free(reqs);
     for (i=0; i<NVARS; i++) free(buf[i]);
 
-    return 1;
+    return nerrs;
 }
 
 /*----< benchmark_read() >---------------------------------------------------*/
@@ -359,7 +355,7 @@ int benchmark_read(char       *filename,
                    MPI_Info   *r_info_used,
                    double     *timing)  /* [5] */
 {
-    int i, j, k, rank, nprocs, s_rank, err, num_reqs;
+    int i, j, k, rank, nprocs, s_rank, nerrs=0, err, num_reqs;
     int ncid, omode, varid[NVARS], *reqs, *sts, psizes[2];
     void *buf[NVARS];
     double start_t, end_t;
@@ -509,7 +505,7 @@ int benchmark_read(char       *filename,
     free(reqs);
     for (i=0; i<NVARS; i++) free(buf[i]);
 
-    return 1;
+    return nerrs;
 }
 
 static void
@@ -529,7 +525,7 @@ usage(char *argv0)
 int main(int argc, char** argv) {
     extern int optind;
     char filename[256];
-    int i, rank, nprocs, verbose=1;
+    int i, rank, nprocs, verbose=1, nerrs=0;
     double timing[11], max_t[11];
     MPI_Offset len, w_size=0, r_size=0, sum_w_size, sum_r_size;
     MPI_Comm comm=MPI_COMM_WORLD;
@@ -550,7 +546,7 @@ int main(int argc, char** argv) {
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -562,17 +558,12 @@ int main(int argc, char** argv) {
     if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
     else          strcpy(filename, "testfile.nc");
 
-    benchmark_write(filename, len, &w_size, &w_info_used, timing);
-    benchmark_read (filename, len, &r_size, &r_info_used, timing+6);
+    nerrs += benchmark_write(filename, len, &w_size, &w_info_used, timing);
+    nerrs += benchmark_read (filename, len, &r_size, &r_info_used, timing+6);
 
     MPI_Reduce(&timing, &max_t,     11, MPI_DOUBLE, MPI_MAX, 0, comm);
-#ifdef MPI_OFFSET
     MPI_Reduce(&w_size, &sum_w_size, 1, MPI_OFFSET, MPI_SUM, 0, comm);
     MPI_Reduce(&r_size, &sum_r_size, 1, MPI_OFFSET, MPI_SUM, 0, comm);
-#else
-    MPI_Reduce(&w_size, &sum_w_size, 1, MPI_LONG_LONG, MPI_SUM, 0, comm);
-    MPI_Reduce(&r_size, &sum_r_size, 1, MPI_LONG_LONG, MPI_SUM, 0, comm);
-#endif
     if (verbose && rank == 0) {
         double bw = sum_w_size;
         bw /= 1048576.0;
@@ -624,6 +615,6 @@ int main(int argc, char** argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/benchmarks/C/depend b/benchmarks/C/depend
deleted file mode 100644
index 04d0b02..0000000
--- a/benchmarks/C/depend
+++ /dev/null
@@ -1,2 +0,0 @@
-aggregation.o: aggregation.c
-write_block_read_column.o: write_block_read_column.c
diff --git a/benchmarks/C/write_block_read_column.c b/benchmarks/C/write_block_read_column.c
index cd205f0..7f42670 100644
--- a/benchmarks/C/write_block_read_column.c
+++ b/benchmarks/C/write_block_read_column.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: write_block_read_column.c 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: write_block_read_column.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,13 +40,9 @@
  *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NVARS 4
 
-#define ERR(e) {if((e)!=NC_NOERR)printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(e));}
+#define ERR(e) {if((e)!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(e));nerrs++;}}
 
 /*----< print_info() >------------------------------------------------------*/
 static
@@ -75,7 +71,7 @@ int benchmark_write(char       *filename,
                     MPI_Info   *w_info_used,
                     double     *timing)  /* [6] */
 {
-    int i, j, rank, nprocs, err;
+    int i, j, rank, nprocs, nerrs=0, err;
     int ncid, cmode, varid[NVARS], dimid[2], psizes[2];
     void *buf[NVARS];
     double start_t, end_t;
@@ -204,7 +200,7 @@ int benchmark_write(char       *filename,
 
     for (i=0; i<NVARS; i++) free(buf[i]);
 
-    return 1;
+    return nerrs;
 }
 
 /*----< benchmark_read() >---------------------------------------------------*/
@@ -215,7 +211,7 @@ int benchmark_read(char       *filename,
                    MPI_Info   *r_info_used,
                    double     *timing)  /* [5] */
 {
-    int i, rank, nprocs, err;
+    int i, rank, nprocs, nerrs=0, err;
     int ncid, omode, nvars, dimid[2], *varid;
     void **buf;
     double start_t, end_t;
@@ -317,7 +313,7 @@ int benchmark_read(char       *filename,
     free(buf);
     free(varid);
 
-    return 1;
+    return nerrs;
 }
 
 static void
@@ -336,7 +332,7 @@ usage(char *argv0)
 int main(int argc, char** argv) {
     extern int optind;
     char filename[256];
-    int i, rank, nprocs, verbose=1;;
+    int i, rank, nprocs, verbose=1, nerrs=0;
     double timing[10], max_t[10];
     MPI_Offset len, w_size, r_size, sum_w_size, sum_r_size;
     MPI_Comm comm=MPI_COMM_WORLD;
@@ -354,7 +350,7 @@ int main(int argc, char** argv) {
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -365,17 +361,12 @@ int main(int argc, char** argv) {
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
 
-    benchmark_write(filename, len, &w_size, &w_info_used, timing);
-    benchmark_read (filename, len, &r_size, &r_info_used, timing+5);
+    nerrs += benchmark_write(filename, len, &w_size, &w_info_used, timing);
+    nerrs += benchmark_read (filename, len, &r_size, &r_info_used, timing+5);
 
     MPI_Reduce(&timing, &max_t,     10, MPI_DOUBLE, MPI_MAX, 0, comm);
-#ifdef MPI_OFFSET
     MPI_Reduce(&w_size, &sum_w_size, 1, MPI_OFFSET, MPI_SUM, 0, comm);
     MPI_Reduce(&r_size, &sum_r_size, 1, MPI_OFFSET, MPI_SUM, 0, comm);
-#else
-    MPI_Reduce(&w_size, &sum_w_size, 1, MPI_LONG_LONG, MPI_SUM, 0, comm);
-    MPI_Reduce(&r_size, &sum_r_size, 1, MPI_LONG_LONG, MPI_SUM, 0, comm);
-#endif
     if (verbose && rank == 0) {
         double bw = sum_w_size;
         bw /= 1048576.0;
@@ -427,6 +418,6 @@ int main(int argc, char** argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/benchmarks/FLASH-IO/Makefile.am b/benchmarks/FLASH-IO/Makefile.am
new file mode 100644
index 0000000..621699e
--- /dev/null
+++ b/benchmarks/FLASH-IO/Makefile.am
@@ -0,0 +1,76 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+ACLOCAL_AMFLAGS = -I m4
+
+SUFFIXES = .o .F90
+
+FC          = $(MPIF90)
+
+if BUILD_BENCHMARKS_IN_PNETCDF
+AM_FCFLAGS = $(FC_MODINC)${top_builddir}/src/binding/f90
+AM_LDFLAGS = -L${top_builddir}/src/libs
+else
+AM_FCFLAGS = $(FC_MODINC)$(PNETCDF_INC)
+AM_LDFLAGS = $(PNETCDF_LIB)
+endif
+
+AM_FCFLAGS += -I$(srcdir) $(NAGf90FPPFLAGS)
+AM_FCFLAGS += $(NAG_FCFLAGS)
+
+AM_FCFLAGS += $(FC_DEFINE)N_DIM=3
+AM_FCFLAGS += $(FC_DEFINE)MAXBLOCKS=100
+AM_FCFLAGS += $(FC_DEFINE)IONMAX=13
+
+if !BUILD_TESTSETS
+noinst_PROGRAMS = flash_benchmark_io
+else
+RUN_QUIETLY = -q
+endif
+check_PROGRAMS = flash_benchmark_io
+
+TESTS = $(check_PROGRAMS)
+
+flash_benchmark_io_SOURCES = get_mfluid_property.F90 \
+                             flash_release.F90 \
+                             flash_benchmark_io.F90 \
+                             checkpoint_ncmpi_parallel.F90 \
+                             plotfile_ncmpi_parallel.F90
+
+# flash_benchmark_io_LDFLAGS = $(PNETCDF_LIB)
+flash_benchmark_io_LDADD   = -lpnetcdf
+
+EXTRA_DIST = block_boundary_data.fh \
+             common.fh \
+             definitions.fh \
+             numfluids.fh \
+             physicaldata.fh \
+             tree.fh \
+             README \
+             acinclude.m4 \
+             configure.ac
+
+CLEANFILES = *.nc core core.*
+
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+
+ptests ptest ptest4: $(check_PROGRAMS)
+	$(TESTMPIRUN4) ./$(check_PROGRAMS) $(RUN_QUIETLY) $(TESTOUTDIR)/flash_io_test_ ; \
+	if [ $$? = 0 ] ; then \
+	    echo "PASS: F90 parallel run on 4 processes --------------- FLASH_IO"; \
+	else \
+	    echo "FAILED: F90 parallel run on 4 processes ------------- FLASH_IO"; \
+	fi
+
+ptest2 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/benchmarks/FLASH-IO/Makefile.in b/benchmarks/FLASH-IO/Makefile.in
index 33b4769..2eb4775 100644
--- a/benchmarks/FLASH-IO/Makefile.in
+++ b/benchmarks/FLASH-IO/Makefile.in
@@ -1,98 +1,1105 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2698 2016-12-11 20:02:52Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
 
-.SUFFIXES:      .o .F90
-
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at BUILD_TESTSETS_FALSE@noinst_PROGRAMS = flash_benchmark_io$(EXEEXT)
+check_PROGRAMS = flash_benchmark_io$(EXEEXT)
+subdir = benchmarks/FLASH-IO
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_flash_benchmark_io_OBJECTS = get_mfluid_property.$(OBJEXT) \
+	flash_release.$(OBJEXT) flash_benchmark_io.$(OBJEXT) \
+	checkpoint_ncmpi_parallel.$(OBJEXT) \
+	plotfile_ncmpi_parallel.$(OBJEXT)
+flash_benchmark_io_OBJECTS = $(am_flash_benchmark_io_OBJECTS)
+flash_benchmark_io_DEPENDENCIES =
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+PPFCCOMPILE = $(FC) $(FC_DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)
+LTPPFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(FC_DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_FCFLAGS) $(FCFLAGS)
+AM_V_PPFC = $(am__v_PPFC_ at AM_V@)
+am__v_PPFC_ = $(am__v_PPFC_ at AM_DEFAULT_V@)
+am__v_PPFC_0 = @echo "  PPFC    " $@;
+am__v_PPFC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+SOURCES = $(flash_benchmark_io_SOURCES)
+DIST_SOURCES = $(flash_benchmark_io_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = $(MPIF90)
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ACLOCAL_AMFLAGS = -I m4
+SUFFIXES = .o .F90
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@AM_FCFLAGS =  \
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@	$(FC_MODINC)$(PNETCDF_INC) \
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@	-I$(srcdir) \
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@	$(NAGf90FPPFLAGS) \
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@	$(NAG_FCFLAGS) \
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@	$(FC_DEFINE)N_DIM=3 \
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@	$(FC_DEFINE)MAXBLOCKS=100 \
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@	$(FC_DEFINE)IONMAX=13
+ at BUILD_BENCHMARKS_IN_PNETCDF_TRUE@AM_FCFLAGS = $(FC_MODINC)${top_builddir}/src/binding/f90 \
+ at BUILD_BENCHMARKS_IN_PNETCDF_TRUE@	-I$(srcdir) \
+ at BUILD_BENCHMARKS_IN_PNETCDF_TRUE@	$(NAGf90FPPFLAGS) \
+ at BUILD_BENCHMARKS_IN_PNETCDF_TRUE@	$(NAG_FCFLAGS) \
+ at BUILD_BENCHMARKS_IN_PNETCDF_TRUE@	$(FC_DEFINE)N_DIM=3 \
+ at BUILD_BENCHMARKS_IN_PNETCDF_TRUE@	$(FC_DEFINE)MAXBLOCKS=100 \
+ at BUILD_BENCHMARKS_IN_PNETCDF_TRUE@	$(FC_DEFINE)IONMAX=13
+ at BUILD_BENCHMARKS_IN_PNETCDF_FALSE@AM_LDFLAGS = $(PNETCDF_LIB)
+ at BUILD_BENCHMARKS_IN_PNETCDF_TRUE@AM_LDFLAGS = -L${top_builddir}/src/libs
+ at BUILD_TESTSETS_TRUE@RUN_QUIETLY = -q
+TESTS = $(check_PROGRAMS)
+flash_benchmark_io_SOURCES = get_mfluid_property.F90 \
+                             flash_release.F90 \
+                             flash_benchmark_io.F90 \
+                             checkpoint_ncmpi_parallel.F90 \
+                             plotfile_ncmpi_parallel.F90
 
-RM           = @RM@
-F90          = @MPIF90@
 
-FPPFLAGS     = @FPPFLAGS@ @FC_MODINC@@PNETCDF_INC@ -I$(srcdir) @NAGf90FPPFLAGS@
-FPPFLAGS    += @FC_DEFINE at N_DIM=3 @FC_DEFINE at MAXBLOCKS=100 @FC_DEFINE at IONMAX=13
-FPPFLAGS    += @NAG_FCFLAGS@
+# flash_benchmark_io_LDFLAGS = $(PNETCDF_LIB)
+flash_benchmark_io_LDADD = -lpnetcdf
+EXTRA_DIST = block_boundary_data.fh \
+             common.fh \
+             definitions.fh \
+             numfluids.fh \
+             physicaldata.fh \
+             tree.fh \
+             README \
+             acinclude.m4 \
+             configure.ac
 
-FCFLAGS      = @FCFLAGS@
-COMPILE.F90  = $(F90) -c $(FCFLAGS) $(FPPFLAGS)
-FCLDFLAGS    = @PNETCDF_LIB@ @LDFLAGS@
-FCLIBS       = -lpnetcdf @LIBS@ @LCOV_LIB@
-LINK.F90     = $(F90) $(FCFLAGS) -o $@
+CLEANFILES = *.nc core core.*
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+all: all-am
 
-TEST_MPIRUN  = @TEST_MPIRUN@
-TEST_OUTDIR  = @TEST_OUTDIR@
+.SUFFIXES:
+.SUFFIXES: .o .F90 .lo .log .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu benchmarks/FLASH-IO/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu benchmarks/FLASH-IO/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-PROGS        = flash_benchmark_io
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-SRCS         = get_mfluid_property.F90 \
-               flash_release.F90 \
-               flash_benchmark_io.F90 \
-               checkpoint_ncmpi_parallel.F90 \
-               plotfile_ncmpi_parallel.F90
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 
-HEADERS      = block_boundary_data.fh \
-               common.fh \
-               definitions.fh \
-               numfluids.fh \
-               physicaldata.fh \
-               tree.fh
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 
-PACKING_LIST = $(SRCS) $(HEADERS) configure.in Makefile.in README
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 
-GARBAGE      = $(PROGS) *.nc
-DIST_GARBAGE = config.log config.status config.cache autom4te.cache \
-               Makefile
+flash_benchmark_io$(EXEEXT): $(flash_benchmark_io_OBJECTS) $(flash_benchmark_io_DEPENDENCIES) $(EXTRA_flash_benchmark_io_DEPENDENCIES) 
+	@rm -f flash_benchmark_io$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(flash_benchmark_io_OBJECTS) $(flash_benchmark_io_LDADD) $(LIBS)
 
-OBJS         = $(SRCS:.F90=.o)
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
 
-all: $(PROGS)
+distclean-compile:
+	-rm -f *.tab.c
 
 .F90.o:
-	$(COMPILE.F90) $<
+	$(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ $<
 
-$(PROGS): $(OBJS)
-	$(LINK.F90) $(OBJS) $(FCLDFLAGS) $(FCLIBS)
+.F90.obj:
+	$(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
+.F90.lo:
+	$(AM_V_PPFC)$(LTPPFCCOMPILE) -c -o $@ $<
 
-ptest: $(PROGS)
-	$(TEST_MPIRUN_4) ./$(PROGS) -q $(TEST_OUTDIR)/flash_io_test_ ; \
-	if [ $$? = 0 ] ; then \
-	    echo "PASS: F90 parallel run on 4 processes --------------- FLASH_IO"; \
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
 	else \
-	    echo "FAILED: F90 parallel run on 4 processes ------------- FLASH_IO"; \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+flash_benchmark_io.log: flash_benchmark_io$(EXEEXT)
+	@p='flash_benchmark_io$(EXEEXT)'; \
+	b='flash_benchmark_io'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
 	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
 
-ptests:
+dvi-am:
 
-MANIFEST.echo: FORCE
-	echo $(PACKING_LIST) | fmt -1
+html: html-am
 
-ensure_manifest:
+html-am:
 
-dist:
-	id=FLASH-IO-PnetCDF \
-	&& $(RM) -rf $$id \
-	&& mkdir $$id \
-        && cp $(PACKING_LIST) $$id \
-        && tar -c $$id | gzip > $$id.tar.gz \
-        && $(RM) -rf $$id
+info: info-am
 
-install:
+info-am:
 
-uninstall:
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool \
+	clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \
+	distclean-compile distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am recheck tags tags-am tests-am tests-local \
+	uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ptests ptest ptest4: $(check_PROGRAMS)
+	$(TESTMPIRUN4) ./$(check_PROGRAMS) $(RUN_QUIETLY) $(TESTOUTDIR)/flash_io_test_ ; \
+	if [ $$? = 0 ] ; then \
+	    echo "PASS: F90 parallel run on 4 processes --------------- FLASH_IO"; \
+	else \
+	    echo "FAILED: F90 parallel run on 4 processes ------------- FLASH_IO"; \
+	fi
 
-clean:
-	@$(RM) -f *.o core core.* $(GARBAGE) \
-        *.gcda *.gcno gmon.out
+ptest2 ptest6 ptest8 ptest10:
 
-distclean: clean
-	@$(RM) -rf $(DIST_GARBAGE)
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-.PHONY: FORCE all clean distclean install uninstall dist ptest
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/benchmarks/FLASH-IO/README b/benchmarks/FLASH-IO/README
index 47bbee1..909077a 100644
--- a/benchmarks/FLASH-IO/README
+++ b/benchmarks/FLASH-IO/README
@@ -2,7 +2,7 @@
 #  Copyright (C) 2013, Northwestern University
 #  See COPYRIGHT notice in top-level directory.
 #
-#  $Id: README 1468 2013-10-26 16:53:18Z wkliao $
+#  $Id: README 3341 2017-08-25 22:29:08Z wkliao $
 
 This software benchmarks the performance of Parallel NetCDF method
 for the I/O and data partitioning pattern from the FLASH I/O benchmark,
@@ -36,7 +36,7 @@ please refer to the following paper.
 
 To compile:
     run configure command first, eg.
-    autoreconf
+    autoreconf -i
     ./configure --with-pnetcdf=/path/PnetCDF MPIF90=/path/mpi/F90/compiler
     make
 
diff --git a/benchmarks/FLASH-IO/acinclude.m4 b/benchmarks/FLASH-IO/acinclude.m4
new file mode 100644
index 0000000..98c32fe
--- /dev/null
+++ b/benchmarks/FLASH-IO/acinclude.m4
@@ -0,0 +1,189 @@
+dnl $Id: acinclude.m4 3341 2017-08-25 22:29:08Z wkliao $
+dnl user-defined macros (UD_) for PnetCDF configure
+
+
+dnl steal from autoconf 2.69
+AC_DEFUN([UD_FC_PP_SRCEXT],
+[AC_LANG_PUSH(Fortran)dnl
+AC_CACHE_CHECK([for Fortran flag to compile preprocessed .$1 files],
+                ac_cv_fc_pp_srcext_$1,
+[ac_ext=$1
+ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_pp_srcext_$1=unknown
+case $ac_ext in #(
+  [[fF]]77) ac_try=f77-cpp-input;; #(
+  *) ac_try=f95-cpp-input;;
+esac
+for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
+               -cpp -xpp=cpp -qsuffix=cpp=$1 "-x $ac_try" +cpp -Cpp; do
+  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#if 0
+#include <ac_nonexistent.h>
+      choke me
+#endif]])],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#if 1
+#include <ac_nonexistent.h>
+      choke me
+#endif]])],
+       [],
+       [ac_cv_fc_pp_srcext_$1=$ac_flag; break])])
+done
+rm -f conftest.$ac_objext conftest.$1
+ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+])
+if test "x$ac_cv_fc_pp_srcext_$1" = xunknown; then
+  m4_default([$3],
+             [AC_MSG_ERROR([Fortran could not compile preprocessed .$1 files])])
+else
+  ac_fc_srcext=$1
+  if test "x$ac_cv_fc_pp_srcext_$1" = xnone; then
+    ac_fcflags_srcext=""
+    FCFLAGS_[]$1[]=""
+  else
+    ac_fcflags_srcext=$ac_cv_fc_pp_srcext_$1
+    FCFLAGS_[]$1[]=$ac_cv_fc_pp_srcext_$1
+  fi
+  AC_SUBST(FCFLAGS_[]$1)
+  $2
+fi
+AC_LANG_POP(Fortran)dnl
+])# UD_FC_PP_SRCEXT
+
+dnl steal from autoconf 2.69
+AC_DEFUN([UD_FC_PP_DEFINE],
+[AC_LANG_PUSH([Fortran])dnl
+ac_fc_pp_define_srcext_save=$ac_fc_srcext
+ac_ext_saved=$ac_ext
+UD_FC_PP_SRCEXT([F])
+ac_ext=F
+AC_CACHE_CHECK([how to define symbols for preprocessed Fortran],
+  [ac_cv_fc_pp_define],
+[ac_fc_pp_define_srcext_save=$ac_fc_srcext
+ac_cv_fc_pp_define=unknown
+ac_fc_pp_define_FCFLAGS_save=$FCFLAGS
+for ac_flag in -D -WF,-D -Wp,-D -Wc,-D
+do
+  FCFLAGS="$ac_fc_pp_define_FCFLAGS_save ${ac_flag}FOOBAR ${ac_flag}ZORK=42"
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+#ifndef FOOBAR
+      choke me
+#endif
+#if ZORK != 42
+      choke me
+#endif]])],
+    [ac_cv_fc_pp_define=$ac_flag])
+  test x"$ac_cv_fc_pp_define" != xunknown && break
+done
+FCFLAGS=$ac_fc_pp_define_FCFLAGS_save
+])
+ac_fc_srcext=$ac_fc_pp_define_srcext_save
+if test "x$ac_cv_fc_pp_define" = xunknown; then
+  FC_DEFINE=
+  m4_default([$2],
+             [AC_MSG_ERROR([Fortran does not allow to define preprocessor symbols], 77)])
+else
+  FC_DEFINE=$ac_cv_fc_pp_define
+  $1
+fi
+ac_ext=$ac_ext_saved
+AC_SUBST([FC_DEFINE])dnl
+AC_LANG_POP([Fortran])dnl
+])
+
+
+dnl steal from autoconf 2.69
+# UD_FC_MODULE_FLAG([ACTION-IF-SUCCESS], [ACTION-IF-FAILURE = FAILURE])
+# ---------------------------------------------------------------------
+# Find a flag to include Fortran 90 modules from another directory.
+# If successful, run ACTION-IF-SUCCESS (defaults to nothing), otherwise
+# run ACTION-IF-FAILURE (defaults to failing with an error message).
+# The module flag is cached in the ac_cv_fc_module_flag variable.
+# It may contain significant trailing whitespace.
+#
+# Known flags:
+# gfortran: -Idir, -I dir (-M dir, -Mdir (deprecated), -Jdir for writing)
+# g95: -I dir (-fmod=dir for writing)
+# SUN: -Mdir, -M dir (-moddir=dir for writing;
+#                     -Idir for includes is also searched)
+# HP: -Idir, -I dir (+moddir=dir for writing)
+# IBM: -Idir (-qmoddir=dir for writing)
+# Intel: -Idir -I dir (-mod dir for writing)
+# Absoft: -pdir
+# Lahey: -mod dir
+# Cray: -module dir, -p dir (-J dir for writing)
+#       -e m is needed to enable writing .mod files at all
+# Compaq: -Idir
+# NAGWare: -I dir
+# PathScale: -I dir  (but -module dir is looked at first)
+# Portland: -module dir (first -module also names dir for writing)
+# Fujitsu: -Am -Idir (-Mdir for writing is searched first, then '.', then -I)
+#                    (-Am indicates how module information is saved)
+AC_DEFUN([UD_FC_MODULE_FLAG],[
+AC_CACHE_CHECK([Fortran 90 module inclusion flag], [ac_cv_fc_module_flag],
+[AC_LANG_PUSH([Fortran])
+ac_cv_fc_module_flag=unknown
+mkdir conftest.dir
+cd conftest.dir
+AC_COMPILE_IFELSE([[
+      module conftest_module
+      contains
+      subroutine conftest_routine
+      write(*,'(a)') 'gotcha!'
+      end subroutine
+      end module]],
+  [cd ..
+   ac_fc_module_flag_FCFLAGS_save=$FCFLAGS
+   # Flag ordering is significant for gfortran and Sun.
+   for ac_flag in -I '-I ' -M '-M ' -p '-mod ' '-module ' '-Am -I'; do
+     # Add the flag twice to prevent matching an output flag.
+     FCFLAGS="$ac_fc_module_flag_FCFLAGS_save ${ac_flag}conftest.dir ${ac_flag}conftest.dir"
+     AC_COMPILE_IFELSE([[
+      program main
+      use conftest_module
+      call conftest_routine
+      end program]],
+       [ac_cv_fc_module_flag="$ac_flag"])
+     if test "$ac_cv_fc_module_flag" != unknown; then
+       break
+     fi
+   done
+   FCFLAGS=$ac_fc_module_flag_FCFLAGS_save
+])
+rm -rf conftest.dir
+AC_LANG_POP([Fortran])
+])
+if test "$ac_cv_fc_module_flag" != unknown; then
+  FC_MODINC=$ac_cv_fc_module_flag
+  $1
+else
+  FC_MODINC=
+  m4_default([$2],
+    [AC_MSG_ERROR([unable to find compiler flag for module search path])])
+fi
+AC_SUBST([FC_MODINC])
+# Ensure trailing whitespace is preserved in a Makefile.
+AC_SUBST([ac_empty], [""])
+AC_CONFIG_COMMANDS_PRE([case $FC_MODINC in #(
+  *\ ) FC_MODINC=$FC_MODINC'${ac_empty}' ;;
+esac])dnl
+])
+
+dnl Check if Fortran compiler is NAG
+dnl According to nagfor manual the command-line option to should version is -V
+dnl
+AC_DEFUN([UD_CHECK_FC_NAG],[
+    AC_CACHE_CHECK([if Fortran compiler is NAG], [ac_cv_fc_compiler_nag],
+    [ac_cv_fc_compiler_nag=no
+     eval $MPIF90 -V </dev/null >& conftest.ver
+     _FC_VENDOR=`head -c 3 conftest.ver`
+     if test "x${_FC_VENDOR}" = xNAG ; then
+        ac_cv_fc_compiler_nag=yes
+     fi
+     ${RM} -f conftest.ver
+     unset _FC_VENDOR
+    ])
+])
+
diff --git a/benchmarks/FLASH-IO/configure.in b/benchmarks/FLASH-IO/configure.ac
similarity index 82%
rename from benchmarks/FLASH-IO/configure.in
rename to benchmarks/FLASH-IO/configure.ac
index 49593b4..a4a916c 100644
--- a/benchmarks/FLASH-IO/configure.in
+++ b/benchmarks/FLASH-IO/configure.ac
@@ -1,4 +1,4 @@
-AC_REVISION($Id: configure.in 2281 2015-12-26 17:43:34Z wkliao $)dnl
+AC_REVISION($Id: configure.ac 3478 2017-10-24 06:36:09Z wkliao $)dnl
 dnl -*- Mode: shell-script-mode; -*-
 dnl Process this file with GNU autoconf(1) to produce a configure script.
 dnl
@@ -6,6 +6,16 @@ dnl
 AC_PREREQ(2.69)
 AC_INIT([PnetCDF-FLASH-IO], [1.0.0], [parallel-netcdf at mcs.anl.gov])
 
+AM_INIT_AUTOMAKE([foreign])
+AM_MAINTAINER_MODE
+AC_CONFIG_MACRO_DIRS([m4])
+
+dnl AM_EXTRA_RECURSIVE_TARGETS macro was introduced into automake 1.13
+m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], [AM_EXTRA_RECURSIVE_TARGETS([tests])])
+
+dnl line below indicates this is not built as part of PnetCDF testsets
+AM_CONDITIONAL(BUILD_TESTSETS, [false])
+
 dnl user defined macro for printing messages for debugging
 _DEBUG=no
 AC_DEFUN([UD_MSG_DEBUG],
@@ -95,7 +105,7 @@ AC_DEFUN([UD_CHECK_FC_NAG],[
 dnl Check if the Fortran compiler is an NAG
 UD_CHECK_FC_NAG
 if test "x${ac_cv_fc_compiler_nag}" = xyes ; then
-   NAGf90FPPFLAGS="-DNAGf90Fortran"
+   NAGf90FPPFLAGS="-DNAGFortran"
    NAG_FCFLAGS="-mismatch"
    AC_SUBST(NAGf90FPPFLAGS)
    AC_SUBST(NAG_FCFLAGS)
@@ -109,7 +119,7 @@ AC_SUBST(FCFLAGS_F90)
 FPPFLAGS=${FPPFLAGS-}
 AC_SUBST(FPPFLAGS)
 
-dnl compiler command-line define preprocess flag, result in FC_DEFINE
+dnl compiler command-line define preprocessor flag, result in FC_DEFINE
 AC_FC_PP_DEFINE
 
 AC_LANG_PUSH([Fortran])
@@ -120,7 +130,7 @@ AC_COMPILE_IFELSE([AC_LANG_CALL([],[MPI_Comm_rank])],
                   [valid_mpif90=yes],[valid_mpif90=no]
 )
 AC_LANG_POP([Fortran])
-if test "x${valid_mpif90}" = xno && test "x${enable_fortran}" = xyes ; then
+if test "x${valid_mpif90}" = xno ; then
    AC_MSG_ERROR([
       ------------------------------------------------------------
         Invalid MPI Fortran 90 compiler specified: "${MPIF90}"
@@ -168,7 +178,7 @@ LIBS="-lpnetcdf ${LIBS}"
 AC_LINK_IFELSE([AC_LANG_CALL([], [nfmpi_create])],
    [AC_MSG_RESULT(works)
     have_pnetcdf=yes],
-   [AC_MSG_RESULT(failed to compile test program)
+   [AC_MSG_RESULT(failed to compile a PnetCDF Fortran program)
     unset FC
    ]
 )
@@ -181,29 +191,31 @@ AC_SUBST(PNETCDF_LIB)
 if test "x${have_pnetcdf}" = xno ; then
     AC_MSG_ERROR([
     ------------------------------------------------------------
-     The PnetCDF library and header file are required to build
-     the FLASH I/O kernel. Use option
+     Valid PnetCDF Fortran library and header include file are required
+     to build the FLASH I/O kernel. Use option
          --with-pnetcdf=/path/to/implementation
      to specify the location of PnetCDF build.  Stopping ...
      Check 'config.log' for more information.
     ------------------------------------------------------------])
 fi
 
-AC_ARG_VAR(TEST_MPIRUN, [MPI run command for running test])
-AC_ARG_VAR(TEST_OUTDIR, [Output file directory for running test])
-if test "x${TEST_MPIRUN}" = x ; then
-    dnl set default to mpiexec
-    TEST_MPIRUN=mpiexec
+LT_PREREQ([2.2])
+LT_INIT
+
+AC_ARG_VAR(TESTMPIRUN, [MPI run command for running ptest, , @<:@default: mpiexec@:>@])
+AC_ARG_VAR(TESTOUTDIR, [Output file directory for running check/ptest, @<:@default: ./@:>@])
+if test "x${TESTMPIRUN}" = x ; then
+   dnl set default to mpiexec
+   AC_PATH_PROGS([TESTMPIRUN], [mpiexec mpirun])
 fi
-if test "x${TEST_OUTDIR}" = x ; then
+if test "x${TESTOUTDIR}" = x ; then
     dnl set default to current directory
-    TEST_OUTDIR=.
+    TESTOUTDIR=.
 fi
-AC_SUBST(TEST_MPIRUN)
-AC_SUBST(TEST_OUTDIR)
+AC_SUBST(TESTMPIRUN)
+AC_SUBST(TESTOUTDIR)
 
-LCOV_LIB=
-AC_SUBST(LCOV_LIB)
+AM_CONDITIONAL(BUILD_BENCHMARKS_IN_PNETCDF, [test yes = no])
 
 AC_CONFIG_FILES(Makefile)
 AC_OUTPUT
diff --git a/benchmarks/FLASH-IO/flash_benchmark_io.F90 b/benchmarks/FLASH-IO/flash_benchmark_io.F90
index 42122f6..1caee80 100644
--- a/benchmarks/FLASH-IO/flash_benchmark_io.F90
+++ b/benchmarks/FLASH-IO/flash_benchmark_io.F90
@@ -9,7 +9,7 @@
 ! #define MPI_OFFSET MPI_INTEGER8
 ! #endif
 
-#ifdef NAGf90Fortran
+#ifdef NAGFortran
       USE F90_UNIX_ENV, only : iargc, getarg
 #endif
 
@@ -18,7 +18,7 @@
 
 #include "common.fh"
 
-#ifndef NAGf90Fortran
+#ifndef NAGFortran
       integer iargc
 #endif
       integer i, argc, ierr
@@ -43,7 +43,7 @@
       ! root process reads command-line arguments
       if (MyPE .EQ. MasterPE) then
          isArgvRight = .TRUE.
-         argc = IARGC()
+         argc = IARGC()   ! IARGC() does not count the executable name
          call getarg(0, executable)
          if (argc .GT. 2) then
             print *, &
@@ -54,7 +54,7 @@
             basenm = "flash_io_test_"
             if (argc .EQ. 1) then
                call getarg(1, basenm)
-            else
+            else if (argc .EQ. 2) then
                verbose = .FALSE.
                call getarg(2, basenm)
             endif
@@ -159,6 +159,35 @@
           enddo
       end subroutine get_file_striping
 
+! ---------------------------------------------------------------------------
+! get all MPI-IO hints used
+! ---------------------------------------------------------------------------
+      subroutine print_info(info_used)
+          use mpi
+          use pnetcdf
+          implicit none
+
+          integer, intent(in) :: info_used
+
+          ! local variables
+          character*(MPI_MAX_INFO_VAL) key, value
+          integer nkeys, i, err
+          logical flag
+
+          call MPI_Info_get_nkeys(info_used, nkeys, err)
+          print *, 'MPI File Info: nkeys =', nkeys
+          do i=0, nkeys-1
+              call MPI_Info_get_nthkey(info_used, i, key, err)
+              call MPI_Info_get(info_used, key, MPI_MAX_INFO_VAL, &
+                                value, flag, err)
+ 123          format('MPI File Info: [',I2,'] key = ',A25, &
+                     ', value =',A)
+              print 123, i, trim(key), trim(value)
+          enddo
+          print *, ''
+
+          return
+      end subroutine print_info
 
 !---------------------------------------------------------------------------
 ! print I/O performance numbers
@@ -253,6 +282,7 @@
           print 1006, NumPEs, nxb, nyb, nzb, time_total, bw
           print *
 
+          call print_info(info_used)
       endif
       call MPI_Info_free(info_used, ierr)
 
diff --git a/benchmarks/Makefile.am b/benchmarks/Makefile.am
new file mode 100644
index 0000000..e3f86a3
--- /dev/null
+++ b/benchmarks/Makefile.am
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+SUBDIRS = C
+DIST_SUBDIRS = C FLASH-IO
+
+if HAS_FORTRAN
+if HAVE_MPI_MOD
+SUBDIRS += FLASH-IO
+endif
+endif
+
+EXTRA_DIST = README
+
+# below is the alternative when AM_EXTRA_RECURSIVE_TARGETS is not defined
+TESTS_DIRS = $(SUBDIRS:%=tests-%)
+tests: $(TESTS_DIRS)
+$(TESTS_DIRS): 
+	$(MAKE) $(MFLAGS) -C $(@:tests-%=%) tests
+
+if BUILD_COVERAGE
+   PTEST_SUBDIRS =
+else
+   PTEST_SUBDIRS = $(SUBDIRS)
+endif
+
+ptest ptests:
+	(echo "=============================================")  && \
+	(echo "    Parallel testing on 4 MPI processes")  && \
+	(echo "=============================================")  && \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest4 $$* ; \
+	done ) ;
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
+
+.PHONY: ptest ptests tests
+
diff --git a/benchmarks/Makefile.in b/benchmarks/Makefile.in
index 5a14a2f..189a8a9 100644
--- a/benchmarks/Makefile.in
+++ b/benchmarks/Makefile.in
@@ -1,56 +1,742 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2318 2016-02-04 00:18:26Z wkliao $
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__append_1 = FLASH-IO
+subdir = benchmarks
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = C $(am__append_1)
+DIST_SUBDIRS = C FLASH-IO
+EXTRA_DIST = README
+
+# below is the alternative when AM_EXTRA_RECURSIVE_TARGETS is not defined
+TESTS_DIRS = $(SUBDIRS:%=tests-%)
+ at BUILD_COVERAGE_FALSE@PTEST_SUBDIRS = $(SUBDIRS)
+ at BUILD_COVERAGE_TRUE@PTEST_SUBDIRS = 
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu benchmarks/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu benchmarks/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+pdf: pdf-recursive
 
-include ../macros.make
+pdf-am:
 
-SUBDIRS = C
+ps: ps-recursive
 
-ifeq (@has_fortran@, yes)
-ifeq (@mpi_mod@, yes)
-SUBDIRS += FLASH-IO
-endif
-endif
+ps-am:
 
-PACKING_LIST = Makefile.in README
+tests-am: tests-local
 
-PACKING_SUBDIRS = C FLASH-IO
+uninstall-am:
 
-GARBAGE =
+.MAKE: $(am__recursive_targets) install-am install-strip
 
-all: $(SUBDIRS)
-$(SUBDIRS):
-	$(MAKE) $(MFLAGS) -C $@
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-generic distclean-libtool \
+	distclean-local distclean-tags distdir dvi dvi-am html html-am \
+	info info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests \
+	tests-am tests-local uninstall uninstall-am
 
-PTEST_DIRS = $(SUBDIRS:%=ptest-%)
-ptest: all $(PTEST_DIRS)
-$(PTEST_DIRS):
-ifeq (@enable_coverage@, yes)
-	echo "Parallel test is disabled because coverage analysis was enabled"
-else
-	$(MAKE) $(MFLAGS) -C $(@:ptest-%=%) ptest
-endif
-# make sure ptest runs one directory after another
-ptest-FLASH-IO: ptest-C
+.PRECIOUS: Makefile
 
-ptests: ptest
+tests: $(TESTS_DIRS)
+$(TESTS_DIRS): 
+	$(MAKE) $(MFLAGS) -C $(@:tests-%=%) tests
 
-INSTALLDIRS = $(SUBDIRS:%=install-%)
-install: all $(INSTALLDIRS)
-$(INSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:install-%=%) install
+ptest ptests:
+	(echo "=============================================")  && \
+	(echo "    Parallel testing on 4 MPI processes")  && \
+	(echo "=============================================")  && \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest4 $$* ; \
+	done ) ;
 
-UNINSTALLDIRS = $(SUBDIRS:%=uninstall-%)
-uninstall: $(UNINSTALLDIRS)
-$(UNINSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:uninstall-%=%) uninstall
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
 
-include $(srcdir)/../rules.make
+.PHONY: ptest ptests tests
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/check_install.in b/check_install.in
deleted file mode 100644
index 565a6e5..0000000
--- a/check_install.in
+++ /dev/null
@@ -1,91 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 2016, Northwestern University and Argonne National Laboratory
-# See COPYRIGHT notice in top-level directory.
-#
-# $Id: check_install.in 2788 2016-12-29 03:14:39Z wkliao $
-#
-# @configure_input@
-
-prefix="@prefix@"
-
-if test $# -eq 1 ; then
-   prefix=$1
-elif test $# -eq 0 ; then
-   if test "x$prefix" = "x" ; then
-      echo "This utility checks the PnetCDF install files" >& 2
-      echo "Usage: $0 install_path" >&2
-      exit 1
-   fi
-fi
-
-installdir=$prefix
-nerrs=0
-
-headerfiles="pnetcdf pnetcdf.h pnetcdf.inc pnetcdf.mod"
-for f in $headerfiles
-do
-   installfile=$installdir/include/$f
-   if ! test -e $installfile ; then
-       echo "Error: file NOT found: $installfile" >& 2
-       nerrs=`expr $nerrs + 1`
-   fi
-done
-
-libfiles="libpnetcdf.a"
-for f in $libfiles
-do
-   installfile=$installdir/lib/$f
-   if ! test -e $installfile ; then
-       echo "Error: file NOT found: $installfile" >& 2
-       nerrs=`expr $nerrs + 1`
-   fi
-done
-
-pkgfiles="pnetcdf.pc"
-for f in $pkgfiles
-do
-   installfile=$installdir/lib/pkgconfig/$f
-   if ! test -e $installfile ; then
-       echo "Error: file NOT found: $installfile" >& 2
-       nerrs=`expr $nerrs + 1`
-   fi
-done
-
-binfiles="ncmpidiff ncmpidump ncmpigen ncmpivalid ncoffsets pnetcdf-config pnetcdf_version"
-for f in $binfiles
-do
-   installfile=$installdir/bin/$f
-   if ! test -e $installfile ; then
-       echo "Error: file NOT found: $installfile" >& 2
-       nerrs=`expr $nerrs + 1`
-   fi
-done
-
-man1files="ncmpidiff.1 ncmpigen.1 ncoffsets.1 ncmpidump.1 ncmpivalid.1 pnetcdf_version.1"
-for f in $man1files
-do
-   installfile=$installdir/share/man/man1/$f
-   if ! test -e $installfile ; then
-       echo "Error: file NOT found: $installfile" >& 2
-       nerrs=`expr $nerrs + 1`
-   fi
-done
-
-man3files="pnetcdf.3 pnetcdf_f77.3 pnetcdf_f90.3"
-for f in $man3files
-do
-   installfile=$installdir/share/man/man3/$f
-   if ! test -e $installfile ; then
-       echo "Error: file NOT found: $installfile" >& 2
-       nerrs=`expr $nerrs + 1`
-   fi
-done
-
-if test $nerrs = 0 ; then
-   echo "PASS -- all PnetCDF files appear in $installdir"
-else
-   echo "FAIL -- $nerrs error(s) found" >& 2
-   exit 1
-fi
-
diff --git a/cobalt.script b/cobalt.script
deleted file mode 100755
index 69438d6..0000000
--- a/cobalt.script
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-echo "Starting Cobalt job script"
-# see runjob --help for more options
-
-
-# test seqential programs
-make check TEST_MPIRUN="runjob --block $COBALT_PARTNAME --ranks-per-node 1 --np NP : " \
-           TEST_SEQRUN="runjob --block $COBALT_PARTNAME --ranks-per-node 1 --np 1 : " \
-           TEST_OUTDIR=/path/to/GPFS/directory
-
-# test parallel programs
-make ptest TEST_MPIRUN="runjob --block $COBALT_PARTNAME --ranks-per-node 1 --np NP : " \
-           TEST_SEQRUN="runjob --block $COBALT_PARTNAME --ranks-per-node 1 --np 1 : " \
-           TEST_OUTDIR=/path/to/GPFS/directory
-
-
diff --git a/configure b/configure
index ea29587..b980102 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
-# From configure.in Id: configure.in 2853 2017-01-28 07:47:58Z wkliao .
+# From configure.ac Revision: 3498 .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for parallel-netcdf 1.8.1.
+# Generated by GNU Autoconf 2.69 for parallel-netcdf 1.9.0.pre1.
 #
 # Report bugs to <parallel-netcdf at mcs.anl.gov>.
 #
@@ -199,6 +199,14 @@ test -x / || exit 1"
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+
+  test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
+      || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
 test \$(( 1 + 1 )) = 2 || exit 1"
   if (eval "$as_required") 2>/dev/null; then :
   as_have_required=yes
@@ -557,6 +565,8 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
 # Sed expression to map a string onto a valid variable name.
 as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
+SHELL=${CONFIG_SHELL-/bin/sh}
+
 
 test -n "$DJDIR" || exec 7<&0 </dev/null
 exec 6>&1
@@ -581,12 +591,12 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='parallel-netcdf'
 PACKAGE_TARNAME='parallel-netcdf'
-PACKAGE_VERSION='1.8.1'
-PACKAGE_STRING='parallel-netcdf 1.8.1'
+PACKAGE_VERSION='1.9.0.pre1'
+PACKAGE_STRING='parallel-netcdf 1.9.0.pre1'
 PACKAGE_BUGREPORT='parallel-netcdf at mcs.anl.gov'
 PACKAGE_URL=''
 
-ac_unique_file="src/lib/pnetcdf.h.in"
+ac_unique_file="src/include/pnetcdf.h.in"
 # Factoring default headers for most tests.
 ac_includes_default="\
 #include <stdio.h>
@@ -623,66 +633,84 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='LTLIBOBJS
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
 LIBOBJS
+enable_shared
+enable_static
+BUILD_DRIVER_FOO_FALSE
+BUILD_DRIVER_FOO_TRUE
+ABIVERSIONFLAGS
+ABIVERSION
 CONFIG_DATE
 SEQ_CC
-TEST_OUTDIR
-TEST_MPIRUN
-TEST_SEQRUN
-PNETCDF_LIB
-PNETCDF_INC
-large_file_test
-BUILDDIR
-has_latex
+TESTOUTDIR
+ac_mpi_prog_TESTMPIRUN
+TESTMPIRUN
+TESTSEQRUN
+BUILD_BENCHMARKS_IN_PNETCDF_FALSE
+BUILD_BENCHMARKS_IN_PNETCDF_TRUE
+BUILD_TESTSETS_FALSE
+BUILD_TESTSETS_TRUE
+RUN_LARGE_FILE_TEST_FALSE
+RUN_LARGE_FILE_TEST_TRUE
+HAS_LATEX_FALSE
+HAS_LATEX_TRUE
 DVIPDF
 LATEX
+BUILD_DOCS_FALSE
+BUILD_DOCS_TRUE
+RELAX_COORD_BOUND_FALSE
+RELAX_COORD_BOUND_TRUE
 RELAX_COORD_BOUND
+ENABLE_ERANGE_FILL_FALSE
+ENABLE_ERANGE_FILL_TRUE
 ENABLE_ERANGE_FILL
-enable_erange_fill
+ENABLE_SUBFILING_FALSE
+ENABLE_SUBFILING_TRUE
 ENABLE_SUBFILING
-enable_subfiling
-enable_coverage
-LCOV_LIB
-MAKEWHATIS_CMD
-WHATIS
-prog
-has_fortran
-F90LDFLAGS
-FLDFLAGS
-F90LIBS
-UPPER_CASE_MOD
+BUILD_COVERAGE_FALSE
+BUILD_COVERAGE_TRUE
+GCOV
+HAVE_F77_INT8_FALSE
+HAVE_F77_INT8_TRUE
+HAVE_F77_INT2_FALSE
+HAVE_F77_INT2_TRUE
+HAVE_F77_INT1_FALSE
+HAVE_F77_INT1_TRUE
+HAVE_F77_GNU_INT_FALSE
+HAVE_F77_GNU_INT_TRUE
 HAVE_F77_INT8
 HAVE_F77_INT2
 HAVE_F77_INT1
 HAVE_F77_GNU_INT
-FC_MODOUT
-ac_empty
-FC_MODINC
-FC_MODEXT
 SIZEOF_MPI_OFFSET
+NF_INT8_T
+NF_INT2_T
+NF_INT1_T
+NMFLAGS
 INTENTV
-is_bigendian
 in_place_swap
-SIZEOF_MPI_AINT_IS_4
+ac_cv_c_bigendian
+IS_BIGENDIAN_FALSE
+IS_BIGENDIAN_TRUE
+DECL_MPI_OFFSET_FALSE
+DECL_MPI_OFFSET_TRUE
+SIZEOF_MPI_AINT_IS_4_FALSE
+SIZEOF_MPI_AINT_IS_4_TRUE
+PNETCDF_DEBUG_FALSE
+PNETCDF_DEBUG_TRUE
 PNETCDF_DEBUG
-CPP
-RANLIB
-NMFLAGS
-NM
-ARFLAGS
-AR
 M4FFLAGS
 M4FLAGS
 M4
-EGREP
-GREP
-SET_MAKE
-LN_S
-have_yacc_lex
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
+SED_I
+UPPER_CASE_MOD_FALSE
+UPPER_CASE_MOD_TRUE
+ac_empty
+FC_MODINC
+FC_MODEXT
 PNF_X_UINT8_MAX
 PNF_X_INT8_MAX
 PNF_X_INT8_MIN
@@ -691,32 +719,54 @@ PNF_FILL_UINT64
 PNF_FILL_INT64
 PNF_FILL_UINT
 PNF_INT8_MODIFIER
-NAG_FCFLAGS
-NAGf90FPPFLAGS
+FCLIBS
 FFIXEDFORMFLAG
-F90FLAGS_F90
-F90FLAGS_f90
-F77FLAGS_F
-F77FLAGS_f
-FCFLAGS_F90
 FCFLAGS_f90
-FCFLAGS_F
 FCFLAGS_f
 FC_DEFINE
-FPP
-F90PPFLAGS_F90
-F90PPFLAGS_f90
-F77PPFLAGS_F
-F77PPFLAGS_f
-F77_SUPPORT_FREEFORM
+FCFLAGS_F90
+FCFLAGS_F
+HAVE_F77_SUPPORT_FREEFORM_FALSE
+HAVE_F77_SUPPORT_FREEFORM_TRUE
 FFREEFORMFLAG
-F77FLAGS
-FLIBS
-ac_ct_F77
-mpi_mod
+HAVE_MPI_MOD_FALSE
+HAVE_MPI_MOD_TRUE
+HAS_FORTRAN_FALSE
+HAS_FORTRAN_TRUE
+has_fortran
 USE_MPIF_HEADER
-F90FLAGS
-FCLIBS
+ac_ct_FC
+FCFLAGS
+FC
+ac_ct_F77
+FFLAGS
+F77
+ac_mpi_prog_MPIF90
+ac_mpi_prog_MPIF77
+CXXCPP
+CPP
+LT_SYS_LIBRARY_PATH
+OTOOL64
+OTOOL
+LIPO
+NMEDIT
+DSYMUTIL
+MANIFEST_TOOL
+RANLIB
+ac_ct_AR
+AR
+DLLTOOL
+OBJDUMP
+LN_S
+NM
+ac_ct_DUMPBIN
+DUMPBIN
+LD
+FGREP
+EGREP
+GREP
+SED
+LIBTOOL
 host_os
 host_vendor
 host_cpu
@@ -725,25 +775,36 @@ build_os
 build_vendor
 build_cpu
 build
-ac_ct_FC
-CXXCPPFLAGS
+SEEK_SET_REDEFINED_FALSE
+SEEK_SET_REDEFINED_TRUE
+HAS_MPICXX_FALSE
+HAS_MPICXX_TRUE
 has_mpicxx
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
 ac_ct_CXX
-CC_MAKEDEPEND
+CXXFLAGS
+CXX
+ac_mpi_prog_MPICXX
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
 OBJEXT
 EXEEXT
 ac_ct_CC
-LDFLAGS
-FPPFLAGS
-FCFLAGS
-FFLAGS
-CXXFLAGS
 CPPFLAGS
+LDFLAGS
 CFLAGS
-FC
-F77
-CXX
 CC
+ac_mpi_prog_MPICC
 MPIF90
 MPIF77
 MPICXX
@@ -751,13 +812,41 @@ MPICC
 rm_cmd
 RM
 CONFIGURE_ARGS_CLEAN
-PNETCDF_RELEASE_DATE2
-PNETCDF_RELEASE_DATE
 PNETCDF_VERSION
 PNETCDF_VERSION_PRE
 PNETCDF_VERSION_SUB
 PNETCDF_VERSION_MINOR
 PNETCDF_VERSION_MAJOR
+MAINT
+MAINTAINER_MODE_FALSE
+MAINTAINER_MODE_TRUE
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
 target_alias
 host_alias
 build_alias
@@ -765,6 +854,7 @@ LIBS
 ECHO_T
 ECHO_N
 ECHO_C
+FC_DEFS
 DEFS
 mandir
 localedir
@@ -799,11 +889,21 @@ SHELL'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_silent_rules
+enable_maintainer_mode
 enable_echo
 with_mpi
+enable_dependency_tracking
 enable_largefile
-enable_mpi_io_test
 enable_cxx
+enable_shared
+enable_static
+with_pic
+enable_fast_install
+with_aix_soname
+with_gnu_ld
+with_sysroot
+enable_libtool_lock
 enable_strict
 enable_fortran
 enable_debug
@@ -812,8 +912,10 @@ enable_coverage
 enable_subfiling
 enable_erange_fill
 enable_relax_coord_bound
+enable_doxygen
 enable_file_sync
 enable_large_file_test
+enable_versioning
 '
       ac_precious_vars='build_alias
 host_alias
@@ -824,22 +926,24 @@ MPICXX
 MPIF77
 MPIF90
 CC
-CXX
-F77
-FC
 CFLAGS
-CPPFLAGS
-CXXFLAGS
-FFLAGS
-FCFLAGS
-FPPFLAGS
 LDFLAGS
 LIBS
+CPPFLAGS
+CXX
+CXXFLAGS
 CCC
+LT_SYS_LIBRARY_PATH
 CPP
-TEST_SEQRUN
-TEST_MPIRUN
-TEST_OUTDIR'
+CXXCPP
+F77
+FFLAGS
+FC
+FCFLAGS
+GCOV
+TESTSEQRUN
+TESTMPIRUN
+TESTOUTDIR'
 
 
 # Initialize some variables set by options.
@@ -1380,7 +1484,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures parallel-netcdf 1.8.1 to adapt to many kinds of systems.
+\`configure' configures parallel-netcdf 1.9.0.pre1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1437,6 +1541,11 @@ _ACEOF
 
   cat <<\_ACEOF
 
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
 System types:
   --build=BUILD     configure for building on BUILD [guessed]
   --host=HOST       cross-compile to build programs to run on HOST [BUILD]
@@ -1445,7 +1554,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of parallel-netcdf 1.8.1:";;
+     short | recursive ) echo "Configuration of parallel-netcdf 1.9.0.pre1:";;
    esac
   cat <<\_ACEOF
 
@@ -1453,14 +1562,24 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
+  --disable-maintainer-mode
+                          disable make rules and dependencies not useful (and
+                          sometimes confusing) to the casual installer
   --enable-echo           Turn on strong echoing. [default: disabled]
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
   --disable-largefile     omit support for large files
-  --disable-mpi-io-test   Disable check for MPI-IO support in MPI
-                          implementation, if you know your MPI implementation
-                          has MPI-IO support but the configure test fails to
-                          find it. [default: enabled]
   --disable-cxx           Turn off support for the C++ interface, if you only
                           need the C interface. [default: enabled]
+  --enable-shared[=PKGS]  build shared libraries [default=no]
+  --enable-static[=PKGS]  build static libraries [default=yes]
+  --enable-fast-install[=PKGS]
+                          optimize for fast installation [default=yes]
+  --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-strict         Turn on strict debugging with gcc. [default:
                           disabled]
   --disable-fortran       Turn off support for the Fortran interface, if you
@@ -1469,8 +1588,7 @@ Optional Features:
                           enables safe mode. [default: disabled]
   --disable-in-place-swap Disable memory in-place byte swap on Little Endian
                           machines. [default: enabled]
-  --enable-coverage       Compile with coverage support (gcc-based only).
-                          [default: disabled]
+  --enable-coverage       Turn on coverage analysis using gcc and gcov
   --enable-subfiling      Enable subfiling support. [default: disabled]
   --disable-erange-fill   Disable use of fill value when out-of-range type
                           conversion causes NC_ERANGE error. [default:
@@ -1479,46 +1597,60 @@ Optional Features:
                           Enable relaxed error NC_EINVALCOORDS to allow
                           coordinate start argument equal to dimension size
                           when argument count is zero. [default: disabled]
+  --enable-doxygen        Enable generation of documentation. [default:
+                          disabled]
   --disable-file-sync     Disable MPI file sync if you know your file system
                           can provide data consistency. [default: enabled]
   --enable-large-file-test
                           Enable testing for large (>4GB) file/variable I/O.
-                          Note "make testing" can run very slow. [default:
+                          Note "make check" can run very slow. [default:
                           disabled]
+  --disable-versioning    Disable library versioning. [default: enabled]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
   --with-mpi=/path/to/implementation
-                          installation prefix for MPI implementation
+                          The installation prefix path for MPI implementation.
+  --with-pic[=PKGS]       try to use only PIC/non-PIC objects [default=use
+                          both]
+  --with-aix-soname=aix|svr4|both
+                          shared library versioning (aka "SONAME") variant to
+                          provide on AIX, [default=aix].
+  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
+  --with-sysroot[=DIR]    Search for dependent libraries within DIR (or the
+                          compiler's sysroot if not specified).
 
 Some influential environment variables:
-  RM          Command for deleting files or directories. default: rm
-  MPICC       MPI C compiler
-  MPICXX      MPI C++ compiler
-  MPIF77      MPI Fortran 77 compiler
-  MPIF90      MPI Fortran 90 compiler
-  CC          Overwritten by MPICC if MPICC is set
-  CXX         Overwritten by MPICXX if MPICXX is set
-  F77         Overwritten by MPIF77 if MPIF77 is set
-  FC          Overwritten by MPIF90 if MPIF90 is set
-  CFLAGS      Debugging and optimization options for the C compiler
-  CPPFLAGS    Preprocessor options for C and C++ compilers, e.g. -I<include
-              dir> if you have headers in a nonstandard directory <include
-              dir>
-  CXXFLAGS    Debugging and optimization options for the C compiler
-  FFLAGS      Debugging and optimization options for the Fortran 77 compiler
-  FCFLAGS     Debugging and optimization options for the Fortran 90 compiler
-  FPPFLAGS    Preprocessor options for Fortran compilers, e.g. -I<include dir>
+  RM          Command for deleting files or directories. [default: rm]
+  MPICC       MPI C compiler, [default: CC]
+  MPICXX      MPI C++ compiler, [default: CXX]
+  MPIF77      MPI Fortran 77 compiler, [default: F77]
+  MPIF90      MPI Fortran 90 compiler, [default: FC]
+  CC          C compiler command
+  CFLAGS      C compiler flags
   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
               nonstandard directory <lib dir>
   LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LT_SYS_LIBRARY_PATH
+              User-defined run-time library search path.
   CPP         C preprocessor
-  TEST_SEQRUN Run command (on one process) for make target check on
+  CXXCPP      C++ preprocessor
+  F77         Fortran 77 compiler command
+  FFLAGS      Fortran 77 compiler flags
+  FC          Fortran compiler command
+  FCFLAGS     Fortran compiler flags
+  GCOV        name/path for the gcov utility
+  TESTSEQRUN  Run command (on one MPI process) for "make check" on
               cross-compile environment. Example: "aprun -n 1". [default:
               none]
-  TEST_MPIRUN MPI run command for make target ptest, [default: mpiexec -n NP]
-  TEST_OUTDIR Output file directory for make target ptest, [default: ./]
+  TESTMPIRUN  MPI run command for "make ptest", [default: mpiexec -n NP]
+  TESTOUTDIR  Output file directory for "make check" and "make ptest",
+              [default: ./]
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -1586,7 +1718,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-parallel-netcdf configure 1.8.1
+parallel-netcdf configure 1.9.0.pre1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1902,87 +2034,11 @@ $as_echo "$ac_res" >&6; }
 
 } # ac_fn_cxx_check_func
 
-# ac_fn_fc_try_compile LINENO
-# ---------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_fc_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_fc_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_fc_try_compile
-
-# ac_fn_f77_try_compile LINENO
-# ----------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_f77_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-	 test -z "$ac_f77_werror_flag" ||
-	 test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-	ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_f77_try_compile
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
@@ -1990,54 +2046,15 @@ $as_echo_n "checking for $2... " >&6; }
 if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-if (sizeof ($2))
-	 return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-if (sizeof (($2)))
-	    return 0;
-  ;
-  return 0;
-}
+#include <$2>
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-
-else
   eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  eval "$3=no"
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
@@ -2046,7 +2063,7 @@ eval ac_res=\$$3
 $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-} # ac_fn_c_check_type
+} # ac_fn_c_check_header_compile
 
 # ac_fn_c_try_cpp LINENO
 # ----------------------
@@ -2127,36 +2144,280 @@ fi
 
 } # ac_fn_c_try_run
 
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+	 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+	 test ! -s conftest.err
+       }; then :
+  ac_retval=0
 else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
 fi
-eval ac_res=\$$3
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
+
+# ac_fn_f77_try_compile LINENO
+# ----------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_f77_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_f77_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_f77_try_compile
+
+# ac_fn_f77_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_f77_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_f77_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_f77_try_link
+
+# ac_fn_fc_try_compile LINENO
+# ---------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_fc_try_compile ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext
+  if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_fc_try_compile
+
+# ac_fn_fc_try_link LINENO
+# ------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_fc_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+	 test -z "$ac_fc_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+	 test "$cross_compiling" = yes ||
+	 test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_fc_try_link
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+if (sizeof ($2))
+	 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+if (sizeof (($2)))
+	    return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  eval "$3=yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-} # ac_fn_c_check_header_compile
+} # ac_fn_c_check_type
 
 # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
 # -------------------------------------------------------
@@ -2479,33 +2740,87 @@ rm -f conftest.val
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_compute_int
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by parallel-netcdf $as_me 1.8.1, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
 
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
 {
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by parallel-netcdf $as_me 1.9.0.pre1, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
 /usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
 /usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
@@ -2832,7 +3147,8 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-ac_config_headers="$ac_config_headers src/lib/ncconfig.h"
+ac_config_headers="$ac_config_headers src/include/config.h"
+
 
 
 
@@ -2868,102 +3184,222 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 
 CONFIGURE_ARGS_CLEAN=`echo $* | tr '"' ' '`
 
-PNETCDF_VERSION_MAJOR=`echo ${PACKAGE_VERSION} | cut -d. -f1`
-PNETCDF_VERSION_MINOR=`echo ${PACKAGE_VERSION} | cut -d. -f2`
-PNETCDF_VERSION_SUB=`echo ${PACKAGE_VERSION} | cut -d. -f3`
-PNETCDF_VERSION_PRE=`echo ${PACKAGE_VERSION} | cut -d. -f4`
-
-PNETCDF_VERSION=${PACKAGE_VERSION}
-
-SVN_DATE="$LastChangedDate: 2017-01-28 01:47:58 -0600 (Sat, 28 Jan 2017) $"
-PNETCDF_RELEASE_DATE2=`echo $SVN_DATE | cut -d' ' -f2`
-PNETCDF_RELEASE_DATE=`echo $SVN_DATE | cut -d' ' -f6,7,8 | cut -d')' -f1`
-
-_DEBUG=no
-
-
-if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION_MAJOR=$PNETCDF_VERSION_MAJOR" >&5
-$as_echo "$as_me: DEBUG: PNETCDF_VERSION_MAJOR=$PNETCDF_VERSION_MAJOR" >&6;}
-          fi
-
-
-if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION_MINOR=$PNETCDF_VERSION_MINOR" >&5
-$as_echo "$as_me: DEBUG: PNETCDF_VERSION_MINOR=$PNETCDF_VERSION_MINOR" >&6;}
-          fi
-
-
-if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION_SUB=$PNETCDF_VERSION_SUB" >&5
-$as_echo "$as_me: DEBUG: PNETCDF_VERSION_SUB=$PNETCDF_VERSION_SUB" >&6;}
-          fi
-
-
-if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION_PRE=$PNETCDF_VERSION_PRE" >&5
-$as_echo "$as_me: DEBUG: PNETCDF_VERSION_PRE=$PNETCDF_VERSION_PRE" >&6;}
-          fi
-
-
-if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION=$PNETCDF_VERSION" >&5
-$as_echo "$as_me: DEBUG: PNETCDF_VERSION=$PNETCDF_VERSION" >&6;}
-          fi
-
-
-if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_RELEASE_DATE=$PNETCDF_RELEASE_DATE" >&5
-$as_echo "$as_me: DEBUG: PNETCDF_RELEASE_DATE=$PNETCDF_RELEASE_DATE" >&6;}
-          fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+am__api_version='1.15'
 
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    rm -rf conftest.one conftest.two conftest.dir
+	    echo one > conftest.one
+	    echo two > conftest.two
+	    mkdir conftest.dir
+	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+	      test -s conftest.one && test -s conftest.two &&
+	      test -s conftest.dir/conftest.one &&
+	      test -s conftest.dir/conftest.two
+	    then
+	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	      break 3
+	    fi
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
 
+  done
+IFS=$as_save_IFS
 
+rm -rf conftest.one conftest.two conftest.dir
 
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
 
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \	]*)
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
 
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+	# -L didn't work.
+	set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+	&& test "$*" != "X conftest.file $srcdir/configure"; then
+
+	# If neither matched, then we have a broken ls.  This can happen
+	# if, for instance, CONFIG_SHELL is bash and it inherits a
+	# broken ls alias from the environment.  This has actually
+	# happened.  Such a system could not be considered "sane".
+	as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
 
+if test x"${install_sh+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\	*)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
 
-if test "x${RM}" != x ; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking rm " >&5
-$as_echo_n "checking rm ... " >&6; }
-   if ! test -f ${RM} ; then
-      # Extract the first word of "${RM}", so it can be a program name with args.
-set dummy ${RM}; ac_word=$2
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_rm_cmd+:} false; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$rm_cmd"; then
-  ac_cv_prog_rm_cmd="$rm_cmd" # Let the user override the test.
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -2972,7 +3408,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_rm_cmd="yes"
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -2980,145 +3416,39 @@ done
   done
 IFS=$as_save_IFS
 
-  test -z "$ac_cv_prog_rm_cmd" && ac_cv_prog_rm_cmd="no"
 fi
 fi
-rm_cmd=$ac_cv_prog_rm_cmd
-if test -n "$rm_cmd"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rm_cmd" >&5
-$as_echo "$rm_cmd" >&6; }
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-      if test "x${rm_cmd}" = xyes ; then
-         RM=${RM}
-      fi
-   else
-      RM=${RM}
-   fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $RM" >&5
-$as_echo "using $RM" >&6; }
-else
-   RM="rm"
-fi
-
-
-# Check whether --enable-echo was given.
-if test "${enable_echo+set}" = set; then :
-  enableval=$enable_echo; set -x
-
-fi
-
-
-MPI_INSTALL=
-
-# Check whether --with-mpi was given.
-if test "${with_mpi+set}" = set; then :
-  withval=$with_mpi; if test x"$withval" = xyes; then
-      as_fn_error $? "--with-mpi must be given a pathname" "$LINENO" 5
-   else
-      MPI_INSTALL=${withval}
-   fi
-
-fi
-
-if test "x${MPI_INSTALL}" != x && (! test -d "${MPI_INSTALL}") ; then
-   as_fn_error $? "Directory '${MPI_INSTALL}' specified in --with-mpi does not exist" "$LINENO" 5
 fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-if test "x$MPICC"  = x && test "x$CC"  != x ; then MPICC=$CC   ; fi
-if test "x$MPICXX" = x && test "x$CXX" != x ; then MPICXX=$CXX ; fi
-if test "x$MPIF77" = x && test "x$F77" != x ; then MPIF77=$F77 ; fi
-if test "x$MPIF77" = x && test "x$FC"  != x ; then MPIF77=$FC  ; fi
-if test "x$MPIF90" = x && test "x$F90" != x ; then MPIF90=$F90 ; fi
-if test "x$MPIF90" = x && test "x$FC"  != x ; then MPIF90=$FC  ; fi
-
-CANDIDATE_MPICC="${MPICC} mpicc"
-CANDIDATE_MPICXX="${MPICXX} mpicxx mpic++ mpiCC"
-CANDIDATE_MPIF77="${MPIF77} mpif77"
-CANDIDATE_MPIF90="${MPIF90} mpif90"
-
-CANDIDATE_MPICC="${CANDIDATE_MPICC} mpcc_r mpcc mpixlc_r mpixlc"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} mpCC_r mpCC mpixlcxx_r mpixlcxx mpixlC_r mpixlC"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} mpixlf77_r mpixlf77"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} mpixlf90_r mpixlf90"
-
-CANDIDATE_MPICC="${CANDIDATE_MPICC} blrts_xlc mpxlc_r mpxlc"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} blrts_xlC mpxlC_r mpxlC"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} blrts_xlf mpxlf_r mpxlf"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} blrts_xlf90 mpxlf90_r mpxlf90 mpxlf95_r mpxlf95"
-
-CANDIDATE_MPICC="${CANDIDATE_MPICC} mpifccpx"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} mpiFCCpx"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} mpifrtpx"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} mpifrtpx"
-
-CANDIDATE_MPICC="${CANDIDATE_MPICC} cc"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} CC"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} ftn"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} ftn"
-
-CANDIDATE_MPICC="${CANDIDATE_MPICC} mpiicc icc"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} mpiicpc icpc"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} mpiifort mpiifc ifort"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} mpiifort mpiifc ifort"
-
-
-   if test "x$MPI_INSTALL" != x ; then
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
-$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
-          fi
-
-
-      if test "x$MPICC" = x ; then
-                  if test -d "${MPI_INSTALL}/bin" ; then
-            if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search possible MPICC under $MPI_INSTALL/bin" >&5
-$as_echo "$as_me: DEBUG: search possible MPICC under $MPI_INSTALL/bin" >&6;}
-          fi
-
-
-            for ac_prog in $CANDIDATE_MPICC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPICC+:} false; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPICC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPICC="$MPICC" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $MPI_INSTALL/bin
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPICC="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3126,159 +3456,97 @@ done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-MPICC=$ac_cv_path_MPICC
-if test -n "$MPICC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5
-$as_echo "$MPICC" >&6; }
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
 
-  test -n "$MPICC" && break
-done
-
-         fi
-                           if test "x$MPICC" = x ; then
-             if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search possible MPICC under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: search possible MPICC under $MPI_INSTALL" >&6;}
-          fi
-
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
 
-             for ac_prog in $CANDIDATE_MPICC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPICC+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPICC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPICC="$MPICC" # Let the user override the test with a path.
-  ;;
-  *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $MPI_INSTALL
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPICC="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
+    for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-MPICC=$ac_cv_path_MPICC
-if test -n "$MPICC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5
-$as_echo "$MPICC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$MPICC" && break
-done
-
-         fi
-      else
-                  if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if file $MPICC exists" >&5
-$as_echo "$as_me: DEBUG: check if file $MPICC exists" >&6;}
-          fi
-
-
-         if ! test -f "$MPICC" ; then
-                                    if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPICC= $MPICC cannot be found ... check under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPICC= $MPICC cannot be found ... check under $MPI_INSTALL" >&6;}
-          fi
-
-
-            if test -f "$MPI_INSTALL/$MPICC" ; then
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPICC= $MPICC is found under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPICC= $MPICC is found under $MPI_INSTALL" >&6;}
-          fi
-
-
-               MPICC="$MPI_INSTALL/$MPICC"
-            elif test -f "$MPI_INSTALL/bin/$MPICC" ; then
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPICC= $MPICC is found under $MPI_INSTALL/bin" >&5
-$as_echo "$as_me: DEBUG: File MPICC= $MPICC is found under $MPI_INSTALL/bin" >&6;}
-          fi
-
-
-               MPICC="$MPI_INSTALL/bin/$MPICC"
-            else
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPICC= $MPICC cannot be found under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPICC= $MPICC cannot be found under $MPI_INSTALL" >&6;}
-          fi
-
-
-               MPICC=
-            fi
-         fi
-      fi
-   else
-       if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
-$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
-          fi
-
-
-       if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if MPICC is defined. If yes, check if file exists" >&5
-$as_echo "$as_me: DEBUG: check if MPICC is defined. If yes, check if file exists" >&6;}
-          fi
-
-
-       if test "x$MPICC" != x && (! test -f "$MPICC") ; then
-          if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if file $MPICC exists under user's PATH" >&5
-$as_echo "$as_me: DEBUG: check if file $MPICC exists under user's PATH" >&6;}
-          fi
 
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
 
-          for ac_prog in $MPICC
+for ac_prog in gawk mawk nawk awk
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPICC+:} false; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPICC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPICC="$MPICC" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPICC="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3286,105 +3554,371 @@ done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-MPICC=$ac_cv_path_MPICC
-if test -n "$MPICC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5
-$as_echo "$MPICC" >&6; }
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPICC" && break
+  test -n "$AWK" && break
 done
 
-       fi
-   fi
-         if test "x$MPICC" = x ; then
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: find possible MPICC under user's PATH" >&5
-$as_echo "$as_me: DEBUG: find possible MPICC under user's PATH" >&6;}
-          fi
-
-
-      for ac_prog in $CANDIDATE_MPICC
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPICC+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPICC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPICC="$MPICC" # Let the user override the test with a path.
-  ;;
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
   *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPICC="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-  ;;
+    eval ac_cv_prog_make_${ac_make}_set=no;;
 esac
+rm -f conftest.make
 fi
-MPICC=$ac_cv_path_MPICC
-if test -n "$MPICC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICC" >&5
-$as_echo "$MPICC" >&6; }
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
 fi
 
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
 
-  test -n "$MPICC" && break
-done
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
 
-   fi
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
 
-if test "x${MPICC}" = x ; then
-   as_fn_error $? "
-   -----------------------------------------------------------------------
-    No MPI C compiler can be found. Parallel netCDF requires an MPI C
-    compiler. Please specify the location of one either with the MPICC
-    environment variable or the --with-mpi configure flag
-   -----------------------------------------------------------------------" "$LINENO" 5
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
 fi
 
-CC=${MPICC}
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
 
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+# Define the identity of the package.
+ PACKAGE='parallel-netcdf'
+ VERSION='1.9.0.pre1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake at gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <http://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+	@$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
+$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
+    # Check whether --enable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then :
+  enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval
+else
+  USE_MAINTAINER_MODE=yes
+fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5
+$as_echo "$USE_MAINTAINER_MODE" >&6; }
+   if test $USE_MAINTAINER_MODE = yes; then
+  MAINTAINER_MODE_TRUE=
+  MAINTAINER_MODE_FALSE='#'
+else
+  MAINTAINER_MODE_TRUE='#'
+  MAINTAINER_MODE_FALSE=
+fi
+
+  MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+
+
+
+PNETCDF_VERSION_MAJOR=`echo ${PACKAGE_VERSION} | cut -d. -f1`
+PNETCDF_VERSION_MINOR=`echo ${PACKAGE_VERSION} | cut -d. -f2`
+PNETCDF_VERSION_SUB=`echo ${PACKAGE_VERSION} | cut -d. -f3`
+PNETCDF_VERSION_PRE=`echo ${PACKAGE_VERSION} | cut -d. -f4`
+
+PNETCDF_VERSION=${PACKAGE_VERSION}
+
+
+_DEBUG=no
+
+
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION_MAJOR=$PNETCDF_VERSION_MAJOR" >&5
+$as_echo "$as_me: DEBUG: PNETCDF_VERSION_MAJOR=$PNETCDF_VERSION_MAJOR" >&6;}
+          fi
+
+
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION_MINOR=$PNETCDF_VERSION_MINOR" >&5
+$as_echo "$as_me: DEBUG: PNETCDF_VERSION_MINOR=$PNETCDF_VERSION_MINOR" >&6;}
+          fi
+
+
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION_SUB=$PNETCDF_VERSION_SUB" >&5
+$as_echo "$as_me: DEBUG: PNETCDF_VERSION_SUB=$PNETCDF_VERSION_SUB" >&6;}
+          fi
+
+
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION_PRE=$PNETCDF_VERSION_PRE" >&5
+$as_echo "$as_me: DEBUG: PNETCDF_VERSION_PRE=$PNETCDF_VERSION_PRE" >&6;}
+          fi
+
+
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: PNETCDF_VERSION=$PNETCDF_VERSION" >&5
+$as_echo "$as_me: DEBUG: PNETCDF_VERSION=$PNETCDF_VERSION" >&6;}
+          fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+if test "x${RM}" != x ; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking rm " >&5
+$as_echo_n "checking rm ... " >&6; }
+   if ! test -f ${RM} ; then
+      # Extract the first word of "${RM}", so it can be a program name with args.
+set dummy ${RM}; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_prog_rm_cmd+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
+  if test -n "$rm_cmd"; then
+  ac_cv_prog_rm_cmd="$rm_cmd" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -3393,7 +3927,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    ac_cv_prog_rm_cmd="yes"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3401,39 +3935,139 @@ done
   done
 IFS=$as_save_IFS
 
+  test -z "$ac_cv_prog_rm_cmd" && ac_cv_prog_rm_cmd="no"
 fi
 fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+rm_cmd=$ac_cv_prog_rm_cmd
+if test -n "$rm_cmd"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rm_cmd" >&5
+$as_echo "$rm_cmd" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
+      if test "x${rm_cmd}" = xyes ; then
+         RM=${RM}
+      fi
+   else
+      RM=${RM}
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $RM" >&5
+$as_echo "using $RM" >&6; }
+else
+   RM="rm"
 fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
+
+# Check whether --enable-echo was given.
+if test "${enable_echo+set}" = set; then :
+  enableval=$enable_echo; set -x
+
+fi
+
+
+MPI_INSTALL=
+
+# Check whether --with-mpi was given.
+if test "${with_mpi+set}" = set; then :
+  withval=$with_mpi; if test x"$withval" = xyes; then
+      as_fn_error $? "--with-mpi must be given a pathname" "$LINENO" 5
+   else
+      MPI_INSTALL=${withval}
+   fi
+
+fi
+
+if test "x${MPI_INSTALL}" != x && (! test -d "${MPI_INSTALL}") ; then
+   as_fn_error $? "Directory '${MPI_INSTALL}' specified in --with-mpi does not exist" "$LINENO" 5
+fi
+
+
+
+
+
+
+ac_user_MPICC=$MPICC
+ac_user_MPICXX=$MPICXX
+ac_user_MPIF77=$MPIF77
+ac_user_MPIF90=$MPIF90
+if test "x$MPICC"  = x && test "x$CC"  != x ; then ac_user_MPICC=$CC   ; fi
+if test "x$MPICXX" = x && test "x$CXX" != x ; then ac_user_MPICXX=$CXX ; fi
+if test "x$MPIF77" = x && test "x$F77" != x ; then ac_user_MPIF77=$F77 ; fi
+if test "x$MPIF77" = x && test "x$FC"  != x ; then ac_user_MPIF77=$FC  ; fi
+if test "x$MPIF90" = x && test "x$F90" != x ; then ac_user_MPIF90=$F90 ; fi
+if test "x$MPIF90" = x && test "x$FC"  != x ; then ac_user_MPIF90=$FC  ; fi
+
+CANDIDATE_MPICC="${MPICC} mpicc"
+CANDIDATE_MPICXX="${MPICXX} mpicxx mpic++ mpiCC"
+CANDIDATE_MPIF77="${MPIF77} mpif77"
+CANDIDATE_MPIF90="${MPIF90} mpif90"
+
+CANDIDATE_MPICC+=" mpcc_r mpcc mpixlc_r mpixlc"
+CANDIDATE_MPICXX+=" mpCC_r mpCC mpixlcxx_r mpixlcxx mpixlC_r mpixlC"
+CANDIDATE_MPIF77+=" mpixlf77_r mpixlf77"
+CANDIDATE_MPIF90+=" mpixlf90_r mpixlf90"
+
+CANDIDATE_MPICC+=" blrts_xlc mpxlc_r mpxlc"
+CANDIDATE_MPICXX+=" blrts_xlC mpxlC_r mpxlC"
+CANDIDATE_MPIF77+=" blrts_xlf mpxlf_r mpxlf"
+CANDIDATE_MPIF90+=" blrts_xlf90 mpxlf90_r mpxlf90 mpxlf95_r mpxlf95"
+
+CANDIDATE_MPICC+=" mpifccpx"
+CANDIDATE_MPICXX+=" mpiFCCpx"
+CANDIDATE_MPIF77+=" mpifrtpx"
+CANDIDATE_MPIF90+=" mpifrtpx"
+
+CANDIDATE_MPICC+=" cc"
+CANDIDATE_MPICXX+=" CC"
+CANDIDATE_MPIF77+=" ftn"
+CANDIDATE_MPIF90+=" ftn"
+
+CANDIDATE_MPICC+=" mpiicc icc"
+CANDIDATE_MPICXX+=" mpiicpc icpc"
+CANDIDATE_MPIF77+=" mpiifort mpiifc ifort"
+CANDIDATE_MPIF90+=" mpiifort mpiifc ifort"
+
+if test "x${ac_user_MPICC}" = x ; then
+
+   ac_mpi_prog_MPICC=
+   if test "x$MPI_INSTALL" != x ; then
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
+          fi
+
+
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPICC under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPICC under $MPI_INSTALL/bin" >&6;}
+          fi
+
+
+         for ac_prog in $CANDIDATE_MPICC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+  case $ac_mpi_prog_MPICC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
+    ac_cv_path_ac_mpi_prog_MPICC="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3441,52 +4075,51 @@ done
   done
 IFS=$as_save_IFS
 
+  ;;
+esac
 fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ac_mpi_prog_MPICC=$ac_cv_path_ac_mpi_prog_MPICC
+if test -n "$ac_mpi_prog_MPICC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICC" >&5
+$as_echo "$ac_mpi_prog_MPICC" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
 
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
+  test -n "$ac_mpi_prog_MPICC" && break
+done
+
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPICC under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPICC under $MPI_INSTALL" >&6;}
+          fi
+
+
+         for ac_prog in $CANDIDATE_MPICC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+  case $ac_mpi_prog_MPICC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    ac_cv_path_ac_mpi_prog_MPICC="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3494,44 +4127,58 @@ done
   done
 IFS=$as_save_IFS
 
+  ;;
+esac
 fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ac_mpi_prog_MPICC=$ac_cv_path_ac_mpi_prog_MPICC
+if test -n "$ac_mpi_prog_MPICC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICC" >&5
+$as_echo "$ac_mpi_prog_MPICC" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
+  test -n "$ac_mpi_prog_MPICC" && break
+done
+
+      fi
+   else
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPICC under $PATH" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPICC under $PATH" >&6;}
+          fi
+
+
+      for ac_prog in $CANDIDATE_MPICC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  case $ac_mpi_prog_MPICC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
+    ac_cv_path_ac_mpi_prog_MPICC="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3539,44 +4186,41 @@ done
   done
 IFS=$as_save_IFS
 
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
+  ;;
+esac
 fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ac_mpi_prog_MPICC=$ac_cv_path_ac_mpi_prog_MPICC
+if test -n "$ac_mpi_prog_MPICC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICC" >&5
+$as_echo "$ac_mpi_prog_MPICC" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+  test -n "$ac_mpi_prog_MPICC" && break
+done
+
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_MPICC=${ac_mpi_prog_MPICC}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_MPICC=${ac_mpi_prog_MPICC}" >&6;}
+          fi
+
+
+   if test "x${ac_mpi_prog_MPICC}" = x ; then
+                  for ac_prog in $CANDIDATE_MPICC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_prog_ac_mpi_prog_MPICC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
+  if test -n "$ac_mpi_prog_MPICC"; then
+  ac_cv_prog_ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -3585,7 +4229,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    ac_cv_prog_ac_mpi_prog_MPICC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3595,41 +4239,91 @@ IFS=$as_save_IFS
 
 fi
 fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+ac_mpi_prog_MPICC=$ac_cv_prog_ac_mpi_prog_MPICC
+if test -n "$ac_mpi_prog_MPICC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICC" >&5
+$as_echo "$ac_mpi_prog_MPICC" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
+  test -n "$ac_mpi_prog_MPICC" && break
+done
+
+                                                   fi
+   MPICC=${ac_mpi_prog_MPICC}
+
+else
+
+      ac_first_token=`echo $ac_user_MPICC | cut -d" " -f1`
+   ac_rest_tokens=`echo $ac_user_MPICC | cut -d" " -s -f2-`
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_first_token=$ac_first_token" >&5
+$as_echo "$as_me: DEBUG: ac_first_token=$ac_first_token" >&6;}
+          fi
+
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_rest_tokens=$ac_rest_tokens" >&5
+$as_echo "$as_me: DEBUG: ac_rest_tokens=$ac_rest_tokens" >&6;}
+          fi
+
+
+
+   ac_mpi_prog_MPICC=
+   if test "x$MPI_INSTALL" != x ; then
+            if test "$ac_first_token" != "${ac_first_token%$MPI_INSTALL*}" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: \"MPI_INSTALL is a substring of ac_first_token\"" >&5
+$as_echo "$as_me: DEBUG: \"MPI_INSTALL is a substring of ac_first_token\"" >&6;}
+          fi
+
+
+         ac_prog=`echo $ac_first_token | rev | cut -d"/" -f1 |rev`
+      else
+         ac_prog=$ac_first_token
+      fi
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_prog=$ac_prog" >&5
+$as_echo "$as_me: DEBUG: ac_prog=$ac_prog" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
+          fi
+
+
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_prog under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search $ac_prog under $MPI_INSTALL/bin" >&6;}
+          fi
+
+
+         # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+  case $ac_mpi_prog_MPICC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
+    ac_cv_path_ac_mpi_prog_MPICC="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3637,1415 +4331,1316 @@ done
   done
 IFS=$as_save_IFS
 
+  ;;
+esac
 fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ac_mpi_prog_MPICC=$ac_cv_path_ac_mpi_prog_MPICC
+if test -n "$ac_mpi_prog_MPICC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICC" >&5
+$as_echo "$ac_mpi_prog_MPICC" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$ac_ct_CC" && break
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_prog under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search $ac_prog under $MPI_INSTALL" >&6;}
+          fi
+
+
+         # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPICC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPICC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPICC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
+  done
+IFS=$as_save_IFS
 
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
+  ;;
 esac
-    CC=$ac_ct_CC
-  fi
 fi
-
+ac_mpi_prog_MPICC=$ac_cv_path_ac_mpi_prog_MPICC
+if test -n "$ac_mpi_prog_MPICC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICC" >&5
+$as_echo "$ac_mpi_prog_MPICC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
+      fi
+   else
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
+          fi
 
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_first_token under $PATH" >&5
+$as_echo "$as_me: DEBUG: search $ac_first_token under $PATH" >&6;}
+          fi
 
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
 
-ac_rmfiles=
-for ac_file in $ac_files
+      # Extract the first word of "$ac_first_token", so it can be a program name with args.
+set dummy $ac_first_token; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPICC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPICC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPICC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
-rm -f $ac_rmfiles
+  done
+IFS=$as_save_IFS
 
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
+  ;;
 esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
+fi
+ac_mpi_prog_MPICC=$ac_cv_path_ac_mpi_prog_MPICC
+if test -n "$ac_mpi_prog_MPICC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICC" >&5
+$as_echo "$ac_mpi_prog_MPICC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_MPICC=${ac_mpi_prog_MPICC}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_MPICC=${ac_mpi_prog_MPICC}" >&6;}
+          fi
+
+
+   if test "x${ac_mpi_prog_MPICC}" = x ; then
+                  # Extract the first word of "$ac_first_token", so it can be a program name with args.
+set dummy $ac_first_token; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_mpi_prog_MPICC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_mpi_prog_MPICC"; then
+  ac_cv_prog_ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-	;;
-    [ab].out )
-	# We found the default executable, but exeext='' is most
-	# certainly right.
-	break;;
-    *.* )
-	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-	then :; else
-	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	fi
-	# We set ac_cv_exeext here because the later test for it is not
-	# safe: cross compilers may not add the suffix if given an `-o'
-	# argument, so we may need to know it at that point already.
-	# Even if this section looks crufty: it has the advantage of
-	# actually working.
-	break;;
-    * )
-	break;;
-  esac
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_mpi_prog_MPICC=""
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
+  done
+IFS=$as_save_IFS
 
-else
-  ac_file=''
 fi
-if test -z "$ac_file"; then :
+fi
+ac_mpi_prog_MPICC=$ac_cv_prog_ac_mpi_prog_MPICC
+if test -n "$ac_mpi_prog_MPICC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICC" >&5
+$as_echo "$ac_mpi_prog_MPICC" >&6; }
+else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+fi
+
+
+                                                   else
+      if test "x$ac_rest_tokens" != x ; then
+         ac_mpi_prog_MPICC="$ac_mpi_prog_MPICC $ac_rest_tokens"
+      fi
+   fi
+   MPICC=${ac_mpi_prog_MPICC}
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
 
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-	  break;;
-    * ) break;;
-  esac
+if test "x${MPICC}" = x ; then
+   if test "x$ac_user_MPICC" = x ; then
+      ERR_MSG="No MPI C compiler can be found"
+   else
+      ERR_MSG="Specified MPI C compiler \"$ac_user_MPICC\" cannot be found"
+   fi
+   if test "x$MPI_INSTALL" != x ; then
+      ERR_MSG+=" under $MPI_INSTALL"
+   fi
+   as_fn_error $? "
+   -----------------------------------------------------------------------
+     $ERR_MSG
+     Parallel netCDF requires a working MPI C compiler. Please specify the
+     location of an MPI C compiler, either in the MPICC environment variable
+     or through --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+fi
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: MPICC=$MPICC" >&5
+$as_echo "$as_me: DEBUG: MPICC=$MPICC" >&6;}
+          fi
+
+
+
+CC=${MPICC}
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
 
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
 
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-	cross_compiling=yes
-    else
-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
 fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
 else
-  ac_compiler_gnu=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
 else
-  GCC=
+  CC="$ac_cv_prog_CC"
 fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-	 CFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
 else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
+  done
+IFS=$as_save_IFS
 
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
 fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
 fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-# Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then :
-  enableval=$enable_largefile;
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-if test "$enable_largefile" != no; then
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_CC+:} false; then :
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_cv_sys_largefile_CC=no
-     if test "$GCC" != yes; then
-       ac_save_CC=$CC
-       while :; do
-	 # IRIX 6.2 and later do not support large files by default,
-	 # so use the C compiler's -n32 option if that helps.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-  ;
-  return 0;
-}
-_ACEOF
-	 if ac_fn_c_try_compile "$LINENO"; then :
-  break
 fi
-rm -f core conftest.err conftest.$ac_objext
-	 CC="$CC -n32"
-	 if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_largefile_CC=' -n32'; break
 fi
-rm -f core conftest.err conftest.$ac_objext
-	 break
-       done
-       CC=$ac_save_CC
-       rm -f conftest.$ac_ext
-    fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
-  if test "$ac_cv_sys_largefile_CC" != no; then
-    CC=$CC$ac_cv_sys_largefile_CC
-  fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if ${ac_cv_sys_file_offset_bits+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  while :; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_file_offset_bits=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_file_offset_bits=64; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  ac_cv_sys_file_offset_bits=unknown
-  break
+  test -n "$ac_ct_CC" && break
 done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
-case $ac_cv_sys_file_offset_bits in #(
-  no | unknown) ;;
-  *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
-;;
-esac
-rm -rf conftest*
-  if test $ac_cv_sys_file_offset_bits = unknown; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if ${ac_cv_sys_large_files+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  while :; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_large_files=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define _LARGE_FILES 1
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
-    We can't simply define LARGE_OFF_T to be 9223372036854775807,
-    since some C++ compilers masquerading as C compilers
-    incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
-  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
-		       && LARGE_OFF_T % 2147483647 == 1)
-		      ? 1 : -1];
-int
-main ()
-{
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_sys_large_files=1; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  ac_cv_sys_large_files=unknown
-  break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
-case $ac_cv_sys_large_files in #(
-  no | unknown) ;;
-  *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
-;;
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
 esac
-rm -rf conftest*
+    CC=$ac_ct_CC
   fi
-
-
 fi
 
+fi
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to make dependencies" >&5
-$as_echo_n "checking how to make dependencies... " >&6; }
-    case `uname -s` in
-	IRIX*|OSF1)
-	    CC_MAKEDEPEND='cc -M'
-	    ;;
-	SunOS)
-	    case `uname -r` in
-		4*)
-		    CC_MAKEDEPEND='cc -M'
-		    ;;
-		5*|*)
-		    CC_MAKEDEPEND='cc -xM'
-		    ;;
-	    esac
-	    ;;
-	ULTRIX)
-	    case `uname -m` in
-		RISC)
-		    CC_MAKEDEPEND='cc -M'
-		    ;;
-		VAX)	# Can't handle prototypes in netcdf.h
-		    ;;
-	    esac
-	    ;;
-	AIX)	# Writes to .u files rather than standard out
-	    ;;
-	HP-UX)	# Writes escaped newlines to standard error
-	    ;;
-    esac
-    case "${CC_MAKEDEPEND}" in
-	'')
-	    CC_MAKEDEPEND=false
-	    ;;
-    esac
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_MAKEDEPEND" >&5
-$as_echo "$CC_MAKEDEPEND" >&6; }
-
-
-
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
 
-# check if MPICC works for basic MPI call: MPI_Comm_rank()
-ac_fn_c_check_func "$LINENO" "MPI_Comm_rank" "ac_cv_func_MPI_Comm_rank"
-if test "x$ac_cv_func_MPI_Comm_rank" = xyes; then :
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
 
-else
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_Comm_rank" >&5
-$as_echo_n "checking for library containing MPI_Comm_rank... " >&6; }
-if ${ac_cv_search_MPI_Comm_rank+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char MPI_Comm_rank ();
 int
 main ()
 {
-return MPI_Comm_rank ();
+
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' mpi mpich; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_MPI_Comm_rank=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_MPI_Comm_rank+:} false; then :
-  break
-fi
-done
-if ${ac_cv_search_MPI_Comm_rank+:} false; then :
-
-else
-  ac_cv_search_MPI_Comm_rank=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_Comm_rank" >&5
-$as_echo "$ac_cv_search_MPI_Comm_rank" >&6; }
-ac_res=$ac_cv_search_MPI_Comm_rank
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
-else
-  as_fn_error $? "
-    ------------------------------------------------------------
-     Invalid MPI compiler specified or detected: \"${MPICC}\"
-     A working MPI compiler is required. Please specify the location
-     of one either with the MPICC environment variable or the
-     --with-mpi configure flag
-    ------------------------------------------------------------" "$LINENO" 5
-
-fi
-
-fi
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
 
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
 
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
 
-# Check whether --enable-mpi-io-test was given.
-if test "${enable_mpi_io_test+set}" = set; then :
-  enableval=$enable_mpi_io_test; enable_mpi_io_test=${enableval}
 else
-  enable_mpi_io_test=yes
-
+  ac_file=''
 fi
+if test -z "$ac_file"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
-
-if test "x${enable_mpi_io_test}" = xyes ; then
-   ac_fn_c_check_func "$LINENO" "MPI_File_open" "ac_cv_func_MPI_File_open"
-if test "x$ac_cv_func_MPI_File_open" = xyes; then :
-
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
 else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_File_open" >&5
-$as_echo_n "checking for library containing MPI_File_open... " >&6; }
-if ${ac_cv_search_MPI_File_open+:} false; then :
-  $as_echo_n "(cached) " >&6
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
 else
-  ac_func_search_save_LIBS=$LIBS
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char MPI_File_open ();
+#include <stdio.h>
 int
 main ()
 {
-return MPI_File_open ();
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' mpio; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+  { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+  if { ac_try='./conftest$ac_cv_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+    cross_compiling=no
   else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+    fi
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_MPI_File_open=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_MPI_File_open+:} false; then :
-  break
 fi
-done
-if ${ac_cv_search_MPI_File_open+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
 
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_search_MPI_File_open=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_File_open" >&5
-$as_echo "$ac_cv_search_MPI_File_open" >&6; }
-ac_res=$ac_cv_search_MPI_File_open
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-else
-  as_fn_error $? "
-            ------------------------------------------------------------
-             MPI implementation does not support MPI-IO
-             PnetCDF requires MPI-IO support to work properly.
-            ------------------------------------------------------------" "$LINENO" 5
+int
+main ()
+{
 
-fi
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then :
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
 
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
 fi
-
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-
-# Check whether --enable-cxx was given.
-if test "${enable_cxx+set}" = set; then :
-  enableval=$enable_cxx; enable_cxx=${enableval}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  enable_cxx=auto
-
-fi
-
-
-if test "x${enable_cxx}" != xno ; then
-
-   if test "x$MPI_INSTALL" != x ; then
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
-$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
-          fi
-
-
-      if test "x$MPICXX" = x ; then
-                  if test -d "${MPI_INSTALL}/bin" ; then
-            if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search possible MPICXX under $MPI_INSTALL/bin" >&5
-$as_echo "$as_me: DEBUG: search possible MPICXX under $MPI_INSTALL/bin" >&6;}
-          fi
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
 
-            for ac_prog in $CANDIDATE_MPICXX
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPICXX+:} false; then :
-  $as_echo_n "(cached) " >&6
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
 else
-  case $MPICXX in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPICXX="$MPICXX" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $MPI_INSTALL/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPICXX="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
-  ;;
-esac
 fi
-MPICXX=$ac_cv_path_MPICXX
-if test -n "$MPICXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICXX" >&5
-$as_echo "$MPICXX" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GCC=yes
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  GCC=
 fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+int
+main ()
+{
 
-  test -n "$MPICXX" && break
-done
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+else
+  CFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-         fi
-                           if test "x$MPICXX" = x ; then
-             if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search possible MPICXX under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: search possible MPICXX under $MPI_INSTALL" >&6;}
-          fi
+int
+main ()
+{
 
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
 
-             for ac_prog in $CANDIDATE_MPICXX
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPICXX+:} false; then :
-  $as_echo_n "(cached) " >&6
 else
-  case $MPICXX in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPICXX="$MPICXX" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $MPI_INSTALL
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPICXX="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+  ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-  ;;
-esac
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-MPICXX=$ac_cv_path_MPICXX
-if test -n "$MPICXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICXX" >&5
-$as_echo "$MPICXX" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
 
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
 
-  test -n "$MPICXX" && break
-done
-
-         fi
-      else
-                  if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if file $MPICXX exists" >&5
-$as_echo "$as_me: DEBUG: check if file $MPICXX exists" >&6;}
-          fi
-
-
-         if ! test -f "$MPICXX" ; then
-                                    if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPICXX= $MPICXX cannot be found ... check under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPICXX= $MPICXX cannot be found ... check under $MPI_INSTALL" >&6;}
-          fi
-
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
 
-            if test -f "$MPI_INSTALL/$MPICXX" ; then
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPICXX= $MPICXX is found under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPICXX= $MPICXX is found under $MPI_INSTALL" >&6;}
-          fi
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
 
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+  xno)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
 
-               MPICXX="$MPI_INSTALL/$MPICXX"
-            elif test -f "$MPI_INSTALL/bin/$MPICXX" ; then
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPICXX= $MPICXX is found under $MPI_INSTALL/bin" >&5
-$as_echo "$as_me: DEBUG: File MPICXX= $MPICXX is found under $MPI_INSTALL/bin" >&6;}
-          fi
+fi
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-               MPICXX="$MPI_INSTALL/bin/$MPICXX"
-            else
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPICXX= $MPICXX cannot be found under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPICXX= $MPICXX cannot be found under $MPI_INSTALL" >&6;}
-          fi
-
-
-               MPICXX=
-            fi
-         fi
-      fi
-   else
-       if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
-$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
-          fi
-
-
-       if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if MPICXX is defined. If yes, check if file exists" >&5
-$as_echo "$as_me: DEBUG: check if MPICXX is defined. If yes, check if file exists" >&6;}
-          fi
-
-
-       if test "x$MPICXX" != x && (! test -f "$MPICXX") ; then
-          if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if file $MPICXX exists under user's PATH" >&5
-$as_echo "$as_me: DEBUG: check if file $MPICXX exists under user's PATH" >&6;}
-          fi
-
-
-          for ac_prog in $MPICXX
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPICXX+:} false; then :
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPICXX in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPICXX="$MPICXX" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPICXX="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
   done
-IFS=$as_save_IFS
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+  am__include=include
+  am__quote=
+  _am_result=GNU
   ;;
 esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   case `$am_make -s -f confmf 2> /dev/null` in #(
+   *the\ am__doit\ target*)
+     am__include=.include
+     am__quote="\""
+     _am_result=BSD
+     ;;
+   esac
 fi
-MPICXX=$ac_cv_path_MPICXX
-if test -n "$MPICXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICXX" >&5
-$as_echo "$MPICXX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$MPICXX" && break
-done
 
-       fi
-   fi
-         if test "x$MPICXX" = x ; then
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: find possible MPICXX under user's PATH" >&5
-$as_echo "$as_me: DEBUG: find possible MPICXX under user's PATH" >&6;}
-          fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
 
-      for ac_prog in $CANDIDATE_MPICXX
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPICXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $MPICXX in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPICXX="$MPICXX" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPICXX="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
 
-  ;;
-esac
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
 fi
-MPICXX=$ac_cv_path_MPICXX
-if test -n "$MPICXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPICXX" >&5
-$as_echo "$MPICXX" >&6; }
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
 fi
 
 
-  test -n "$MPICXX" && break
-done
-
-   fi
-
-
-   if test "x${MPICXX}" = x ; then
-      as_fn_error $? "
-         ------------------------------------------------------------
-           configure cannot find a C++ compiler. Please specify the
-           locations of the compiler either with the MPICXX
-           environment variable or the --with-mpi configure flag.
-         ------------------------------------------------------------" "$LINENO" 5
-      has_mpicxx=no
-   else
-      CXX=${MPICXX}
 
-      has_mpicxx=yes
+depcc="$CC"   am_compiler_list=
 
-            ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-if test -z "$CXX"; then
-  if test -n "$CCC"; then
-    CXX=$CCC
-  else
-    if test -n "$ac_tool_prefix"; then
-  for ac_prog in ${MPICXX}
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CXX+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CXX"; then
-  ac_cv_prog_CXX="$CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
   fi
-done
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
   done
-IFS=$as_save_IFS
 
-fi
-fi
-CXX=$ac_cv_prog_CXX
-if test -n "$CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
-$as_echo "$CXX" >&6; }
+  cd ..
+  rm -rf conftest.dir
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  am_cv_CC_dependencies_compiler_type=none
 fi
 
-
-    test -n "$CXX" && break
-  done
 fi
-if test -z "$CXX"; then
-  ac_ct_CXX=$CXX
-  for ac_prog in ${MPICXX}
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CXX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CXX"; then
-  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 
-fi
-fi
-ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
-if test -n "$ac_ct_CXX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
-$as_echo "$ac_ct_CXX" >&6; }
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
 fi
 
 
-  test -n "$ac_ct_CXX" && break
-done
 
-  if test "x$ac_ct_CXX" = x; then
-    CXX="g++"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
 
-  fi
+
+# Check whether --enable-largefile was given.
+if test "${enable_largefile+set}" = set; then :
+  enableval=$enable_largefile;
 fi
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
-$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
-if ${ac_cv_cxx_compiler_gnu+:} false; then :
+if test "$enable_largefile" != no; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
+if ${ac_cv_sys_largefile_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
+  ac_cv_sys_largefile_CC=no
+     if test "$GCC" != yes; then
+       ac_save_CC=$CC
+       while :; do
+	 # IRIX 6.2 and later do not support large files by default,
+	 # so use the C compiler's -n32 option if that helps.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
 int
 main ()
 {
-#ifndef __GNUC__
-       choke me
-#endif
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
-
+rm -f core conftest.err conftest.$ac_objext
+	 CC="$CC -n32"
+	 if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_largefile_CC=' -n32'; break
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
-$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GXX=yes
-else
-  GXX=
+rm -f core conftest.err conftest.$ac_objext
+	 break
+       done
+       CC=$ac_save_CC
+       rm -f conftest.$ac_ext
+    fi
 fi
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
-$as_echo_n "checking whether $CXX accepts -g... " >&6; }
-if ${ac_cv_prog_cxx_g+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+  if test "$ac_cv_sys_largefile_CC" != no; then
+    CC=$CC$ac_cv_sys_largefile_CC
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if ${ac_cv_sys_file_offset_bits+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
-   ac_cxx_werror_flag=yes
-   ac_cv_prog_cxx_g=no
-   CXXFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
 int
 main ()
 {
@@ -5054,13 +5649,22 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-else
-  CXXFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=no; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
 int
 main ()
 {
@@ -5069,14 +5673,43 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_file_offset_bits=64; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_cv_sys_file_offset_bits=unknown
+  break
+done
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+case $ac_cv_sys_file_offset_bits in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
+_ACEOF
+;;
+esac
+rm -rf conftest*
+  if test $ac_cv_sys_file_offset_bits = unknown; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
+if ${ac_cv_sys_large_files+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-	 CXXFLAGS="-g"
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  while :; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
 int
 main ()
 {
@@ -5085,55 +5718,64 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_prog_cxx_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=no; break
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define _LARGE_FILES 1
+#include <sys/types.h>
+ /* Check that off_t can represent 2**63 - 1 correctly.
+    We can't simply define LARGE_OFF_T to be 9223372036854775807,
+    since some C++ compilers masquerading as C compilers
+    incorrectly reject 9223372036854775807.  */
+#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
+		       && LARGE_OFF_T % 2147483647 == 1)
+		      ? 1 : -1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_sys_large_files=1; break
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+  ac_cv_sys_large_files=unknown
+  break
+done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
-$as_echo "$ac_cv_prog_cxx_g" >&6; }
-if test "$ac_test_CXXFLAGS" = set; then
-  CXXFLAGS=$ac_save_CXXFLAGS
-elif test $ac_cv_prog_cxx_g = yes; then
-  if test "$GXX" = yes; then
-    CXXFLAGS="-g -O2"
-  else
-    CXXFLAGS="-g"
-  fi
-else
-  if test "$GXX" = yes; then
-    CXXFLAGS="-O2"
-  else
-    CXXFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+$as_echo "$ac_cv_sys_large_files" >&6; }
+case $ac_cv_sys_large_files in #(
+  no | unknown) ;;
+  *)
+cat >>confdefs.h <<_ACEOF
+#define _LARGE_FILES $ac_cv_sys_large_files
+_ACEOF
+;;
+esac
+rm -rf conftest*
   fi
+
+
 fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-            if test "x${enable_mpi_io_test}" = xyes ; then
-          ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
 
-ac_fn_cxx_check_func "$LINENO" "MPI_File_close" "ac_cv_func_MPI_File_close"
-if test "x$ac_cv_func_MPI_File_close" = xyes; then :
+ac_fn_c_check_func "$LINENO" "MPI_Comm_rank" "ac_cv_func_MPI_Comm_rank"
+if test "x$ac_cv_func_MPI_Comm_rank" = xyes; then :
 
 else
-               { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_File_close" >&5
-$as_echo_n "checking for library containing MPI_File_close... " >&6; }
-if ${ac_cv_search_MPI_File_close+:} false; then :
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_Comm_rank" >&5
+$as_echo_n "checking for library containing MPI_Comm_rank... " >&6; }
+if ${ac_cv_search_MPI_Comm_rank+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_func_search_save_LIBS=$LIBS
@@ -5146,153 +5788,148 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 #ifdef __cplusplus
 extern "C"
 #endif
-char MPI_File_close ();
+char MPI_Comm_rank ();
 int
 main ()
 {
-return MPI_File_close ();
+return MPI_Comm_rank ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' mpi++ mpichcxx mpi_cxx; do
+for ac_lib in '' mpi mpich; do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_cxx_try_link "$LINENO"; then :
-  ac_cv_search_MPI_File_close=$ac_res
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_MPI_Comm_rank=$ac_res
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext
-  if ${ac_cv_search_MPI_File_close+:} false; then :
+  if ${ac_cv_search_MPI_Comm_rank+:} false; then :
   break
 fi
 done
-if ${ac_cv_search_MPI_File_close+:} false; then :
+if ${ac_cv_search_MPI_Comm_rank+:} false; then :
 
 else
-  ac_cv_search_MPI_File_close=no
+  ac_cv_search_MPI_Comm_rank=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_File_close" >&5
-$as_echo "$ac_cv_search_MPI_File_close" >&6; }
-ac_res=$ac_cv_search_MPI_File_close
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_Comm_rank" >&5
+$as_echo "$ac_cv_search_MPI_Comm_rank" >&6; }
+ac_res=$ac_cv_search_MPI_Comm_rank
 if test "$ac_res" != no; then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 else
-  has_mpicxx=no
-                  MPICXX=
-                  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
-                  ----------------------------------------------------------
-                   MPI C++ implementation does not support MPI-IO
-                   Disabling C++ testing programs
-                  ----------------------------------------------------------" >&5
-$as_echo "$as_me: WARNING:
-                  ----------------------------------------------------------
-                   MPI C++ implementation does not support MPI-IO
-                   Disabling C++ testing programs
-                  ----------------------------------------------------------" >&2;}
+  as_fn_error $? "
+   -----------------------------------------------------------------------
+     Invalid MPI compiler specified or detected: \"${MPICC}\"
+     A working MPI C compiler is required. Please specify the location
+     of one either in the MPICC environment variable or through
+     --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
 
 fi
 
 fi
 
-          ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-      fi
-   fi
-   if test "x${has_mpicxx}" = xyes ; then
+ac_fn_c_check_func "$LINENO" "MPI_File_open" "ac_cv_func_MPI_File_open"
+if test "x$ac_cv_func_MPI_File_open" = xyes; then :
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI C++ compiler redefines SEEK_SET " >&5
-$as_echo_n "checking if MPI C++ compiler redefines SEEK_SET ... " >&6; }
-   CXX=${MPICXX}
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+else
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_File_open" >&5
+$as_echo_n "checking for library containing MPI_File_open... " >&6; }
+if ${ac_cv_search_MPI_File_open+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-          #include <stdio.h>
-          #include <mpi.h>
-          int main() { return 0; }
-
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char MPI_File_open ();
+int
+main ()
+{
+return MPI_File_open ();
+  ;
+  return 0;
+}
 _ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_CHECK_MPI_CPP_SEEK_SET=no
-else
-  ac_cv_CHECK_MPI_CPP_SEEK_SET=yes
-
+for ac_lib in '' mpio; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_MPI_File_open=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_CPP_SEEK_SET" >&5
-$as_echo "$ac_cv_CHECK_MPI_CPP_SEEK_SET" >&6; }
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_CHECK_MPI_CPP_SEEK_SET=$ac_cv_CHECK_MPI_CPP_SEEK_SET" >&5
-$as_echo "$as_me: DEBUG: ac_cv_CHECK_MPI_CPP_SEEK_SET=$ac_cv_CHECK_MPI_CPP_SEEK_SET" >&6;}
-          fi
-
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_MPI_File_open+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_MPI_File_open+:} false; then :
 
-      if test "x${ac_cv_CHECK_MPI_CPP_SEEK_SET}" = xyes ; then
-         CXXCPPFLAGS="${CXXCPPFLAGS} -DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX"
-      fi
-   fi
 else
-has_mpicxx=no
+  ac_cv_search_MPI_File_open=no
 fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_File_open" >&5
+$as_echo "$ac_cv_search_MPI_File_open" >&6; }
+ac_res=$ac_cv_search_MPI_File_open
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
-
-# Check whether --enable-strict was given.
-if test "${enable_strict+set}" = set; then :
-  enableval=$enable_strict; enable_strict=${enableval}
 else
-  enable_strict=no
+  as_fn_error $? "
+   -----------------------------------------------------------------------
+     The underneath MPI implementation does not support MPI-IO.
+     PnetCDF requires MPI-IO support to work properly. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
 
 fi
 
-
-if test "x${enable_strict}" = xyes; then
-   if test "x${GCC}" = xyes; then
-      CPPFLAGS="${CPPFLAGS} -Wall -Wstrict-prototypes -Wmissing-prototypes -Wundef -Wpointer-arith -Wbad-function-cast"
-      CXXCPPFLAGS="${CXXCPPFLAGS} -Wall -Wundef -Wpointer-arith"
-   else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-strict is for GNU compiler only" >&5
-$as_echo "$as_me: WARNING: --enable-strict is for GNU compiler only" >&2;}
-      enable_strict=no
-   fi
 fi
 
 
-# Check whether --enable-fortran was given.
-if test "${enable_fortran+set}" = set; then :
-  enableval=$enable_fortran; enable_fortran=${enableval}
+# Check whether --enable-cxx was given.
+if test "${enable_cxx+set}" = set; then :
+  enableval=$enable_cxx; enable_cxx=${enableval}
 else
-  enable_fortran=auto
+  enable_cxx=auto
 
 fi
 
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: enable_cxx=$enable_cxx" >&5
+$as_echo "$as_me: DEBUG: enable_cxx=$enable_cxx" >&6;}
+          fi
+
+
 
-if test "x${enable_fortran}" != xno ; then
+if test "x${enable_cxx}" != xno ; then
+   if test "x${ac_user_MPICXX}" = x ; then
 
+   ac_mpi_prog_MPICXX=
    if test "x$MPI_INSTALL" != x ; then
       if test "x${_DEBUG}" = xyes ; then
              { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
@@ -5300,26 +5937,25 @@ $as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
           fi
 
 
-      if test "x$MPIF77" = x ; then
-                  if test -d "${MPI_INSTALL}/bin" ; then
-            if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search possible MPIF77 under $MPI_INSTALL/bin" >&5
-$as_echo "$as_me: DEBUG: search possible MPIF77 under $MPI_INSTALL/bin" >&6;}
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPICXX under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPICXX under $MPI_INSTALL/bin" >&6;}
           fi
 
 
-            for ac_prog in $CANDIDATE_MPIF77
+         for ac_prog in $CANDIDATE_MPICXX
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPIF77+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPIF77 in
+  case $ac_mpi_prog_MPICXX in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPIF77="$MPIF77" # Let the user override the test with a path.
+  ac_cv_path_ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5329,7 +5965,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_ac_mpi_prog_MPICXX="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5340,39 +5976,38 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
-MPIF77=$ac_cv_path_MPIF77
-if test -n "$MPIF77"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF77" >&5
-$as_echo "$MPIF77" >&6; }
+ac_mpi_prog_MPICXX=$ac_cv_path_ac_mpi_prog_MPICXX
+if test -n "$ac_mpi_prog_MPICXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICXX" >&5
+$as_echo "$ac_mpi_prog_MPICXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPIF77" && break
+  test -n "$ac_mpi_prog_MPICXX" && break
 done
 
-         fi
-                           if test "x$MPIF77" = x ; then
-             if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search possible MPIF77 under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: search possible MPIF77 under $MPI_INSTALL" >&6;}
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPICXX under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPICXX under $MPI_INSTALL" >&6;}
           fi
 
 
-             for ac_prog in $CANDIDATE_MPIF77
+         for ac_prog in $CANDIDATE_MPICXX
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPIF77+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPIF77 in
+  case $ac_mpi_prog_MPICXX in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPIF77="$MPIF77" # Let the user override the test with a path.
+  ac_cv_path_ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5382,7 +6017,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_ac_mpi_prog_MPICXX="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5393,93 +6028,45 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
-MPIF77=$ac_cv_path_MPIF77
-if test -n "$MPIF77"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF77" >&5
-$as_echo "$MPIF77" >&6; }
+ac_mpi_prog_MPICXX=$ac_cv_path_ac_mpi_prog_MPICXX
+if test -n "$ac_mpi_prog_MPICXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICXX" >&5
+$as_echo "$ac_mpi_prog_MPICXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPIF77" && break
+  test -n "$ac_mpi_prog_MPICXX" && break
 done
 
-         fi
-      else
-                  if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if file $MPIF77 exists" >&5
-$as_echo "$as_me: DEBUG: check if file $MPIF77 exists" >&6;}
-          fi
-
-
-         if ! test -f "$MPIF77" ; then
-                                    if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPIF77= $MPIF77 cannot be found ... check under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPIF77= $MPIF77 cannot be found ... check under $MPI_INSTALL" >&6;}
-          fi
-
-
-            if test -f "$MPI_INSTALL/$MPIF77" ; then
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPIF77= $MPIF77 is found under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPIF77= $MPIF77 is found under $MPI_INSTALL" >&6;}
-          fi
-
-
-               MPIF77="$MPI_INSTALL/$MPIF77"
-            elif test -f "$MPI_INSTALL/bin/$MPIF77" ; then
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPIF77= $MPIF77 is found under $MPI_INSTALL/bin" >&5
-$as_echo "$as_me: DEBUG: File MPIF77= $MPIF77 is found under $MPI_INSTALL/bin" >&6;}
-          fi
-
-
-               MPIF77="$MPI_INSTALL/bin/$MPIF77"
-            else
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPIF77= $MPIF77 cannot be found under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPIF77= $MPIF77 cannot be found under $MPI_INSTALL" >&6;}
-          fi
-
-
-               MPIF77=
-            fi
-         fi
       fi
    else
-       if test "x${_DEBUG}" = xyes ; then
+      if test "x${_DEBUG}" = xyes ; then
              { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
 $as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
           fi
 
 
-       if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if MPIF77 is defined. If yes, check if file exists" >&5
-$as_echo "$as_me: DEBUG: check if MPIF77 is defined. If yes, check if file exists" >&6;}
-          fi
-
-
-       if test "x$MPIF77" != x && (! test -f "$MPIF77") ; then
-          if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if file $MPIF77 exists under user's PATH" >&5
-$as_echo "$as_me: DEBUG: check if file $MPIF77 exists under user's PATH" >&6;}
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPICXX under $PATH" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPICXX under $PATH" >&6;}
           fi
 
 
-          for ac_prog in $MPIF77
+      for ac_prog in $CANDIDATE_MPICXX
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPIF77+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPIF77 in
+  case $ac_mpi_prog_MPICXX in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPIF77="$MPIF77" # Let the user override the test with a path.
+  ac_cv_path_ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5489,7 +6076,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_ac_mpi_prog_MPICXX="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5500,50 +6087,47 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
-MPIF77=$ac_cv_path_MPIF77
-if test -n "$MPIF77"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF77" >&5
-$as_echo "$MPIF77" >&6; }
+ac_mpi_prog_MPICXX=$ac_cv_path_ac_mpi_prog_MPICXX
+if test -n "$ac_mpi_prog_MPICXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICXX" >&5
+$as_echo "$ac_mpi_prog_MPICXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPIF77" && break
+  test -n "$ac_mpi_prog_MPICXX" && break
 done
 
-       fi
    fi
-         if test "x$MPIF77" = x ; then
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: find possible MPIF77 under user's PATH" >&5
-$as_echo "$as_me: DEBUG: find possible MPIF77 under user's PATH" >&6;}
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_MPICXX=${ac_mpi_prog_MPICXX}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_MPICXX=${ac_mpi_prog_MPICXX}" >&6;}
           fi
 
 
-      for ac_prog in $CANDIDATE_MPIF77
+   if test "x${ac_mpi_prog_MPICXX}" = x ; then
+                  for ac_prog in $CANDIDATE_MPICXX
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPIF77+:} false; then :
+if ${ac_cv_prog_ac_mpi_prog_MPICXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPIF77 in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPIF77="$MPIF77" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$ac_mpi_prog_MPICXX"; then
+  ac_cv_prog_ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_ac_mpi_prog_MPICXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5551,52 +6135,83 @@ done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-MPIF77=$ac_cv_path_MPIF77
-if test -n "$MPIF77"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF77" >&5
-$as_echo "$MPIF77" >&6; }
+fi
+ac_mpi_prog_MPICXX=$ac_cv_prog_ac_mpi_prog_MPICXX
+if test -n "$ac_mpi_prog_MPICXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICXX" >&5
+$as_echo "$ac_mpi_prog_MPICXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPIF77" && break
+  test -n "$ac_mpi_prog_MPICXX" && break
 done
 
-   fi
+                                                   fi
+   MPICXX=${ac_mpi_prog_MPICXX}
+
+   else
+
+      ac_first_token=`echo $ac_user_MPICXX | cut -d" " -f1`
+   ac_rest_tokens=`echo $ac_user_MPICXX | cut -d" " -s -f2-`
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_first_token=$ac_first_token" >&5
+$as_echo "$as_me: DEBUG: ac_first_token=$ac_first_token" >&6;}
+          fi
+
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_rest_tokens=$ac_rest_tokens" >&5
+$as_echo "$as_me: DEBUG: ac_rest_tokens=$ac_rest_tokens" >&6;}
+          fi
 
 
+
+   ac_mpi_prog_MPICXX=
    if test "x$MPI_INSTALL" != x ; then
+            if test "$ac_first_token" != "${ac_first_token%$MPI_INSTALL*}" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: \"MPI_INSTALL is a substring of ac_first_token\"" >&5
+$as_echo "$as_me: DEBUG: \"MPI_INSTALL is a substring of ac_first_token\"" >&6;}
+          fi
+
+
+         ac_prog=`echo $ac_first_token | rev | cut -d"/" -f1 |rev`
+      else
+         ac_prog=$ac_first_token
+      fi
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_prog=$ac_prog" >&5
+$as_echo "$as_me: DEBUG: ac_prog=$ac_prog" >&6;}
+          fi
+
+
       if test "x${_DEBUG}" = xyes ; then
              { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
 $as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
           fi
 
 
-      if test "x$MPIF90" = x ; then
-                  if test -d "${MPI_INSTALL}/bin" ; then
-            if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search possible MPIF90 under $MPI_INSTALL/bin" >&5
-$as_echo "$as_me: DEBUG: search possible MPIF90 under $MPI_INSTALL/bin" >&6;}
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_prog under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search $ac_prog under $MPI_INSTALL/bin" >&6;}
           fi
 
 
-            for ac_prog in $CANDIDATE_MPIF90
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
+         # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPIF90+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPIF90 in
+  case $ac_mpi_prog_MPICXX in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPIF90="$MPIF90" # Let the user override the test with a path.
+  ac_cv_path_ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5606,7 +6221,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_ac_mpi_prog_MPICXX="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5617,39 +6232,33 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
-MPIF90=$ac_cv_path_MPIF90
-if test -n "$MPIF90"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF90" >&5
-$as_echo "$MPIF90" >&6; }
+ac_mpi_prog_MPICXX=$ac_cv_path_ac_mpi_prog_MPICXX
+if test -n "$ac_mpi_prog_MPICXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICXX" >&5
+$as_echo "$ac_mpi_prog_MPICXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPIF90" && break
-done
-
-         fi
-                           if test "x$MPIF90" = x ; then
-             if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search possible MPIF90 under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: search possible MPIF90 under $MPI_INSTALL" >&6;}
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_prog under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search $ac_prog under $MPI_INSTALL" >&6;}
           fi
 
 
-             for ac_prog in $CANDIDATE_MPIF90
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
+         # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPIF90+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPIF90 in
+  case $ac_mpi_prog_MPICXX in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPIF90="$MPIF90" # Let the user override the test with a path.
+  ac_cv_path_ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5659,7 +6268,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_ac_mpi_prog_MPICXX="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5670,93 +6279,40 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
-MPIF90=$ac_cv_path_MPIF90
-if test -n "$MPIF90"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF90" >&5
-$as_echo "$MPIF90" >&6; }
+ac_mpi_prog_MPICXX=$ac_cv_path_ac_mpi_prog_MPICXX
+if test -n "$ac_mpi_prog_MPICXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICXX" >&5
+$as_echo "$ac_mpi_prog_MPICXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPIF90" && break
-done
-
-         fi
-      else
-                  if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if file $MPIF90 exists" >&5
-$as_echo "$as_me: DEBUG: check if file $MPIF90 exists" >&6;}
-          fi
-
-
-         if ! test -f "$MPIF90" ; then
-                                    if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPIF90= $MPIF90 cannot be found ... check under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPIF90= $MPIF90 cannot be found ... check under $MPI_INSTALL" >&6;}
-          fi
-
-
-            if test -f "$MPI_INSTALL/$MPIF90" ; then
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPIF90= $MPIF90 is found under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPIF90= $MPIF90 is found under $MPI_INSTALL" >&6;}
-          fi
-
-
-               MPIF90="$MPI_INSTALL/$MPIF90"
-            elif test -f "$MPI_INSTALL/bin/$MPIF90" ; then
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPIF90= $MPIF90 is found under $MPI_INSTALL/bin" >&5
-$as_echo "$as_me: DEBUG: File MPIF90= $MPIF90 is found under $MPI_INSTALL/bin" >&6;}
-          fi
-
-
-               MPIF90="$MPI_INSTALL/bin/$MPIF90"
-            else
-               if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: File MPIF90= $MPIF90 cannot be found under $MPI_INSTALL" >&5
-$as_echo "$as_me: DEBUG: File MPIF90= $MPIF90 cannot be found under $MPI_INSTALL" >&6;}
-          fi
-
-
-               MPIF90=
-            fi
-         fi
       fi
    else
-       if test "x${_DEBUG}" = xyes ; then
+      if test "x${_DEBUG}" = xyes ; then
              { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
 $as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
           fi
 
 
-       if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if MPIF90 is defined. If yes, check if file exists" >&5
-$as_echo "$as_me: DEBUG: check if MPIF90 is defined. If yes, check if file exists" >&6;}
-          fi
-
-
-       if test "x$MPIF90" != x && (! test -f "$MPIF90") ; then
-          if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: check if file $MPIF90 exists under user's PATH" >&5
-$as_echo "$as_me: DEBUG: check if file $MPIF90 exists under user's PATH" >&6;}
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_first_token under $PATH" >&5
+$as_echo "$as_me: DEBUG: search $ac_first_token under $PATH" >&6;}
           fi
 
 
-          for ac_prog in $MPIF90
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+      # Extract the first word of "$ac_first_token", so it can be a program name with args.
+set dummy $ac_first_token; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPIF90+:} false; then :
+if ${ac_cv_path_ac_mpi_prog_MPICXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPIF90 in
+  case $ac_mpi_prog_MPICXX in
   [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPIF90="$MPIF90" # Let the user override the test with a path.
+  ac_cv_path_ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX" # Let the user override the test with a path.
   ;;
   *)
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -5766,7 +6322,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_path_ac_mpi_prog_MPICXX="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5777,50 +6333,42 @@ IFS=$as_save_IFS
   ;;
 esac
 fi
-MPIF90=$ac_cv_path_MPIF90
-if test -n "$MPIF90"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF90" >&5
-$as_echo "$MPIF90" >&6; }
+ac_mpi_prog_MPICXX=$ac_cv_path_ac_mpi_prog_MPICXX
+if test -n "$ac_mpi_prog_MPICXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICXX" >&5
+$as_echo "$ac_mpi_prog_MPICXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPIF90" && break
-done
-
-       fi
    fi
-         if test "x$MPIF90" = x ; then
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: find possible MPIF90 under user's PATH" >&5
-$as_echo "$as_me: DEBUG: find possible MPIF90 under user's PATH" >&6;}
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_MPICXX=${ac_mpi_prog_MPICXX}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_MPICXX=${ac_mpi_prog_MPICXX}" >&6;}
           fi
 
 
-      for ac_prog in $CANDIDATE_MPIF90
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+   if test "x${ac_mpi_prog_MPICXX}" = x ; then
+                  # Extract the first word of "$ac_first_token", so it can be a program name with args.
+set dummy $ac_first_token; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MPIF90+:} false; then :
+if ${ac_cv_prog_ac_mpi_prog_MPICXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  case $MPIF90 in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_MPIF90="$MPIF90" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  if test -n "$ac_mpi_prog_MPICXX"; then
+  ac_cv_prog_ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    ac_cv_prog_ac_mpi_prog_MPICXX=""
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5828,57 +6376,96 @@ done
   done
 IFS=$as_save_IFS
 
-  ;;
-esac
 fi
-MPIF90=$ac_cv_path_MPIF90
-if test -n "$MPIF90"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIF90" >&5
-$as_echo "$MPIF90" >&6; }
+fi
+ac_mpi_prog_MPICXX=$ac_cv_prog_ac_mpi_prog_MPICXX
+if test -n "$ac_mpi_prog_MPICXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPICXX" >&5
+$as_echo "$ac_mpi_prog_MPICXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$MPIF90" && break
-done
+                                                   else
+      if test "x$ac_rest_tokens" != x ; then
+         ac_mpi_prog_MPICXX="$ac_mpi_prog_MPICXX $ac_rest_tokens"
+      fi
+   fi
+   MPICXX=${ac_mpi_prog_MPICXX}
 
    fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: MPICXX=$MPICXX" >&5
+$as_echo "$as_me: DEBUG: MPICXX=$MPICXX" >&6;}
+          fi
 
-fi
-if test "x${enable_fortran}" = xyes ; then
-      if test "x${MPIF77}" = x && test "x${MPIF90}" = x ; then
-      as_fn_error $? "
-         ------------------------------------------------------------
-           Fortran support is explicitly requested, but configure
-           cannot find a Fortran 77 or Fortran 90 compiler. Please
-           specify the locations of the compilers either with the
-           MPIF77 MPIF90 environment variables or the --with-mpi
-           configure flag.
-         ------------------------------------------------------------" "$LINENO" 5
+
+
+   if test "x${MPICXX}" = x ; then
+      if test "x$ac_user_MPICXX" = x ; then
+         ERR_MSG="No MPI C++ compiler can be found"
+      else
+         ERR_MSG="Specified MPI C++ compiler \"$ac_user_MPICXX\" cannot be found"
+      fi
+      if test "x$MPI_INSTALL" != x ; then
+         ERR_MSG+=" under $MPI_INSTALL"
+      fi
+      if test "x${enable_cxx}" = xyes ; then
+                  as_fn_error $? "
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Please specify the location of the MPI C++ compiler, either in the
+     MPICXX environment variable or the --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+      else
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus the C++ feature is disabled.
+     The location of the MPI C++ compiler can be specified either in the
+     MPICXX environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------" >&5
+$as_echo "$as_me: WARNING:
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus the C++ feature is disabled.
+     The location of the MPI C++ compiler can be specified either in the
+     MPICXX environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------" >&2;}
+      fi
    fi
 fi
 
+if test "x${enable_cxx}" = xno || test "x${MPICXX}" = x ; then
+      has_mpicxx=no
+else
+   has_mpicxx=yes
+   CXX=${MPICXX}
+fi
 
-if test "x${MPIF90}" != x ; then
-   FC=${MPIF90}
-   ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -z "$CXX"; then
+  if test -n "$CCC"; then
+    CXX=$CCC
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_FC+:} false; then :
+if ${ac_cv_prog_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$FC"; then
-  ac_cv_prog_FC="$FC" # Let the user override the test.
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5887,7 +6474,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5897,32 +6484,32 @@ IFS=$as_save_IFS
 
 fi
 fi
-FC=$ac_cv_prog_FC
-if test -n "$FC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5
-$as_echo "$FC" >&6; }
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
+$as_echo "$CXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-    test -n "$FC" && break
+    test -n "$CXX" && break
   done
 fi
-if test -z "$FC"; then
-  ac_ct_FC=$FC
-  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_FC+:} false; then :
+if ${ac_cv_prog_ac_ct_CXX+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_FC"; then
-  ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5931,7 +6518,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_FC="$ac_prog"
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5941,21 +6528,21 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_FC=$ac_cv_prog_ac_ct_FC
-if test -n "$ac_ct_FC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5
-$as_echo "$ac_ct_FC" >&6; }
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
+$as_echo "$ac_ct_CXX" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$ac_ct_FC" && break
+  test -n "$ac_ct_CXX" && break
 done
 
-  if test "x$ac_ct_FC" = x; then
-    FC=""
+  if test "x$ac_ct_CXX" = x; then
+    CXX="g++"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -5963,13 +6550,14 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    FC=$ac_ct_FC
+    CXX=$ac_ct_CXX
   fi
 fi
 
-
+  fi
+fi
 # Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
 set X $ac_compile
 ac_compiler=$2
 for ac_option in --version -v -V -qversion; do
@@ -5992,139 +6580,471 @@ $as_echo "$ac_try_echo"; } >&5
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
-rm -f a.out
 
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file.  (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5
-$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; }
-if ${ac_cv_fc_compiler_gnu+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
+$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
+if ${ac_cv_cxx_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
 #ifndef __GNUC__
        choke me
 #endif
 
-      end
+  ;
+  return 0;
+}
 _ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+if ac_fn_cxx_try_compile "$LINENO"; then :
   ac_compiler_gnu=yes
 else
   ac_compiler_gnu=no
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_fc_compiler_gnu=$ac_compiler_gnu
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5
-$as_echo "$ac_cv_fc_compiler_gnu" >&6; }
-ac_ext=$ac_save_ext
-ac_test_FCFLAGS=${FCFLAGS+set}
-ac_save_FCFLAGS=$FCFLAGS
-FCFLAGS=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5
-$as_echo_n "checking whether $FC accepts -g... " >&6; }
-if ${ac_cv_prog_fc_g+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
+$as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+  GXX=yes
+else
+  GXX=
+fi
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
+$as_echo_n "checking whether $CXX accepts -g... " >&6; }
+if ${ac_cv_prog_cxx_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  FCFLAGS=-g
-cat > conftest.$ac_ext <<_ACEOF
-      program main
+  ac_save_cxx_werror_flag=$ac_cxx_werror_flag
+   ac_cxx_werror_flag=yes
+   ac_cv_prog_cxx_g=no
+   CXXFLAGS="-g"
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-      end
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_prog_fc_g=yes
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
 else
-  ac_cv_prog_fc_g=no
+  CXXFLAGS=""
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+
+else
+  ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+	 CXXFLAGS="-g"
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_prog_cxx_g=yes
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5
-$as_echo "$ac_cv_prog_fc_g" >&6; }
-if test "$ac_test_FCFLAGS" = set; then
-  FCFLAGS=$ac_save_FCFLAGS
-elif test $ac_cv_prog_fc_g = yes; then
-  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
-    FCFLAGS="-g -O2"
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_cxx_werror_flag=$ac_save_cxx_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
+$as_echo "$ac_cv_prog_cxx_g" >&6; }
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
   else
-    FCFLAGS="-g"
+    CXXFLAGS="-g"
   fi
 else
-  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
-    FCFLAGS="-O2"
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
   else
-    FCFLAGS=
+    CXXFLAGS=
   fi
 fi
-
-if test $ac_compiler_gnu = yes; then
-  GFC=yes
-else
-  GFC=
-fi
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+depcc="$CXX"  am_compiler_list=
 
-   FCLIBS_save="$FCLIBS"
-   FCLIBS=""
-   # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
 
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CXX_dependencies_compiler_type=none
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
 else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
+
+
+
+
+if test "x${has_mpicxx}" = xyes ; then
+      ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+ac_fn_cxx_check_func "$LINENO" "MPI_File_close" "ac_cv_func_MPI_File_close"
+if test "x$ac_cv_func_MPI_File_close" = xyes; then :
+
+else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MPI_File_close" >&5
+$as_echo_n "checking for library containing MPI_File_close... " >&6; }
+if ${ac_cv_search_MPI_File_close+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char MPI_File_close ();
+int
+main ()
+{
+return MPI_File_close ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' mpi++ mpichcxx mpi_cxx; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_cxx_try_link "$LINENO"; then :
+  ac_cv_search_MPI_File_close=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_MPI_File_close+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_MPI_File_close+:} false; then :
+
+else
+  ac_cv_search_MPI_File_close=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MPI_File_close" >&5
+$as_echo "$ac_cv_search_MPI_File_close" >&6; }
+ac_res=$ac_cv_search_MPI_File_close
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+else
+  has_mpicxx=no
+fi
+
+fi
+
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   if test "x$has_mpicxx" = xno ; then
+      if test "x${enable_cxx}" = xyes ; then
+         as_fn_error $? "
+   -----------------------------------------------------------------------
+     Explicitly requesting C++ feature, but \"${MPICXX}\"
+     is not a working MPI C++ compiler. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+      else          { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+   -----------------------------------------------------------------------
+     \"${MPICXX}\" is not a working MPI C++ compiler.
+     Thus, the C++ feature is disabled.
+   -----------------------------------------------------------------------" >&5
+$as_echo "$as_me: WARNING:
+   -----------------------------------------------------------------------
+     \"${MPICXX}\" is not a working MPI C++ compiler.
+     Thus, the C++ feature is disabled.
+   -----------------------------------------------------------------------" >&2;}
+      fi
+   else
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI C++ compiler redefines SEEK_SET " >&5
+$as_echo_n "checking if MPI C++ compiler redefines SEEK_SET ... " >&6; }
+   CXX=${MPICXX}
+   ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <stdio.h>
+          #include <mpi.h>
+          int main() { return 0; }
+
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_CPP_SEEK_SET=no
+else
+  ac_cv_CHECK_MPI_CPP_SEEK_SET=yes
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_CPP_SEEK_SET" >&5
+$as_echo "$ac_cv_CHECK_MPI_CPP_SEEK_SET" >&6; }
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_CHECK_MPI_CPP_SEEK_SET=$ac_cv_CHECK_MPI_CPP_SEEK_SET" >&5
+$as_echo "$as_me: DEBUG: ac_cv_CHECK_MPI_CPP_SEEK_SET=$ac_cv_CHECK_MPI_CPP_SEEK_SET" >&6;}
+          fi
+
+
+                        if test "x${ac_cv_CHECK_MPI_CPP_SEEK_SET}" = xyes ; then
+         SEEK_SET_REDEFINED=yes
+      fi
+   fi
+fi
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: has_mpicxx=$has_mpicxx" >&5
+$as_echo "$as_me: DEBUG: has_mpicxx=$has_mpicxx" >&6;}
+          fi
+
+
+ if test x$has_mpicxx = xyes; then
+  HAS_MPICXX_TRUE=
+  HAS_MPICXX_FALSE='#'
+else
+  HAS_MPICXX_TRUE='#'
+  HAS_MPICXX_FALSE=
+fi
+
+ if test x$ac_cv_CHECK_MPI_CPP_SEEK_SET = xyes; then
+  SEEK_SET_REDEFINED_TRUE=
+  SEEK_SET_REDEFINED_FALSE='#'
+else
+  SEEK_SET_REDEFINED_TRUE='#'
+  SEEK_SET_REDEFINED_FALSE=
+fi
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
@@ -6149,560 +7069,665 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
 
 
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5
-$as_echo_n "checking how to get verbose linking output from $FC... " >&6; }
-if ${ac_cv_prog_fc_v+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
 
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_prog_fc_v=
-# Try some options frequently used verbose output
-for ac_verb in -v -verbose -V -\#\#\# --verbose; do
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+case `pwd` in
+  *\ * | *\	*)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
+$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
+esac
 
-      end
-_ACEOF
 
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FCFLAGS=$FCFLAGS
-FCFLAGS="$FCFLAGS $ac_verb"
-eval "set x $ac_link"
-shift
-$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
-# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
-# LIBRARY_PATH; skip all such settings.
-ac_fc_v_output=`eval $ac_link 5>&1 2>&1 |
-  sed '/^Driving:/d; /^Configured with:/d;
-      '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
-$as_echo "$ac_fc_v_output" >&5
-FCFLAGS=$ac_save_FCFLAGS
 
-rm -rf conftest*
+macro_version='2.4.6'
+macro_revision='2.4.6'
 
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_fc_v_output="`echo $ac_fc_v_output |
-	grep 'LPATH is:' |
-	sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output"
 
-# FIXME: we keep getting bitten by quoted arguments; a more general fix
-#        that detects unbalanced quotes in FLIBS should be implemented
-#        and (ugh) tested at some point.
-case $ac_fc_v_output in
-  # With xlf replace commas with spaces,
-  # and remove "-link" and closing parenthesis.
-  *xlfentry*)
-    ac_fc_v_output=`echo $ac_fc_v_output |
-      sed '
-        s/,/ /g
-        s/ -link / /g
-        s/) *$//
-      '
-    ` ;;
 
-  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
-  # $LIBS confuse us, and the libraries appear later in the output anyway).
-  *mGLOB_options_string*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
 
-  # Portland Group compiler has singly- or doubly-quoted -cmdline argument
-  # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
-  # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
-  *-cmdline\ * | *-ignore\ * | *-def\ *)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed "\
-	s/-cmdline  *'[^']*'/ /g; s/-cmdline  *\"[^\"]*\"/ /g
-	s/-ignore  *'[^']*'/ /g; s/-ignore  *\"[^\"]*\"/ /g
-	s/-def  *'[^']*'/ /g; s/-def  *\"[^\"]*\"/ /g"` ;;
 
-  # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
-  *fort77*f2c*gcc*)
-    ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n '
-        /:[	 ]\+Running[	 ]\{1,\}"gcc"/{
-          /"-c"/d
-          /[.]c"*/d
-          s/^.*"gcc"/"gcc"/
-          s/"//gp
-        }'` ;;
 
-  # If we are using Cray Fortran then delete quotes.
-  *cft90*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;;
-esac
 
 
-  # look for -l* and *.a constructs in the output
-  for ac_arg in $ac_fc_v_output; do
-     case $ac_arg in
-	[\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
-	  ac_cv_prog_fc_v=$ac_verb
-	  break 2 ;;
-     esac
-  done
-done
-if test -z "$ac_cv_prog_fc_v"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5
-$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;}
-fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5
-$as_echo "$as_me: WARNING: compilation failed" >&2;}
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5
-$as_echo "$ac_cv_prog_fc_v" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5
-$as_echo_n "checking for Fortran libraries of $FC... " >&6; }
-if ${ac_cv_fc_libs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$FCLIBS" != "x"; then
-  ac_cv_fc_libs="$FCLIBS" # Let the user override the test.
-else
 
-cat > conftest.$ac_ext <<_ACEOF
-      program main
 
-      end
-_ACEOF
 
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FCFLAGS=$FCFLAGS
-FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v"
-eval "set x $ac_link"
-shift
-$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
-# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
-# LIBRARY_PATH; skip all such settings.
-ac_fc_v_output=`eval $ac_link 5>&1 2>&1 |
-  sed '/^Driving:/d; /^Configured with:/d;
-      '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
-$as_echo "$ac_fc_v_output" >&5
-FCFLAGS=$ac_save_FCFLAGS
 
-rm -rf conftest*
+ltmain=$ac_aux_dir/ltmain.sh
 
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_fc_v_output="`echo $ac_fc_v_output |
-	grep 'LPATH is:' |
-	sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output"
+# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
 
-# FIXME: we keep getting bitten by quoted arguments; a more general fix
-#        that detects unbalanced quotes in FLIBS should be implemented
-#        and (ugh) tested at some point.
-case $ac_fc_v_output in
-  # With xlf replace commas with spaces,
-  # and remove "-link" and closing parenthesis.
-  *xlfentry*)
-    ac_fc_v_output=`echo $ac_fc_v_output |
-      sed '
-        s/,/ /g
-        s/ -link / /g
-        s/) *$//
-      '
-    ` ;;
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\(["`\\]\)/\\\1/g'
 
-  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
-  # $LIBS confuse us, and the libraries appear later in the output anyway).
-  *mGLOB_options_string*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
 
-  # Portland Group compiler has singly- or doubly-quoted -cmdline argument
-  # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
-  # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
-  *-cmdline\ * | *-ignore\ * | *-def\ *)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed "\
-	s/-cmdline  *'[^']*'/ /g; s/-cmdline  *\"[^\"]*\"/ /g
-	s/-ignore  *'[^']*'/ /g; s/-ignore  *\"[^\"]*\"/ /g
-	s/-def  *'[^']*'/ /g; s/-def  *\"[^\"]*\"/ /g"` ;;
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
 
-  # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
-  *fort77*f2c*gcc*)
-    ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n '
-        /:[	 ]\+Running[	 ]\{1,\}"gcc"/{
-          /"-c"/d
-          /[.]c"*/d
-          s/^.*"gcc"/"gcc"/
-          s/"//gp
-        }'` ;;
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
 
-  # If we are using Cray Fortran then delete quotes.
-  *cft90*)
-    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;;
+ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
+$as_echo_n "checking how to print strings... " >&6; }
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO ""
+}
+
+case $ECHO in
+  printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
+$as_echo "printf" >&6; } ;;
+  print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
+$as_echo "print -r" >&6; } ;;
+  *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
+$as_echo "cat" >&6; } ;;
 esac
 
 
 
-ac_cv_fc_libs=
 
-# Save positional arguments (if any)
-ac_save_positional="$@"
 
-set X $ac_fc_v_output
-while test $# != 1; do
-  shift
-  ac_arg=$1
-  case $ac_arg in
-	[\\/]*.a | ?:[\\/]*.a)
-	    ac_exists=false
-  for ac_i in $ac_cv_fc_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
 
-  if test x"$ac_exists" = xtrue; then :
 
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-fi
-	  ;;
-	-bI:*)
-	    ac_exists=false
-  for ac_i in $ac_cv_fc_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
     fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
   done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
 
-  if test x"$ac_exists" = xtrue; then :
-
-else
-  if test "$ac_compiler_gnu" = yes; then
-  for ac_link_opt in $ac_arg; do
-    ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
+      $ac_path_SED_found && break 3
+    done
   done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
 else
-  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+  ac_cv_path_SED=$SED
 fi
+
 fi
-	  ;;
-	  # Ignore these flags.
-	-lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
-	  |-LANG:=* | -LIST:* | -LNO:* | -link)
-	  ;;
-	-lkernel32)
-	  case $host_os in
-	  *cygwin*) ;;
-	  *) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-	    ;;
-	  esac
-	  ;;
-	-[LRuYz])
-	  # These flags, when seen by themselves, take an argument.
-	  # We remove the space between option and argument and re-iterate
-	  # unless we find an empty arg or a new option (starting with -)
-	  case $2 in
-	     "" | -*);;
-	     *)
-		ac_arg="$ac_arg$2"
-		shift; shift
-		set X $ac_arg "$@"
-		;;
-	  esac
-	  ;;
-	-YP,*)
-	  for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
-	      ac_exists=false
-  for ac_i in $ac_cv_fc_libs; do
-    if test x"$ac_j" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
 
-  if test x"$ac_exists" = xtrue; then :
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
 
-else
-  ac_arg="$ac_arg $ac_j"
-			       ac_cv_fc_libs="$ac_cv_fc_libs $ac_j"
-fi
-	  done
-	  ;;
-	-[lLR]*)
-	    ac_exists=false
-  for ac_i in $ac_cv_fc_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
 
-  if test x"$ac_exists" = xtrue; then :
 
-else
-  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-fi
-	  ;;
-	-zallextract*| -zdefaultextract)
-	  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
-	  ;;
-	  # Ignore everything else.
-  esac
-done
-# restore positional arguments
-set X $ac_save_positional; shift
 
-# We only consider "LD_RUN_PATH" on Solaris systems.  If this is seen,
-# then we insist that the "run path" must be an absolute path (i.e. it
-# must begin with a "/").
-case `(uname -sr) 2>/dev/null` in
-   "SunOS 5"*)
-      ac_ld_run_path=`$as_echo "$ac_fc_v_output" |
-			sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
-      test "x$ac_ld_run_path" != x &&
-	if test "$ac_compiler_gnu" = yes; then
-  for ac_link_opt in $ac_ld_run_path; do
-    ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
   done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
 else
-  ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path"
+  ac_cv_path_GREP=$GREP
 fi
-      ;;
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
-fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
 
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5
-$as_echo "$ac_cv_fc_libs" >&6; }
-FCLIBS="$ac_cv_fc_libs"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
 
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
+$as_echo_n "checking for fgrep... " >&6; }
+if ${ac_cv_path_FGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
+   then ac_cv_path_FGREP="$GREP -F"
+   else
+     if test -z "$FGREP"; then
+  ac_path_FGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in fgrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_FGREP" || continue
+# Check for GNU ac_path_FGREP and select it if it is found.
+  # Check for GNU $ac_path_FGREP
+case `"$ac_path_FGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'FGREP' >> "conftest.nl"
+    "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_FGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_FGREP="$ac_path_FGREP"
+      ac_path_FGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
 
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: before FCLIBS=$FCLIBS" >&5
-$as_echo "$as_me: DEBUG: before FCLIBS=$FCLIBS" >&6;}
-          fi
+      $ac_path_FGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_FGREP"; then
+    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_FGREP=$FGREP
+fi
 
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
+$as_echo "$ac_cv_path_FGREP" >&6; }
+ FGREP="$ac_cv_path_FGREP"
 
 
+test -z "$GREP" && GREP=grep
+
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC links with FCLIBS found by autoconf" >&5
-$as_echo_n "checking whether $CC links with FCLIBS found by autoconf... " >&6; }
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-# Create a simple C program for the tests.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
 
-int
-main ()
-{
-int a;
-  ;
-  return 0;
-}
 
-_ACEOF
-# Try to link a C program with all of these libraries
-saved_LIBS="$LIBS"
-LIBS="$FCLIBS $saved_LIBS"
-if ac_fn_c_try_link "$LINENO"; then :
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-else
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for which libraries can be used" >&5
-$as_echo_n "checking for which libraries can be used... " >&6; }
-    pac_ldirs=""
-    pac_libs=""
-    pac_other=""
-    for name in $FCLIBS ; do
-        case $name in
-        -l*) pac_libs="$pac_libs $name"   ;;
-        -L*) pac_ldirs="$pac_ldirs $name" ;;
-          *) pac_other="$pac_other $name" ;;
-        esac
-    done
-    keep_libs=""
-    for name in $pac_libs ; do
-        LIBS="$saved_LIBS $pac_ldirs $pac_other $name"
-        if ac_fn_c_try_link "$LINENO"; then :
 
-            keep_libs="$keep_libs $name"
 
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-    done
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $keep_libs" >&5
-$as_echo "$keep_libs" >&6; }
-    FCLIBS="$pac_ldirs $pac_other $keep_libs"
 
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-LIBS="$saved_LIBS"
-rm -f conftest.$ac_ext
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: after FCLIBS=$FCLIBS" >&5
-$as_echo "$as_me: DEBUG: after FCLIBS=$FCLIBS" >&6;}
-          fi
 
 
-   FLIBS="$FCLIBS"
-   F90LIBS="$FCLIBS"
 
-      F90FLAGS=${FCFLAGS}
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        mpicc | mpicxx | mpif77 | mpif90 | *[\\/]mpicc | *[\\/]mpicxx | *[\\/]mpif77 | *[\\/]mpif90 )
+           # MPICH compilers
+           #   eval "$cc_temp -show" < /dev/null >& conftest.ver
+           #   func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           #   ${RM} -f conftest.ver
+           func_cc_basename_result=`$cc_temp -show | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        mpifccpx | mpiFCCpx | mpifrtpx | *[\\/]mpifccpx | *[\\/]mpiFCCpx | *[\\/]mpifrtpx )
+           # Fujitsu compilers: fccpx, FCCpx, frtpx
+           func_cc_basename_result=`$cc_temp -showme | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        cc | CC | ftn | *[\\/]cc | *[\\/]CC | *[\\/]ftn )
+           # For Cray PrgEnv-intel, cc is a wrapper of icc
+           # For Cray PrgEnv-gnu, cc is a wrapper of gcc
+           # func_cc_basename_result=`$cc_temp --version |& head -n 1 | cut -d' ' -f1 | xargs basename`
+           eval "$cc_temp --version" < /dev/null >& conftest.ver
+           func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           ${RM} -f conftest.ver
+           if test "x${func_cc_basename_result}" = xicc ||
+              test "x${func_cc_basename_result}" = xicpc ||
+              test "x${func_cc_basename_result}" = xifort ||
+              test "x${func_cc_basename_result}" = xgcc ||
+              test "x${func_cc_basename_result}" = xg++ ||
+              test "x${func_cc_basename_result}" = xgfortran ||
+              test "x${func_cc_basename_result}" = xGNU ; then
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+              return
+           fi
+           # For Cray PrgEnv-cray, cc is a wrapper of Cray CC
+           # Cray cc -V sends the output to stderr.
+           # func_cc_basename_result=`$cc_temp -V |& head -n 1 | cut -d' ' -f1 | xargs basename`
+           eval "$cc_temp -V" < /dev/null >& conftest.ver
+           func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           ${RM} -f conftest.ver
+           if test "x${func_cc_basename_result}" = xCray ; then
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+              return
+           fi
+           return
+           ;;
+        mpixlc | mpixlcxx | mpixlf77 | mpixlf90 | *[\\/]mpixlc | *[\\/]mpixlcxx | *[\\/]mpixlf77 | *[\\/]mpixlf90 )
+           func_cc_basename_result=`$cc_temp -show | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+    # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+}
 
 
-   ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if mpi.mod is available" >&5
-$as_echo_n "checking if mpi.mod is available... " >&6; }
-   cat > conftest.$ac_ext <<_ACEOF
-      program main
-        use mpi
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  mpi_mod=yes
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
 else
-  mpi_mod=no
+  with_gnu_ld=no
+fi
+
+func_cc_basename $CC
+cc_basename=$func_cc_basename_result
 
+
+ac_prog=ld
+
+# special care for Fujitsu compilers
+if test "$cc_basename" = fccpx || test "$cc_basename" = FCCpx ; then
+   if test yes = "$with_gnu_ld" || test "$host_os" = linux-gnu ; then
+      ac_prog=`($CC -Xg -print-prog-name=ld) 2>&5`
+      test -z "$LD" && LD=$ac_prog
+      with_gnu_ld=yes
+   fi
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mpi_mod" >&5
-$as_echo "$mpi_mod" >&6; }
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPIF90 is valid" >&5
-$as_echo_n "checking if MPIF90 is valid... " >&6; }
-   if test "x${mpi_mod}" = xyes ; then
-      cat > conftest.$ac_ext <<_ACEOF
-      program main
-        use mpi
-        integer err, rank
-        call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  valid_mpif90=yes
-else
-  valid_mpif90=no
 
+if test "$ac_prog" = ld && test yes = "$GCC" ; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   else
-            cat > conftest.$ac_ext <<_ACEOF
-      program main
-        include "mpif.h"
-        integer err, rank
-        call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  valid_mpif90=yes
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  valid_mpif90=no
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test no != "$with_gnu_ld" && break
+	;;
+      *)
+	test yes != "$with_gnu_ld" && break
+	;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
 
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $valid_mpif90" >&5
-$as_echo "$valid_mpif90" >&6; }
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
-   if test "x${valid_mpif90}" = xno ; then
-      if test "x${enable_fortran}" = xyes ; then
-         as_fn_error $? "
-            ------------------------------------------------------------
-              Invalid MPI Fortran 90 compiler specified: \"${MPIF90}\"
-              A working MPI compiler is required. Please specify the
-              location of one either with the MPIF90 environment
-              variable or the --with-mpi configure flag.
-            ------------------------------------------------------------" "$LINENO" 5
-      fi
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
-         ------------------------------------------------------------
-           Invalid MPI Fortran 90 compiler: \"${MPIF90}\"
-           Fortran feature is disabled
-         ------------------------------------------------------------" >&5
-$as_echo "$as_me: WARNING:
-         ------------------------------------------------------------
-           Invalid MPI Fortran 90 compiler: \"${MPIF90}\"
-           Fortran feature is disabled
-         ------------------------------------------------------------" >&2;}
-      enable_fortran=no
-   else
-      if test "x${mpi_mod}" = xyes ; then
-         USE_MPIF_HEADER="use mpi, only: MPI_OFFSET_KIND"
-      else
-         USE_MPIF_HEADER="include \"mpif.h\""
-      fi
 
 
-   fi
-fi
 
-F77_SUPPORT_FREEFORM=no
-if test "x${enable_fortran}" != xno && test "x${MPIF77}" != xno ; then
-   F77=${MPIF77}
-   ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
+$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
+if ${lt_cv_path_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	# MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+	case $build_os in
+	mingw*) lt_bad_file=conftest.nm/nofile ;;
+	*) lt_bad_file=/dev/null ;;
+	esac
+	case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+	*$lt_bad_file* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break 2
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break 2
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
+$as_echo "$lt_cv_path_NM" >&6; }
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    if test -n "$ac_tool_prefix"; then
+  for ac_prog in dumpbin "link -dump"
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_F77+:} false; then :
+if ${ac_cv_prog_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$F77"; then
-  ac_cv_prog_F77="$F77" # Let the user override the test.
+  if test -n "$DUMPBIN"; then
+  ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6711,7 +7736,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+    ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6721,32 +7746,32 @@ IFS=$as_save_IFS
 
 fi
 fi
-F77=$ac_cv_prog_F77
-if test -n "$F77"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5
-$as_echo "$F77" >&6; }
+DUMPBIN=$ac_cv_prog_DUMPBIN
+if test -n "$DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
+$as_echo "$DUMPBIN" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-    test -n "$F77" && break
+    test -n "$DUMPBIN" && break
   done
 fi
-if test -z "$F77"; then
-  ac_ct_F77=$F77
-  for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor
+if test -z "$DUMPBIN"; then
+  ac_ct_DUMPBIN=$DUMPBIN
+  for ac_prog in dumpbin "link -dump"
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_F77+:} false; then :
+if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_F77"; then
-  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+  if test -n "$ac_ct_DUMPBIN"; then
+  ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6755,7 +7780,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_F77="$ac_prog"
+    ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6765,21 +7790,21 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_F77=$ac_cv_prog_ac_ct_F77
-if test -n "$ac_ct_F77"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5
-$as_echo "$ac_ct_F77" >&6; }
+ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
+if test -n "$ac_ct_DUMPBIN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
+$as_echo "$ac_ct_DUMPBIN" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$ac_ct_F77" && break
+  test -n "$ac_ct_DUMPBIN" && break
 done
 
-  if test "x$ac_ct_F77" = x; then
-    F77=""
+  if test "x$ac_ct_DUMPBIN" = x; then
+    DUMPBIN=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -6787,1379 +7812,964 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    F77=$ac_ct_F77
+    DUMPBIN=$ac_ct_DUMPBIN
   fi
 fi
 
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
 
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
   fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-rm -f a.out
+fi
+test -z "$NM" && NM=nm
 
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file.  (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5
-$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; }
-if ${ac_cv_f77_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
-#ifndef __GNUC__
-       choke me
-#endif
 
-      end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_f77_compiler_gnu=$ac_compiler_gnu
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5
-$as_echo "$ac_cv_f77_compiler_gnu" >&6; }
-ac_ext=$ac_save_ext
-ac_test_FFLAGS=${FFLAGS+set}
-ac_save_FFLAGS=$FFLAGS
-FFLAGS=
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5
-$as_echo_n "checking whether $F77 accepts -g... " >&6; }
-if ${ac_cv_prog_f77_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  FFLAGS=-g
-cat > conftest.$ac_ext <<_ACEOF
-      program main
 
-      end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_prog_f77_g=yes
-else
-  ac_cv_prog_f77_g=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5
-$as_echo "$ac_cv_prog_f77_g" >&6; }
-if test "$ac_test_FFLAGS" = set; then
-  FFLAGS=$ac_save_FFLAGS
-elif test $ac_cv_prog_f77_g = yes; then
-  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
-    FFLAGS="-g -O2"
-  else
-    FFLAGS="-g"
-  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
+$as_echo_n "checking the name lister ($NM) interface... " >&6; }
+if ${lt_cv_nm_interface+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
-    FFLAGS="-O2"
-  else
-    FFLAGS=
+  lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&5
+  (eval echo "\"\$as_me:$LINENO: output\"" >&5)
+  cat conftest.out >&5
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
   fi
+  rm -f conftest*
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
+$as_echo "$lt_cv_nm_interface" >&6; }
 
-if test $ac_compiler_gnu = yes; then
-  G77=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  G77=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
 fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
 
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5
-$as_echo_n "checking how to get verbose linking output from $F77... " >&6; }
-if ${ac_cv_prog_f77_v+:} false; then :
+# find the maximum length of command line arguments
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
+$as_echo_n "checking the maximum length of command line arguments... " >&6; }
+if ${lt_cv_sys_max_cmd_len+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+    i=0
+  teststring=ABCD
 
-      end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_prog_f77_v=
-# Try some options frequently used verbose output
-for ac_verb in -v -verbose -V -\#\#\# --verbose; do
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
 
-      end
-_ACEOF
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
 
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FFLAGS=$FFLAGS
-FFLAGS="$FFLAGS $ac_verb"
-eval "set x $ac_link"
-shift
-$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
-# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
-# LIBRARY_PATH; skip all such settings.
-ac_f77_v_output=`eval $ac_link 5>&1 2>&1 |
-  sed '/^Driving:/d; /^Configured with:/d;
-      '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
-$as_echo "$ac_f77_v_output" >&5
-FFLAGS=$ac_save_FFLAGS
-
-rm -rf conftest*
-
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_f77_v_output="`echo $ac_f77_v_output |
-	grep 'LPATH is:' |
-	sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output"
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
-# FIXME: we keep getting bitten by quoted arguments; a more general fix
-#        that detects unbalanced quotes in FLIBS should be implemented
-#        and (ugh) tested at some point.
-case $ac_f77_v_output in
-  # With xlf replace commas with spaces,
-  # and remove "-link" and closing parenthesis.
-  *xlfentry*)
-    ac_f77_v_output=`echo $ac_f77_v_output |
-      sed '
-        s/,/ /g
-        s/ -link / /g
-        s/) *$//
-      '
-    ` ;;
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
-  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
-  # $LIBS confuse us, and the libraries appear later in the output anyway).
-  *mGLOB_options_string*)
-    ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
 
-  # Portland Group compiler has singly- or doubly-quoted -cmdline argument
-  # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
-  # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
-  *-cmdline\ * | *-ignore\ * | *-def\ *)
-    ac_f77_v_output=`echo $ac_f77_v_output | sed "\
-	s/-cmdline  *'[^']*'/ /g; s/-cmdline  *\"[^\"]*\"/ /g
-	s/-ignore  *'[^']*'/ /g; s/-ignore  *\"[^\"]*\"/ /g
-	s/-def  *'[^']*'/ /g; s/-def  *\"[^\"]*\"/ /g"` ;;
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
 
-  # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
-  *fort77*f2c*gcc*)
-    ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n '
-        /:[	 ]\+Running[	 ]\{1,\}"gcc"/{
-          /"-c"/d
-          /[.]c"*/d
-          s/^.*"gcc"/"gcc"/
-          s/"//gp
-        }'` ;;
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
 
-  # If we are using Cray Fortran then delete quotes.
-  *cft90*)
-    ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;;
-esac
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
 
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[	 ]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
 
-  # look for -l* and *.a constructs in the output
-  for ac_arg in $ac_f77_v_output; do
-     case $ac_arg in
-	[\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
-	  ac_cv_prog_f77_v=$ac_verb
-	  break 2 ;;
-     esac
-  done
-done
-if test -z "$ac_cv_prog_f77_v"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5
-$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;}
 fi
+
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
+$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5
-$as_echo "$as_me: WARNING: compilation failed" >&2;}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
+$as_echo "none" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+max_cmd_len=$lt_cv_sys_max_cmd_len
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5
-$as_echo "$ac_cv_prog_f77_v" >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5
-$as_echo_n "checking for Fortran 77 libraries of $F77... " >&6; }
-if ${ac_cv_f77_libs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$FLIBS" != "x"; then
-  ac_cv_f77_libs="$FLIBS" # Let the user override the test.
-else
 
-cat > conftest.$ac_ext <<_ACEOF
-      program main
 
-      end
-_ACEOF
 
-# Compile and link our simple test program by passing a flag (argument
-# 1 to this macro) to the Fortran compiler in order to get
-# "verbose" output that we can then parse for the Fortran linker
-# flags.
-ac_save_FFLAGS=$FFLAGS
-FFLAGS="$FFLAGS $ac_cv_prog_f77_v"
-eval "set x $ac_link"
-shift
-$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
-# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
-# LIBRARY_PATH; skip all such settings.
-ac_f77_v_output=`eval $ac_link 5>&1 2>&1 |
-  sed '/^Driving:/d; /^Configured with:/d;
-      '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
-$as_echo "$ac_f77_v_output" >&5
-FFLAGS=$ac_save_FFLAGS
 
-rm -rf conftest*
 
-# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
-# /foo, /bar, and /baz are search directories for the Fortran linker.
-# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
-ac_f77_v_output="`echo $ac_f77_v_output |
-	grep 'LPATH is:' |
-	sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output"
+: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
 
-# FIXME: we keep getting bitten by quoted arguments; a more general fix
-#        that detects unbalanced quotes in FLIBS should be implemented
-#        and (ugh) tested at some point.
-case $ac_f77_v_output in
-  # With xlf replace commas with spaces,
-  # and remove "-link" and closing parenthesis.
-  *xlfentry*)
-    ac_f77_v_output=`echo $ac_f77_v_output |
-      sed '
-        s/,/ /g
-        s/ -link / /g
-        s/) *$//
-      '
-    ` ;;
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
 
-  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
-  # $LIBS confuse us, and the libraries appear later in the output anyway).
-  *mGLOB_options_string*)
-    ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
 
-  # Portland Group compiler has singly- or doubly-quoted -cmdline argument
-  # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
-  # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
-  *-cmdline\ * | *-ignore\ * | *-def\ *)
-    ac_f77_v_output=`echo $ac_f77_v_output | sed "\
-	s/-cmdline  *'[^']*'/ /g; s/-cmdline  *\"[^\"]*\"/ /g
-	s/-ignore  *'[^']*'/ /g; s/-ignore  *\"[^\"]*\"/ /g
-	s/-def  *'[^']*'/ /g; s/-def  *\"[^\"]*\"/ /g"` ;;
 
-  # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
-  *fort77*f2c*gcc*)
-    ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n '
-        /:[	 ]\+Running[	 ]\{1,\}"gcc"/{
-          /"-c"/d
-          /[.]c"*/d
-          s/^.*"gcc"/"gcc"/
-          s/"//gp
-        }'` ;;
 
-  # If we are using Cray Fortran then delete quotes.
-  *cft90*)
-    ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;;
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
 esac
 
 
 
-ac_cv_f77_libs=
 
-# Save positional arguments (if any)
-ac_save_positional="$@"
 
-set X $ac_f77_v_output
-while test $# != 1; do
-  shift
-  ac_arg=$1
-  case $ac_arg in
-	[\\/]*.a | ?:[\\/]*.a)
-	    ac_exists=false
-  for ac_i in $ac_cv_f77_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
 
-  if test x"$ac_exists" = xtrue; then :
 
-else
-  ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
-fi
-	  ;;
-	-bI:*)
-	    ac_exists=false
-  for ac_i in $ac_cv_f77_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
 
-  if test x"$ac_exists" = xtrue; then :
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
+$as_echo_n "checking how to convert $build file names to $host format... " >&6; }
+if ${lt_cv_to_host_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  if test "$ac_compiler_gnu" = yes; then
-  for ac_link_opt in $ac_arg; do
-    ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt"
-  done
-else
-  ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
-fi
+  case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+
 fi
-	  ;;
-	  # Ignore these flags.
-	-lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
-	  |-LANG:=* | -LIST:* | -LNO:* | -link)
-	  ;;
-	-lkernel32)
-	  case $host_os in
-	  *cygwin*) ;;
-	  *) ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
-	    ;;
-	  esac
-	  ;;
-	-[LRuYz])
-	  # These flags, when seen by themselves, take an argument.
-	  # We remove the space between option and argument and re-iterate
-	  # unless we find an empty arg or a new option (starting with -)
-	  case $2 in
-	     "" | -*);;
-	     *)
-		ac_arg="$ac_arg$2"
-		shift; shift
-		set X $ac_arg "$@"
-		;;
-	  esac
-	  ;;
-	-YP,*)
-	  for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
-	      ac_exists=false
-  for ac_i in $ac_cv_f77_libs; do
-    if test x"$ac_j" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
 
-  if test x"$ac_exists" = xtrue; then :
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
+$as_echo "$lt_cv_to_host_file_cmd" >&6; }
 
-else
-  ac_arg="$ac_arg $ac_j"
-			       ac_cv_f77_libs="$ac_cv_f77_libs $ac_j"
-fi
-	  done
-	  ;;
-	-[lLR]*)
-	    ac_exists=false
-  for ac_i in $ac_cv_f77_libs; do
-    if test x"$ac_arg" = x"$ac_i"; then
-      ac_exists=true
-      break
-    fi
-  done
 
-  if test x"$ac_exists" = xtrue; then :
 
-else
-  ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
-fi
-	  ;;
-	-zallextract*| -zdefaultextract)
-	  ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg"
-	  ;;
-	  # Ignore everything else.
-  esac
-done
-# restore positional arguments
-set X $ac_save_positional; shift
 
-# We only consider "LD_RUN_PATH" on Solaris systems.  If this is seen,
-# then we insist that the "run path" must be an absolute path (i.e. it
-# must begin with a "/").
-case `(uname -sr) 2>/dev/null` in
-   "SunOS 5"*)
-      ac_ld_run_path=`$as_echo "$ac_f77_v_output" |
-			sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
-      test "x$ac_ld_run_path" != x &&
-	if test "$ac_compiler_gnu" = yes; then
-  for ac_link_opt in $ac_ld_run_path; do
-    ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt"
-  done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
+$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
+if ${lt_cv_to_tool_file_cmd+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path"
-fi
-      ;;
+  #assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
 esac
-fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5
-$as_echo "$ac_cv_f77_libs" >&6; }
-FLIBS="$ac_cv_f77_libs"
 
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
+$as_echo "$lt_cv_to_tool_file_cmd" >&6; }
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-      F77FLAGS=${FFLAGS}
 
 
-      FC_saved=${FC}
-   FC=${F77}
-   ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5
-$as_echo_n "checking for Fortran flag needed to accept free-form source... " >&6; }
-if ${ac_cv_fc_freeform+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
+$as_echo_n "checking for $LD option to reload object files... " >&6; }
+if ${lt_cv_ld_reload_flag+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_cv_fc_freeform=unknown
-ac_fc_freeform_FCFLAGS_save=$FCFLAGS
-for ac_flag in none -ffree-form -FR -free -qfree=f90 -qfree -Mfree -Mfreeform \
-	       -freeform "-f free" -8 +source=free -nfix --nfix -Free
-do
-  test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-
-  program freeform
-       ! FIXME: how to best confuse non-freeform compilers?
-       print *, 'Hello ', &
-          'world.'
-       end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_freeform=$ac_flag; break
+  lt_cv_ld_reload_flag='-r'
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-${RM} -f conftest.err conftest.$ac_objext conftest.$ac_ext
-FCFLAGS=$ac_fc_freeform_FCFLAGS_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
+$as_echo "$lt_cv_ld_reload_flag" >&6; }
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test yes != "$GCC"; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS $nostdlib_flag -nostdlib $wl-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5
-$as_echo "$ac_cv_fc_freeform" >&6; }
-if test "x$ac_cv_fc_freeform" = xunknown; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran $FC does not accept free-form source" >&5
-$as_echo "$as_me: WARNING: Fortran $FC does not accept free-form source" >&2;}
-else
-          if test "x$ac_cv_fc_freeform" = xnone; then
-     ac_cv_fc_freeform=
-  fi
 
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-   if test "x${ac_cv_fc_freeform}" != xunknown ; then
-      F77_SUPPORT_FREEFORM=yes
-      FFREEFORMFLAG=${ac_cv_fc_freeform}
-   fi
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FC=$FC F90FLAGS=$F90FLAGS FFREEFORMFLAG=$FFREEFORMFLAG" >&5
-$as_echo "$as_me: DEBUG: FC=$FC F90FLAGS=$F90FLAGS FFREEFORMFLAG=$FFREEFORMFLAG" >&6;}
-          fi
 
 
 
-   FC=${FC_saved}
 
-   ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPIF77 is valid" >&5
-$as_echo_n "checking if MPIF77 is valid... " >&6; }
-   cat > conftest.$ac_ext <<_ACEOF
-      program main
-        include "mpif.h"
-        integer comm
-        comm = MPI_COMM_WORLD
-      end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  valid_mpif77=yes
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
+set dummy ${ac_tool_prefix}objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OBJDUMP+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  valid_mpif77=no
+  if test -n "$OBJDUMP"; then
+  ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $valid_mpif77" >&5
-$as_echo "$valid_mpif77" >&6; }
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-   if test "x${valid_mpif77}" = xno ; then
-      if test "x${enable_fortran}" = xyes ; then
-         as_fn_error $? "
-            ------------------------------------------------------------
-              Invalid MPI Fortran 77 compiler specified: \"${MPIF77}\"
-              A working MPI compiler is required. Please specify the
-              location of one either with the MPIF77 environment
-              variable or the --with-mpi configure flag
-            ------------------------------------------------------------" "$LINENO" 5
-      fi
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
-         ------------------------------------------------------------
-           MPI Fortran header file mpif.h is not valid:
-           Fortran feature is disabled
-         ------------------------------------------------------------" >&5
-$as_echo "$as_me: WARNING:
-         ------------------------------------------------------------
-           MPI Fortran header file mpif.h is not valid:
-           Fortran feature is disabled
-         ------------------------------------------------------------" >&2;}
-      enable_fortran=no
-   fi
+fi
+OBJDUMP=$ac_cv_prog_OBJDUMP
+if test -n "$OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
+$as_echo "$OBJDUMP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
-if test "x${enable_fortran}" = xauto ; then
-   if test "x${valid_mpif77}" = xyes && test "x${valid_mpif90}" = xyes ; then
-      enable_fortran=yes
-   else
-      enable_fortran=no
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
-         ------------------------------------------------------------
-           Either MPI Fortran 77 or 90 compiler is not working:
-               \"MPIF77 = ${MPIF77}\"
-               \"MPIF90 = ${MPIF90}\"
-           Disable Fortran feature ...
-         ------------------------------------------------------------" >&5
-$as_echo "$as_me: WARNING:
-         ------------------------------------------------------------
-           Either MPI Fortran 77 or 90 compiler is not working:
-               \"MPIF77 = ${MPIF77}\"
-               \"MPIF90 = ${MPIF90}\"
-           Disable Fortran feature ...
-         ------------------------------------------------------------" >&2;}
-   fi
 fi
-
-if test "x${enable_fortran}" = xyes ; then
-                     ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile preprocessed .f files" >&5
-$as_echo_n "checking for Fortran flag to compile preprocessed .f files... " >&6; }
-if ${ac_cv_fc_pp_srcext_f+:} false; then :
+if test -z "$ac_cv_prog_OBJDUMP"; then
+  ac_ct_OBJDUMP=$OBJDUMP
+  # Extract the first word of "objdump", so it can be a program name with args.
+set dummy objdump; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_ext=f
-FCFLAGS_SRCEXT_save=$FCFLAGS_SRCEXT
-FCFLAGS_SRCEXT=
-ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_pp_srcext_f=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77-cpp-input;; #(
-  [fF]) ac_try=f77-cpp-input;; #(
-  *) ac_try=f95-cpp-input;;
-esac
-for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
-               -cpp -xpp=cpp -qsuffix=cpp=f "-x $ac_try" +cpp -Cpp; do
-  test "x$ac_flag" != xnone && FCFLAGS_SRCEXT="$ac_flag" && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
-
-#if 0
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
-
-#if 1
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-
+  if test -n "$ac_ct_OBJDUMP"; then
+  ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
 else
-  ac_cv_fc_pp_srcext_f=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OBJDUMP="objdump"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
-${RM} -f conftest.$ac_objext conftest.f
-FCFLAGS_SRCEXT=$FCFLAGS_SRCEXT_save
-ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+  done
+IFS=$as_save_IFS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_srcext_f" >&5
-$as_echo "$ac_cv_fc_pp_srcext_f" >&6; }
-if test "x$ac_cv_fc_pp_srcext_f" = xunknown; then
-  as_fn_error $? "Fortran could not compile preprocessed .f files" "$LINENO" 5
-else
-  ac_fc_srcext=f
-  if test "x$ac_cv_fc_pp_srcext_f" = xnone; then
-    FCFLAGS_SRCEXT=""
-    ac_cv_fc_pp_srcext_f=""
-      else
-    FCFLAGS_SRCEXT=$ac_cv_fc_pp_srcext_f
-      fi
-
 fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-       ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile preprocessed .F files" >&5
-$as_echo_n "checking for Fortran flag to compile preprocessed .F files... " >&6; }
-if ${ac_cv_fc_pp_srcext_F+:} false; then :
-  $as_echo_n "(cached) " >&6
+ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
+if test -n "$ac_ct_OBJDUMP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
+$as_echo "$ac_ct_OBJDUMP" >&6; }
 else
-  ac_ext=F
-FCFLAGS_SRCEXT_save=$FCFLAGS_SRCEXT
-FCFLAGS_SRCEXT=
-ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_pp_srcext_F=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77-cpp-input;; #(
-  [fF]) ac_try=f77-cpp-input;; #(
-  *) ac_try=f95-cpp-input;;
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OBJDUMP" = x; then
+    OBJDUMP="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
 esac
-for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
-               -cpp -xpp=cpp -qsuffix=cpp=F "-x $ac_try" +cpp -Cpp; do
-  test "x$ac_flag" != xnone && FCFLAGS_SRCEXT="$ac_flag" && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+    OBJDUMP=$ac_ct_OBJDUMP
+  fi
+else
+  OBJDUMP="$ac_cv_prog_OBJDUMP"
+fi
 
-#if 0
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+test -z "$OBJDUMP" && OBJDUMP=objdump
 
-#if 1
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
 
-else
-  ac_cv_fc_pp_srcext_F=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-${RM} -f conftest.$ac_objext conftest.F
-FCFLAGS_SRCEXT=$FCFLAGS_SRCEXT_save
-ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_srcext_F" >&5
-$as_echo "$ac_cv_fc_pp_srcext_F" >&6; }
-if test "x$ac_cv_fc_pp_srcext_F" = xunknown; then
-  as_fn_error $? "Fortran could not compile preprocessed .F files" "$LINENO" 5
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
+$as_echo_n "checking how to recognize dependent libraries... " >&6; }
+if ${lt_cv_deplibs_check_method+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_fc_srcext=F
-  if test "x$ac_cv_fc_pp_srcext_F" = xnone; then
-    FCFLAGS_SRCEXT=""
-    ac_cv_fc_pp_srcext_F=""
-      else
-    FCFLAGS_SRCEXT=$ac_cv_fc_pp_srcext_F
-      fi
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[4-9]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-       ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile preprocessed .f90 files" >&5
-$as_echo_n "checking for Fortran flag to compile preprocessed .f90 files... " >&6; }
-if ${ac_cv_fc_pp_srcext_f90+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=f90
-FCFLAGS_SRCEXT_save=$FCFLAGS_SRCEXT
-FCFLAGS_SRCEXT=
-ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_pp_srcext_f90=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77-cpp-input;; #(
-  [fF]) ac_try=f77-cpp-input;; #(
-  *) ac_try=f95-cpp-input;;
-esac
-for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
-               -cpp -xpp=cpp -qsuffix=cpp=f90 "-x $ac_try" +cpp -Cpp; do
-  test "x$ac_flag" != xnone && FCFLAGS_SRCEXT="$ac_flag" && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-#if 0
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+bsdi[45]*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
 
-#if 1
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
 
-else
-  ac_cv_fc_pp_srcext_f90=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-${RM} -f conftest.$ac_objext conftest.f90
-FCFLAGS_SRCEXT=$FCFLAGS_SRCEXT_save
-ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_srcext_f90" >&5
-$as_echo "$ac_cv_fc_pp_srcext_f90" >&6; }
-if test "x$ac_cv_fc_pp_srcext_f90" = xunknown; then
-  as_fn_error $? "Fortran could not compile preprocessed .f90 files" "$LINENO" 5
-else
-  ac_fc_srcext=f90
-  if test "x$ac_cv_fc_pp_srcext_f90" = xnone; then
-    FCFLAGS_SRCEXT=""
-    ac_cv_fc_pp_srcext_f90=""
-      else
-    FCFLAGS_SRCEXT=$ac_cv_fc_pp_srcext_f90
-      fi
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
 
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-     ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile preprocessed .F90 files" >&5
-$as_echo_n "checking for Fortran flag to compile preprocessed .F90 files... " >&6; }
-if ${ac_cv_fc_pp_srcext_F90+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=F90
-FCFLAGS_SRCEXT_save=$FCFLAGS_SRCEXT
-FCFLAGS_SRCEXT=
-ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_pp_srcext_F90=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77-cpp-input;; #(
-  [fF]) ac_try=f77-cpp-input;; #(
-  *) ac_try=f95-cpp-input;;
-esac
-for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
-               -cpp -xpp=cpp -qsuffix=cpp=F90 "-x $ac_try" +cpp -Cpp; do
-  test "x$ac_flag" != xnone && FCFLAGS_SRCEXT="$ac_flag" && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-#if 0
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
 
-#if 1
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-else
-  ac_cv_fc_pp_srcext_F90=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-${RM} -f conftest.$ac_objext conftest.F90
-FCFLAGS_SRCEXT=$FCFLAGS_SRCEXT_save
-ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_srcext_F90" >&5
-$as_echo "$ac_cv_fc_pp_srcext_F90" >&6; }
-if test "x$ac_cv_fc_pp_srcext_F90" = xunknown; then
-  as_fn_error $? "Fortran could not compile preprocessed .F90 files" "$LINENO" 5
-else
-  ac_fc_srcext=F90
-  if test "x$ac_cv_fc_pp_srcext_F90" = xnone; then
-    FCFLAGS_SRCEXT=""
-    ac_cv_fc_pp_srcext_F90=""
-      else
-    FCFLAGS_SRCEXT=$ac_cv_fc_pp_srcext_F90
-      fi
+interix[3-9]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
+  ;;
 
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-   F77PPFLAGS_f=${ac_cv_fc_pp_srcext_f}
-   F77PPFLAGS_F=${ac_cv_fc_pp_srcext_F}
-   F90PPFLAGS_f90=${ac_cv_fc_pp_srcext_f90}
-   F90PPFLAGS_F90=${ac_cv_fc_pp_srcext_F90}
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
+  fi
+  ;;
 
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
 
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
+  fi
+  ;;
 
-   FPPFLAGS=${FPPFLAGS-}
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-      ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-ac_fc_pp_define_srcext_save=$ac_fc_srcext
-ac_ext_saved=$ac_ext
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile preprocessed .F files" >&5
-$as_echo_n "checking for Fortran flag to compile preprocessed .F files... " >&6; }
-if ${ac_cv_fc_pp_srcext_F+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=F
-FCFLAGS_SRCEXT_save=$FCFLAGS_SRCEXT
-FCFLAGS_SRCEXT=
-ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_pp_srcext_F=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77-cpp-input;; #(
-  [fF]) ac_try=f77-cpp-input;; #(
-  *) ac_try=f95-cpp-input;;
-esac
-for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
-               -cpp -xpp=cpp -qsuffix=cpp=F "-x $ac_try" +cpp -Cpp; do
-  test "x$ac_flag" != xnone && FCFLAGS_SRCEXT="$ac_flag" && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
 
-#if 0
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
 
-#if 1
-#include <ac_nonexistent.h>
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
 
-else
-  ac_cv_fc_pp_srcext_F=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-${RM} -f conftest.$ac_objext conftest.F
-FCFLAGS_SRCEXT=$FCFLAGS_SRCEXT_save
-ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
+$as_echo "$lt_cv_deplibs_check_method" >&6; }
 
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"`
+    fi
+    ;;
+  esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_srcext_F" >&5
-$as_echo "$ac_cv_fc_pp_srcext_F" >&6; }
-if test "x$ac_cv_fc_pp_srcext_F" = xunknown; then
-  as_fn_error $? "Fortran could not compile preprocessed .F files" "$LINENO" 5
-else
-  ac_fc_srcext=F
-  if test "x$ac_cv_fc_pp_srcext_F" = xnone; then
-    FCFLAGS_SRCEXT=""
-    ac_cv_fc_pp_srcext_F=""
-      else
-    FCFLAGS_SRCEXT=$ac_cv_fc_pp_srcext_F
-      fi
 
-fi
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
 
-ac_ext=F
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to define symbols for preprocessed Fortran" >&5
-$as_echo_n "checking how to define symbols for preprocessed Fortran... " >&6; }
-if ${ac_cv_fc_pp_define+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_fc_pp_define_srcext_save=$ac_fc_srcext
-ac_cv_fc_pp_define=unknown
-ac_fc_pp_define_FCFLAGS_save=$FCFLAGS
-for ac_flag in -D -WF,-D -Wp,-D -Wc,-D
-do
-  FCFLAGS="$ac_fc_pp_define_FCFLAGS_save ${ac_flag}FOOBAR ${ac_flag}ZORK=42"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
 
-#ifndef FOOBAR
-      choke me
-#endif
-#if ZORK != 42
-      choke me
-#endif
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_pp_define=$ac_flag
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  test x"$ac_cv_fc_pp_define" != xunknown && break
-done
-FCFLAGS=$ac_fc_pp_define_FCFLAGS_save
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_define" >&5
-$as_echo "$ac_cv_fc_pp_define" >&6; }
-ac_fc_srcext=$ac_fc_pp_define_srcext_save
-if test "x$ac_cv_fc_pp_define" = xunknown; then
-  FC_DEFINE=
-  as_fn_error 77 "Fortran does not allow to define preprocessor symbols" "$LINENO" 5
-else
-  FC_DEFINE=$ac_cv_fc_pp_define
 
-fi
-ac_ext=$ac_ext_saved
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-      ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-   ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f files" >&5
-$as_echo_n "checking for Fortran flag to compile .f files... " >&6; }
-if ${ac_cv_fc_srcext_f+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=f
-ac_fcflags_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_srcext_f=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77;; #(
-  *) ac_try=f95;;
-esac
-for ac_flag in none -qsuffix=f=f -Tf "-x $ac_try"; do
-  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
 
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_srcext_f=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest.$ac_objext conftest.f
-ac_fcflags_srcext=$ac_fcflags_srcext_save
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f" >&5
-$as_echo "$ac_cv_fc_srcext_f" >&6; }
-if test "x$ac_cv_fc_srcext_f" = xunknown; then
-  as_fn_error $? "Fortran could not compile .f files" "$LINENO" 5
-else
-  ac_fc_srcext=f
-  if test "x$ac_cv_fc_srcext_f" = xnone; then
-    ac_fcflags_srcext=""
-    FCFLAGS_f=""
-  else
-    ac_fcflags_srcext=$ac_cv_fc_srcext_f
-    FCFLAGS_f=$ac_cv_fc_srcext_f
-  fi
 
 
-fi
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-   ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F files" >&5
-$as_echo_n "checking for Fortran flag to compile .F files... " >&6; }
-if ${ac_cv_fc_srcext_F+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=F
-ac_fcflags_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_srcext_F=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77;; #(
-  *) ac_try=f95;;
-esac
-for ac_flag in none -qsuffix=f=F -Tf "-x $ac_try"; do
-  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
 
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_srcext_F=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-rm -f conftest.$ac_objext conftest.F
-ac_fcflags_srcext=$ac_fcflags_srcext_save
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F" >&5
-$as_echo "$ac_cv_fc_srcext_F" >&6; }
-if test "x$ac_cv_fc_srcext_F" = xunknown; then
-  as_fn_error $? "Fortran could not compile .F files" "$LINENO" 5
-else
-  ac_fc_srcext=F
-  if test "x$ac_cv_fc_srcext_F" = xnone; then
-    ac_fcflags_srcext=""
-    FCFLAGS_F=""
-  else
-    ac_fcflags_srcext=$ac_cv_fc_srcext_F
-    FCFLAGS_F=$ac_cv_fc_srcext_F
-  fi
 
 
-fi
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-   ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5
-$as_echo_n "checking for Fortran flag to compile .f90 files... " >&6; }
-if ${ac_cv_fc_srcext_f90+:} false; then :
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_ext=f90
-ac_fcflags_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_srcext_f90=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77;; #(
-  *) ac_try=f95;;
-esac
-for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do
-  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_srcext_f90=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  if test -n "$DLLTOOL"; then
+  ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
-rm -f conftest.$ac_objext conftest.f90
-ac_fcflags_srcext=$ac_fcflags_srcext_save
+  done
+IFS=$as_save_IFS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5
-$as_echo "$ac_cv_fc_srcext_f90" >&6; }
-if test "x$ac_cv_fc_srcext_f90" = xunknown; then
-  as_fn_error $? "Fortran could not compile .f90 files" "$LINENO" 5
+fi
+DLLTOOL=$ac_cv_prog_DLLTOOL
+if test -n "$DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
+$as_echo "$DLLTOOL" >&6; }
 else
-  ac_fc_srcext=f90
-  if test "x$ac_cv_fc_srcext_f90" = xnone; then
-    ac_fcflags_srcext=""
-    FCFLAGS_f90=""
-  else
-    ac_fcflags_srcext=$ac_cv_fc_srcext_f90
-    FCFLAGS_f90=$ac_cv_fc_srcext_f90
-  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
 fi
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
-   ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5
-$as_echo_n "checking for Fortran flag to compile .F90 files... " >&6; }
-if ${ac_cv_fc_srcext_F90+:} false; then :
+if test -z "$ac_cv_prog_DLLTOOL"; then
+  ac_ct_DLLTOOL=$DLLTOOL
+  # Extract the first word of "dlltool", so it can be a program name with args.
+set dummy dlltool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_ext=F90
-ac_fcflags_srcext_save=$ac_fcflags_srcext
-ac_fcflags_srcext=
-ac_cv_fc_srcext_F90=unknown
-case $ac_ext in #(
-  [fF]77) ac_try=f77;; #(
-  *) ac_try=f95;;
-esac
-for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do
-  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_srcext_F90=$ac_flag; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  if test -n "$ac_ct_DLLTOOL"; then
+  ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_DLLTOOL="dlltool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
-rm -f conftest.$ac_objext conftest.F90
-ac_fcflags_srcext=$ac_fcflags_srcext_save
+  done
+IFS=$as_save_IFS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5
-$as_echo "$ac_cv_fc_srcext_F90" >&6; }
-if test "x$ac_cv_fc_srcext_F90" = xunknown; then
-  as_fn_error $? "Fortran could not compile .F90 files" "$LINENO" 5
+fi
+ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
+if test -n "$ac_ct_DLLTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
+$as_echo "$ac_ct_DLLTOOL" >&6; }
 else
-  ac_fc_srcext=F90
-  if test "x$ac_cv_fc_srcext_F90" = xnone; then
-    ac_fcflags_srcext=""
-    FCFLAGS_F90=""
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_DLLTOOL" = x; then
+    DLLTOOL="false"
   else
-    ac_fcflags_srcext=$ac_cv_fc_srcext_F90
-    FCFLAGS_F90=$ac_cv_fc_srcext_F90
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DLLTOOL=$ac_ct_DLLTOOL
   fi
+else
+  DLLTOOL="$ac_cv_prog_DLLTOOL"
+fi
 
+test -z "$DLLTOOL" && DLLTOOL=dlltool
 
-fi
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
 
 
 
 
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-      ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept fixed-form source" >&5
-$as_echo_n "checking for Fortran flag needed to accept fixed-form source... " >&6; }
-if ${ac_cv_fc_fixedform+:} false; then :
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
+$as_echo_n "checking how to associate runtime and link libraries... " >&6; }
+if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_cv_fc_fixedform=unknown
-ac_fc_fixedform_FCFLAGS_save=$FCFLAGS
-for ac_flag in none -ffixed-form -fixed -qfixed -Mfixed -fixedform "-f fixed" \
-               +source=fixed -fix --fix -Fixed
-do
-  test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_fixedform_FCFLAGS_save $ac_flag"
-  cat > conftest.$ac_ext <<_ACEOF
+  lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
+  ;;
+esac
 
-C     This comment should confuse free-form compilers.
-      program main
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_fixedform=$ac_flag; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
+$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in ar
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
-${RM} -f conftest.err conftest.$ac_objext conftest.$ac_ext
-FCFLAGS=$ac_fc_fixedform_FCFLAGS_save
+  done
+IFS=$as_save_IFS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_fixedform" >&5
-$as_echo "$ac_cv_fc_fixedform" >&6; }
-if test "x$ac_cv_fc_fixedform" = xunknown; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran does not accept fixed-form source" >&5
-$as_echo "$as_me: WARNING: Fortran does not accept fixed-form source" >&2;}
-  ac_cv_fc_fixedform=
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
 else
-          if test "x$ac_cv_fc_fixedform" = xnone; then
-     ac_cv_fc_fixedform=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$AR" && break
+  done
+fi
+if test -z "$AR"; then
+  ac_ct_AR=$AR
+  for ac_prog in ar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
   fi
+done
+  done
+IFS=$as_save_IFS
 
 fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-   FFIXEDFORMFLAG=${ac_cv_fc_fixedform}
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FC=$FC F90FLAGS=$F90FLAGS FFIXEDFORMFLAG=$FFIXEDFORMFLAG" >&5
-$as_echo "$as_me: DEBUG: FC=$FC F90FLAGS=$F90FLAGS FFIXEDFORMFLAG=$FFIXEDFORMFLAG" >&6;}
-          fi
 
+  test -n "$ac_ct_AR" && break
+done
+
+  if test "x$ac_ct_AR" = x; then
+    AR="false"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+fi
+
+: ${AR=ar}
+: ${AR_FLAGS=cru}
 
 
 
-   # Checking for Fortran types also determines the Fortran name mangling
-   # and places the value into FCALLSCSUB as the C name corresponding
-   # to the Fortran name SUB
-   ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5
-$as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; }
-if ${ac_cv_fc_dummy_main+:} false; then :
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
+$as_echo_n "checking for archiver @FILE support... " >&6; }
+if ${lt_cv_ar_at_file+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_fc_dm_save_LIBS=$LIBS
- LIBS="$LIBS $FCLIBS"
- ac_fortran_dm_var=FC_DUMMY_MAIN
- ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
- # First, try linking without a dummy main:
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  lt_cv_ar_at_file=no
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
 int
 main ()
 {
@@ -8168,453 +8778,285 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_fortran_dummy_main=none
-else
-  ac_cv_fortran_dummy_main=unknown
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+if ac_fn_c_try_compile "$LINENO"; then :
+  echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
+      { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+      if test 0 -eq "$ac_status"; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	{ { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
+  (eval $lt_ar_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	if test 0 -ne "$ac_status"; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
 
- if test $ac_cv_fortran_dummy_main = unknown; then
-   for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#define $ac_fortran_dm_var $ac_func
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_fortran_dummy_main=$ac_func; break
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-   done
- fi
- ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
- ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main
- rm -rf conftest*
- LIBS=$ac_fc_dm_save_LIBS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
+$as_echo "$lt_cv_ar_at_file" >&6; }
 
+if test no = "$lt_cv_ar_at_file"; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5
-$as_echo "$ac_cv_fc_dummy_main" >&6; }
-FC_DUMMY_MAIN=$ac_cv_fc_dummy_main
-if test "$FC_DUMMY_MAIN" != unknown; then :
-  if test $FC_DUMMY_MAIN != none; then
 
-cat >>confdefs.h <<_ACEOF
-#define FC_DUMMY_MAIN $FC_DUMMY_MAIN
-_ACEOF
 
-  if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then
 
-$as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h
 
-  fi
-fi
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "linking to Fortran libraries from C fails
-See \`config.log' for more details" "$LINENO" 5; }
-fi
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5
-$as_echo_n "checking for Fortran name-mangling scheme... " >&6; }
-if ${ac_cv_fc_mangling+:} false; then :
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat > conftest.$ac_ext <<_ACEOF
-      subroutine foobar()
-      return
-      end
-      subroutine foo_bar()
-      return
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  mv conftest.$ac_objext cfortran_test.$ac_objext
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-  ac_save_LIBS=$LIBS
-  LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS"
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-  ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-  ac_success=no
-  for ac_foobar in foobar FOOBAR; do
-    for ac_underscore in "" "_"; do
-      ac_func="$ac_foobar$ac_underscore"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_success=yes; break 2
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    done
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
   done
-  ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
-  if test "$ac_success" = "yes"; then
-     case $ac_foobar in
-	foobar)
-	   ac_case=lower
-	   ac_foo_bar=foo_bar
-	   ;;
-	FOOBAR)
-	   ac_case=upper
-	   ac_foo_bar=FOO_BAR
-	   ;;
-     esac
-
-     ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-     ac_success_extra=no
-     for ac_extra in "" "_"; do
-	ac_func="$ac_foo_bar$ac_underscore$ac_extra"
-	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+IFS=$as_save_IFS
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return $ac_func ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_success_extra=yes; break
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     done
-     ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-     if test "$ac_success_extra" = "yes"; then
-	ac_cv_fc_mangling="$ac_case case"
-	if test -z "$ac_underscore"; then
-	   ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore"
-	else
-	   ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore"
-	fi
-	if test -z "$ac_extra"; then
-	   ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore"
-	else
-	   ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore"
-	fi
-      else
-	ac_cv_fc_mangling="unknown"
-      fi
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
   else
-     ac_cv_fc_mangling="unknown"
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
   fi
-
-  LIBS=$ac_save_LIBS
-  rm -rf conftest*
-  rm -f cfortran_test*
 else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compile a simple Fortran program
-See \`config.log' for more details" "$LINENO" 5; }
+  STRIP="$ac_cv_prog_STRIP"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5
-$as_echo "$ac_cv_fc_mangling" >&6; }
+test -z "$STRIP" && STRIP=:
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-case $ac_cv_fc_mangling in
-  upper*) ac_val="SUB" ;;
-  lower*) ac_val="sub" ;;
-  *)      ac_val="unknown" ;;
-esac
-case $ac_cv_fc_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac
 
-FCALLSCSUB="$ac_val"
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-   # determine the correct name mapping
-   case $FCALLSCSUB in
-       SUB)
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-$as_echo "#define F77_NAME_UPPER /**/" >>confdefs.h
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-           ;;
-       sub_)
-           # This is the hard case.  Gcc uses one _ unless the name includes
-           # an underscore, in which case it gets two trailing underscores.
-           # Use essentially the same configure code that the original configure
-           # used to determine SUB
-           { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C-equivalent to Fortran routine \"SUB_A\"" >&5
-$as_echo_n "checking for C-equivalent to Fortran routine \"SUB_A\"... " >&6; }
-                              ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-case $ac_cv_fc_mangling in
-  upper*) ac_val="SUB_A" ;;
-  lower*) ac_val="sub_a" ;;
-  *)      ac_val="unknown" ;;
-esac
-case $ac_cv_fc_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac
-case $ac_cv_fc_mangling in *," extra underscore"*) ac_val="$ac_val"_ ;; esac
 
-FCALLSCSUBA="$ac_val"
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-           { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FCALLSCSUBA" >&5
-$as_echo "$FCALLSCSUBA" >&6; }
-           case $FCALLSCSUBA in
-               sub_a__)
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
 
-$as_echo "#define F77_NAME_LOWER_2USCORE /**/" >>confdefs.h
+test -z "$RANLIB" && RANLIB=:
 
-                   ;;
-               sub_a_)
 
-$as_echo "#define F77_NAME_LOWER_USCORE /**/" >>confdefs.h
 
-                   ;;
-               *)
-                   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unrecognized Fortran name mapping" >&5
-$as_echo "$as_me: WARNING: Unrecognized Fortran name mapping" >&2;}
-                   ;;
-           esac
-           ;;
-       sub)
 
-$as_echo "#define F77_NAME_LOWER /**/" >>confdefs.h
 
-           ;;
-       *)
-           { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unrecognized Fortran name mapping" >&5
-$as_echo "$as_me: WARNING: Unrecognized Fortran name mapping" >&2;}
-           ;;
-   esac
 
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
 
+if test -n "$RANLIB"; then
+  case $host_os in
+  bitrig* | openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler is NAG" >&5
-$as_echo_n "checking if Fortran compiler is NAG... " >&6; }
-if ${ac_cv_fc_compiler_nag+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_fc_compiler_nag=no
-     eval $MPIF90 -V </dev/null >& conftest.ver
-     _FC_VENDOR=`head -c 3 conftest.ver`
-     if test "x${_FC_VENDOR}" = xNAG ; then
-        ac_cv_fc_compiler_nag=yes
-     fi
-     ${RM} -f conftest.ver
-     unset _FC_VENDOR
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_nag" >&5
-$as_echo "$ac_cv_fc_compiler_nag" >&6; }
 
-   if test "x${ac_cv_fc_compiler_nag}" = xyes ; then
-      NAGf90FPPFLAGS="-DNAGf90Fortran"
-      NAG_FCFLAGS="-mismatch"
 
 
-   fi
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking Fortran compiler treating constant modifier" >&5
-$as_echo_n "checking Fortran compiler treating constant modifier... " >&6; }
-if ${ac_cv_fc_constant_modifier+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
 
-        cat > conftest.$ac_ext <<_ACEOF
 
-         program main
-         integer*8  nf_fill_uint
-         integer*8  nf_fill_int64
-         parameter (nf_fill_uint  = 4294967295_8)
-         parameter (nf_fill_int64 = -9223372036854775806_8)
-         end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_fc_constant_modifier=8
-else
-  cat > conftest.$ac_ext <<_ACEOF
 
-         program main
-         integer*8  nf_fill_uint
-         integer*8  nf_fill_int64
-         parameter (nf_fill_uint  = 4294967295)
-         parameter (nf_fill_int64 = -9223372036854775806)
-         end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_fc_constant_modifier=none
-else
-  cat > conftest.$ac_ext <<_ACEOF
 
-         program main
-         integer, parameter :: EightByteInt = selected_int_kind(18)
-         integer*8  nf_fill_uint
-         integer*8  nf_fill_int64
-         parameter (nf_fill_uint  = 4294967295_EightByteInt)
-         parameter (nf_fill_int64 = -9223372036854775806_EightByteInt)
-         end
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_fc_constant_modifier=EightByteInt
-else
-  as_fn_error $? "no appropriate modifier found" "$LINENO" 5
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_constant_modifier" >&5
-$as_echo "$ac_cv_fc_constant_modifier" >&6; }
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_fc_constant_modifier=$ac_cv_fc_constant_modifier" >&5
-$as_echo "$as_me: DEBUG: ac_cv_fc_constant_modifier=$ac_cv_fc_constant_modifier" >&6;}
-          fi
 
 
-   PNF_INT8_MODIFIER=""
-   if test "x${ac_cv_fc_constant_modifier}" = xnone ; then
-      PNF_FILL_UINT=4294967295
-      PNF_FILL_INT64=-9223372036854775806
-      PNF_FILL_UINT64=18446744073709551614
-      PNF_X_UINT_MAX=4294967295
-      PNF_X_INT8_MIN=-9223372036854775807
-      PNF_X_INT8_MAX=9223372036854775807
-      PNF_X_UINT8_MAX=18446744073709551615
-   else
-      if test "x${ac_cv_fc_constant_modifier}" = xEightByteInt ; then
-         PNF_INT8_MODIFIER="      integer, parameter :: EightByteInt = selected_int_kind(18)"
-      fi
-      PNF_FILL_UINT=4294967295_${ac_cv_fc_constant_modifier}
-      PNF_FILL_INT64=-9223372036854775806_${ac_cv_fc_constant_modifier}
-      PNF_FILL_UINT64=18446744073709551614_${ac_cv_fc_constant_modifier}
-      PNF_X_UINT_MAX=4294967295_${ac_cv_fc_constant_modifier}
-      PNF_X_INT8_MIN=-9223372036854775807_${ac_cv_fc_constant_modifier}
-      PNF_X_INT8_MAX=9223372036854775807_${ac_cv_fc_constant_modifier}
-      PNF_X_UINT8_MAX=18446744073709551615_${ac_cv_fc_constant_modifier}
-   fi
 
 
 
@@ -8626,294 +9068,720 @@ $as_echo "$as_me: DEBUG: ac_cv_fc_constant_modifier=$ac_cv_fc_constant_modifier"
 
 
 
-fi
 
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
+
+
+
+
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
+$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
+if ${lt_cv_sys_global_symbol_pipe+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-	  if test $ac_prog = install &&
-	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # AIX install.  It has an incompatible calling convention.
-	    :
-	  elif test $ac_prog = install &&
-	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-	    # program-specific install script used by HP pwplus--don't use.
-	    :
-	  else
-	    rm -rf conftest.one conftest.two conftest.dir
-	    echo one > conftest.one
-	    echo two > conftest.two
-	    mkdir conftest.dir
-	    if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-	      test -s conftest.one && test -s conftest.two &&
-	      test -s conftest.dir/conftest.one &&
-	      test -s conftest.dir/conftest.two
-	    then
-	      ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-	      break 3
-	    fi
-	  fi
-	fi
-      done
-    done
-    ;;
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*)
+  if test ia64 = "$host_cpu"; then
+    symcode='[ABCDEGRST]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[BCDEGRST]'
+  ;;
+osf*)
+  symcode='[BCDEGQRST]'
+  ;;
+solaris*)
+  symcode='[BDRT]'
+  ;;
+sco3.2v5*)
+  symcode='[DT]'
+  ;;
+sysv4.2uw2*)
+  symcode='[DT]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[ABDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
 esac
 
-  done
-IFS=$as_save_IFS
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[ABCDGIRSTW]' ;;
+esac
 
-rm -rf conftest.one conftest.two conftest.dir
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
 
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK '"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx"
   else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[	 ]\($symcode$symcode*\)[	 ][	 ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+  # Check to see that the pipe works correctly.
+  pipe_works=no
 
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
 
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
+  (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
 
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
 
-have_yacc_lex=no
+#ifdef __cplusplus
+extern "C" {
+#endif
 
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT_DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS=conftstm.$ac_objext
+	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test yes = "$pipe_works"; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
+$as_echo "failed" >&6; }
 else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-	@echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
+$as_echo "ok" >&6; }
 fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
+$as_echo_n "checking for sysroot... " >&6; }
+
+# Check whether --with-sysroot was given.
+if test "${with_sysroot+set}" = set; then :
+  withval=$with_sysroot;
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
+  with_sysroot=no
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
+$as_echo "$with_sysroot" >&6; }
+   as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
+   ;;
+esac
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
+$as_echo "${lt_sysroot:-no}" >&6; }
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
+$as_echo_n "checking for a working dd... " >&6; }
+if ${ac_cv_path_lt_DD+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+if test -z "$lt_DD"; then
+  ac_path_lt_DD_found=false
   # Loop through the user's path and test for each of PROGNAME-LIST
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
+    for ac_prog in dd; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
+      ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_lt_DD" || continue
+if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi
+      $ac_path_lt_DD_found && break 3
     done
   done
   done
 IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  if test -z "$ac_cv_path_lt_DD"; then
+    :
   fi
 else
-  ac_cv_path_GREP=$GREP
+  ac_cv_path_lt_DD=$lt_DD
 fi
 
+rm -f conftest.i conftest2.i conftest.out
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
+$as_echo "$ac_cv_path_lt_DD" >&6; }
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
+$as_echo_n "checking how to truncate binary pipes... " >&6; }
+if ${lt_cv_truncate_bin+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
+  printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
+$as_echo "$lt_cv_truncate_bin" >&6; }
+
+
+
+
+
+
+# Check whether --enable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then :
+  enableval=$enable_libtool_lock;
+fi
+
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE=32
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE=64
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
     fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
+  fi
+  rm -rf conftest*
+  ;;
 
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '#line '$LINENO' "configure"' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+	emul="${emul}32"
+	;;
+      *64-bit*)
+	emul="${emul}64"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+	emul="${emul}btsmip"
+	;;
+      *LSB*)
+	emul="${emul}ltsmip"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+	emul="${emul}n32"
+	;;
+    esac
+    LD="${LD-ld} -m $emul"
   fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
+  rm -rf conftest*
+  ;;
 
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    case `/usr/bin/file conftest.o` in
+	      *x86-64*)
+		LD="${LD-ld} -m elf32_x86_64"
+		;;
+	      *)
+		LD="${LD-ld} -m elf_i386"
+		;;
+	    esac
+	    ;;
+	  powerpc64le-*linux*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  powerpcle-*linux*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
 
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -belf"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
+$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
+if ${lt_cv_cc_needs_belf+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+int
+main ()
+{
 
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_cc_needs_belf=yes
+else
+  lt_cv_cc_needs_belf=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
+$as_echo "$lt_cv_cc_needs_belf" >&6; }
+  if test yes != "$lt_cv_cc_needs_belf"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS=$SAVE_CFLAGS
+  fi
+  ;;
+*-*solaris*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*|x86_64-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD=${LD-ld}_sol2
+        fi
+        ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
 
+need_locks=$enable_libtool_lock
 
-        case "${M4-unset}" in
-	unset) for ac_prog in m4 gm4
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
+set dummy ${ac_tool_prefix}mt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_M4+:} false; then :
+if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$M4"; then
-  ac_cv_prog_M4="$M4" # Let the user override the test.
+  if test -n "$MANIFEST_TOOL"; then
+  ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -8922,7 +9790,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_M4="$ac_prog"
+    ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -8932,31 +9800,28 @@ IFS=$as_save_IFS
 
 fi
 fi
-M4=$ac_cv_prog_M4
-if test -n "$M4"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4" >&5
-$as_echo "$M4" >&6; }
+MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
+if test -n "$MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
+$as_echo "$MANIFEST_TOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$M4" && break
-done
-test -n "$M4" || M4="m4"
- ;;
-	*) for ac_prog in $M4 m4 gm4
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+fi
+if test -z "$ac_cv_prog_MANIFEST_TOOL"; then
+  ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
+  # Extract the first word of "mt", so it can be a program name with args.
+set dummy mt; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_M4+:} false; then :
+if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$M4"; then
-  ac_cv_prog_M4="$M4" # Let the user override the test.
+  if test -n "$ac_ct_MANIFEST_TOOL"; then
+  ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -8965,7 +9830,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_M4="$ac_prog"
+    ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -8975,56 +9840,68 @@ IFS=$as_save_IFS
 
 fi
 fi
-M4=$ac_cv_prog_M4
-if test -n "$M4"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4" >&5
-$as_echo "$M4" >&6; }
+ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
+if test -n "$ac_ct_MANIFEST_TOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
+$as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
+  if test "x$ac_ct_MANIFEST_TOOL" = x; then
+    MANIFEST_TOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
+  fi
+else
+  MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL"
+fi
 
-  test -n "$M4" && break
-done
-test -n "$M4" || M4="m4"
- ;;
-    esac
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking m4 flags" >&5
-$as_echo_n "checking m4 flags... " >&6; }
-    case "${M4FLAGS-unset}" in
-	unset)                `${M4} /dev/null > conftest.err 2>&1`
-               ac_cv_m4_stdout=`cat conftest.err`
-               if test "x$ac_cv_m4_stdout" != x; then
-                  M4FLAGS=-B10000
-               fi
-               ${RM} -f conftest.err
-               ;;
-    esac
-    if test "x$M4FLAGS" = x; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"none\"" >&5
-$as_echo "\"none\"" >&6; }
-    else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4FLAGS" >&5
-$as_echo "$M4FLAGS" >&6; }
-    fi
-    M4FFLAGS=`echo $M4FLAGS | sed 's/-s *//g'`
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
+$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
+if ${lt_cv_path_mainfest_tool+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&5
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
+$as_echo "$lt_cv_path_mainfest_tool" >&6; }
+if test yes != "$lt_cv_path_mainfest_tool"; then
+  MANIFEST_TOOL=:
+fi
 
 
 
 
-        case "${AR-unset}" in
-	unset) for ac_prog in ar
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+
+
+  case $host_os in
+    rhapsody* | darwin*)
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
+set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
+if ${ac_cv_prog_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
+  if test -n "$DSYMUTIL"; then
+  ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -9033,7 +9910,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="$ac_prog"
+    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9043,31 +9920,28 @@ IFS=$as_save_IFS
 
 fi
 fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+DSYMUTIL=$ac_cv_prog_DSYMUTIL
+if test -n "$DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
+$as_echo "$DSYMUTIL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$AR" && break
-done
-test -n "$AR" || AR="ar"
- ;;
-	*) for ac_prog in $AR ar
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+fi
+if test -z "$ac_cv_prog_DSYMUTIL"; then
+  ac_ct_DSYMUTIL=$DSYMUTIL
+  # Extract the first word of "dsymutil", so it can be a program name with args.
+set dummy dsymutil; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
+if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
+  if test -n "$ac_ct_DSYMUTIL"; then
+  ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -9076,7 +9950,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="$ac_prog"
+    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9086,43 +9960,40 @@ IFS=$as_save_IFS
 
 fi
 fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
+if test -n "$ac_ct_DSYMUTIL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
+$as_echo "$ac_ct_DSYMUTIL" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
+  if test "x$ac_ct_DSYMUTIL" = x; then
+    DSYMUTIL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    DSYMUTIL=$ac_ct_DSYMUTIL
+  fi
+else
+  DSYMUTIL="$ac_cv_prog_DSYMUTIL"
+fi
 
-  test -n "$AR" && break
-done
-test -n "$AR" || AR="ar"
- ;;
-    esac
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking ar flags" >&5
-$as_echo_n "checking ar flags... " >&6; }
-    case "${ARFLAGS-unset}" in
-	unset) ARFLAGS=cru ;;
-    esac
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ARFLAGS" >&5
-$as_echo "$ARFLAGS" >&6; }
-
-
-
-        case "${NM-unset}" in
-	unset) for ac_prog in nm
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
+set dummy ${ac_tool_prefix}nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NM+:} false; then :
+if ${ac_cv_prog_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$NM"; then
-  ac_cv_prog_NM="$NM" # Let the user override the test.
+  if test -n "$NMEDIT"; then
+  ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -9131,7 +10002,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_NM="$ac_prog"
+    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9141,31 +10012,28 @@ IFS=$as_save_IFS
 
 fi
 fi
-NM=$ac_cv_prog_NM
-if test -n "$NM"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
-$as_echo "$NM" >&6; }
+NMEDIT=$ac_cv_prog_NMEDIT
+if test -n "$NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
+$as_echo "$NMEDIT" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$NM" && break
-done
-test -n "$NM" || NM="nm"
- ;;
-	*) for ac_prog in $NM nm
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+fi
+if test -z "$ac_cv_prog_NMEDIT"; then
+  ac_ct_NMEDIT=$NMEDIT
+  # Extract the first word of "nmedit", so it can be a program name with args.
+set dummy nmedit; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_NM+:} false; then :
+if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$NM"; then
-  ac_cv_prog_NM="$NM" # Let the user override the test.
+  if test -n "$ac_ct_NMEDIT"; then
+  ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -9174,7 +10042,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_NM="$ac_prog"
+    ac_cv_prog_ac_ct_NMEDIT="nmedit"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9184,43 +10052,40 @@ IFS=$as_save_IFS
 
 fi
 fi
-NM=$ac_cv_prog_NM
-if test -n "$NM"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
-$as_echo "$NM" >&6; }
+ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
+if test -n "$ac_ct_NMEDIT"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
+$as_echo "$ac_ct_NMEDIT" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
+  if test "x$ac_ct_NMEDIT" = x; then
+    NMEDIT=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    NMEDIT=$ac_ct_NMEDIT
+  fi
+else
+  NMEDIT="$ac_cv_prog_NMEDIT"
+fi
 
-  test -n "$NM" && break
-done
-test -n "$NM" || NM="nm"
- ;;
-    esac
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking nm flags" >&5
-$as_echo_n "checking nm flags... " >&6; }
-    case "${NMFLAGS-unset}" in
-	unset) NMFLAGS= ;;
-    esac
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMFLAGS" >&5
-$as_echo "$NMFLAGS" >&6; }
-
-
-# We could use the PAC check for ranlib (it also makes sure that ranlib works,
-# which is not always true, particularly when GNU tools are installed on
-# a system that doesn't have (or need) ranlib
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
+set dummy ${ac_tool_prefix}lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
+if ${ac_cv_prog_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+  if test -n "$LIPO"; then
+  ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -9229,7 +10094,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9239,10 +10104,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+LIPO=$ac_cv_prog_LIPO
+if test -n "$LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
+$as_echo "$LIPO" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -9250,17 +10115,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
+if test -z "$ac_cv_prog_LIPO"; then
+  ac_ct_LIPO=$LIPO
+  # Extract the first word of "lipo", so it can be a program name with args.
+set dummy lipo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+  if test -n "$ac_ct_LIPO"; then
+  ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -9269,7 +10134,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    ac_cv_prog_ac_ct_LIPO="lipo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -9279,17 +10144,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
+if test -n "$ac_ct_LIPO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
+$as_echo "$ac_ct_LIPO" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
+  if test "x$ac_ct_LIPO" = x; then
+    LIPO=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -9297,142 +10162,524 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    RANLIB=$ac_ct_RANLIB
+    LIPO=$ac_ct_LIPO
   fi
 else
-  RANLIB="$ac_cv_prog_RANLIB"
+  LIPO="$ac_cv_prog_LIPO"
 fi
 
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
+  if test -n "$OTOOL"; then
+  ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-else
-  # Broken: fails on valid input.
-continue
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
+OTOOL=$ac_cv_prog_OTOOL
+if test -n "$OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
+$as_echo "$OTOOL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-    done
-    ac_cv_prog_CPP=$CPP
 
 fi
-  CPP=$ac_cv_prog_CPP
+if test -z "$ac_cv_prog_OTOOL"; then
+  ac_ct_OTOOL=$OTOOL
+  # Extract the first word of "otool", so it can be a program name with args.
+set dummy otool; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
+  if test -n "$ac_ct_OTOOL"; then
+  ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-		     Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL="otool"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+fi
+fi
+ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
+if test -n "$ac_ct_OTOOL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
+$as_echo "$ac_ct_OTOOL" >&6; }
 else
-  # Broken: fails on valid input.
-continue
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
 
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
+  if test "x$ac_ct_OTOOL" = x; then
+    OTOOL=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL=$ac_ct_OTOOL
+  fi
 else
-  # Passes both tests.
-ac_preproc_ok=:
-break
+  OTOOL="$ac_cv_prog_OTOOL"
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
 
+    if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
+set dummy ${ac_tool_prefix}otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$OTOOL64"; then
+  ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
 done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
+  done
+IFS=$as_save_IFS
 
+fi
+fi
+OTOOL64=$ac_cv_prog_OTOOL64
+if test -n "$OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
+$as_echo "$OTOOL64" >&6; }
 else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_OTOOL64"; then
+  ac_ct_OTOOL64=$OTOOL64
+  # Extract the first word of "otool64", so it can be a program name with args.
+set dummy otool64; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_OTOOL64"; then
+  ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_OTOOL64="otool64"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
+if test -n "$ac_ct_OTOOL64"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
+$as_echo "$ac_ct_OTOOL64" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+  if test "x$ac_ct_OTOOL64" = x; then
+    OTOOL64=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    OTOOL64=$ac_ct_OTOOL64
+  fi
+else
+  OTOOL64="$ac_cv_prog_OTOOL64"
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
+$as_echo_n "checking for -single_module linker flag... " >&6; }
+if ${lt_cv_apple_cc_single_mod+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_apple_cc_single_mod=no
+      if test -z "$LT_MULTI_MODULE"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&5
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&5
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&5
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
+$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
+$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
+if ${lt_cv_ld_exported_symbols_list+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_ld_exported_symbols_list=yes
+else
+  lt_cv_ld_exported_symbols_list=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+	LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
+$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
+$as_echo_n "checking for -force_load linker flag... " >&6; }
+if ${lt_cv_ld_force_load+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
+      echo "$RANLIB libconftest.a" >&5
+      $RANLIB libconftest.a 2>&5
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&5
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&5
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
+$as_echo "$lt_cv_ld_force_load" >&6; }
+    case $host_os in
+    rhapsody* | darwin1.[012])
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+	10.[012][,.]*)
+	  _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+    fi
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if ${ac_cv_prog_CPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -9454,14 +10701,6 @@ else
 #include <string.h>
 #include <float.h>
 
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
 int
 main ()
 {
@@ -9579,5778 +10818,25292 @@ fi
 done
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
-$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
-if ${ac_cv_header_stdbool_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+for ac_header in dlfcn.h
+do :
+  ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
+"
+if test "x$ac_cv_header_dlfcn_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_DLFCN_H 1
+_ACEOF
 
-             #include <stdbool.h>
-             #ifndef bool
-              "error: bool is not defined"
-             #endif
-             #ifndef false
-              "error: false is not defined"
-             #endif
-             #if false
-              "error: false is not 0"
-             #endif
-             #ifndef true
-              "error: true is not defined"
-             #endif
-             #if true != 1
-              "error: true is not 1"
-             #endif
-             #ifndef __bool_true_false_are_defined
-              "error: __bool_true_false_are_defined is not defined"
-             #endif
+fi
 
-             struct s { _Bool s: 1; _Bool t; } s;
+done
 
-             char a[true == 1 ? 1 : -1];
-             char b[false == 0 ? 1 : -1];
-             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-             char d[(bool) 0.5 == true ? 1 : -1];
-             /* See body of main program for 'e'.  */
-             char f[(_Bool) 0.0 == false ? 1 : -1];
-             char g[true];
-             char h[sizeof (_Bool)];
-             char i[sizeof s.t];
-             enum { j = false, k = true, l = false * true, m = true * 256 };
-             /* The following fails for
-                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
-             _Bool n[m];
-             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-             /* Catch a bug in an HP-UX C compiler.  See
-                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-              */
-             _Bool q = true;
-             _Bool *pq = &q;
 
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
+
+func_stripname_cnf ()
 {
+  case $2 in
+  .*) func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%\\\\$2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "$3" | $SED "s%^$1%%; s%$2\$%%"`;;
+  esac
+} # func_stripname_cnf
 
-             bool e = &s;
-             *pq |= q;
-             *pq |= ! q;
-             /* Refer to every declared value, to avoid compiler optimizations.  */
-             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-                     + !m + !n + !o + !p + !q + !pq);
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdbool_h=yes
+
+
+
+# Set options
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then :
+  enableval=$enable_shared; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
 else
-  ac_cv_header_stdbool_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  enable_shared=no
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
-$as_echo "$ac_cv_header_stdbool_h" >&6; }
-   ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
-if test "x$ac_cv_type__Bool" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE__BOOL 1
-_ACEOF
 
 
-fi
 
 
-if test $ac_cv_header_stdbool_h = yes; then
 
-$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
 
-fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if ${ac_cv_c_inline+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_inline=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  test "$ac_cv_c_inline" != no && break
-done
+        enable_dlopen=no
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
 
-case $ac_cv_c_inline in
-  inline | yes) ;;
-  *)
-    case $ac_cv_c_inline in
-      no) ac_val=;;
-      *) ac_val=$ac_cv_c_inline;;
+  enable_win32_dll=no
+
+
+
+  # Check whether --enable-static was given.
+if test "${enable_static+set}" = set; then :
+  enableval=$enable_static; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
     esac
-    cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
-_ACEOF
-    ;;
-esac
+else
+  enable_static=yes
+fi
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for IEEE floating point format" >&5
-$as_echo_n "checking for IEEE floating point format... " >&6; }
-if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef NO_FLOAT_H
-#include <float.h>
-#endif
 
-#define EXIT_NOTIEEE	1
-#define EXIT_MAYBEIEEE	0
 
-int
-main()
-{
-#if	defined(FLT_RADIX)	&& FLT_RADIX != 2
-		return EXIT_NOTIEEE;
-#elif	defined(DBL_MAX_EXP)	&& DBL_MAX_EXP != 1024
-		return EXIT_NOTIEEE;
-#elif	defined(DBL_MANT_DIG)	&& DBL_MANT_DIG != 53
-		return EXIT_NOTIEEE;
-#elif 	defined(FLT_MAX_EXP)	&& !(FLT_MAX_EXP == 1024 || FLT_MAX_EXP == 128)
-		return EXIT_NOTIEEE;
-#elif	defined(FLT_MANT_DIG)	&& !(FLT_MANT_DIG == 53 || FLT_MANT_DIG == 24)
-		return EXIT_NOTIEEE;
-#else
-	/* (assuming eight bit char) */
-	if(sizeof(double) != 8)
-		return EXIT_NOTIEEE;
-	if(!(sizeof(float) == 4 || sizeof(float) == 8))
-		return EXIT_NOTIEEE;
 
-	return EXIT_MAYBEIEEE;
-#endif
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_c_ieeefloat=yes
+
+
+
+# Check whether --with-pic was given.
+if test "${with_pic+set}" = set; then :
+  withval=$with_pic; lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for lt_pkg in $withval; do
+	IFS=$lt_save_ifs
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
 else
-  ac_cv_c_ieeefloat=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+  pic_mode=default
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_ieeefloat" >&5
-$as_echo "$ac_cv_c_ieeefloat" >&6; }
-if test x$ac_cv_c_ieeefloat = xno; then
-  $as_echo "#define NO_IEEE_FLOAT 1" >>confdefs.h
 
-fi
 
 
 
-for ac_func in strerror access unlink
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
-done
 
 
-# Check whether --enable-debug was given.
-if test "${enable_debug+set}" = set; then :
-  enableval=$enable_debug; debug=${enableval}
+  # Check whether --enable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then :
+  enableval=$enable_fast_install; p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac
 else
-  debug=no
-
+  enable_fast_install=yes
 fi
 
 
-PNETCDF_DEBUG=0
-if test "x${debug}" = xyes; then
-      for ac_header in search.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default"
-if test "x$ac_cv_header_search_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_SEARCH_H 1
-_ACEOF
 
-fi
 
-done
 
-   for ac_func in tsearch tdelete
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
-done
 
 
-      if (test "x${ac_cv_func_tsearch}" = xyes) &&
-      (test "x${ac_cv_func_tdelete}" = xyes) ; then
-      $as_echo "#define PNC_MALLOC_TRACE 1" >>confdefs.h
+  shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[5-9]*,yes)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
+$as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
 
-   fi
-   PNETCDF_DEBUG=1
+# Check whether --with-aix-soname was given.
+if test "${with_aix_soname+set}" = set; then :
+  withval=$with_aix_soname; case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname
+else
+  if ${lt_cv_with_aix_soname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_with_aix_soname=aix
 fi
 
-
-ac_fn_c_check_type "$LINENO" "MPI_Offset" "ac_cv_type_MPI_Offset" "#include <mpi.h>
-"
-if test "x$ac_cv_type_MPI_Offset" = xyes; then :
-
+    with_aix_soname=$lt_cv_with_aix_soname
 fi
 
-if test "x${ac_cv_type_MPI_Offset}" = xyes; then
-   # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of MPI_Offset" >&5
-$as_echo_n "checking size of MPI_Offset... " >&6; }
-if ${ac_cv_sizeof_MPI_Offset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (MPI_Offset))" "ac_cv_sizeof_MPI_Offset"        "#include <mpi.h>
-"; then :
-
-else
-  if test "$ac_cv_type_MPI_Offset" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (MPI_Offset)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_MPI_Offset=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_MPI_Offset" >&5
-$as_echo "$ac_cv_sizeof_MPI_Offset" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
+$as_echo "$with_aix_soname" >&6; }
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_MPI_OFFSET $ac_cv_sizeof_MPI_Offset
-_ACEOF
 
 
-else
-   as_fn_error $? "Unable to find type MPI_Offset in mpi.h" "$LINENO" 5
-fi
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of MPI_Aint" >&5
-$as_echo_n "checking size of MPI_Aint... " >&6; }
-if ${ac_cv_sizeof_MPI_Aint+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (MPI_Aint))" "ac_cv_sizeof_MPI_Aint"        "#include <mpi.h>
-"; then :
 
-else
-  if test "$ac_cv_type_MPI_Aint" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (MPI_Aint)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_MPI_Aint=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_MPI_Aint" >&5
-$as_echo "$ac_cv_sizeof_MPI_Aint" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_MPI_AINT $ac_cv_sizeof_MPI_Aint
-_ACEOF
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
 
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 
 
-if test "$ac_cv_sizeof_MPI_Offset" -lt "8"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Unable to support CDF-2 and CDF-5 formats\"" >&5
-$as_echo "$as_me: WARNING: \"Unable to support CDF-2 and CDF-5 formats\"" >&2;};
-   enable_cdf_2_n_5=no
-else
 
-$as_echo "#define ENABLE_CDF5 /**/" >>confdefs.h
 
-   enable_cdf_2_n_5=yes
-fi
 
-SIZEOF_MPI_AINT_IS_4=no
-if test "x$ac_cv_sizeof_MPI_Aint" = x4; then
-   SIZEOF_MPI_AINT_IS_4=yes
-fi
 
 
-if test "$ac_cv_sizeof_MPI_Offset" -ne "$ac_cv_sizeof_MPI_Aint"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: MPI_Offset and MPI_Aint are detected of different sizes: the request aggregation in non-blocking APIs is thus disabled" >&5
-$as_echo "$as_me: WARNING: MPI_Offset and MPI_Aint are detected of different sizes: the request aggregation in non-blocking APIs is thus disabled" >&2;}
-   enable_aggregation=no
-else
 
-$as_echo "#define ENABLE_REQ_AGGREGATION /**/" >>confdefs.h
 
-   enable_aggregation=yes
-fi
 
-# check for MPI-2 only functions
-for ac_func in MPI_Info_dup MPI_Info_free MPI_Get_address
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
-done
 
-for ac_func in MPI_Type_create_subarray MPI_Type_create_hvector MPI_Type_create_hindexed MPI_Type_create_struct MPI_Type_create_resized MPI_Type_get_extent
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
 
-fi
-done
 
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_DUP is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_DUP is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_DUP;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMBINER_DUP 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_HVECTOR_INTEGER is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_HVECTOR_INTEGER is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_HVECTOR_INTEGER;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMBINER_HVECTOR_INTEGER 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+test -z "$LN_S" && LN_S="ln -s"
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_HINDEXED_INTEGER is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_HINDEXED_INTEGER is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_HINDEXED_INTEGER;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMBINER_HINDEXED_INTEGER 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_SUBARRAY is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_SUBARRAY is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_SUBARRAY;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMBINER_SUBARRAY 1" >>confdefs.h
 
+if test -n "${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
+$as_echo_n "checking for objdir... " >&6; }
+if ${lt_cv_objdir+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
+  rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rmdir .libs 2>/dev/null
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
+$as_echo "$lt_cv_objdir" >&6; }
+objdir=$lt_cv_objdir
+
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_DARRAY is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_DARRAY is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_DARRAY;
 
+cat >>confdefs.h <<_ACEOF
+#define LT_OBJDIR "$lt_cv_objdir/"
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMBINER_DARRAY 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test set != "${COLLECT_NAMES+set}"; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
 
+# Global variables:
+ofile=libtool
+can_build_shared=yes
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_RESIZED is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_RESIZED is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_RESIZED;
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
 
-$as_echo "#define HAVE_MPI_COMBINER_RESIZED 1" >>confdefs.h
+func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
 
 
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
+$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/${ac_tool_prefix}file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
+
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_STRUCT_INTEGER is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_STRUCT_INTEGER is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_STRUCT_INTEGER;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMBINER_STRUCT_INTEGER 1" >>confdefs.h
 
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
+$as_echo_n "checking for file... " >&6; }
+if ${lt_cv_path_MAGIC_CMD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $MAGIC_CMD in
+[\\/*] |  ?:[\\/]*)
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/file"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac
+fi
 
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
+$as_echo "$MAGIC_CMD" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
+fi
+
 
+  else
+    MAGIC_CMD=:
+  fi
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
+  fi
+  ;;
+esac
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_INDEXED_BLOCK is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_INDEXED_BLOCK is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+# Use C for the default configuration in the libtool script
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_INDEXED_BLOCK;
+lt_save_CC=$CC
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMBINER_INDEXED_BLOCK 1" >>confdefs.h
+# Source file extension for C test sources.
+ac_ext=c
 
+# Object file extension for compiled C test sources.
+objext=o
+objext=$objext
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_F90_REAL is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_F90_REAL is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_F90_REAL;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMBINER_F90_REAL 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
 
+# Allow CC to be a program name with arguments.
+compiler=$CC
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_F90_INTEGER is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_F90_INTEGER is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
 
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_F90_INTEGER;
+# save warnings/boilerplate of simple test code
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM -f conftest*
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
 
-$as_echo "#define HAVE_MPI_COMBINER_F90_INTEGER 1" >>confdefs.h
 
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+lt_prog_compiler_no_builtin_flag=
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_COMBINER_F90_COMPLEX is defined " >&5
-$as_echo_n "checking if MPI constant MPI_COMBINER_F90_COMPLEX is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-          #include <mpi.h>
-          int dummy = MPI_COMBINER_F90_COMPLEX;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if test yes = "$GCC"; then
+  case $cc_basename in
+  nvcc*)
+    lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;;
+  *)
+    lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
+  esac
 
-$as_echo "#define HAVE_MPI_COMBINER_F90_COMPLEX 1" >>confdefs.h
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
+if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_rtti_exceptions=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="-fno-rtti -fno-exceptions"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_rtti_exceptions=yes
+     fi
+   fi
+   $RM conftest*
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
+$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
 
+if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
+    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    :
+fi
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_FILE_EXISTS is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_FILE_EXISTS is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_FILE_EXISTS;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_ERR_FILE_EXISTS 1" >>confdefs.h
+  lt_prog_compiler_wl=
+lt_prog_compiler_pic=
+lt_prog_compiler_static=
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  if test yes = "$GCC"; then
+    lt_prog_compiler_wl='-Wl,'
+    lt_prog_compiler_static='-static'
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      lt_prog_compiler_pic='-fPIC'
+      ;;
 
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_NO_SUCH_FILE is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_NO_SUCH_FILE is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_NO_SUCH_FILE;
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static='$wl-static'
+	;;
+      esac
+      ;;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      ;;
 
-$as_echo "#define HAVE_MPI_ERR_NO_SUCH_FILE 1" >>confdefs.h
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static=
+      ;;
 
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='-fPIC'
+	;;
+      esac
+      ;;
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared=no
+      enable_shared=no
+      ;;
 
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_AMODE is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_AMODE is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic=-Kconform_pic
+      fi
+      ;;
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_AMODE;
+    *)
+      lt_prog_compiler_pic='-fPIC'
+      ;;
+    esac
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl='-Xlinker '
+      if test -n "$lt_prog_compiler_pic"; then
+        lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic"
+      fi
+      ;;
+    fccpx*) # Fujitsu Compiler
+      lt_prog_compiler_pic='-Xg -KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl='-Wl,'
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static='-Bstatic'
+      else
+	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
 
-$as_echo "#define HAVE_MPI_ERR_AMODE 1" >>confdefs.h
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl='-Wl,-Wl,,'
+        lt_prog_compiler_pic='-PIC'
+        lt_prog_compiler_static='-Bstatic'
+        ;;
+      esac
+      ;;
 
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static='$wl-static'
+	;;
+      esac
+      ;;
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static='$wl-a ${wl}archive'
+      ;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='--shared'
+	lt_prog_compiler_static='--static'
+	;;
+      frtpx* )
+	# Fujitsu compiler
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-KPIC'
+	lt_prog_compiler_static='-Kstatic_fjlib'
+	;;
+      fccpx* | FCCpx* )
+	# Fujitsu compiler
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-Xg -KPIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl='-Wl,-Wl,,'
+	lt_prog_compiler_pic='-PIC'
+	lt_prog_compiler_static='-Bstatic'
+	;;
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fPIC'
+	lt_prog_compiler_static='-static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-fpic'
+	lt_prog_compiler_static='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl='-Wl,'
+	lt_prog_compiler_pic='-qpic'
+	lt_prog_compiler_static='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic='-KPIC'
+	  lt_prog_compiler_static='-Bstatic'
+	  lt_prog_compiler_wl='-Wl,'
+	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fPIC'
+	  lt_prog_compiler_static='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl='-Wl,'
+	  lt_prog_compiler_pic='-fpic'
+	  lt_prog_compiler_static='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
 
+    newsos6)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_NOT_SAME is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_NOT_SAME is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic='-fPIC -shared'
+      ;;
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_NOT_SAME;
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static='-non_shared'
+      ;;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+    rdos*)
+      lt_prog_compiler_static='-non_shared'
+      ;;
 
-$as_echo "#define HAVE_MPI_ERR_NOT_SAME 1" >>confdefs.h
+    solaris*)
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl='-Wl,';;
+      esac
+      ;;
 
+    sunos4*)
+      lt_prog_compiler_wl='-Qoption ld '
+      lt_prog_compiler_pic='-PIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic='-Kconform_pic'
+	lt_prog_compiler_static='-Bstatic'
+      fi
+      ;;
 
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_pic='-KPIC'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_BAD_FILE is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_BAD_FILE is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    unicos*)
+      lt_prog_compiler_wl='-Wl,'
+      lt_prog_compiler_can_build_shared=no
+      ;;
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_BAD_FILE;
+    uts4*)
+      lt_prog_compiler_pic='-pic'
+      lt_prog_compiler_static='-Bstatic'
+      ;;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+    *)
+      lt_prog_compiler_can_build_shared=no
+      ;;
+    esac
+  fi
 
-$as_echo "#define HAVE_MPI_ERR_BAD_FILE 1" >>confdefs.h
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic=
+    ;;
+  *)
+    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
+    ;;
+esac
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
+$as_echo "$lt_cv_prog_compiler_pic" >&6; }
+lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
 
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  lt_cv_prog_compiler_pic_works=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works=yes
+     fi
+   fi
+   $RM conftest*
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
 
+if test yes = "$lt_cv_prog_compiler_pic_works"; then
+    case $lt_prog_compiler_pic in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
+     esac
+else
+    lt_prog_compiler_pic=
+     lt_prog_compiler_can_build_shared=no
+fi
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_READ_ONLY is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_READ_ONLY is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+fi
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_READ_ONLY;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_ERR_READ_ONLY 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_ACCESS is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_ACCESS is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_ACCESS;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_ERR_ACCESS 1" >>confdefs.h
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
+$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
 
+if test yes = "$lt_cv_prog_compiler_static_works"; then
+    :
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
+    lt_prog_compiler_static=
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_NO_SPACE is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_NO_SPACE is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_NO_SPACE;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_ERR_NO_SPACE 1" >>confdefs.h
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI constant MPI_ERR_QUOTA is defined " >&5
-$as_echo_n "checking if MPI constant MPI_ERR_QUOTA is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          int dummy = MPI_ERR_QUOTA;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_ERR_QUOTA 1" >>confdefs.h
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  lt_cv_prog_compiler_c_o=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
+$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag=
+  always_export_symbols=no
+  archive_cmds=
+  archive_expsym_cmds=
+  compiler_needs_object=no
+  enable_shared_with_static_runtimes=no
+  export_dynamic_flag_spec=
+  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic=no
+  hardcode_direct=no
+  hardcode_direct_absolute=no
+  hardcode_libdir_flag_spec=
+  hardcode_libdir_separator=
+  hardcode_minus_L=no
+  hardcode_shlibpath_var=unsupported
+  inherit_rpath=no
+  link_all_deplibs=unknown
+  module_cmds=
+  module_expsym_cmds=
+  old_archive_from_new_cmds=
+  old_archive_from_expsyms_cmds=
+  thread_safe_flag_spec=
+  whole_archive_flag_spec=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  esac
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  ld_shlibs=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
 
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      whole_archive_flag_spec=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
 
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_CHAR is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_CHAR is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_CHAR;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_MPI_CHAR 1" >>confdefs.h
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
 
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      export_dynamic_flag_spec='$wl--export-all-symbols'
+      allow_undefined_flag=unsupported
+      always_export_symbols=no
+      enable_shared_with_static_runtimes=yes
+      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file, use it as
+	# is; otherwise, prepend EXPORTS...
+	archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    haiku*)
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      link_all_deplibs=yes
+      ;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
 
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+      export_dynamic_flag_spec='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_BYTE is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_BYTE is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test no = "$tmp_diet"
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec=
+	  tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  compiler_needs_object=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  compiler_needs_object=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	tcc*)
+	  export_dynamic_flag_spec='-rdynamic'
+	  ;;
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+	  archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test yes = "$supports_anon_versioning"; then
+	    archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs=no
+      fi
+      ;;
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_BYTE;
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
 
-$as_echo "#define HAVE_MPI_BYTE 1" >>confdefs.h
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs=no
+	cat <<_LT_EOF 1>&2
 
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs=no
+	  fi
+	;;
+      esac
+      ;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    sunos4*)
+      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
 
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs=no
+      fi
+      ;;
+    esac
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_SIGNED_CHAR is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_SIGNED_CHAR is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    if test no = "$ld_shlibs"; then
+      runpath_var=
+      hardcode_libdir_flag_spec=
+      export_dynamic_flag_spec=
+      whole_archive_flag_spec=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag=unsupported
+      always_export_symbols=yes
+      archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct=unsupported
+      fi
+      ;;
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_SIGNED_CHAR;
+    aix[4-9]*)
+      if test ia64 = "$host_cpu"; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to GNU nm, but means don't demangle to AIX nm.
+	# Without the "-l" option, or with the "-B" option, AIX nm treats
+	# weak defined symbols like other global defined symbols, whereas
+	# GNU nm marks them as "W".
+	# While the 'weak' keyword is ignored in the Export File, we need
+	# it in the Import File for the 'aix-soname' feature, so we have
+	# to replace the "-B" option with "-P" for AIX nm.
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# have runtime linking enabled, and use it for executables.
+	# For shared libraries, we enable/disable runtime linking
+	# depending on the kind of the shared library created -
+	# when "with_aix_soname,aix_use_runtimelinking" is:
+	# "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "aix,yes"  lib.so          shared, rtl:yes, for executables
+	#            lib.a           static archive
+	# "both,no"  lib.so.V(shr.o) shared, rtl:yes
+	#            lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a(lib.so.V) shared, rtl:no
+	# "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a           static archive
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	    # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	    # so we don't have lib.a shared libs to link our executables.
+	    # We have to force runtime linking in this case.
+	    aix_use_runtimelinking=yes
+	    LDFLAGS="$LDFLAGS -Wl,-brtl"
+	  fi
+	  ;;
+	esac
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
 
-$as_echo "#define HAVE_MPI_SIGNED_CHAR 1" >>confdefs.h
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds=''
+      hardcode_direct=yes
+      hardcode_direct_absolute=yes
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      file_list_spec='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+	# The Import File defines what to hardcode.
+	hardcode_direct=no
+	hardcode_direct_absolute=no
+	;;
+      esac
 
+      if test yes = "$GCC"; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`$CC -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test yes = "$aix_use_runtimelinking"; then
+	  shared_flag="$shared_flag "'$wl-G'
+	fi
+	# Need to ensure runtime linking is disabled for the traditional
+	# shared library, or the linker may eventually find shared libraries
+	# /with/ Import File - we do not want to mix them.
+	shared_flag_aix='-shared'
+	shared_flag_svr4='-shared $wl-G'
+      else
+	# not using gcc
+	if test ia64 = "$host_cpu"; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag='$wl-G'
+	  else
+	    shared_flag='$wl-bM:SRE'
+	  fi
+	  shared_flag_aix='$wl-bM:SRE'
+	  shared_flag_svr4='$wl-G'
+	fi
+      fi
 
+      export_dynamic_flag_spec='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UNSIGNED_CHAR is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_UNSIGNED_CHAR is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_UNSIGNED_CHAR;
+int
+main ()
+{
 
+  ;
+  return 0;
+}
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_MPI_UNSIGNED_CHAR 1" >>confdefs.h
-
+if ac_fn_c_try_link "$LINENO"; then :
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
+  aix_libpath=$lt_cv_aix_libpath_
+fi
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_SHORT is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_SHORT is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+	if test ia64 = "$host_cpu"; then
+	  hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag="-z nodefs"
+	  archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath_+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_SHORT;
+int
+main ()
+{
 
+  ;
+  return 0;
+}
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_MPI_SHORT 1" >>confdefs.h
+if ac_fn_c_try_link "$LINENO"; then :
 
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath_"; then
+    lt_cv_aix_libpath_=/usr/lib:/lib
+  fi
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+fi
 
+  aix_libpath=$lt_cv_aix_libpath_
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
+	 hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag=' $wl-bernotok'
+	  allow_undefined_flag=' $wl-berok'
+	  if test yes = "$with_gnu_ld"; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec='$convenience'
+	  fi
+	  archive_cmds_need_lc=yes
+	  archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	  # -brtl affects multiple linker settings, -berok does not and is overridden later
+	  compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+	  if test svr4 != "$with_aix_soname"; then
+	    # This is similar to how AIX traditionally builds its shared libraries.
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	  fi
+	  if test aix != "$with_aix_soname"; then
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) >  [...]
+	  else
+	    # used by -dlpreopen to get the symbols
+	    archive_expsym_cmds="$archive_expsym_cmds"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	  fi
+	  archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d'
+	fi
+      fi
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UNSIGNED_SHORT is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_UNSIGNED_SHORT is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds=''
+        ;;
+      m68k)
+            archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_minus_L=yes
+        ;;
+      esac
+      ;;
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_UNSIGNED_SHORT;
+    bsdi[45]*)
+      export_dynamic_flag_spec=-rdynamic
+      ;;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	always_export_symbols=yes
+	file_list_spec='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	archive_expsym_cmds='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, )='true'
+	enable_shared_with_static_runtimes=yes
+	exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds='chmod 644 $oldlib'
+	postlink_cmds='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec=' '
+	allow_undefined_flag=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes=yes
+	;;
+      esac
+      ;;
 
-$as_echo "#define HAVE_MPI_UNSIGNED_SHORT 1" >>confdefs.h
+    darwin* | rhapsody*)
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  archive_cmds_need_lc=no
+  hardcode_direct=no
+  hardcode_automatic=yes
+  hardcode_shlibpath_var=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  else
+    whole_archive_flag_spec=''
+  fi
+  link_all_deplibs=yes
+  allow_undefined_flag=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*)
+        lt_prog_compiler_wl='-Wl,'
+        _lt_dar_can_shared=yes
+      ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+
+  else
+  ld_shlibs=no
+  fi
 
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INT is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_INT is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    dgux*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_INT;
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
 
-$as_echo "#define HAVE_MPI_INT 1" >>confdefs.h
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+	archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      export_dynamic_flag_spec='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+	hardcode_libdir_separator=:
+	hardcode_direct=yes
+	hardcode_direct_absolute=yes
+	export_dynamic_flag_spec='$wl-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L=yes
+      fi
+      ;;
 
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
 
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
+$as_echo_n "checking if $CC understands -b... " >&6; }
+if ${lt_cv_prog_compiler__b+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  lt_cv_prog_compiler__b=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS -b"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler__b=yes
+       fi
+     else
+       lt_cv_prog_compiler__b=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
+$as_echo "$lt_cv_prog_compiler__b" >&6; }
 
+if test yes = "$lt_cv_prog_compiler__b"; then
+    archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+else
+    archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+fi
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UNSIGNED is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_UNSIGNED is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+	  ;;
+	esac
+      fi
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec='$wl+b $wl$libdir'
+	hardcode_libdir_separator=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct=no
+	  hardcode_shlibpath_var=no
+	  ;;
+	*)
+	  hardcode_direct=yes
+	  hardcode_direct_absolute=yes
+	  export_dynamic_flag_spec='$wl-E'
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_UNSIGNED;
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L=yes
+	  ;;
+	esac
+      fi
+      ;;
 
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS=$LDFLAGS
+	   LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+	   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int foo (void) { return 0; }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      inherit_rpath=yes
+      link_all_deplibs=yes
+      ;;
 
-$as_echo "#define HAVE_MPI_UNSIGNED 1" >>confdefs.h
+    linux*)
+      case $cc_basename in
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	ld_shlibs=yes
+	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      esac
+      ;;
 
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      hardcode_shlibpath_var=no
+      ;;
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    newsos6)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      hardcode_shlibpath_var=no
+      ;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    *nto* | *qnx*)
+      ;;
 
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct=yes
+	hardcode_shlibpath_var=no
+	hardcode_direct_absolute=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+	  export_dynamic_flag_spec='$wl-E'
+	else
+	  archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  hardcode_libdir_flag_spec='$wl-rpath,$libdir'
+	fi
+      else
+	ld_shlibs=no
+      fi
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_LONG is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_LONG is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      allow_undefined_flag=unsupported
+      shrext_cmds=.dll
+      archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes=yes
+      ;;
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_LONG;
+    osf3*)
+      if test yes = "$GCC"; then
+	allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator=:
+      ;;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+	allow_undefined_flag=' $wl-expect_unresolved $wl\*'
+	archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
+      else
+	allow_undefined_flag=' -expect_unresolved \*'
+	archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
 
-$as_echo "#define HAVE_MPI_LONG 1" >>confdefs.h
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      archive_cmds_need_lc='no'
+      hardcode_libdir_separator=:
+      ;;
 
+    solaris*)
+      no_undefined_flag=' -z defs'
+      if test yes = "$GCC"; then
+	wlarc='$wl'
+	archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='$wl'
+	  archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_shlibpath_var=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands '-z linker_flag'.  GCC discards it without '$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test yes = "$GCC"; then
+	  whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs=yes
+      ;;
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      hardcode_shlibpath_var=no
+      ;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds='$CC -r -o $output$reload_objs'
+	  hardcode_direct=no
+        ;;
+	motorola)
+	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var=no
+      ;;
 
+    sysv4.3*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      export_dynamic_flag_spec='-Bexport'
+      ;;
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_FLOAT is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_FLOAT is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs=yes
+      fi
+      ;;
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_FLOAT;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag='$wl-z,text'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      runpath_var='LD_RUN_PATH'
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
 
-$as_echo "#define HAVE_MPI_FLOAT 1" >>confdefs.h
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag='$wl-z,text'
+      allow_undefined_flag='$wl-z,nodefs'
+      archive_cmds_need_lc=no
+      hardcode_shlibpath_var=no
+      hardcode_libdir_flag_spec='$wl-R,$libdir'
+      hardcode_libdir_separator=':'
+      link_all_deplibs=yes
+      export_dynamic_flag_spec='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
 
+    uts4*)
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_shlibpath_var=no
+      ;;
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+    *)
+      ld_shlibs=no
+      ;;
+    esac
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec='$wl-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
+$as_echo "$ld_shlibs" >&6; }
+test no = "$ld_shlibs" && can_build_shared=no
+
+with_gnu_ld=$with_gnu_ld
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_DOUBLE is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_DOUBLE is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_DOUBLE;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_DOUBLE 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_LONG_LONG_INT is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_LONG_LONG_INT is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_LONG_LONG_INT;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_LONG_LONG_INT 1" >>confdefs.h
 
 
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  $RM -f conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl
+	  pic_flag=$lt_prog_compiler_pic
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag
+	  allow_undefined_flag=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc=no
+	  else
+	    lt_cv_archive_cmds_need_lc=yes
+	  fi
+	  allow_undefined_flag=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM -f conftest*
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
+      archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
+      ;;
+    esac
+  fi
+  ;;
+esac
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UNSIGNED_LONG_LONG is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_UNSIGNED_LONG_LONG is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_UNSIGNED_LONG_LONG;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_UNSIGNED_LONG_LONG 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UB is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_UB is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_UB;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_UB 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_LB is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_LB is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_LB;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_LB 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_OFFSET is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_OFFSET is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_OFFSET;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_OFFSET_DATATYPE 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-if test "x${enable_fortran}" = xyes ; then
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_CHARACTER is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_CHARACTER is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_CHARACTER;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_CHARACTER 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_REAL is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_REAL is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_REAL;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_REAL 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_INTEGER is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_INTEGER;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_INTEGER 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_DOUBLE_PRECISION is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_DOUBLE_PRECISION is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_DOUBLE_PRECISION;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_DOUBLE_PRECISION 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER1 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_INTEGER1 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_INTEGER1;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_INTEGER1 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER2 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_INTEGER2 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_INTEGER2;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_INTEGER2 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER4 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_INTEGER4 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_INTEGER4;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_INTEGER4 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER8 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_INTEGER8 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_INTEGER8;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_INTEGER8 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER16 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_INTEGER16 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_INTEGER16;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_INTEGER16 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_REAL4 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_REAL4 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_REAL4;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_REAL4 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_REAL8 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_REAL8 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_REAL8;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_REAL8 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_REAL16 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_REAL16 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_REAL16;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_REAL16 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_COMPLEX8 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_COMPLEX8 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_COMPLEX8;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMPLEX8 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_COMPLEX16 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_COMPLEX16 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_COMPLEX16;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMPLEX16 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_COMPLEX32 is defined " >&5
-$as_echo_n "checking if MPI datatype MPI_COMPLEX32 is defined ... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-          #include <mpi.h>
-          MPI_Datatype dummy = MPI_COMPLEX32;
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define HAVE_MPI_COMPLEX32 1" >>confdefs.h
 
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test yes = "$GCC"; then
+  case $host_os in
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
+  esac
+  case $cc_basename in
+    fccpx* | FCCpx* ) lt_search_path_spec=`$CC --showme:libdirs` ;;
+    *) lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` ;;
+  esac
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary...
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo = "/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[lt_foo]++; }
+  if (lt_freq[lt_foo] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's|/\([A-Za-z]:\)|\1|g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
 
-fi
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
 
-in_place_swap=yes
-# Check whether --enable-in-place-swap was given.
-if test "${enable_in_place_swap+set}" = set; then :
-  enableval=$enable_in_place_swap; in_place_swap=${enableval}
-else
-  in_place_swap=yes
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
 
-fi
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
 
-if test "x${in_place_swap}" = xno ; then
-    $as_echo "#define DISABLE_IN_PLACE_SWAP 1" >>confdefs.h
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
 
-fi
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
 
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5
-$as_echo_n "checking whether char is unsigned... " >&6; }
-if ${ac_cv_c_char_unsigned+:} false; then :
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test yes = "$lt_cv_prog_gnu_ld"; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$ac_includes_default
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
+
 int
 main ()
 {
-static int test_array [1 - 2 * !(((char) -1) < 0)];
-test_array [0] = 0;
-return test_array [0];
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_char_unsigned=no
-else
-  ac_cv_c_char_unsigned=yes
+if ac_fn_c_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5
-$as_echo "$ac_cv_c_char_unsigned" >&6; }
-if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
-  $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
 
 fi
 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_c_bigendian=unknown
-    # See if we're dealing with a universal compiler.
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __APPLE_CC__
-	       not a universal capable compiler
-	     #endif
-	     typedef int dummy;
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
 
-	# Check for potential -arch flags.  It is not universal unless
-	# there are at least two -arch flags with different values.
-	ac_arch=
-	ac_prev=
-	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
-	 if test -n "$ac_prev"; then
-	   case $ac_word in
-	     i?86 | x86_64 | ppc | ppc64)
-	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
-		 ac_arch=$ac_word
-	       else
-		 ac_cv_c_bigendian=universal
-		 break
-	       fi
-	       ;;
-	   esac
-	   ac_prev=
-	 elif test "x$ac_word" = "x-arch"; then
-	   ac_prev=arch
-	 fi
-       done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if sys/param.h defines the BYTE_ORDER macro.
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-	     #include <sys/param.h>
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
 
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
-		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
-		     && LITTLE_ENDIAN)
-	      bogus endian macros
-	     #endif
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to BIG_ENDIAN or not.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-		#include <sys/param.h>
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
 
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
-		 not big endian
-		#endif
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
 
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
-	      bogus endian macros
-	     #endif
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  # It does; now see whether it defined to _BIG_ENDIAN or not.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
 
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
-		 not big endian
-		#endif
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_c_bigendian=yes
-else
-  ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    fi
-    if test $ac_cv_c_bigendian = unknown; then
-      # Compile a test program.
-      if test "$cross_compiling" = yes; then :
-  # Try to guess by grepping values from an object file.
-	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-short int ascii_mm[] =
-		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-		short int ascii_ii[] =
-		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
-		int use_ascii (int i) {
-		  return ascii_mm[i] + ascii_ii[i];
-		}
-		short int ebcdic_ii[] =
-		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-		short int ebcdic_mm[] =
-		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
-		int use_ebcdic (int i) {
-		  return ebcdic_mm[i] + ebcdic_ii[i];
-		}
-		extern int foo;
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
 
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
-	      ac_cv_c_bigendian=yes
-	    fi
-	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
-	      if test "$ac_cv_c_bigendian" = unknown; then
-		ac_cv_c_bigendian=no
-	      else
-		# finding both strings is unlikely to happen, but who knows?
-		ac_cv_c_bigendian=unknown
-	      fi
-	    fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
 
-	     /* Are we little or big endian?  From Harbison&Steele.  */
-	     union
-	     {
-	       long int l;
-	       char c[sizeof (long int)];
-	     } u;
-	     u.l = 1;
-	     return u.c[sizeof (long int) - 1] == 1;
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  ac_cv_c_bigendian=no
-else
-  ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
 
-    fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
-   yes)
-     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
-   no)
-      ;; #(
-   universal)
 
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
 
-     ;; #(
-   *)
-     as_fn_error $? "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
 
-is_bigendian=no
-if test "x${ac_cv_c_bigendian}" = xyes ; then
-   is_bigendian=yes
-fi
 
 
-if test "x${ac_cv_c_bigendian}" = xyes  || (test "x${in_place_swap}" = xno) ; then
-   INTENTV="IN"
-else
-   INTENTV="INOUT"
-fi
 
 
-ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
 
-else
 
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
 
-fi
 
-ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = xyes; then :
 
-else
 
-cat >>confdefs.h <<_ACEOF
-#define off_t long int
-_ACEOF
 
-fi
 
-ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
-if test "x$ac_cv_type_ssize_t" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_SSIZE_T 1
-_ACEOF
 
 
-fi
-ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_PTRDIFF_T 1
-_ACEOF
 
 
-fi
-ac_fn_c_check_type "$LINENO" "uchar" "ac_cv_type_uchar" "$ac_includes_default"
-if test "x$ac_cv_type_uchar" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UCHAR 1
-_ACEOF
 
 
-fi
-ac_fn_c_check_type "$LINENO" "ushort" "ac_cv_type_ushort" "$ac_includes_default"
-if test "x$ac_cv_type_ushort" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_USHORT 1
-_ACEOF
 
 
-fi
-ac_fn_c_check_type "$LINENO" "uint" "ac_cv_type_uint" "$ac_includes_default"
-if test "x$ac_cv_type_uint" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UINT 1
-_ACEOF
 
 
-fi
-ac_fn_c_check_type "$LINENO" "longlong" "ac_cv_type_longlong" "$ac_includes_default"
-if test "x$ac_cv_type_longlong" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_LONGLONG 1
-_ACEOF
 
 
-fi
-ac_fn_c_check_type "$LINENO" "ulonglong" "ac_cv_type_ulonglong" "$ac_includes_default"
-if test "x$ac_cv_type_ulonglong" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_ULONGLONG 1
-_ACEOF
 
 
-fi
-ac_fn_c_check_type "$LINENO" "int64" "ac_cv_type_int64" "$ac_includes_default"
-if test "x$ac_cv_type_int64" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_INT64 1
-_ACEOF
 
 
-fi
-ac_fn_c_check_type "$LINENO" "uint64" "ac_cv_type_uint64" "$ac_includes_default"
-if test "x$ac_cv_type_uint64" = xyes; then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_UINT64 1
-_ACEOF
 
 
-fi
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
-$as_echo_n "checking size of size_t... " >&6; }
-if ${ac_cv_sizeof_size_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_size_t" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (size_t)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_size_t=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
-$as_echo "$ac_cv_sizeof_size_t" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
-$as_echo_n "checking size of off_t... " >&6; }
-if ${ac_cv_sizeof_off_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_off_t" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (off_t)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_off_t=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5
-$as_echo "$ac_cv_sizeof_off_t" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of signed char" >&5
-$as_echo_n "checking size of signed char... " >&6; }
-if ${ac_cv_sizeof_signed_char+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed char))" "ac_cv_sizeof_signed_char"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_signed_char" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (signed char)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_signed_char=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed_char" >&5
-$as_echo "$ac_cv_sizeof_signed_char" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SIGNED_CHAR $ac_cv_sizeof_signed_char
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned char" >&5
-$as_echo_n "checking size of unsigned char... " >&6; }
-if ${ac_cv_sizeof_unsigned_char+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned char))" "ac_cv_sizeof_unsigned_char"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_unsigned_char" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned char)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_char=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_char" >&5
-$as_echo "$ac_cv_sizeof_unsigned_char" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_CHAR $ac_cv_sizeof_unsigned_char
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_short" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (short)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_short=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short int" >&5
-$as_echo_n "checking size of unsigned short int... " >&6; }
-if ${ac_cv_sizeof_unsigned_short_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short int))" "ac_cv_sizeof_unsigned_short_int"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_unsigned_short_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned short int)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_short_int=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short_int" >&5
-$as_echo "$ac_cv_sizeof_unsigned_short_int" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_SHORT_INT $ac_cv_sizeof_unsigned_short_int
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5
-$as_echo_n "checking size of unsigned short... " >&6; }
-if ${ac_cv_sizeof_unsigned_short+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_unsigned_short" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned short)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_short=0
-   fi
-fi
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5
-$as_echo "$ac_cv_sizeof_unsigned_short" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" ||
+   test -n "$runpath_var" ||
+   test yes = "$hardcode_automatic"; then
 
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" &&
+     test no != "$hardcode_minus_L"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
 else
-  if test "$ac_cv_type_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (int)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_int=0
-   fi
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
+$as_echo "$hardcode_action" >&6; }
 
+if test relink = "$hardcode_action" ||
+   test yes = "$inherit_rpath"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
 
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
-$as_echo_n "checking size of unsigned int... " >&6; }
-if ${ac_cv_sizeof_unsigned_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int"        "$ac_includes_default"; then :
 
+  if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
 else
-  if test "$ac_cv_type_unsigned_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned int)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_int=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
-$as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
-
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
 
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
-_ACEOF
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
 
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
+  darwin*)
+    # if libdl is installed we need to link against it
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
 else
-  if test "$ac_cv_type_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long=0
-   fi
+  ac_cv_lib_dl_dlopen=no
 fi
-
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
 
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
 
+fi
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+    ;;
 
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5
-$as_echo_n "checking size of float... " >&6; }
-if ${ac_cv_sizeof_float+:} false; then :
+  *)
+    ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
+if test "x$ac_cv_func_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
+$as_echo_n "checking for shl_load in -ldld... " >&6; }
+if ${ac_cv_lib_dld_shl_load+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float"        "$ac_includes_default"; then :
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shl_load ();
+int
+main ()
+{
+return shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_shl_load=yes
 else
-  if test "$ac_cv_type_float" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (float)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_float=0
-   fi
+  ac_cv_lib_dld_shl_load=no
 fi
-
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5
-$as_echo "$ac_cv_sizeof_float" >&6; }
-
-
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
+$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
+if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
+  lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
+else
+  ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+$as_echo_n "checking for dlopen in -ldl... " >&6; }
+if ${ac_cv_lib_dl_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_FLOAT $ac_cv_sizeof_float
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dl_dlopen=yes
+else
+  ac_cv_lib_dl_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
+$as_echo_n "checking for dlopen in -lsvld... " >&6; }
+if ${ac_cv_lib_svld_dlopen+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
-$as_echo_n "checking size of double... " >&6; }
-if ${ac_cv_sizeof_double+:} false; then :
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dlopen ();
+int
+main ()
+{
+return dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_svld_dlopen=yes
+else
+  ac_cv_lib_svld_dlopen=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
+$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
+if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
+  lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
+$as_echo_n "checking for dld_link in -ldld... " >&6; }
+if ${ac_cv_lib_dld_dld_link+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double"        "$ac_includes_default"; then :
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dld_link ();
+int
+main ()
+{
+return dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dld_dld_link=yes
 else
-  if test "$ac_cv_type_double" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (double)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_double=0
-   fi
+  ac_cv_lib_dld_dld_link=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
+$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
+if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
+  lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
 fi
 
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
-$as_echo "$ac_cv_sizeof_double" >&6; }
 
 
+fi
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_DOUBLE $ac_cv_sizeof_double
-_ACEOF
 
+fi
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
 
-else
-  if test "$ac_cv_type_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (long long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_long_long=0
-   fi
 fi
 
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
 
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
 
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
 
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
-$as_echo_n "checking size of unsigned long long... " >&6; }
-if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
+$as_echo_n "checking whether a program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long"        "$ac_includes_default"; then :
-
+  	  if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self=cross
 else
-  if test "$ac_cv_type_unsigned_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (unsigned long long)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_unsigned_long_long=0
-   fi
-fi
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
-$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
 
+#include <stdio.h>
 
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
-_ACEOF
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
 
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
 
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
 
-if test "$ac_cv_type_ushort" = yes ; then
-    # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of ushort" >&5
-$as_echo_n "checking size of ushort... " >&6; }
-if ${ac_cv_sizeof_ushort+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ushort))" "ac_cv_sizeof_ushort"        "$ac_includes_default"; then :
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
 
-else
-  if test "$ac_cv_type_ushort" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (ushort)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_ushort=0
-   fi
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
 fi
+rm -fr conftest*
+
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ushort" >&5
-$as_echo "$ac_cv_sizeof_ushort" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
+$as_echo "$lt_cv_dlopen_self" >&6; }
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
+$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
+if ${lt_cv_dlopen_self_static+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  	  if test yes = "$cross_compiling"; then :
+  lt_cv_dlopen_self_static=cross
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+#line $LINENO "configure"
+#include "confdefs.h"
 
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
 
+#include <stdio.h>
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_USHORT $ac_cv_sizeof_ushort
-_ACEOF
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
 
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
 
+  return status;
+}
+_LT_EOF
+  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&5 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
 fi
-if test "$ac_cv_type_uint" = yes ; then
-    # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint" >&5
-$as_echo_n "checking size of uint... " >&6; }
-if ${ac_cv_sizeof_uint+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint))" "ac_cv_sizeof_uint"        "$ac_includes_default"; then :
+rm -fr conftest*
+
 
-else
-  if test "$ac_cv_type_uint" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (uint)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_uint=0
-   fi
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
+$as_echo "$lt_cv_dlopen_self_static" >&6; }
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
 
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint" >&5
-$as_echo "$ac_cv_sizeof_uint" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_UINT $ac_cv_sizeof_uint
-_ACEOF
 
 
-fi
-if test "$ac_cv_type_longlong" = yes ; then
-    # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of longlong" >&5
-$as_echo_n "checking size of longlong... " >&6; }
-if ${ac_cv_sizeof_longlong+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (longlong))" "ac_cv_sizeof_longlong"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_longlong" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (longlong)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_longlong=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_longlong" >&5
-$as_echo "$ac_cv_sizeof_longlong" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONGLONG $ac_cv_sizeof_longlong
-_ACEOF
 
 
-fi
-if test "$ac_cv_type_ulonglong" = yes ; then
-    # The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of ulonglong" >&5
-$as_echo_n "checking size of ulonglong... " >&6; }
-if ${ac_cv_sizeof_ulonglong+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ulonglong))" "ac_cv_sizeof_ulonglong"        "$ac_includes_default"; then :
-
-else
-  if test "$ac_cv_type_ulonglong" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "cannot compute sizeof (ulonglong)
-See \`config.log' for more details" "$LINENO" 5; }
-   else
-     ac_cv_sizeof_ulonglong=0
-   fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ulonglong" >&5
-$as_echo "$ac_cv_sizeof_ulonglong" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_ULONGLONG $ac_cv_sizeof_ulonglong
-_ACEOF
 
 
-fi
 
-if test "x${enable_fortran}" = xyes ; then
-    if test "$cross_compiling" = yes; then
 
-    ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-    for ftype in integer*1 byte "integer(kind=1)"; do
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
-$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
-        cat > conftest.$ac_ext <<_ACEOF
 
-               subroutine sub(value)
-               $ftype value
-               end
 
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
+striplib=
+old_striplib=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
+$as_echo_n "checking whether stripping libraries is possible... " >&6; }
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	    NF_INT1_T=$ftype
-	    cat >>confdefs.h <<_ACEOF
-#define NF_INT1_T $ftype
-_ACEOF
-
-            break
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-
+    fi
+    ;;
+  *)
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    ;;
+  esac
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-    ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-
-    for ftype in integer*2 "integer(kind=2)"; do
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
-$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
-        cat > conftest.$ac_ext <<_ACEOF
 
-               subroutine sub(value)
-               $ftype value
-               end
 
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	    NF_INT2_T=$ftype
-	    cat >>confdefs.h <<_ACEOF
-#define NF_INT2_T $ftype
-_ACEOF
 
-            break
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-    ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-    for ftype in integer*8 "integer(kind=8)"; do
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
-$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
-        cat > conftest.$ac_ext <<_ACEOF
 
-               subroutine sub(value)
-               $ftype value
-               end
 
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	    NF_INT8_T=$ftype
-	    cat >>confdefs.h <<_ACEOF
-#define NF_INT8_T $ftype
-_ACEOF
 
-            break
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+  # Report what library types will actually be built
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+  test no = "$can_build_shared" && enable_shared=no
 
-    else
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test yes = "$enable_shared" && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
 
-        case "$FC" in
-	'') ;;
-	*)
+  aix[4-9]*)
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;			# shared object as lib.so file only
+      yes,svr4,*) ;;			# shared object as lib.so archive member only
+      yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+      esac
+    fi
+    ;;
+  esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+  # Make sure either enable_shared or enable_static is yes.
+  test yes = "$enable_shared" || enable_static=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
 
 
-	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C-equivalent to Fortran routine \"SUB\"" >&5
-$as_echo_n "checking for C-equivalent to Fortran routine \"SUB\"... " >&6; }
-            ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
-case $ac_cv_fc_mangling in
-  upper*) ac_val="SUB" ;;
-  lower*) ac_val="sub" ;;
-  *)      ac_val="unknown" ;;
-esac
-case $ac_cv_fc_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac
 
-FCALLSCSUB="$ac_val"
 
+fi
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FCALLSCSUB" >&5
-$as_echo "$FCALLSCSUB" >&6; }
-	    ;;
-    esac
+CC=$lt_save_CC
 
+      if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
+  ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
+$as_echo_n "checking how to run the C++ preprocessor... " >&6; }
+if test -z "$CXXCPP"; then
+  if ${ac_cv_prog_CXXCPP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
 
-        case "$FC" in
-    '')
-	;;
-    *)
+else
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
 
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
 
-    ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+  break
+fi
 
-    for ftype in integer*1 byte "integer(kind=1)"; do
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
-$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
-        cat > conftest.$ac_ext <<_ACEOF
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
 
-               subroutine sub(value)
-               $ftype value
-               end
-
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	    NF_INT1_T=$ftype
-	    cat >>confdefs.h <<_ACEOF
-#define NF_INT1_T $ftype
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
+$as_echo "$CXXCPP" >&6; }
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
 _ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
 
-            break
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_cxx_try_cpp "$LINENO"; then :
+  # Broken: success on invalid input.
+continue
+else
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
 
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-    ac_ext=c
+
+ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+else
+  _lt_caught_CXX_error=yes
+fi
 
+ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
-    ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+archive_cmds_need_lc_CXX=no
+allow_undefined_flag_CXX=
+always_export_symbols_CXX=no
+archive_expsym_cmds_CXX=
+compiler_needs_object_CXX=no
+export_dynamic_flag_spec_CXX=
+hardcode_direct_CXX=no
+hardcode_direct_absolute_CXX=no
+hardcode_libdir_flag_spec_CXX=
+hardcode_libdir_separator_CXX=
+hardcode_minus_L_CXX=no
+hardcode_shlibpath_var_CXX=unsupported
+hardcode_automatic_CXX=no
+inherit_rpath_CXX=no
+module_cmds_CXX=
+module_expsym_cmds_CXX=
+link_all_deplibs_CXX=unknown
+old_archive_cmds_CXX=$old_archive_cmds
+reload_flag_CXX=$reload_flag
+reload_cmds_CXX=$reload_cmds
+no_undefined_flag_CXX=
+whole_archive_flag_spec_CXX=
+enable_shared_with_static_runtimes_CXX=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+objext_CXX=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM -f conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  compiler_CXX=$CC
+  func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test yes = "$GXX"; then
+      lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
+    else
+      lt_prog_compiler_no_builtin_flag_CXX=
+    fi
 
-    for ftype in integer*2 "integer(kind=2)"; do
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
-$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
-        cat > conftest.$ac_ext <<_ACEOF
+    if test yes = "$GXX"; then
+      # Set up default GNU C++ configuration
 
-               subroutine sub(value)
-               $ftype value
-               end
 
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	    NF_INT2_T=$ftype
-	    cat >>confdefs.h <<_ACEOF
-#define NF_INT2_T $ftype
-_ACEOF
 
-            break
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then :
+  withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
+  with_gnu_ld=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
 
+func_cc_basename $CC
+cc_basename=$func_cc_basename_result
 
-    ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-    for ftype in integer*8 "integer(kind=8)"; do
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
-$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
-        cat > conftest.$ac_ext <<_ACEOF
+ac_prog=ld
 
-               subroutine sub(value)
-               $ftype value
-               end
+# special care for Fujitsu compilers
+if test "$cc_basename" = fccpx || test "$cc_basename" = FCCpx ; then
+   if test yes = "$with_gnu_ld" || test "$host_os" = linux-gnu ; then
+      ac_prog=`($CC -Xg -print-prog-name=ld) 2>&5`
+      test -z "$LD" && LD=$ac_prog
+      with_gnu_ld=yes
+   fi
+fi
 
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-	    NF_INT8_T=$ftype
-	    cat >>confdefs.h <<_ACEOF
-#define NF_INT8_T $ftype
-_ACEOF
+if test "$ac_prog" = ld && test yes = "$GCC" ; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+$as_echo_n "checking for ld used by $CC... " >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | ?:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+$as_echo_n "checking for GNU ld... " >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+$as_echo_n "checking for non-GNU ld... " >&6; }
+fi
+if ${lt_cv_path_LD+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test no != "$with_gnu_ld" && break
+	;;
+      *)
+	test yes != "$with_gnu_ld" && break
+	;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi
+fi
 
-            break
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
+if ${lt_cv_prog_gnu_ld+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
+$as_echo "$lt_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$lt_cv_prog_gnu_ld
 
 
 
-	case "${NF_INT1_T}" in
-	    '') ;;
-	    *)
-    cat >conftestf.f <<EOF
-           $NF_INT1_T values(4)
-           integer status, sub
-           data values /-1, -2, -3, -4/
-           status = sub(values)
-           end
-EOF
-    ac_cv_ctype_fortran=no
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"$NF_INT1_T\" is " >&5
-$as_echo_n "checking if Fortran \"$NF_INT1_T\" is ... " >&6; }
-    for ctype in "signed char" short int long; do
-		cat >conftest.c <<EOF
-	    int $FCALLSCSUB($ctype values[4])
-	    {
-		return(values[1] != -2 || values[2] != -3);
-	    }
-EOF
-	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
-	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	    doit='$FC ${FFLAGS} -c conftestf.f'
-	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
-	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		    doit=./conftest
-		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
-$as_echo "\"$ctype\" in C" >&6; }
-		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
-			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
-		        cat >>confdefs.h <<_ACEOF
-#define NF_INT1_IS_C_$cname 1
-_ACEOF
 
-                        ac_cv_ctype_fortran=yes
-		        break
-		    fi
-	        else
-		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
-	        fi
-	    else
-		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
-	    fi
-	else
-	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
-	fi
-    done
-    ${RM} -f conftest*
 
-    if test "$ac_cv_ctype_fortran" = no ; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
-$as_echo "no correspond data type in C" >&6; }
+
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test yes = "$with_gnu_ld"; then
+        archive_cmds_CXX='$CC $pic_flag -shared $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        archive_expsym_cmds_CXX='$CC $pic_flag -shared $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='$wl'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if test "$cc_basename" == FCCpx ; then
+           ac_prog=`($CC -Xg -print-prog-name=ld) 2>&5`
+        else
+           ac_prog=`($CC -print-prog-name=ld) 2>&5`
+        fi
+        if eval "$ac_prog --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+        else
+          whole_archive_flag_spec_CXX=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        archive_cmds_CXX='$CC -shared $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
     fi
-    unset ac_cv_ctype_fortran
 
-		;;
-	esac
-	case "${NF_INT2_T}" in
-	    '') ;;
-	    *)
-    cat >conftestf.f <<EOF
-           $NF_INT2_T values(4)
-           integer status, sub
-           data values /-1, -2, -3, -4/
-           status = sub(values)
-           end
-EOF
-    ac_cv_ctype_fortran=no
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"$NF_INT2_T\" is " >&5
-$as_echo_n "checking if Fortran \"$NF_INT2_T\" is ... " >&6; }
-    for ctype in short int long; do
-		cat >conftest.c <<EOF
-	    int $FCALLSCSUB($ctype values[4])
-	    {
-		return(values[1] != -2 || values[2] != -3);
-	    }
-EOF
-	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
-	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	    doit='$FC ${FFLAGS} -c conftestf.f'
-	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
-	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		    doit=./conftest
-		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
-$as_echo "\"$ctype\" in C" >&6; }
-		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
-			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
-		        cat >>confdefs.h <<_ACEOF
-#define NF_INT2_IS_C_$cname 1
-_ACEOF
+    # PORTME: fill in a description of your system's C++ link characteristics
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+    ld_shlibs_CXX=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+      aix[4-9]*)
+        if test ia64 = "$host_cpu"; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
+          case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	      # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	      # so we don't have lib.a shared libs to link our executables.
+	      # We have to force runtime linking in this case.
+	      aix_use_runtimelinking=yes
+	      LDFLAGS="$LDFLAGS -Wl,-brtl"
+	    fi
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        archive_cmds_CXX=''
+        hardcode_direct_CXX=yes
+        hardcode_direct_absolute_CXX=yes
+        hardcode_libdir_separator_CXX=':'
+        link_all_deplibs_CXX=yes
+        file_list_spec_CXX='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;	# no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          hardcode_direct_CXX=no
+          hardcode_direct_absolute_CXX=no
+          ;;
+        esac
 
-                        ac_cv_ctype_fortran=yes
-		        break
-		    fi
-	        else
-		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
-	        fi
+        if test yes = "$GXX"; then
+          case $host_os in aix4.[012]|aix4.[012].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`$CC -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    hardcode_direct_CXX=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    hardcode_minus_L_CXX=yes
+	    hardcode_libdir_flag_spec_CXX='-L$libdir'
+	    hardcode_libdir_separator_CXX=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag=$shared_flag' $wl-G'
+	  fi
+	  # Need to ensure runtime linking is disabled for the traditional
+	  # shared library, or the linker may eventually find shared libraries
+	  # /with/ Import File - we do not want to mix them.
+	  shared_flag_aix='-shared'
+	  shared_flag_svr4='-shared $wl-G'
+        else
+          # not using gcc
+          if test ia64 = "$host_cpu"; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test yes = "$aix_use_runtimelinking"; then
+	      shared_flag='$wl-G'
 	    else
-		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	      shared_flag='$wl-bM:SRE'
 	    fi
-	else
-	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
-	fi
-    done
-    ${RM} -f conftest*
+	    shared_flag_aix='$wl-bM:SRE'
+	    shared_flag_svr4='$wl-G'
+          fi
+        fi
+
+        export_dynamic_flag_spec_CXX='$wl-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        always_export_symbols_CXX=yes
+	if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          # The "-G" linker flag allows undefined symbols.
+          no_undefined_flag_CXX='-bernotok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-    if test "$ac_cv_ctype_fortran" = no ; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
-$as_echo "no correspond data type in C" >&6; }
-    fi
-    unset ac_cv_ctype_fortran
+int
+main ()
+{
 
-		;;
-	esac
-	case "${NF_INT8_T}" in
-	    '') ;;
-	    *)
-    cat >conftestf.f <<EOF
-           $NF_INT8_T values(4)
-           integer status, sub
-           data values /-1, -2, -3, -4/
-           status = sub(values)
-           end
-EOF
-    ac_cv_ctype_fortran=no
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"$NF_INT8_T\" is " >&5
-$as_echo_n "checking if Fortran \"$NF_INT8_T\" is ... " >&6; }
-    for ctype in int long "long long"; do
-		cat >conftest.c <<EOF
-	    int $FCALLSCSUB($ctype values[4])
-	    {
-		return(values[1] != -2 || values[2] != -3);
-	    }
-EOF
-	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
-	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	    doit='$FC ${FFLAGS} -c conftestf.f'
-	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
-	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		    doit=./conftest
-		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
-$as_echo "\"$ctype\" in C" >&6; }
-		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
-			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
-		        cat >>confdefs.h <<_ACEOF
-#define NF_INT8_IS_C_$cname 1
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
 
-                        ac_cv_ctype_fortran=yes
-		        break
-		    fi
-	        else
-		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
-	        fi
-	    else
-		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
-	    fi
-	else
-	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
-	fi
-    done
-    ${RM} -f conftest*
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
+  fi
 
-    if test "$ac_cv_ctype_fortran" = no ; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
-$as_echo "no correspond data type in C" >&6; }
-    fi
-    unset ac_cv_ctype_fortran
+fi
 
-		;;
-	esac
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
 
-    cat >conftestf.f <<EOF
-           integer values(4)
-           integer status, sub
-           data values /-1, -2, -3, -4/
-           status = sub(values)
-           end
-EOF
-    ac_cv_ctype_fortran=no
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"integer\" is " >&5
-$as_echo_n "checking if Fortran \"integer\" is ... " >&6; }
-    for ctype in int long; do
-		cat >conftest.c <<EOF
-	    int $FCALLSCSUB($ctype values[4])
-	    {
-		return(values[1] != -2 || values[2] != -3);
-	    }
-EOF
-	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
-	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	    doit='$FC ${FFLAGS} -c conftestf.f'
-	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
-	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		    doit=./conftest
-		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
-$as_echo "\"$ctype\" in C" >&6; }
-		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
-			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
-		        cat >>confdefs.h <<_ACEOF
-#define NF_INT_IS_C_$cname 1
+          hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
+
+          archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+        else
+          if test ia64 = "$host_cpu"; then
+	    hardcode_libdir_flag_spec_CXX='$wl-R $libdir:/usr/lib:/lib'
+	    allow_undefined_flag_CXX="-z nodefs"
+	    archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
 _ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
 
-                        ac_cv_ctype_fortran=yes
-		        break
-		    fi
-	        else
-		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
-	        fi
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__CXX"; then
+    lt_cv_aix_libpath__CXX=/usr/lib:/lib
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__CXX
+fi
+
+	    hardcode_libdir_flag_spec_CXX='$wl-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    no_undefined_flag_CXX=' $wl-bernotok'
+	    allow_undefined_flag_CXX=' $wl-berok'
+	    if test yes = "$with_gnu_ld"; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
 	    else
-		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	      # Exported symbols can be pulled into shared objects from archives
+	      whole_archive_flag_spec_CXX='$convenience'
+	    fi
+	    archive_cmds_need_lc_CXX=yes
+	    archive_expsym_cmds_CXX='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	    # -brtl affects multiple linker settings, -berok does not and is overridden later
+	    compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+	    if test svr4 != "$with_aix_soname"; then
+	      # This is similar to how AIX traditionally builds its shared
+	      # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+	      archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	    fi
+	    if test aix != "$with_aix_soname"; then
+	      archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_sy [...]
+	    else
+	      # used by -dlpreopen to get the symbols
+	      archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
 	    fi
+	    archive_expsym_cmds_CXX="$archive_expsym_cmds_CXX"'~$RM -r $output_objdir/$realname.d'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  allow_undefined_flag_CXX=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
 	else
-	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
+	  ld_shlibs_CXX=no
 	fi
-    done
-    ${RM} -f conftest*
-
-    if test "$ac_cv_ctype_fortran" = no ; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
-$as_echo "no correspond data type in C" >&6; }
-    fi
-    unset ac_cv_ctype_fortran
-
+	;;
 
-    cat >conftestf.f <<EOF
-           real values(4)
-           integer status, sub
-           data values /-1, -2, -3, -4/
-           status = sub(values)
-           end
-EOF
-    ac_cv_ctype_fortran=no
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"real\" is " >&5
-$as_echo_n "checking if Fortran \"real\" is ... " >&6; }
-    for ctype in float double; do
-		cat >conftest.c <<EOF
-	    int $FCALLSCSUB($ctype values[4])
-	    {
-		return(values[1] != -2 || values[2] != -3);
-	    }
-EOF
-	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
-	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	    doit='$FC ${FFLAGS} -c conftestf.f'
-	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
-	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		    doit=./conftest
-		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
-$as_echo "\"$ctype\" in C" >&6; }
-		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
-			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
-		        cat >>confdefs.h <<_ACEOF
-#define NF_REAL_IS_C_$cname 1
-_ACEOF
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  ld_shlibs_CXX=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX=' '
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=yes
+	  file_list_spec_CXX='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=.dll
+	  # FIXME: Setting linknames here is a bad hack.
+	  archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	  archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true'
+	  enable_shared_with_static_runtimes_CXX=yes
+	  # Don't use ranlib
+	  old_postinstall_cmds_CXX='chmod 644 $oldlib'
+	  postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  hardcode_libdir_flag_spec_CXX='-L$libdir'
+	  export_dynamic_flag_spec_CXX='$wl--export-all-symbols'
+	  allow_undefined_flag_CXX=unsupported
+	  always_export_symbols_CXX=no
+	  enable_shared_with_static_runtimes_CXX=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    archive_cmds_CXX='$CC -shared $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file, use it as
+	    # is; otherwise, prepend EXPORTS...
+	    archive_expsym_cmds_CXX='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared $nostdlib_flag -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    ld_shlibs_CXX=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
 
-                        ac_cv_ctype_fortran=yes
-		        break
-		    fi
-	        else
-		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
-	        fi
-	    else
-		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
-	    fi
-	else
-	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
-	fi
-    done
-    ${RM} -f conftest*
 
-    if test "$ac_cv_ctype_fortran" = no ; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
-$as_echo "no correspond data type in C" >&6; }
+  archive_cmds_need_lc_CXX=no
+  hardcode_direct_CXX=no
+  hardcode_automatic_CXX=yes
+  hardcode_shlibpath_var_CXX=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+
+  else
+    whole_archive_flag_spec_CXX=''
+  fi
+  link_all_deplibs_CXX=yes
+  allow_undefined_flag_CXX=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*)
+        lt_prog_compiler_wl_CXX='-Wl,'
+        _lt_dar_can_shared=yes
+      ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+       if test yes != "$lt_cv_apple_cc_single_mod"; then
+      archive_cmds_CXX="\$CC -r -keep_private_externs $nostdlib_flag -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs $nostdlib_flag -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
     fi
-    unset ac_cv_ctype_fortran
 
+  else
+  ld_shlibs_CXX=no
+  fi
 
-    cat >conftestf.f <<EOF
-           doubleprecision values(4)
-           integer status, sub
-           data values /-1, -2, -3, -4/
-           status = sub(values)
-           end
-EOF
-    ac_cv_ctype_fortran=no
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"doubleprecision\" is " >&5
-$as_echo_n "checking if Fortran \"doubleprecision\" is ... " >&6; }
-    for ctype in double float; do
-		cat >conftest.c <<EOF
-	    int $FCALLSCSUB($ctype values[4])
-	    {
-		return(values[1] != -2 || values[2] != -3);
-	    }
-EOF
-	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
-	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	    doit='$FC ${FFLAGS} -c conftestf.f'
-	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
-	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		    doit=./conftest
-		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
-  (eval $doit) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
-$as_echo "\"$ctype\" in C" >&6; }
-		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
-			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
-		        cat >>confdefs.h <<_ACEOF
-#define NF_DOUBLEPRECISION_IS_C_$cname 1
-_ACEOF
+	;;
 
-                        ac_cv_ctype_fortran=yes
-		        break
-		    fi
-	        else
-		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
-	        fi
+      os2*)
+	hardcode_libdir_flag_spec_CXX='-L$libdir'
+	hardcode_minus_L_CXX=yes
+	allow_undefined_flag_CXX=unsupported
+	shrext_cmds=.dll
+	archive_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	  $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	  $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	  $ECHO EXPORTS >> $output_objdir/$libname.def~
+	  emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	  $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	  emximp -o $lib $output_objdir/$libname.def'
+	archive_expsym_cmds_CXX='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	  $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	  $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	  $ECHO EXPORTS >> $output_objdir/$libname.def~
+	  prefix_cmds="$SED"~
+	  if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	    prefix_cmds="$prefix_cmds -e 1d";
+	  fi~
+	  prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	  cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	  $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	  emximp -o $lib $output_objdir/$libname.def'
+	old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+	enable_shared_with_static_runtimes_CXX=yes
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        ld_shlibs_CXX=no
+        ;;
+
+      freebsd-elf*)
+        archive_cmds_need_lc_CXX=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        ld_shlibs_CXX=yes
+        ;;
+
+      haiku*)
+        archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+        link_all_deplibs_CXX=yes
+        ;;
+
+      hpux9*)
+        hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
+        hardcode_libdir_separator_CXX=:
+        export_dynamic_flag_spec_CXX='$wl-E'
+        hardcode_direct_CXX=yes
+        hardcode_minus_L_CXX=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            ld_shlibs_CXX=no
+            ;;
+          aCC*)
+            archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test yes = "$GXX"; then
+              archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared $nostdlib_flag -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              ld_shlibs_CXX=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test no = "$with_gnu_ld"; then
+	  hardcode_libdir_flag_spec_CXX='$wl+b $wl$libdir'
+	  hardcode_libdir_separator_CXX=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      export_dynamic_flag_spec_CXX='$wl-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct_CXX=no
+            hardcode_shlibpath_var_CXX=no
+            ;;
+          *)
+            hardcode_direct_CXX=yes
+            hardcode_direct_absolute_CXX=yes
+            hardcode_minus_L_CXX=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        archive_cmds_CXX='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        archive_cmds_CXX='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test yes = "$GXX"; then
+	      if test no = "$with_gnu_ld"; then
+	        case $host_cpu in
+	          hppa*64*)
+	            archive_cmds_CXX='$CC -shared $nostdlib_flag -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            archive_cmds_CXX='$CC -shared $nostdlib_flag -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            archive_cmds_CXX='$CC -shared $nostdlib_flag -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
 	    else
-		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
 	    fi
-	else
-	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
-	fi
-    done
-    ${RM} -f conftest*
-
-    if test "$ac_cv_ctype_fortran" = no ; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
-$as_echo "no correspond data type in C" >&6; }
-    fi
-    unset ac_cv_ctype_fortran
+	    ;;
+        esac
+        ;;
+
+      interix[3-9]*)
+	hardcode_direct_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	export_dynamic_flag_spec_CXX='$wl-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test yes = "$GXX"; then
+	      if test no = "$with_gnu_ld"; then
+	        archive_cmds_CXX='$CC -shared $pic_flag $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	      else
+	        archive_cmds_CXX='$CC -shared $pic_flag $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+	      fi
+	    fi
+	    link_all_deplibs_CXX=yes
+	    ;;
+        esac
+        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+        hardcode_libdir_separator_CXX=:
+        inherit_rpath_CXX=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+		archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    archive_cmds_need_lc_CXX=no
+	    hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	    export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+	    whole_archive_flag_spec_CXX='$wl--whole-archive$convenience $wl--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [1-5].* | *pgcpp\ [1-5].*)
+	      prelink_cmds_CXX='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      old_archive_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
+	      archive_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	      archive_expsym_cmds_CXX='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	      ;;
+	    esac
 
+	    hardcode_libdir_flag_spec_CXX='$wl--rpath $wl$libdir'
+	    export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+	    whole_archive_flag_spec_CXX='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+	    export_dynamic_flag_spec_CXX='$wl--export-dynamic'
+	    archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    if test yes = "$supports_anon_versioning"; then
+	      archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      no_undefined_flag_CXX=' -zdefs'
+	      archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      archive_expsym_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+	      hardcode_libdir_flag_spec_CXX='-R$libdir'
+	      whole_archive_flag_spec_CXX='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	      compiler_needs_object_CXX=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
 
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	ld_shlibs_CXX=no
+	;;
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran-equivalent to netCDF \"byte\"" >&5
-$as_echo_n "checking for Fortran-equivalent to netCDF \"byte\"... " >&6; }
+      m88k*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+	;;
 
-    ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+	esac
+	;;
 
-    for type in byte integer*1 integer; do
-        cat > conftest.$ac_ext <<_ACEOF
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  hardcode_libdir_flag_spec_CXX='-R$libdir'
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
 
-               $type foo
-               end
+      *nto* | *qnx*)
+        ld_shlibs_CXX=yes
+	;;
 
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  break
+      openbsd* | bitrig*)
+	if test -f /usr/libexec/ld.so; then
+	  hardcode_direct_CXX=yes
+	  hardcode_shlibpath_var_CXX=no
+	  hardcode_direct_absolute_CXX=yes
+	  archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+	    archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+	    export_dynamic_flag_spec_CXX='$wl-E'
+	    whole_archive_flag_spec_CXX=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  ld_shlibs_CXX=no
+	fi
+	;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
 
-    cat >>confdefs.h <<_ACEOF
-#define NCBYTE_T $type
-_ACEOF
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $type" >&5
-$as_echo "$type" >&6; }
-    NCBYTE_T=$type
+	    hardcode_libdir_flag_spec_CXX='$wl-rpath,$libdir'
+	    hardcode_libdir_separator_CXX=:
 
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+	        archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	        hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+		;;
+	      *)
+	        allow_undefined_flag_CXX=' -expect_unresolved \*'
+	        archive_cmds_CXX='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	        archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
+	        hardcode_libdir_flag_spec_CXX='-rpath $libdir'
+		;;
+	    esac
 
+	    hardcode_libdir_separator_CXX=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test yes,no = "$GXX,$with_gnu_ld"; then
+	      allow_undefined_flag_CXX=' $wl-expect_unresolved $wl\*'
+	      case $host in
+	        osf3*)
+	          archive_cmds_CXX='$CC -shared $nostdlib_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+		  ;;
+	        *)
+	          archive_cmds_CXX='$CC -shared $pic_flag $nostdlib_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      hardcode_libdir_flag_spec_CXX='$wl-rpath $wl$libdir'
+	      hardcode_libdir_separator_CXX=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran-equivalent to netCDF \"short\"" >&5
-$as_echo_n "checking for Fortran-equivalent to netCDF \"short\"... " >&6; }
+	    else
+	      # FIXME: insert proper C++ library support
+	      ld_shlibs_CXX=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            archive_cmds_need_lc_CXX=yes
+	    no_undefined_flag_CXX=' -zdefs'
+	    archive_cmds_CXX='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    hardcode_libdir_flag_spec_CXX='-R$libdir'
+	    hardcode_shlibpath_var_CXX=no
+	    case $host_os in
+	      solaris2.[0-5] | solaris2.[0-5].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands '-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    link_all_deplibs_CXX=yes
 
-    ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+	    output_verbose_link_cmd='func_echo_all'
 
-    for type in integer*2 integer; do
-        cat > conftest.$ac_ext <<_ACEOF
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
 
-               $type foo
-               end
+	    # The C++ compiler must be used to create the archive.
+	    old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test yes,no = "$GXX,$with_gnu_ld"; then
+	      no_undefined_flag_CXX=' $wl-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        archive_cmds_CXX='$CC -shared $pic_flag $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -shared $pic_flag $nostdlib_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require '-G' NOT '-shared' on this
+	        # platform.
+	        archive_cmds_CXX='$CC -G $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+	        archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -G $nostdlib_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
 
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  break
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    done
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+	      hardcode_libdir_flag_spec_CXX='$wl-R $wl$libdir'
+	      case $host_os in
+		solaris2.[0-5] | solaris2.[0-5].*) ;;
+		*)
+		  whole_archive_flag_spec_CXX='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_CXX='$wl-z,text'
+      archive_cmds_need_lc_CXX=no
+      hardcode_shlibpath_var_CXX=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
 
-    cat >>confdefs.h <<_ACEOF
-#define NCSHORT_T $type
-_ACEOF
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We CANNOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	no_undefined_flag_CXX='$wl-z,text'
+	allow_undefined_flag_CXX='$wl-z,nodefs'
+	archive_cmds_need_lc_CXX=no
+	hardcode_shlibpath_var_CXX=no
+	hardcode_libdir_flag_spec_CXX='$wl-R,$libdir'
+	hardcode_libdir_separator_CXX=':'
+	link_all_deplibs_CXX=yes
+	export_dynamic_flag_spec_CXX='$wl-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    archive_cmds_CXX='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~
+              '"$old_archive_cmds_CXX"
+	    reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~
+              '"$reload_cmds_CXX"
+	    ;;
+	  *)
+	    archive_cmds_CXX='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    archive_expsym_cmds_CXX='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $type" >&5
-$as_echo "$type" >&6; }
-    NCSHORT_T=$type
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    ld_shlibs_CXX=no
+	    ;;
+        esac
+        ;;
 
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
 
+      *)
+        # FIXME: insert proper C++ library support
+        ld_shlibs_CXX=no
+        ;;
+    esac
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+    test no = "$ld_shlibs_CXX" && can_build_shared=no
+
+    GCC_CXX=$GXX
+    LD_CXX=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_CXX=
+postdep_objects_CXX=
+predeps_CXX=
+postdeps_CXX=
+compiler_lib_search_path_CXX=
+
+cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
 
-	;;
-    esac
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $prev$p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
+	 prev=$p
+	 continue
+       fi
 
-    fi
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test no = "$pre_test_object_deps_done"; then
+	 case $prev in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_CXX"; then
+	     compiler_lib_search_path_CXX=$prev$p
+	   else
+	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} $prev$p"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       elif test "x$p" != x ; then # skip if $p is empty
+	 if test -z "$postdeps_CXX"; then
+	   postdeps_CXX=$prev$p
+	 else
+	   postdeps_CXX="${postdeps_CXX} $prev$p"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
 
-    NFMPI_OFFSET="integer*$ac_cv_sizeof_MPI_Offset"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran NFMPI_OFFSET \"$NFMPI_OFFSET\"" >&5
-$as_echo_n "checking for Fortran NFMPI_OFFSET \"$NFMPI_OFFSET\"... " >&6; }
-        ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+       if test no = "$pre_test_object_deps_done"; then
+	 if test -z "$predep_objects_CXX"; then
+	   predep_objects_CXX=$p
+	 else
+	   predep_objects_CXX="$predep_objects_CXX $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_CXX"; then
+	   postdep_objects_CXX=$p
+	 else
+	   postdep_objects_CXX="$postdep_objects_CXX $p"
+	 fi
+       fi
+       ;;
 
-    cat > conftest.$ac_ext <<_ACEOF
+    *) ;; # Ignore the rest.
 
-            subroutine sub(value)
-            $NFMPI_OFFSET value
-            end
+    esac
+  done
 
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_NFMPI_OFFSET=yes
+  # Clean up.
+  rm -f a.out a.exe
 else
-  ac_cv_NFMPI_OFFSET=no
-
+  echo "libtool.m4: error: problem compiling CXX test program"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-    if test "$ac_cv_NFMPI_OFFSET" = yes ; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-        as_fn_error $? "F77 does not support \"$NFMPI_OFFSET\"" "$LINENO" 5
-            fi
-    ${RM} -rf conftest*
-fi
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
 
-SIZEOF_MPI_OFFSET=$ac_cv_sizeof_MPI_Offset
+# PORTME: override above test on systems where it is broken
+case $host_os in
+interix[3-9]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  predep_objects_CXX=
+  postdep_objects_CXX=
+  postdeps_CXX=
+  ;;
+esac
 
 
-if test "x${enable_fortran}" = xyes ; then
+case " $postdeps_CXX " in
+*" -lc "*) archive_cmds_need_lc_CXX=no ;;
+esac
+ compiler_lib_search_dirs_CXX=
+if test -n "${compiler_lib_search_path_CXX}"; then
+ compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking Fortran 90 module extension" >&5
-$as_echo_n "checking Fortran 90 module extension... " >&6; }
-if ${ac_cv_fc_module_ext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-mkdir conftest.dir
-cd conftest.dir
-ac_cv_fc_module_ext=unknown
-cat > conftest.$ac_ext <<_ACEOF
 
-      module conftest_module
-      contains
-      subroutine conftest_routine
-      write(*,'(a)') 'gotcha!'
-      end subroutine
-      end module
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_module_ext=`ls | sed -n 's,conftest_module\.,,p'`
-   if test x$ac_cv_fc_module_ext = x; then
-     ac_cv_fc_module_ext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'`
-   fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-cd ..
-${RM} -rf conftest.dir
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_module_ext" >&5
-$as_echo "$ac_cv_fc_module_ext" >&6; }
-FC_MODEXT=$ac_cv_fc_module_ext
-if test "$FC_MODEXT" = unknown; then
-  FC_MODEXT=
-fi
 
-      if test "x${FC_MODEXT}" = x ; then
-      as_fn_error $? "cannot determine Fortran module file extension!" "$LINENO" 5
-   fi
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FC_MODEXT=$FC_MODEXT" >&5
-$as_echo "$as_me: DEBUG: FC_MODEXT=$FC_MODEXT" >&6;}
-          fi
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Fortran 90 module inclusion flag" >&5
-$as_echo_n "checking Fortran 90 module inclusion flag... " >&6; }
-if ${ac_cv_fc_module_flag+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-ac_cv_fc_module_flag=unknown
-mkdir conftest.dir
-cd conftest.dir
-cat > conftest.$ac_ext <<_ACEOF
 
-      module conftest_module
-      contains
-      subroutine conftest_routine
-      write(*,'(a)') 'gotcha!'
-      end subroutine
-      end module
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  cd ..
-   ac_fc_module_flag_FCFLAGS_save=$FCFLAGS
-   # Flag ordering is significant for gfortran and Sun.
-   for ac_flag in -I '-I ' -M '-M ' -p '-mod ' '-mdir ' '-module ' '-Am -I'; do
-     # Add the flag twice to prevent matching an output flag.
-     FCFLAGS="$ac_fc_module_flag_FCFLAGS_save ${ac_flag}conftest.dir ${ac_flag}conftest.dir"
-     cat > conftest.$ac_ext <<_ACEOF
 
-      program main
-      use conftest_module
-      call conftest_routine
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_module_flag="$ac_flag"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     if test "$ac_cv_fc_module_flag" != unknown; then
-       break
-     fi
-   done
-   FCFLAGS=$ac_fc_module_flag_FCFLAGS_save
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-${RM} -rf conftest.dir
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_module_flag" >&5
-$as_echo "$ac_cv_fc_module_flag" >&6; }
-if test "$ac_cv_fc_module_flag" != unknown; then
-  FC_MODINC=$ac_cv_fc_module_flag
 
-else
-  FC_MODINC=
-  as_fn_error $? "unable to find compiler flag for module search path" "$LINENO" 5
-fi
 
-# Ensure trailing whitespace is preserved in a Makefile.
-ac_empty=""
 
 
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FC_MODINC=$FC_MODINC" >&5
-$as_echo "$as_me: DEBUG: FC_MODINC=$FC_MODINC" >&6;}
-          fi
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Fortran 90 module output flag" >&5
-$as_echo_n "checking Fortran 90 module output flag... " >&6; }
-if ${ac_cv_fc_module_output_flag+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-mkdir conftest.dir conftest.dir/sub
-cd conftest.dir
-ac_cv_fc_module_output_flag=unknown
-ac_fc_module_output_flag_FCFLAGS_save=$FCFLAGS
-# Flag ordering is significant: put flags late which some compilers use
-# for the search path.
-for ac_flag in -J '-J ' -fmod= -moddir= +moddir= -qmoddir= '-mod ' \
-	      '-mdir ' '-module ' -M '-Am -M' '-e m -J '; do
-  FCFLAGS="$ac_fc_module_output_flag_FCFLAGS_save ${ac_flag}sub"
-  cat > conftest.$ac_ext <<_ACEOF
 
-      module conftest_module
-      contains
-      subroutine conftest_routine
-      write(*,'(a)') 'gotcha!'
-      end subroutine
-      end module
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  cd sub
-     cat > conftest.$ac_ext <<_ACEOF
 
-      program main
-      use conftest_module
-      call conftest_routine
-      end
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
-  ac_cv_fc_module_output_flag="$ac_flag"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     cd ..
-     if test "$ac_cv_fc_module_output_flag" != unknown; then
-       break
-     fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-FCFLAGS=$ac_fc_module_output_flag_FCFLAGS_save
-cd ..
-${RM} -rf conftest.dir
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_module_output_flag" >&5
-$as_echo "$ac_cv_fc_module_output_flag" >&6; }
-if test "$ac_cv_fc_module_output_flag" != unknown; then
-  FC_MODOUT=$ac_cv_fc_module_output_flag
 
-else
-  FC_MODOUT=
-  as_fn_error $? "unable to find compiler flag to write module information to" "$LINENO" 5
+
+ac_nostdlib_flag=
+if test "$cc_basename" == FCCpx || test "$cc_basename" == fccpx || test "$cc_basename" == frtpx ; then
+   ac_nostdlib_flag=-Xg
 fi
+nostdlib_flag_CXX=$ac_nostdlib_flag
 
-# Ensure trailing whitespace is preserved in a Makefile.
-ac_empty=""
 
 
-      if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FC_MODOUT=$FC_MODOUT" >&5
-$as_echo "$as_me: DEBUG: FC_MODOUT=$FC_MODOUT" >&6;}
-          fi
 
 
-fi
 
-HAVE_F77_GNU_INT=no
-HAVE_F77_INT1=no
-HAVE_F77_INT2=no
-HAVE_F77_INT8=no
-if test "x${enable_fortran}" = xyes ; then
+    lt_prog_compiler_wl_CXX=
+lt_prog_compiler_pic_CXX=
+lt_prog_compiler_static_CXX=
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 GNU intrinsic INT" >&5
-$as_echo_n "checking for Fortran 77 GNU intrinsic INT... " >&6; }
-    ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
 
-    cat > conftest.$ac_ext <<_ACEOF
+  # C++ specific cases for pic, static, wl, etc.
+  if test yes = "$GXX"; then
+    lt_prog_compiler_wl_CXX='-Wl,'
+    lt_prog_compiler_static_CXX='-static'
 
-           program main
-           implicit none
-           real r
-           integer*1 i1
-           integer*2 i2
-           integer   i4
-           integer*8 i8
-           r = 12.34
-           i1 = INT(r, 1)
-           i2 = INT(r, 2)
-           i4 = INT(r)
-           i8 = INT(r, 8)
-           end
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_CXX='-Bstatic'
+      fi
+      lt_prog_compiler_pic_CXX='-fPIC'
+      ;;
 
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_f77_gnu_int="yes"
-else
-  ac_cv_f77_gnu_int="no"
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_CXX='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static_CXX='$wl-static'
+	;;
+      esac
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_CXX='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      lt_prog_compiler_pic_CXX=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_CXX=
+      ;;
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_CXX=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	lt_prog_compiler_pic_CXX='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_CXX='-fPIC -shared'
+      ;;
+    *)
+      if test "$cc_basename" = FCCpx ; then  # Fujitsu C++
+	 lt_prog_compiler_pic_CXX='-Xg -KPIC'
+         lt_prog_compiler_static_CXX='-Bstatic'
+      else
+         lt_prog_compiler_pic_CXX='-fPIC'
+      fi
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[4-9]*)
+	# All AIX code is PIC.
+	if test ia64 = "$host_cpu"; then
+	  # AIX 5 now supports IA64 processor
+	  lt_prog_compiler_static_CXX='-Bstatic'
+	else
+	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+	    if test ia64 != "$host_cpu"; then
+	      lt_prog_compiler_pic_CXX='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='$wl-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      lt_prog_compiler_pic_CXX='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64, which still supported -KPIC.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fPIC'
+	    lt_prog_compiler_static_CXX='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-fpic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[cC]* | mpixl[cC]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-qpic'
+	    lt_prog_compiler_static_CXX='-qstaticlink'
+	    ;;
+	  FCCpx* )
+	    # Fujitsu C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-Xg -KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      lt_prog_compiler_pic_CXX='-KPIC'
+	      lt_prog_compiler_static_CXX='-Bstatic'
+	      lt_prog_compiler_wl_CXX='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    lt_prog_compiler_pic_CXX='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        lt_prog_compiler_pic_CXX='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    lt_prog_compiler_wl_CXX='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    lt_prog_compiler_pic_CXX=
+	    lt_prog_compiler_static_CXX='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    lt_prog_compiler_wl_CXX='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    lt_prog_compiler_pic_CXX='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    lt_prog_compiler_pic_CXX='-pic'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    lt_prog_compiler_pic_CXX='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    lt_prog_compiler_wl_CXX='-Wl,'
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    lt_prog_compiler_static_CXX='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    lt_prog_compiler_pic_CXX='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	lt_prog_compiler_can_build_shared_CXX=no
+	;;
+    esac
+  fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_gnu_int" >&5
-$as_echo "$ac_cv_f77_gnu_int" >&6; }
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_CXX=
+    ;;
+  *)
+    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
+    ;;
+esac
 
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_f77_gnu_int=$ac_cv_f77_gnu_int" >&5
-$as_echo "$as_me: DEBUG: ac_cv_f77_gnu_int=$ac_cv_f77_gnu_int" >&6;}
-          fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
+lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
 
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_CXX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_CXX=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_CXX=yes
+     fi
+   fi
+   $RM conftest*
 
-   HAVE_F77_GNU_INT=$ac_cv_f77_gnu_int
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
 
+if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then
+    case $lt_prog_compiler_pic_CXX in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
+     esac
+else
+    lt_prog_compiler_pic_CXX=
+     lt_prog_compiler_can_build_shared_CXX=no
+fi
 
+fi
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 intrinsic INT1" >&5
-$as_echo_n "checking for Fortran 77 intrinsic INT1... " >&6; }
-    ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
 
-    cat > conftest.$ac_ext <<_ACEOF
 
-           program main
-           implicit none
-           real r
-           integer*1 i1
-           r = 12.34
-           i1 = INT1(r)
-           end
 
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_f77_int1="yes"
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_f77_int1="no"
+  lt_cv_prog_compiler_static_works_CXX=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_CXX=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_CXX=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_int1" >&5
-$as_echo "$ac_cv_f77_int1" >&6; }
+if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then
+    :
+else
+    lt_prog_compiler_static_CXX=
+fi
 
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_f77_int1=$ac_cv_f77_int1" >&5
-$as_echo "$as_me: DEBUG: ac_cv_f77_int1=$ac_cv_f77_int1" >&6;}
-          fi
 
 
-   HAVE_F77_INT1=$ac_cv_f77_int1
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 intrinsic INT2" >&5
-$as_echo_n "checking for Fortran 77 intrinsic INT2... " >&6; }
-    ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
 
-    cat > conftest.$ac_ext <<_ACEOF
 
-           program main
-           implicit none
-           real r
-           integer*2 i2
-           r = 12.34
-           i2 = INT2(r)
-           end
 
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_f77_int2="yes"
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  ac_cv_f77_int2="no"
-
+  lt_cv_prog_compiler_c_o_CXX=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_CXX=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_int2" >&5
-$as_echo "$ac_cv_f77_int2" >&6; }
 
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_f77_int2=$ac_cv_f77_int2" >&5
-$as_echo "$as_me: DEBUG: ac_cv_f77_int2=$ac_cv_f77_int2" >&6;}
-          fi
 
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
 
-   HAVE_F77_INT2=$ac_cv_f77_int2
+  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  case $host_os in
+  aix[4-9]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX nm.
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+    else
+      export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    export_symbols_cmds_CXX=$ltdll_cmds
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+      ;;
+    esac
+    ;;
+  *)
+    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
+$as_echo "$ld_shlibs_CXX" >&6; }
+test no = "$ld_shlibs_CXX" && can_build_shared=no
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 intrinsic INT8" >&5
-$as_echo_n "checking for Fortran 77 intrinsic INT8... " >&6; }
-    ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+with_gnu_ld_CXX=$with_gnu_ld
 
-    cat > conftest.$ac_ext <<_ACEOF
 
-           program main
-           implicit none
-           real r
-           integer*8 i8
-           r = 12.34
-           i8 = INT8(r)
-           end
 
-_ACEOF
-if ac_fn_f77_try_compile "$LINENO"; then :
-  ac_cv_f77_int8="yes"
-else
-  ac_cv_f77_int8="no"
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_int8" >&5
-$as_echo "$ac_cv_f77_int8" >&6; }
 
-   if test "x${_DEBUG}" = xyes ; then
-             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_f77_int8=$ac_cv_f77_int8" >&5
-$as_echo "$as_me: DEBUG: ac_cv_f77_int8=$ac_cv_f77_int8" >&6;}
-          fi
 
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_CXX" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_CXX=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds_CXX in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM -f conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
 
-   HAVE_F77_INT8=$ac_cv_f77_int8
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_CXX
+	  pic_flag=$lt_prog_compiler_pic_CXX
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
+	  allow_undefined_flag_CXX=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc_CXX=no
+	  else
+	    lt_cv_archive_cmds_need_lc_CXX=yes
+	  fi
+	  allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM -f conftest*
 
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
+      archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
+      ;;
+    esac
+  fi
+  ;;
+esac
 
-if test "x${enable_fortran}" = xyes ; then
 
 
-ac_ext=${ac_fc_srcext-f}
-ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
-ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_fc_compiler_gnu
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran 90 compiler capitalizes .mod filenames" >&5
-$as_echo_n "checking if Fortran 90 compiler capitalizes .mod filenames... " >&6; }
-cat > conftest.$ac_ext <<_ACEOF
 
-        module conftest
-        end module conftest
 
 
-_ACEOF
-if ac_fn_fc_try_compile "$LINENO"; then :
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-if test -f conftest.${FC_MODEXT} ; then
-   ac_cv_prog_f90_uppercase_mod=no
-else
-   ac_cv_prog_f90_uppercase_mod=yes
-   ${RM} -f CONFTEST.${FC_MODEXT}
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f90_uppercase_mod" >&5
-$as_echo "$ac_cv_prog_f90_uppercase_mod" >&6; }
-${RM} -f conftest*
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
-fi
-UPPER_CASE_MOD=no
-if test "x$ac_cv_prog_f90_uppercase_mod" = xyes ; then
-   UPPER_CASE_MOD=yes
-fi
 
 
-if test "x${enable_fortran}" = xyes ; then
-   if test "x${enable_strict}" = xyes; then
-      FPPFLAGS="${FPPFLAGS} -Wall"
-   fi
 
 
 
 
 
-fi
 
-has_fortran=${enable_fortran}
 
 
 
-    #
-    # NB: We always want to define WHATIS to prevent the
-    # $(MANDIR)/$(WHATIS) make(1) target from being just $(MANDIR)/ and
-    # conflicting with the (directory creation) target with the same name.
-    #
-    WHATIS=whatis
-    case `uname -sr` in
-	BSD/OS*|FreeBSD*)
-	    # Can't generate a user-database -- only /usr/share/man/whatis.db.
-	    MAKEWHATIS_CMD=
-	    ;;
-	'IRIX64 6.5'|'IRIX 6.5')
-	    MAKEWHATIS_CMD='/usr/lib/makewhatis -M $(MANDIR) $(MANDIR)/whatis'
-	    ;;
-	'IRIX 6'*)
-	    # Can't generate a user-database.
-	    MAKEWHATIS_CMD=
-	    ;;
-	HP-UX*)
-	    # Can't generate a user-database -- only /usr/lib/whatis.
-	    MAKEWHATIS_CMD=
-	    ;;
-	'Linux '*)
-	    # /usr/sbin/makewhatis doesn't work
-	    MAKEWHATIS_CMD=
-	    ;;
-	ULTRIX*)
-	    # Can't generate a user-database -- only /usr/lib/whatis.
-	    MAKEWHATIS_CMD=
-	    ;;
-	*)
-	    if test -r /usr/man/windex; then
-		WHATIS=windex
-	    fi
-	    for ac_prog in catman makewhatis /usr/lib/makewhatis
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_prog+:} false; then :
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test yes = "$lt_cv_prog_gnu_ld"; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec_CXX='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$prog"; then
-  ac_cv_prog_prog="$prog" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_prog="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\""
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
   fi
-done
-  done
-IFS=$as_save_IFS
 
-fi
-fi
-prog=$ac_cv_prog_prog
-if test -n "$prog"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $prog" >&5
-$as_echo "$prog" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_CXX=
+if test -n "$hardcode_libdir_flag_spec_CXX" ||
+   test -n "$runpath_var_CXX" ||
+   test yes = "$hardcode_automatic_CXX"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct_CXX" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" &&
+     test no != "$hardcode_minus_L_CXX"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_CXX=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_CXX=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_CXX=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
+$as_echo "$hardcode_action_CXX" >&6; }
+
+if test relink = "$hardcode_action_CXX" ||
+   test yes = "$inherit_rpath_CXX"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+        ac_config_commands="$ac_config_commands libtool"
+
+
+
+
+# Only expand once:
+
+
+
+# Check whether --enable-strict was given.
+if test "${enable_strict+set}" = set; then :
+  enableval=$enable_strict; enable_strict=${enableval}
+else
+  enable_strict=no
+
+fi
+
+
+if test "x${enable_strict}" = xyes; then
+   if test "x${GCC}" = xyes; then
+      CFLAGS+=" -Wall -Wstrict-prototypes -Wmissing-prototypes -Wundef -Wpointer-arith -Wbad-function-cast"
+   else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-strict is for GNU compiler only" >&5
+$as_echo "$as_me: WARNING: --enable-strict is for GNU compiler only" >&2;}
+      enable_strict=no
+   fi
+fi
+
+# Check whether --enable-fortran was given.
+if test "${enable_fortran+set}" = set; then :
+  enableval=$enable_fortran; enable_fortran=${enableval}
+else
+  enable_fortran=auto
+
+fi
+
+
+if test "x${enable_fortran}" = xno ; then
+   has_fortran=no
+else
+   has_fortran=yes
+   if test "x${ac_user_MPIF77}" = x ; then
+
+   ac_mpi_prog_MPIF77=
+   if test "x$MPI_INSTALL" != x ; then
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
+          fi
+
+
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPIF77 under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPIF77 under $MPI_INSTALL/bin" >&6;}
+          fi
+
+
+         for ac_prog in $CANDIDATE_MPIF77
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF77 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF77=$ac_cv_path_ac_mpi_prog_MPIF77
+if test -n "$ac_mpi_prog_MPIF77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF77" >&5
+$as_echo "$ac_mpi_prog_MPIF77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_MPIF77" && break
+done
+
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPIF77 under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPIF77 under $MPI_INSTALL" >&6;}
+          fi
+
+
+         for ac_prog in $CANDIDATE_MPIF77
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF77 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF77=$ac_cv_path_ac_mpi_prog_MPIF77
+if test -n "$ac_mpi_prog_MPIF77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF77" >&5
+$as_echo "$ac_mpi_prog_MPIF77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_MPIF77" && break
+done
+
+      fi
+   else
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPIF77 under $PATH" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPIF77 under $PATH" >&6;}
+          fi
+
+
+      for ac_prog in $CANDIDATE_MPIF77
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF77 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF77=$ac_cv_path_ac_mpi_prog_MPIF77
+if test -n "$ac_mpi_prog_MPIF77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF77" >&5
+$as_echo "$ac_mpi_prog_MPIF77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_MPIF77" && break
+done
+
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_MPIF77=${ac_mpi_prog_MPIF77}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_MPIF77=${ac_mpi_prog_MPIF77}" >&6;}
+          fi
+
+
+   if test "x${ac_mpi_prog_MPIF77}" = x ; then
+                  for ac_prog in $CANDIDATE_MPIF77
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_mpi_prog_MPIF77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_mpi_prog_MPIF77"; then
+  ac_cv_prog_ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_mpi_prog_MPIF77="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_mpi_prog_MPIF77=$ac_cv_prog_ac_mpi_prog_MPIF77
+if test -n "$ac_mpi_prog_MPIF77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF77" >&5
+$as_echo "$ac_mpi_prog_MPIF77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_MPIF77" && break
+done
+
+                                                   fi
+   MPIF77=${ac_mpi_prog_MPIF77}
+
+   else
+
+      ac_first_token=`echo $ac_user_MPIF77 | cut -d" " -f1`
+   ac_rest_tokens=`echo $ac_user_MPIF77 | cut -d" " -s -f2-`
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_first_token=$ac_first_token" >&5
+$as_echo "$as_me: DEBUG: ac_first_token=$ac_first_token" >&6;}
+          fi
+
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_rest_tokens=$ac_rest_tokens" >&5
+$as_echo "$as_me: DEBUG: ac_rest_tokens=$ac_rest_tokens" >&6;}
+          fi
+
+
+
+   ac_mpi_prog_MPIF77=
+   if test "x$MPI_INSTALL" != x ; then
+            if test "$ac_first_token" != "${ac_first_token%$MPI_INSTALL*}" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: \"MPI_INSTALL is a substring of ac_first_token\"" >&5
+$as_echo "$as_me: DEBUG: \"MPI_INSTALL is a substring of ac_first_token\"" >&6;}
+          fi
+
+
+         ac_prog=`echo $ac_first_token | rev | cut -d"/" -f1 |rev`
+      else
+         ac_prog=$ac_first_token
+      fi
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_prog=$ac_prog" >&5
+$as_echo "$as_me: DEBUG: ac_prog=$ac_prog" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
+          fi
+
+
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_prog under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search $ac_prog under $MPI_INSTALL/bin" >&6;}
+          fi
+
+
+         # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF77 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF77=$ac_cv_path_ac_mpi_prog_MPIF77
+if test -n "$ac_mpi_prog_MPIF77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF77" >&5
+$as_echo "$ac_mpi_prog_MPIF77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_prog under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search $ac_prog under $MPI_INSTALL" >&6;}
+          fi
+
+
+         # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF77 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF77=$ac_cv_path_ac_mpi_prog_MPIF77
+if test -n "$ac_mpi_prog_MPIF77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF77" >&5
+$as_echo "$ac_mpi_prog_MPIF77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+      fi
+   else
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_first_token under $PATH" >&5
+$as_echo "$as_me: DEBUG: search $ac_first_token under $PATH" >&6;}
+          fi
+
+
+      # Extract the first word of "$ac_first_token", so it can be a program name with args.
+set dummy $ac_first_token; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF77 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF77="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF77=$ac_cv_path_ac_mpi_prog_MPIF77
+if test -n "$ac_mpi_prog_MPIF77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF77" >&5
+$as_echo "$ac_mpi_prog_MPIF77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_MPIF77=${ac_mpi_prog_MPIF77}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_MPIF77=${ac_mpi_prog_MPIF77}" >&6;}
+          fi
+
+
+   if test "x${ac_mpi_prog_MPIF77}" = x ; then
+                  # Extract the first word of "$ac_first_token", so it can be a program name with args.
+set dummy $ac_first_token; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_mpi_prog_MPIF77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_mpi_prog_MPIF77"; then
+  ac_cv_prog_ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_mpi_prog_MPIF77=""
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_mpi_prog_MPIF77=$ac_cv_prog_ac_mpi_prog_MPIF77
+if test -n "$ac_mpi_prog_MPIF77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF77" >&5
+$as_echo "$ac_mpi_prog_MPIF77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+                                                   else
+      if test "x$ac_rest_tokens" != x ; then
+         ac_mpi_prog_MPIF77="$ac_mpi_prog_MPIF77 $ac_rest_tokens"
+      fi
+   fi
+   MPIF77=${ac_mpi_prog_MPIF77}
+
+   fi
+
+   if test "x${MPIF77}" = x ; then
+      has_fortran=no
+      if test "x$ac_user_MPIF77" = x ; then
+         ERR_MSG="No MPI Fortran 77 compiler can be found"
+      else
+         ERR_MSG="Specified MPI Fortran 77 compiler \"$ac_user_MPIF77\" cannot be found"
+      fi
+      if test "x$MPI_INSTALL" != x ; then
+         ERR_MSG+=" under $MPI_INSTALL"
+      fi
+      if test "x${enable_fortran}" = xyes ; then
+                  as_fn_error $? "
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Please specify the location of the MPI Fortran 77 compiler, either in the
+     MPIF77 environment variable or the --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+      else
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus, the Fortran feature is disabled.
+     The location of the MPI Fortran 77 compiler can be specified either in the
+     MPIF77 environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------" >&5
+$as_echo "$as_me: WARNING:
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus, the Fortran feature is disabled.
+     The location of the MPI Fortran 77 compiler can be specified either in the
+     MPIF77 environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------" >&2;}
+      fi
+   fi
+fi
+
+if test "x${has_fortran}" = xyes ; then
+   if test "x${ac_user_MPIF90}" = x ; then
+
+   ac_mpi_prog_MPIF90=
+   if test "x$MPI_INSTALL" != x ; then
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
+          fi
+
+
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPIF90 under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPIF90 under $MPI_INSTALL/bin" >&6;}
+          fi
+
+
+         for ac_prog in $CANDIDATE_MPIF90
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF90 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF90=$ac_cv_path_ac_mpi_prog_MPIF90
+if test -n "$ac_mpi_prog_MPIF90"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF90" >&5
+$as_echo "$ac_mpi_prog_MPIF90" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_MPIF90" && break
+done
+
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPIF90 under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPIF90 under $MPI_INSTALL" >&6;}
+          fi
+
+
+         for ac_prog in $CANDIDATE_MPIF90
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF90 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF90=$ac_cv_path_ac_mpi_prog_MPIF90
+if test -n "$ac_mpi_prog_MPIF90"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF90" >&5
+$as_echo "$ac_mpi_prog_MPIF90" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_MPIF90" && break
+done
+
+      fi
+   else
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $CANDIDATE_MPIF90 under $PATH" >&5
+$as_echo "$as_me: DEBUG: search $CANDIDATE_MPIF90 under $PATH" >&6;}
+          fi
+
+
+      for ac_prog in $CANDIDATE_MPIF90
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF90 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF90=$ac_cv_path_ac_mpi_prog_MPIF90
+if test -n "$ac_mpi_prog_MPIF90"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF90" >&5
+$as_echo "$ac_mpi_prog_MPIF90" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_MPIF90" && break
+done
+
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_MPIF90=${ac_mpi_prog_MPIF90}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_MPIF90=${ac_mpi_prog_MPIF90}" >&6;}
+          fi
+
+
+   if test "x${ac_mpi_prog_MPIF90}" = x ; then
+                  for ac_prog in $CANDIDATE_MPIF90
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_mpi_prog_MPIF90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_mpi_prog_MPIF90"; then
+  ac_cv_prog_ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_mpi_prog_MPIF90="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_mpi_prog_MPIF90=$ac_cv_prog_ac_mpi_prog_MPIF90
+if test -n "$ac_mpi_prog_MPIF90"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF90" >&5
+$as_echo "$ac_mpi_prog_MPIF90" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_MPIF90" && break
+done
+
+                                                   fi
+   MPIF90=${ac_mpi_prog_MPIF90}
+
+   else
+
+      ac_first_token=`echo $ac_user_MPIF90 | cut -d" " -f1`
+   ac_rest_tokens=`echo $ac_user_MPIF90 | cut -d" " -s -f2-`
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_first_token=$ac_first_token" >&5
+$as_echo "$as_me: DEBUG: ac_first_token=$ac_first_token" >&6;}
+          fi
+
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_rest_tokens=$ac_rest_tokens" >&5
+$as_echo "$as_me: DEBUG: ac_rest_tokens=$ac_rest_tokens" >&6;}
+          fi
+
+
+
+   ac_mpi_prog_MPIF90=
+   if test "x$MPI_INSTALL" != x ; then
+            if test "$ac_first_token" != "${ac_first_token%$MPI_INSTALL*}" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: \"MPI_INSTALL is a substring of ac_first_token\"" >&5
+$as_echo "$as_me: DEBUG: \"MPI_INSTALL is a substring of ac_first_token\"" >&6;}
+          fi
+
+
+         ac_prog=`echo $ac_first_token | rev | cut -d"/" -f1 |rev`
+      else
+         ac_prog=$ac_first_token
+      fi
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_prog=$ac_prog" >&5
+$as_echo "$as_me: DEBUG: ac_prog=$ac_prog" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
+          fi
+
+
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_prog under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search $ac_prog under $MPI_INSTALL/bin" >&6;}
+          fi
+
+
+         # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF90 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF90=$ac_cv_path_ac_mpi_prog_MPIF90
+if test -n "$ac_mpi_prog_MPIF90"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF90" >&5
+$as_echo "$ac_mpi_prog_MPIF90" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_prog under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search $ac_prog under $MPI_INSTALL" >&6;}
+          fi
+
+
+         # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF90 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF90=$ac_cv_path_ac_mpi_prog_MPIF90
+if test -n "$ac_mpi_prog_MPIF90"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF90" >&5
+$as_echo "$ac_mpi_prog_MPIF90" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+      fi
+   else
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search $ac_first_token under $PATH" >&5
+$as_echo "$as_me: DEBUG: search $ac_first_token under $PATH" >&6;}
+          fi
+
+
+      # Extract the first word of "$ac_first_token", so it can be a program name with args.
+set dummy $ac_first_token; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_MPIF90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_MPIF90 in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_MPIF90="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_MPIF90=$ac_cv_path_ac_mpi_prog_MPIF90
+if test -n "$ac_mpi_prog_MPIF90"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF90" >&5
+$as_echo "$ac_mpi_prog_MPIF90" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_MPIF90=${ac_mpi_prog_MPIF90}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_MPIF90=${ac_mpi_prog_MPIF90}" >&6;}
+          fi
+
+
+   if test "x${ac_mpi_prog_MPIF90}" = x ; then
+                  # Extract the first word of "$ac_first_token", so it can be a program name with args.
+set dummy $ac_first_token; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_mpi_prog_MPIF90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_mpi_prog_MPIF90"; then
+  ac_cv_prog_ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_mpi_prog_MPIF90=""
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_mpi_prog_MPIF90=$ac_cv_prog_ac_mpi_prog_MPIF90
+if test -n "$ac_mpi_prog_MPIF90"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_MPIF90" >&5
+$as_echo "$ac_mpi_prog_MPIF90" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+                                                   else
+      if test "x$ac_rest_tokens" != x ; then
+         ac_mpi_prog_MPIF90="$ac_mpi_prog_MPIF90 $ac_rest_tokens"
+      fi
+   fi
+   MPIF90=${ac_mpi_prog_MPIF90}
+
+   fi
+
+   if test "x${MPIF90}" = x ; then
+      has_fortran=no
+      if test "x$ac_user_MPIF90" = x ; then
+         ERR_MSG="No MPI Fortran 90 compiler can be found"
+      else
+         ERR_MSG="Specified MPI Fortran 90 compiler \"$ac_user_MPIF90\" cannot be found"
+      fi
+      if test "x$MPI_INSTALL" != x ; then
+         ERR_MSG+=" under $MPI_INSTALL"
+      fi
+      if test "x${enable_fortran}" = xyes ; then
+                  as_fn_error $? "
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Please specify the location of the MPI Fortran 90 compiler, either in the
+     MPIF90 environment variable or the --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+      else
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus, the Fortran feature is disabled.
+     The location of the MPI Fortran 90 compiler can be specified either in the
+     MPIF90 environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------" >&5
+$as_echo "$as_me: WARNING:
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus, the Fortran feature is disabled.
+     The location of the MPI Fortran 90 compiler can be specified either in the
+     MPIF90 environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------" >&2;}
+      fi
+   fi
+fi
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: has_fortran=${has_fortran}" >&5
+$as_echo "$as_me: DEBUG: has_fortran=${has_fortran}" >&6;}
+          fi
+
+
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: MPIF77=$MPIF77" >&5
+$as_echo "$as_me: DEBUG: MPIF77=$MPIF77" >&6;}
+          fi
+
+
+if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: MPIF90=$MPIF90" >&5
+$as_echo "$as_me: DEBUG: MPIF90=$MPIF90" >&6;}
+          fi
+
+
+
+if test "x${has_fortran}" = xyes ; then
+      F77=${MPIF77}
+   ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$F77"; then
+  ac_cv_prog_F77="$F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+F77=$ac_cv_prog_F77
+if test -n "$F77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $F77" >&5
+$as_echo "$F77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$F77" && break
+  done
+fi
+if test -z "$F77"; then
+  ac_ct_F77=$F77
+  for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_F77"; then
+  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_F77="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_F77=$ac_cv_prog_ac_ct_F77
+if test -n "$ac_ct_F77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5
+$as_echo "$ac_ct_F77" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_F77" && break
+done
+
+  if test "x$ac_ct_F77" = x; then
+    F77=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    F77=$ac_ct_F77
+  fi
+fi
+
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran 77 compiler" >&5
+$as_echo_n "checking whether we are using the GNU Fortran 77 compiler... " >&6; }
+if ${ac_cv_f77_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_f77_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5
+$as_echo "$ac_cv_f77_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FFLAGS=${FFLAGS+set}
+ac_save_FFLAGS=$FFLAGS
+FFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5
+$as_echo_n "checking whether $F77 accepts -g... " >&6; }
+if ${ac_cv_prog_f77_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  FFLAGS=-g
+cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_prog_f77_g=yes
+else
+  ac_cv_prog_f77_g=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5
+$as_echo "$ac_cv_prog_f77_g" >&6; }
+if test "$ac_test_FFLAGS" = set; then
+  FFLAGS=$ac_save_FFLAGS
+elif test $ac_cv_prog_f77_g = yes; then
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-g -O2"
+  else
+    FFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
+    FFLAGS="-O2"
+  else
+    FFLAGS=
+  fi
+fi
+
+if test $ac_compiler_gnu = yes; then
+  G77=yes
+else
+  G77=
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+      ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+if test -z "$F77" || test no = "$F77"; then
+  _lt_disable_F77=yes
+fi
+
+archive_cmds_need_lc_F77=no
+allow_undefined_flag_F77=
+always_export_symbols_F77=no
+archive_expsym_cmds_F77=
+export_dynamic_flag_spec_F77=
+hardcode_direct_F77=no
+hardcode_direct_absolute_F77=no
+hardcode_libdir_flag_spec_F77=
+hardcode_libdir_separator_F77=
+hardcode_minus_L_F77=no
+hardcode_automatic_F77=no
+inherit_rpath_F77=no
+module_cmds_F77=
+module_expsym_cmds_F77=
+link_all_deplibs_F77=unknown
+old_archive_cmds_F77=$old_archive_cmds
+reload_flag_F77=$reload_flag
+reload_cmds_F77=$reload_cmds
+no_undefined_flag_F77=
+whole_archive_flag_spec_F77=
+enable_shared_with_static_runtimes_F77=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+objext_F77=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_F77"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM -f conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
+  compiler=$CC
+  compiler_F77=$CC
+  func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+  GCC=$G77
+  if test -n "$compiler"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+    test no = "$can_build_shared" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test yes = "$enable_shared" && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[4-9]*)
+	if test ia64 != "$host_cpu"; then
+	  case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+	  yes,aix,yes) ;;		# shared object as lib.so file only
+	  yes,svr4,*) ;;		# shared object as lib.so archive member only
+	  yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+	  esac
+	fi
+        ;;
+    esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+    # Make sure either enable_shared or enable_static is yes.
+    test yes = "$enable_shared" || enable_static=yes
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+    GCC_F77=$G77
+    LD_F77=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    lt_prog_compiler_wl_F77=
+lt_prog_compiler_pic_F77=
+lt_prog_compiler_static_F77=
+
+
+  if test yes = "$GCC"; then
+    lt_prog_compiler_wl_F77='-Wl,'
+    lt_prog_compiler_static_F77='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      lt_prog_compiler_pic_F77='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_F77='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static_F77='$wl-static'
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_F77='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_F77=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_F77=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_F77='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_F77=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic_F77='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl_F77='-Xlinker '
+      if test -n "$lt_prog_compiler_pic_F77"; then
+        lt_prog_compiler_pic_F77="-Xcompiler $lt_prog_compiler_pic_F77"
+      fi
+      ;;
+    fccpx*) # Fujitsu Compiler
+      lt_prog_compiler_pic_F77='-Xg -KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_F77='-Bstatic'
+      else
+	lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_F77='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl_F77='-Wl,-Wl,,'
+        lt_prog_compiler_pic_F77='-PIC'
+        lt_prog_compiler_static_F77='-Bstatic'
+        ;;
+      esac
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static_F77='$wl-static'
+	;;
+      esac
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_F77='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_F77='$wl-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-KPIC'
+	lt_prog_compiler_static_F77='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-fPIC'
+	lt_prog_compiler_static_F77='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='--shared'
+	lt_prog_compiler_static_F77='--static'
+	;;
+      frtpx* )
+	# Fujitsu compiler
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-KPIC'
+	lt_prog_compiler_static_F77='-Kstatic_fjlib'
+	;;
+      fccpx* | FCCpx* )
+	# Fujitsu compiler
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-Xg -KPIC'
+	lt_prog_compiler_static_F77='-Bstatic'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl_F77='-Wl,-Wl,,'
+	lt_prog_compiler_pic_F77='-PIC'
+	lt_prog_compiler_static_F77='-Bstatic'
+	;;
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-fPIC'
+	lt_prog_compiler_static_F77='-static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-fpic'
+	lt_prog_compiler_static_F77='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_F77='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_F77='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl_F77='-Wl,'
+	lt_prog_compiler_pic_F77='-qpic'
+	lt_prog_compiler_static_F77='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic_F77='-KPIC'
+	  lt_prog_compiler_static_F77='-Bstatic'
+	  lt_prog_compiler_wl_F77=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic_F77='-KPIC'
+	  lt_prog_compiler_static_F77='-Bstatic'
+	  lt_prog_compiler_wl_F77='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic_F77='-KPIC'
+	  lt_prog_compiler_static_F77='-Bstatic'
+	  lt_prog_compiler_wl_F77='-Wl,'
+	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl_F77='-Wl,'
+	  lt_prog_compiler_pic_F77='-fPIC'
+	  lt_prog_compiler_static_F77='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl_F77='-Wl,'
+	  lt_prog_compiler_pic_F77='-fpic'
+	  lt_prog_compiler_static_F77='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_F77='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static_F77='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl_F77='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl_F77='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_F77='-Qoption ld '
+      lt_prog_compiler_pic_F77='-PIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_F77='-Kconform_pic'
+	lt_prog_compiler_static_F77='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_pic_F77='-KPIC'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl_F77='-Wl,'
+      lt_prog_compiler_can_build_shared_F77=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_F77='-pic'
+      lt_prog_compiler_static_F77='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_F77=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_F77=
+    ;;
+  *)
+    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_F77=$lt_prog_compiler_pic_F77
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_F77" >&5
+$as_echo "$lt_cv_prog_compiler_pic_F77" >&6; }
+lt_prog_compiler_pic_F77=$lt_cv_prog_compiler_pic_F77
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_F77"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_F77=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_F77"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_F77=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_F77" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_F77" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works_F77"; then
+    case $lt_prog_compiler_pic_F77 in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
+     esac
+else
+    lt_prog_compiler_pic_F77=
+     lt_prog_compiler_can_build_shared_F77=no
+fi
+
+fi
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_F77=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_F77=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_F77=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_F77" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_F77" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works_F77"; then
+    :
+else
+    lt_prog_compiler_static_F77=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_F77=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_F77=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_F77=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_F77=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_F77" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_F77" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o_F77" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag_F77=
+  always_export_symbols_F77=no
+  archive_cmds_F77=
+  archive_expsym_cmds_F77=
+  compiler_needs_object_F77=no
+  enable_shared_with_static_runtimes_F77=no
+  export_dynamic_flag_spec_F77=
+  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic_F77=no
+  hardcode_direct_F77=no
+  hardcode_direct_absolute_F77=no
+  hardcode_libdir_flag_spec_F77=
+  hardcode_libdir_separator_F77=
+  hardcode_minus_L_F77=no
+  hardcode_shlibpath_var_F77=unsupported
+  inherit_rpath_F77=no
+  link_all_deplibs_F77=unknown
+  module_cmds_F77=
+  module_expsym_cmds_F77=
+  old_archive_from_new_cmds_F77=
+  old_archive_from_expsyms_cmds_F77=
+  thread_safe_flag_spec_F77=
+  whole_archive_flag_spec_F77=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_F77=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  exclude_expsyms_F77='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_F77=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec_F77='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec_F77=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      whole_archive_flag_spec_F77=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+	ld_shlibs_F77=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds_F77=''
+        ;;
+      m68k)
+            archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec_F77='-L$libdir'
+            hardcode_minus_L_F77=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_F77=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      export_dynamic_flag_spec_F77='$wl--export-all-symbols'
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=no
+      enable_shared_with_static_runtimes_F77=yes
+      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_F77='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file, use it as
+	# is; otherwise, prepend EXPORTS...
+	archive_expsym_cmds_F77='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      link_all_deplibs_F77=yes
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      allow_undefined_flag_F77=unsupported
+      shrext_cmds=.dll
+      archive_cmds_F77='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds_F77='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds_F77='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes_F77=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct_F77=no
+      hardcode_shlibpath_var_F77=no
+      hardcode_libdir_flag_spec_F77='$wl-rpath,$libdir'
+      export_dynamic_flag_spec_F77='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds_F77='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test no = "$tmp_diet"
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec_F77=
+	  tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec_F77='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  compiler_needs_object_F77=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec_F77='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  compiler_needs_object_F77=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	tcc*)
+	  export_dynamic_flag_spec_F77='-rdynamic'
+	  ;;
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec_F77='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir'
+	  archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test yes = "$supports_anon_versioning"; then
+	    archive_expsym_cmds_F77='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs_F77=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_F77=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs_F77=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir'
+	    archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs_F77=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+    esac
+
+    if test no = "$ld_shlibs_F77"; then
+      runpath_var=
+      hardcode_libdir_flag_spec_F77=
+      export_dynamic_flag_spec_F77=
+      whole_archive_flag_spec_F77=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_F77=unsupported
+      always_export_symbols_F77=yes
+      archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_F77=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_F77=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test ia64 = "$host_cpu"; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to GNU nm, but means don't demangle to AIX nm.
+	# Without the "-l" option, or with the "-B" option, AIX nm treats
+	# weak defined symbols like other global defined symbols, whereas
+	# GNU nm marks them as "W".
+	# While the 'weak' keyword is ignored in the Export File, we need
+	# it in the Import File for the 'aix-soname' feature, so we have
+	# to replace the "-B" option with "-P" for AIX nm.
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_F77='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# have runtime linking enabled, and use it for executables.
+	# For shared libraries, we enable/disable runtime linking
+	# depending on the kind of the shared library created -
+	# when "with_aix_soname,aix_use_runtimelinking" is:
+	# "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "aix,yes"  lib.so          shared, rtl:yes, for executables
+	#            lib.a           static archive
+	# "both,no"  lib.so.V(shr.o) shared, rtl:yes
+	#            lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a(lib.so.V) shared, rtl:no
+	# "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a           static archive
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	    # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	    # so we don't have lib.a shared libs to link our executables.
+	    # We have to force runtime linking in this case.
+	    aix_use_runtimelinking=yes
+	    LDFLAGS="$LDFLAGS -Wl,-brtl"
+	  fi
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_F77=''
+      hardcode_direct_F77=yes
+      hardcode_direct_absolute_F77=yes
+      hardcode_libdir_separator_F77=':'
+      link_all_deplibs_F77=yes
+      file_list_spec_F77='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+	# The Import File defines what to hardcode.
+	hardcode_direct_F77=no
+	hardcode_direct_absolute_F77=no
+	;;
+      esac
+
+      if test yes = "$GCC"; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`$CC -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct_F77=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L_F77=yes
+	  hardcode_libdir_flag_spec_F77='-L$libdir'
+	  hardcode_libdir_separator_F77=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test yes = "$aix_use_runtimelinking"; then
+	  shared_flag="$shared_flag "'$wl-G'
+	fi
+	# Need to ensure runtime linking is disabled for the traditional
+	# shared library, or the linker may eventually find shared libraries
+	# /with/ Import File - we do not want to mix them.
+	shared_flag_aix='-shared'
+	shared_flag_svr4='-shared $wl-G'
+      else
+	# not using gcc
+	if test ia64 = "$host_cpu"; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag='$wl-G'
+	  else
+	    shared_flag='$wl-bM:SRE'
+	  fi
+	  shared_flag_aix='$wl-bM:SRE'
+	  shared_flag_svr4='$wl-G'
+	fi
+      fi
+
+      export_dynamic_flag_spec_F77='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_F77=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_F77='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__F77"; then
+    lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__F77"; then
+    lt_cv_aix_libpath__F77=/usr/lib:/lib
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__F77
+fi
+
+        hardcode_libdir_flag_spec_F77='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds_F77='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+	if test ia64 = "$host_cpu"; then
+	  hardcode_libdir_flag_spec_F77='$wl-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_F77="-z nodefs"
+	  archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__F77=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__F77"; then
+    lt_cv_aix_libpath__F77=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__F77"; then
+    lt_cv_aix_libpath__F77=/usr/lib:/lib
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__F77
+fi
+
+	 hardcode_libdir_flag_spec_F77='$wl-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_F77=' $wl-bernotok'
+	  allow_undefined_flag_F77=' $wl-berok'
+	  if test yes = "$with_gnu_ld"; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec_F77='$wl--whole-archive$convenience $wl--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec_F77='$convenience'
+	  fi
+	  archive_cmds_need_lc_F77=yes
+	  archive_expsym_cmds_F77='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	  # -brtl affects multiple linker settings, -berok does not and is overridden later
+	  compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+	  if test svr4 != "$with_aix_soname"; then
+	    # This is similar to how AIX traditionally builds its shared libraries.
+	    archive_expsym_cmds_F77="$archive_expsym_cmds_F77"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	  fi
+	  if test aix != "$with_aix_soname"; then
+	    archive_expsym_cmds_F77="$archive_expsym_cmds_F77"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symb [...]
+	  else
+	    # used by -dlpreopen to get the symbols
+	    archive_expsym_cmds_F77="$archive_expsym_cmds_F77"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	  fi
+	  archive_expsym_cmds_F77="$archive_expsym_cmds_F77"'~$RM -r $output_objdir/$realname.d'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds_F77=''
+        ;;
+      m68k)
+            archive_cmds_F77='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec_F77='-L$libdir'
+            hardcode_minus_L_F77=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec_F77=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec_F77=' '
+	allow_undefined_flag_F77=unsupported
+	always_export_symbols_F77=yes
+	file_list_spec_F77='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds_F77='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	archive_expsym_cmds_F77='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, F77)='true'
+	enable_shared_with_static_runtimes_F77=yes
+	exclude_expsyms_F77='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds_F77='chmod 644 $oldlib'
+	postlink_cmds_F77='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec_F77=' '
+	allow_undefined_flag_F77=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds_F77='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes_F77=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_F77=no
+  hardcode_direct_F77=no
+  hardcode_automatic_F77=yes
+  hardcode_shlibpath_var_F77=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec_F77='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    compiler_needs_object_F77=yes
+  else
+    whole_archive_flag_spec_F77=''
+  fi
+  link_all_deplibs_F77=yes
+  allow_undefined_flag_F77=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*)
+        lt_prog_compiler_wl_F77='-Wl,'
+        _lt_dar_can_shared=yes
+      ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds_F77="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds_F77="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+
+  else
+  ld_shlibs_F77=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+	archive_cmds_F77='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_F77='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_F77='$wl+b $wl$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_direct_F77=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_F77=yes
+      export_dynamic_flag_spec_F77='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	archive_cmds_F77='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec_F77='$wl+b $wl$libdir'
+	hardcode_libdir_separator_F77=:
+	hardcode_direct_F77=yes
+	hardcode_direct_absolute_F77=yes
+	export_dynamic_flag_spec_F77='$wl-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L_F77=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_F77='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_F77='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_F77='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_F77='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_F77='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	archive_cmds_F77='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec_F77='$wl+b $wl$libdir'
+	hardcode_libdir_separator_F77=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct_F77=no
+	  hardcode_shlibpath_var_F77=no
+	  ;;
+	*)
+	  hardcode_direct_F77=yes
+	  hardcode_direct_absolute_F77=yes
+	  export_dynamic_flag_spec_F77='$wl-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_F77=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+	archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS=$LDFLAGS
+	   LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+	   cat > conftest.$ac_ext <<_ACEOF
+
+      subroutine foo
+      end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc_F77='no'
+      hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator_F77=:
+      inherit_rpath_F77=yes
+      link_all_deplibs_F77=yes
+      ;;
+
+    linux*)
+      case $cc_basename in
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	ld_shlibs_F77=yes
+	archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      esac
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_direct_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    newsos6)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_F77=yes
+      hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator_F77=:
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct_F77=yes
+	hardcode_shlibpath_var_F77=no
+	hardcode_direct_absolute_F77=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+	  archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec_F77='$wl-rpath,$libdir'
+	  export_dynamic_flag_spec_F77='$wl-E'
+	else
+	  archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  hardcode_libdir_flag_spec_F77='$wl-rpath,$libdir'
+	fi
+      else
+	ld_shlibs_F77=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_minus_L_F77=yes
+      allow_undefined_flag_F77=unsupported
+      shrext_cmds=.dll
+      archive_cmds_F77='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds_F77='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds_F77='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes_F77=yes
+      ;;
+
+    osf3*)
+      if test yes = "$GCC"; then
+	allow_undefined_flag_F77=' $wl-expect_unresolved $wl\*'
+	archive_cmds_F77='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc_F77='no'
+      hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+	allow_undefined_flag_F77=' $wl-expect_unresolved $wl\*'
+	archive_cmds_F77='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	hardcode_libdir_flag_spec_F77='$wl-rpath $wl$libdir'
+      else
+	allow_undefined_flag_F77=' -expect_unresolved \*'
+	archive_cmds_F77='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_F77='-rpath $libdir'
+      fi
+      archive_cmds_need_lc_F77='no'
+      hardcode_libdir_separator_F77=:
+      ;;
+
+    solaris*)
+      no_undefined_flag_F77=' -z defs'
+      if test yes = "$GCC"; then
+	wlarc='$wl'
+	archive_cmds_F77='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds_F77='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='$wl'
+	  archive_cmds_F77='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_F77='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec_F77='-R$libdir'
+      hardcode_shlibpath_var_F77=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands '-z linker_flag'.  GCC discards it without '$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test yes = "$GCC"; then
+	  whole_archive_flag_spec_F77='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs_F77=yes
+      ;;
+
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_F77='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_direct_F77=yes
+      hardcode_minus_L_F77=yes
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_F77='$CC -r -o $output$reload_objs'
+	  hardcode_direct_F77=no
+        ;;
+	motorola)
+	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_F77=no
+      export_dynamic_flag_spec_F77='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_F77=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_F77=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_F77='$wl-z,text'
+      archive_cmds_need_lc_F77=no
+      hardcode_shlibpath_var_F77=no
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	archive_cmds_F77='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag_F77='$wl-z,text'
+      allow_undefined_flag_F77='$wl-z,nodefs'
+      archive_cmds_need_lc_F77=no
+      hardcode_shlibpath_var_F77=no
+      hardcode_libdir_flag_spec_F77='$wl-R,$libdir'
+      hardcode_libdir_separator_F77=':'
+      link_all_deplibs_F77=yes
+      export_dynamic_flag_spec_F77='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	archive_cmds_F77='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_F77='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_F77='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_F77='-L$libdir'
+      hardcode_shlibpath_var_F77=no
+      ;;
+
+    *)
+      ld_shlibs_F77=no
+      ;;
+    esac
+
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec_F77='$wl-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_F77" >&5
+$as_echo "$ld_shlibs_F77" >&6; }
+test no = "$ld_shlibs_F77" && can_build_shared=no
+
+with_gnu_ld_F77=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_F77" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_F77=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds_F77 in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_F77+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM -f conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_F77
+	  pic_flag=$lt_prog_compiler_pic_F77
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_F77
+	  allow_undefined_flag_F77=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_F77 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc_F77=no
+	  else
+	    lt_cv_archive_cmds_need_lc_F77=yes
+	  fi
+	  allow_undefined_flag_F77=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_F77" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_F77" >&6; }
+      archive_cmds_need_lc_F77=$lt_cv_archive_cmds_need_lc_F77
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test yes = "$lt_cv_prog_gnu_ld"; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec_F77='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_F77\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_F77\""
+    cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_f77_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_F77=
+if test -n "$hardcode_libdir_flag_spec_F77" ||
+   test -n "$runpath_var_F77" ||
+   test yes = "$hardcode_automatic_F77"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct_F77" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, F77)" &&
+     test no != "$hardcode_minus_L_F77"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_F77=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_F77=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_F77=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_F77" >&5
+$as_echo "$hardcode_action_F77" >&6; }
+
+if test relink = "$hardcode_action_F77" ||
+   test yes = "$inherit_rpath_F77"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MPIF77 is a valid MPI compiler" >&5
+$as_echo_n "checking if $MPIF77 is a valid MPI compiler... " >&6; }
+   ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+      cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+           include "mpif.h"
+           integer err, rank
+           call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)
+      end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  valid_mpif77=yes
+else
+  valid_mpif77=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $valid_mpif77" >&5
+$as_echo "$valid_mpif77" >&6; }
+
+   if test "x${valid_mpif77}" = xno ; then
+      has_fortran=no
+      if test "x${enable_fortran}" = xyes ; then
+         as_fn_error $? "
+   -----------------------------------------------------------------------
+     Invalid MPI Fortran 77 compiler: \"${MPIF77}\"
+     A working MPI Fortran 77 compiler is required. Please specify the
+     location of a valid MPI Fortran 77 compiler, either in the MPIF77
+     environment variable or through --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+      else
+         { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+   -----------------------------------------------------------------------
+     \"${MPIF77}\" is not a working MPI Fortran 77 compiler.
+     Thus, the Fortran feature is disabled.
+   -----------------------------------------------------------------------" >&5
+$as_echo "$as_me: WARNING:
+   -----------------------------------------------------------------------
+     \"${MPIF77}\" is not a working MPI Fortran 77 compiler.
+     Thus, the Fortran feature is disabled.
+   -----------------------------------------------------------------------" >&2;}
+      fi
+   fi
+fi
+
+mpi_mod=no
+if test "x${has_fortran}" = xyes ; then
+      FC=${MPIF90}
+   ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$FC"; then
+  ac_cv_prog_FC="$FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_FC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+FC=$ac_cv_prog_FC
+if test -n "$FC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5
+$as_echo "$FC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$FC" && break
+  done
+fi
+if test -z "$FC"; then
+  ac_ct_FC=$FC
+  for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_FC"; then
+  ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_FC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_FC=$ac_cv_prog_ac_ct_FC
+if test -n "$ac_ct_FC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5
+$as_echo "$ac_ct_FC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_FC" && break
+done
+
+  if test "x$ac_ct_FC" = x; then
+    FC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    FC=$ac_ct_FC
+  fi
+fi
+
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+  { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    sed '10a\
+... rest of stderr output deleted ...
+         10q' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+  fi
+  rm -f conftest.er1 conftest.err
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+done
+rm -f a.out
+
+# If we don't use `.F' as extension, the preprocessor is not run on the
+# input file.  (Note that this only needs to work for GNU compilers.)
+ac_save_ext=$ac_ext
+ac_ext=F
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5
+$as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; }
+if ${ac_cv_fc_compiler_gnu+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+#ifndef __GNUC__
+       choke me
+#endif
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_compiler_gnu=yes
+else
+  ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_fc_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5
+$as_echo "$ac_cv_fc_compiler_gnu" >&6; }
+ac_ext=$ac_save_ext
+ac_test_FCFLAGS=${FCFLAGS+set}
+ac_save_FCFLAGS=$FCFLAGS
+FCFLAGS=
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5
+$as_echo_n "checking whether $FC accepts -g... " >&6; }
+if ${ac_cv_prog_fc_g+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  FCFLAGS=-g
+cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_prog_fc_g=yes
+else
+  ac_cv_prog_fc_g=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5
+$as_echo "$ac_cv_prog_fc_g" >&6; }
+if test "$ac_test_FCFLAGS" = set; then
+  FCFLAGS=$ac_save_FCFLAGS
+elif test $ac_cv_prog_fc_g = yes; then
+  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+    FCFLAGS="-g -O2"
+  else
+    FCFLAGS="-g"
+  fi
+else
+  if test "x$ac_cv_fc_compiler_gnu" = xyes; then
+    FCFLAGS="-O2"
+  else
+    FCFLAGS=
+  fi
+fi
+
+if test $ac_compiler_gnu = yes; then
+  GFC=yes
+else
+  GFC=
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+      ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+
+if test -z "$FC" || test no = "$FC"; then
+  _lt_disable_FC=yes
+fi
+
+archive_cmds_need_lc_FC=no
+allow_undefined_flag_FC=
+always_export_symbols_FC=no
+archive_expsym_cmds_FC=
+export_dynamic_flag_spec_FC=
+hardcode_direct_FC=no
+hardcode_direct_absolute_FC=no
+hardcode_libdir_flag_spec_FC=
+hardcode_libdir_separator_FC=
+hardcode_minus_L_FC=no
+hardcode_automatic_FC=no
+inherit_rpath_FC=no
+module_cmds_FC=
+module_expsym_cmds_FC=
+link_all_deplibs_FC=unknown
+old_archive_cmds_FC=$old_archive_cmds
+reload_flag_FC=$reload_flag
+reload_cmds_FC=$reload_cmds
+no_undefined_flag_FC=
+whole_archive_flag_spec_FC=
+enable_shared_with_static_runtimes_FC=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+objext_FC=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_FC"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+
+
+
+
+
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+
+
+  # save warnings/boilerplate of simple test code
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM -f conftest*
+
+  ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  compiler_FC=$CC
+  func_cc_basename $compiler
+cc_basename=$func_cc_basename_result
+
+
+  if test -n "$compiler"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
+$as_echo_n "checking if libtool supports shared libraries... " >&6; }
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
+$as_echo "$can_build_shared" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
+$as_echo_n "checking whether to build shared libraries... " >&6; }
+    test no = "$can_build_shared" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test yes = "$enable_shared" && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[4-9]*)
+	if test ia64 != "$host_cpu"; then
+	  case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+	  yes,aix,yes) ;;		# shared object as lib.so file only
+	  yes,svr4,*) ;;		# shared object as lib.so archive member only
+	  yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+	  esac
+	fi
+        ;;
+    esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
+$as_echo "$enable_shared" >&6; }
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
+$as_echo_n "checking whether to build static libraries... " >&6; }
+    # Make sure either enable_shared or enable_static is yes.
+    test yes = "$enable_shared" || enable_static=yes
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
+$as_echo "$enable_static" >&6; }
+
+    GCC_FC=$ac_cv_fc_compiler_gnu
+    LD_FC=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    # Dependencies to place before and after the object being linked:
+predep_objects_FC=
+postdep_objects_FC=
+predeps_FC=
+postdeps_FC=
+compiler_lib_search_path_FC=
+
+cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $prev$p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test no = "$pre_test_object_deps_done"; then
+	 case $prev in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$compiler_lib_search_path_FC"; then
+	     compiler_lib_search_path_FC=$prev$p
+	   else
+	     compiler_lib_search_path_FC="${compiler_lib_search_path_FC} $prev$p"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       elif test "x$p" != x ; then # skip if $p is empty
+	 if test -z "$postdeps_FC"; then
+	   postdeps_FC=$prev$p
+	 else
+	   postdeps_FC="${postdeps_FC} $prev$p"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test no = "$pre_test_object_deps_done"; then
+	 if test -z "$predep_objects_FC"; then
+	   predep_objects_FC=$p
+	 else
+	   predep_objects_FC="$predep_objects_FC $p"
+	 fi
+       else
+	 if test -z "$postdep_objects_FC"; then
+	   postdep_objects_FC=$p
+	 else
+	   postdep_objects_FC="$postdep_objects_FC $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling FC test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+
+
+case " $postdeps_FC " in
+*" -lc "*) archive_cmds_need_lc_FC=no ;;
+esac
+ compiler_lib_search_dirs_FC=
+if test -n "${compiler_lib_search_path_FC}"; then
+ compiler_lib_search_dirs_FC=`echo " ${compiler_lib_search_path_FC}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_nostdlib_flag=
+if test "$cc_basename" == FCCpx || test "$cc_basename" == fccpx || test "$cc_basename" == frtpx ; then
+   ac_nostdlib_flag=-Xg
+fi
+nostdlib_flag_FC=$ac_nostdlib_flag
+
+
+
+    lt_prog_compiler_wl_FC=
+lt_prog_compiler_pic_FC=
+lt_prog_compiler_static_FC=
+
+
+  if test yes = "$GCC"; then
+    lt_prog_compiler_wl_FC='-Wl,'
+    lt_prog_compiler_static_FC='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_FC='-Bstatic'
+      fi
+      lt_prog_compiler_pic_FC='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            lt_prog_compiler_pic_FC='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            lt_prog_compiler_pic_FC='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      lt_prog_compiler_pic_FC='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static_FC='$wl-static'
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_FC='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      lt_prog_compiler_static_FC=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_FC='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[3-9]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      lt_prog_compiler_can_build_shared_FC=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_FC='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_FC=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      lt_prog_compiler_pic_FC='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      lt_prog_compiler_wl_FC='-Xlinker '
+      if test -n "$lt_prog_compiler_pic_FC"; then
+        lt_prog_compiler_pic_FC="-Xcompiler $lt_prog_compiler_pic_FC"
+      fi
+      ;;
+    fccpx*) # Fujitsu Compiler
+      lt_prog_compiler_pic_FC='-Xg -KPIC'
+      lt_prog_compiler_static_FC='-Bstatic'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      lt_prog_compiler_wl_FC='-Wl,'
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	lt_prog_compiler_static_FC='-Bstatic'
+      else
+	lt_prog_compiler_static_FC='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_prog_compiler_pic_FC='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        lt_prog_compiler_wl_FC='-Wl,-Wl,,'
+        lt_prog_compiler_pic_FC='-PIC'
+        lt_prog_compiler_static_FC='-Bstatic'
+        ;;
+      esac
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_prog_compiler_pic_FC='-DDLL_EXPORT'
+      case $host_os in
+      os2*)
+	lt_prog_compiler_static_FC='$wl-static'
+	;;
+      esac
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      lt_prog_compiler_wl_FC='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	lt_prog_compiler_pic_FC='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      lt_prog_compiler_static_FC='$wl-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      lt_prog_compiler_wl_FC='-Wl,'
+      # PIC (with -KPIC) is the default.
+      lt_prog_compiler_static_FC='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+	lt_prog_compiler_wl_FC='-Wl,'
+	lt_prog_compiler_pic_FC='-KPIC'
+	lt_prog_compiler_static_FC='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	lt_prog_compiler_wl_FC='-Wl,'
+	lt_prog_compiler_pic_FC='-fPIC'
+	lt_prog_compiler_static_FC='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	lt_prog_compiler_wl_FC='-Wl,'
+	lt_prog_compiler_pic_FC='--shared'
+	lt_prog_compiler_static_FC='--static'
+	;;
+      frtpx* )
+	# Fujitsu compiler
+	lt_prog_compiler_wl_FC='-Wl,'
+	lt_prog_compiler_pic_FC='-KPIC'
+	lt_prog_compiler_static_FC='-Kstatic_fjlib'
+	;;
+      fccpx* | FCCpx* )
+	# Fujitsu compiler
+	lt_prog_compiler_wl_FC='-Wl,'
+	lt_prog_compiler_pic_FC='-Xg -KPIC'
+	lt_prog_compiler_static_FC='-Bstatic'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	lt_prog_compiler_wl_FC='-Wl,-Wl,,'
+	lt_prog_compiler_pic_FC='-PIC'
+	lt_prog_compiler_static_FC='-Bstatic'
+	;;
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	lt_prog_compiler_wl_FC='-Wl,'
+	lt_prog_compiler_pic_FC='-fPIC'
+	lt_prog_compiler_static_FC='-static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	lt_prog_compiler_wl_FC='-Wl,'
+	lt_prog_compiler_pic_FC='-fpic'
+	lt_prog_compiler_static_FC='-Bstatic'
+        ;;
+      ccc*)
+        lt_prog_compiler_wl_FC='-Wl,'
+        # All Alpha code is PIC.
+        lt_prog_compiler_static_FC='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	lt_prog_compiler_wl_FC='-Wl,'
+	lt_prog_compiler_pic_FC='-qpic'
+	lt_prog_compiler_static_FC='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  lt_prog_compiler_pic_FC='-KPIC'
+	  lt_prog_compiler_static_FC='-Bstatic'
+	  lt_prog_compiler_wl_FC=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  lt_prog_compiler_pic_FC='-KPIC'
+	  lt_prog_compiler_static_FC='-Bstatic'
+	  lt_prog_compiler_wl_FC='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  lt_prog_compiler_pic_FC='-KPIC'
+	  lt_prog_compiler_static_FC='-Bstatic'
+	  lt_prog_compiler_wl_FC='-Wl,'
+	  ;;
+        *Intel*\ [CF]*Compiler*)
+	  lt_prog_compiler_wl_FC='-Wl,'
+	  lt_prog_compiler_pic_FC='-fPIC'
+	  lt_prog_compiler_static_FC='-static'
+	  ;;
+	*Portland\ Group*)
+	  lt_prog_compiler_wl_FC='-Wl,'
+	  lt_prog_compiler_pic_FC='-fpic'
+	  lt_prog_compiler_static_FC='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      lt_prog_compiler_pic_FC='-KPIC'
+      lt_prog_compiler_static_FC='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      lt_prog_compiler_pic_FC='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      lt_prog_compiler_wl_FC='-Wl,'
+      # All OSF/1 code is PIC.
+      lt_prog_compiler_static_FC='-non_shared'
+      ;;
+
+    rdos*)
+      lt_prog_compiler_static_FC='-non_shared'
+      ;;
+
+    solaris*)
+      lt_prog_compiler_pic_FC='-KPIC'
+      lt_prog_compiler_static_FC='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	lt_prog_compiler_wl_FC='-Qoption ld ';;
+      *)
+	lt_prog_compiler_wl_FC='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      lt_prog_compiler_wl_FC='-Qoption ld '
+      lt_prog_compiler_pic_FC='-PIC'
+      lt_prog_compiler_static_FC='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      lt_prog_compiler_wl_FC='-Wl,'
+      lt_prog_compiler_pic_FC='-KPIC'
+      lt_prog_compiler_static_FC='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	lt_prog_compiler_pic_FC='-Kconform_pic'
+	lt_prog_compiler_static_FC='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      lt_prog_compiler_wl_FC='-Wl,'
+      lt_prog_compiler_pic_FC='-KPIC'
+      lt_prog_compiler_static_FC='-Bstatic'
+      ;;
+
+    unicos*)
+      lt_prog_compiler_wl_FC='-Wl,'
+      lt_prog_compiler_can_build_shared_FC=no
+      ;;
+
+    uts4*)
+      lt_prog_compiler_pic_FC='-pic'
+      lt_prog_compiler_static_FC='-Bstatic'
+      ;;
+
+    *)
+      lt_prog_compiler_can_build_shared_FC=no
+      ;;
+    esac
+  fi
+
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    lt_prog_compiler_pic_FC=
+    ;;
+  *)
+    lt_prog_compiler_pic_FC="$lt_prog_compiler_pic_FC"
+    ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
+$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
+if ${lt_cv_prog_compiler_pic_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_FC=$lt_prog_compiler_pic_FC
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_FC" >&5
+$as_echo "$lt_cv_prog_compiler_pic_FC" >&6; }
+lt_prog_compiler_pic_FC=$lt_cv_prog_compiler_pic_FC
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$lt_prog_compiler_pic_FC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_FC works" >&5
+$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_FC works... " >&6; }
+if ${lt_cv_prog_compiler_pic_works_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_pic_works_FC=no
+   ac_outfile=conftest.$ac_objext
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$lt_prog_compiler_pic_FC"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_pic_works_FC=yes
+     fi
+   fi
+   $RM conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_FC" >&5
+$as_echo "$lt_cv_prog_compiler_pic_works_FC" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_pic_works_FC"; then
+    case $lt_prog_compiler_pic_FC in
+     "" | " "*) ;;
+     *) lt_prog_compiler_pic_FC=" $lt_prog_compiler_pic_FC" ;;
+     esac
+else
+    lt_prog_compiler_pic_FC=
+     lt_prog_compiler_can_build_shared_FC=no
+fi
+
+fi
+
+
+
+
+
+#
+# Check to make sure the static flag actually works.
+#
+wl=$lt_prog_compiler_wl_FC eval lt_tmp_static_flag=\"$lt_prog_compiler_static_FC\"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
+$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
+if ${lt_cv_prog_compiler_static_works_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_static_works_FC=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&5
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         lt_cv_prog_compiler_static_works_FC=yes
+       fi
+     else
+       lt_cv_prog_compiler_static_works_FC=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_FC" >&5
+$as_echo "$lt_cv_prog_compiler_static_works_FC" >&6; }
+
+if test yes = "$lt_cv_prog_compiler_static_works_FC"; then
+    :
+else
+    lt_prog_compiler_static_FC=
+fi
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_FC=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_FC=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; }
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
+$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
+if ${lt_cv_prog_compiler_c_o_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_prog_compiler_c_o_FC=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&5
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       lt_cv_prog_compiler_c_o_FC=yes
+     fi
+   fi
+   chmod u+w . 2>&5
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_FC" >&5
+$as_echo "$lt_cv_prog_compiler_c_o_FC" >&6; }
+
+
+
+
+hard_links=nottested
+if test no = "$lt_cv_prog_compiler_c_o_FC" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
+$as_echo_n "checking if we can lock with hard links... " >&6; }
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
+$as_echo "$hard_links" >&6; }
+  if test no = "$hard_links"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
+$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
+$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
+
+  runpath_var=
+  allow_undefined_flag_FC=
+  always_export_symbols_FC=no
+  archive_cmds_FC=
+  archive_expsym_cmds_FC=
+  compiler_needs_object_FC=no
+  enable_shared_with_static_runtimes_FC=no
+  export_dynamic_flag_spec_FC=
+  export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  hardcode_automatic_FC=no
+  hardcode_direct_FC=no
+  hardcode_direct_absolute_FC=no
+  hardcode_libdir_flag_spec_FC=
+  hardcode_libdir_separator_FC=
+  hardcode_minus_L_FC=no
+  hardcode_shlibpath_var_FC=unsupported
+  inherit_rpath_FC=no
+  link_all_deplibs_FC=unknown
+  module_cmds_FC=
+  module_expsym_cmds_FC=
+  old_archive_from_new_cmds_FC=
+  old_archive_from_expsyms_cmds_FC=
+  thread_safe_flag_spec_FC=
+  whole_archive_flag_spec_FC=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  include_expsyms_FC=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  exclude_expsyms_FC='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  ld_shlibs_FC=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;;
+	  *\ \(GNU\ Binutils\)\ [3-9]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir'
+    export_dynamic_flag_spec_FC='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      whole_archive_flag_spec_FC=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      whole_archive_flag_spec_FC=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+	ld_shlibs_FC=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds_FC=''
+        ;;
+      m68k)
+            archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec_FC='-L$libdir'
+            hardcode_minus_L_FC=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	allow_undefined_flag_FC=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	archive_cmds_FC='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+	ld_shlibs_FC=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, FC) is actually meaningless,
+      # as there is no search path for DLLs.
+      hardcode_libdir_flag_spec_FC='-L$libdir'
+      export_dynamic_flag_spec_FC='$wl--export-all-symbols'
+      allow_undefined_flag_FC=unsupported
+      always_export_symbols_FC=no
+      enable_shared_with_static_runtimes_FC=yes
+      export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols'
+      exclude_expsyms_FC='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file, use it as
+	# is; otherwise, prepend EXPORTS...
+	archive_expsym_cmds_FC='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	ld_shlibs_FC=no
+      fi
+      ;;
+
+    haiku*)
+      archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      link_all_deplibs_FC=yes
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_FC='-L$libdir'
+      hardcode_minus_L_FC=yes
+      allow_undefined_flag_FC=unsupported
+      shrext_cmds=.dll
+      archive_cmds_FC='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds_FC='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds_FC='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes_FC=yes
+      ;;
+
+    interix[3-9]*)
+      hardcode_direct_FC=no
+      hardcode_shlibpath_var_FC=no
+      hardcode_libdir_flag_spec_FC='$wl-rpath,$libdir'
+      export_dynamic_flag_spec_FC='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds_FC='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test no = "$tmp_diet"
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  whole_archive_flag_spec_FC=
+	  tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+	xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  whole_archive_flag_spec_FC='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  compiler_needs_object_FC=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  whole_archive_flag_spec_FC='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  compiler_needs_object_FC=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	archive_cmds_FC='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	tcc*)
+	  export_dynamic_flag_spec_FC='-rdynamic'
+	  ;;
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  whole_archive_flag_spec_FC='--whole-archive$convenience --no-whole-archive'
+	  hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir'
+	  archive_cmds_FC='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test yes = "$supports_anon_versioning"; then
+	    archive_expsym_cmds_FC='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        ld_shlibs_FC=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds_FC='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	ld_shlibs_FC=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_FC=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+	ld_shlibs_FC=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir'
+	    archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    ld_shlibs_FC=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      archive_cmds_FC='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      hardcode_direct_FC=yes
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	ld_shlibs_FC=no
+      fi
+      ;;
+    esac
+
+    if test no = "$ld_shlibs_FC"; then
+      runpath_var=
+      hardcode_libdir_flag_spec_FC=
+      export_dynamic_flag_spec_FC=
+      whole_archive_flag_spec_FC=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      allow_undefined_flag_FC=unsupported
+      always_export_symbols_FC=yes
+      archive_expsym_cmds_FC='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L_FC=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	hardcode_direct_FC=unsupported
+      fi
+      ;;
+
+    aix[4-9]*)
+      if test ia64 = "$host_cpu"; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to GNU nm, but means don't demangle to AIX nm.
+	# Without the "-l" option, or with the "-B" option, AIX nm treats
+	# weak defined symbols like other global defined symbols, whereas
+	# GNU nm marks them as "W".
+	# While the 'weak' keyword is ignored in the Export File, we need
+	# it in the Import File for the 'aix-soname' feature, so we have
+	# to replace the "-B" option with "-P" for AIX nm.
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  export_symbols_cmds_FC='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+	else
+	  export_symbols_cmds_FC='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# have runtime linking enabled, and use it for executables.
+	# For shared libraries, we enable/disable runtime linking
+	# depending on the kind of the shared library created -
+	# when "with_aix_soname,aix_use_runtimelinking" is:
+	# "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "aix,yes"  lib.so          shared, rtl:yes, for executables
+	#            lib.a           static archive
+	# "both,no"  lib.so.V(shr.o) shared, rtl:yes
+	#            lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a(lib.so.V) shared, rtl:no
+	# "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a           static archive
+	case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	    # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	    # so we don't have lib.a shared libs to link our executables.
+	    # We have to force runtime linking in this case.
+	    aix_use_runtimelinking=yes
+	    LDFLAGS="$LDFLAGS -Wl,-brtl"
+	  fi
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      archive_cmds_FC=''
+      hardcode_direct_FC=yes
+      hardcode_direct_absolute_FC=yes
+      hardcode_libdir_separator_FC=':'
+      link_all_deplibs_FC=yes
+      file_list_spec_FC='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+	# The Import File defines what to hardcode.
+	hardcode_direct_FC=no
+	hardcode_direct_absolute_FC=no
+	;;
+      esac
+
+      if test yes = "$GCC"; then
+	case $host_os in aix4.[012]|aix4.[012].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`$CC -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  hardcode_direct_FC=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L_FC=yes
+	  hardcode_libdir_flag_spec_FC='-L$libdir'
+	  hardcode_libdir_separator_FC=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test yes = "$aix_use_runtimelinking"; then
+	  shared_flag="$shared_flag "'$wl-G'
+	fi
+	# Need to ensure runtime linking is disabled for the traditional
+	# shared library, or the linker may eventually find shared libraries
+	# /with/ Import File - we do not want to mix them.
+	shared_flag_aix='-shared'
+	shared_flag_svr4='-shared $wl-G'
+      else
+	# not using gcc
+	if test ia64 = "$host_cpu"; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag='$wl-G'
+	  else
+	    shared_flag='$wl-bM:SRE'
+	  fi
+	  shared_flag_aix='$wl-bM:SRE'
+	  shared_flag_svr4='$wl-G'
+	fi
+      fi
+
+      export_dynamic_flag_spec_FC='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      always_export_symbols_FC=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag_FC='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__FC"; then
+    lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__FC"; then
+    lt_cv_aix_libpath__FC=/usr/lib:/lib
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__FC
+fi
+
+        hardcode_libdir_flag_spec_FC='$wl-blibpath:$libdir:'"$aix_libpath"
+        archive_expsym_cmds_FC='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+	if test ia64 = "$host_cpu"; then
+	  hardcode_libdir_flag_spec_FC='$wl-R $libdir:/usr/lib:/lib'
+	  allow_undefined_flag_FC="-z nodefs"
+	  archive_expsym_cmds_FC="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  if ${lt_cv_aix_libpath__FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+
+  lt_aix_libpath_sed='
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }'
+  lt_cv_aix_libpath__FC=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$lt_cv_aix_libpath__FC"; then
+    lt_cv_aix_libpath__FC=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+  if test -z "$lt_cv_aix_libpath__FC"; then
+    lt_cv_aix_libpath__FC=/usr/lib:/lib
+  fi
+
+fi
+
+  aix_libpath=$lt_cv_aix_libpath__FC
+fi
+
+	 hardcode_libdir_flag_spec_FC='$wl-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  no_undefined_flag_FC=' $wl-bernotok'
+	  allow_undefined_flag_FC=' $wl-berok'
+	  if test yes = "$with_gnu_ld"; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    whole_archive_flag_spec_FC='$wl--whole-archive$convenience $wl--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    whole_archive_flag_spec_FC='$convenience'
+	  fi
+	  archive_cmds_need_lc_FC=yes
+	  archive_expsym_cmds_FC='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	  # -brtl affects multiple linker settings, -berok does not and is overridden later
+	  compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`'
+	  if test svr4 != "$with_aix_soname"; then
+	    # This is similar to how AIX traditionally builds its shared libraries.
+	    archive_expsym_cmds_FC="$archive_expsym_cmds_FC"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	  fi
+	  if test aix != "$with_aix_soname"; then
+	    archive_expsym_cmds_FC="$archive_expsym_cmds_FC"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbol [...]
+	  else
+	    # used by -dlpreopen to get the symbols
+	    archive_expsym_cmds_FC="$archive_expsym_cmds_FC"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	  fi
+	  archive_expsym_cmds_FC="$archive_expsym_cmds_FC"'~$RM -r $output_objdir/$realname.d'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            archive_expsym_cmds_FC=''
+        ;;
+      m68k)
+            archive_cmds_FC='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            hardcode_libdir_flag_spec_FC='-L$libdir'
+            hardcode_minus_L_FC=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[45]*)
+      export_dynamic_flag_spec_FC=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	hardcode_libdir_flag_spec_FC=' '
+	allow_undefined_flag_FC=unsupported
+	always_export_symbols_FC=yes
+	file_list_spec_FC='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds_FC='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	archive_expsym_cmds_FC='if   test DEF = "`$SED -n     -e '\''s/^[	 ]*//'\''     -e '\''/^\(;.*\)*$/d'\''     -e '\''s/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p'\''     -e q     $export_symbols`" ; then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, FC)='true'
+	enable_shared_with_static_runtimes_FC=yes
+	exclude_expsyms_FC='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	export_symbols_cmds_FC='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	old_postinstall_cmds_FC='chmod 644 $oldlib'
+	postlink_cmds_FC='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	hardcode_libdir_flag_spec_FC=' '
+	allow_undefined_flag_FC=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	archive_cmds_FC='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	old_archive_from_new_cmds_FC='true'
+	# FIXME: Should let the user specify the lib program.
+	old_archive_cmds_FC='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	enable_shared_with_static_runtimes_FC=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+
+
+  archive_cmds_need_lc_FC=no
+  hardcode_direct_FC=no
+  hardcode_automatic_FC=yes
+  hardcode_shlibpath_var_FC=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    whole_archive_flag_spec_FC='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    compiler_needs_object_FC=yes
+  else
+    whole_archive_flag_spec_FC=''
+  fi
+  link_all_deplibs_FC=yes
+  allow_undefined_flag_FC=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*)
+        lt_prog_compiler_wl_FC='-Wl,'
+        _lt_dar_can_shared=yes
+      ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    archive_cmds_FC="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    module_cmds_FC="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    archive_expsym_cmds_FC="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds_FC="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+
+  else
+  ld_shlibs_FC=no
+  fi
+
+      ;;
+
+    dgux*)
+      archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_FC='-L$libdir'
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      hardcode_libdir_flag_spec_FC='-R$libdir'
+      hardcode_direct_FC=yes
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_FC=yes
+      hardcode_minus_L_FC=yes
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      hardcode_libdir_flag_spec_FC='-R$libdir'
+      hardcode_direct_FC=yes
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+	archive_cmds_FC='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+	archive_cmds_FC='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      hardcode_libdir_flag_spec_FC='$wl+b $wl$libdir'
+      hardcode_libdir_separator_FC=:
+      hardcode_direct_FC=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L_FC=yes
+      export_dynamic_flag_spec_FC='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	archive_cmds_FC='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_FC='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec_FC='$wl+b $wl$libdir'
+	hardcode_libdir_separator_FC=:
+	hardcode_direct_FC=yes
+	hardcode_direct_absolute_FC=yes
+	export_dynamic_flag_spec_FC='$wl-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	hardcode_minus_L_FC=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_FC='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_FC='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  archive_cmds_FC='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  archive_cmds_FC='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  archive_cmds_FC='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	archive_cmds_FC='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      fi
+      if test no = "$with_gnu_ld"; then
+	hardcode_libdir_flag_spec_FC='$wl+b $wl$libdir'
+	hardcode_libdir_separator_FC=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  hardcode_direct_FC=no
+	  hardcode_shlibpath_var_FC=no
+	  ;;
+	*)
+	  hardcode_direct_FC=yes
+	  hardcode_direct_absolute_FC=yes
+	  export_dynamic_flag_spec_FC='$wl-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  hardcode_minus_L_FC=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+	archive_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
+$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
+if ${lt_cv_irix_exported_symbol+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  save_LDFLAGS=$LDFLAGS
+	   LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+	   cat > conftest.$ac_ext <<_ACEOF
+
+      subroutine foo
+      end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+  lt_cv_irix_exported_symbol=yes
+else
+  lt_cv_irix_exported_symbol=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+           LDFLAGS=$save_LDFLAGS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
+$as_echo "$lt_cv_irix_exported_symbol" >&6; }
+	if test yes = "$lt_cv_irix_exported_symbol"; then
+          archive_expsym_cmds_FC='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+	fi
+      else
+	archive_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds_FC='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      archive_cmds_need_lc_FC='no'
+      hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator_FC=:
+      inherit_rpath_FC=yes
+      link_all_deplibs_FC=yes
+      ;;
+
+    linux*)
+      case $cc_basename in
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	ld_shlibs_FC=yes
+	archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      esac
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	archive_cmds_FC='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      hardcode_libdir_flag_spec_FC='-R$libdir'
+      hardcode_direct_FC=yes
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    newsos6)
+      archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct_FC=yes
+      hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator_FC=:
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+	hardcode_direct_FC=yes
+	hardcode_shlibpath_var_FC=no
+	hardcode_direct_absolute_FC=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+	  archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+	  hardcode_libdir_flag_spec_FC='$wl-rpath,$libdir'
+	  export_dynamic_flag_spec_FC='$wl-E'
+	else
+	  archive_cmds_FC='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  hardcode_libdir_flag_spec_FC='$wl-rpath,$libdir'
+	fi
+      else
+	ld_shlibs_FC=no
+      fi
+      ;;
+
+    os2*)
+      hardcode_libdir_flag_spec_FC='-L$libdir'
+      hardcode_minus_L_FC=yes
+      allow_undefined_flag_FC=unsupported
+      shrext_cmds=.dll
+      archive_cmds_FC='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      archive_expsym_cmds_FC='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      old_archive_From_new_cmds_FC='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      enable_shared_with_static_runtimes_FC=yes
+      ;;
+
+    osf3*)
+      if test yes = "$GCC"; then
+	allow_undefined_flag_FC=' $wl-expect_unresolved $wl\*'
+	archive_cmds_FC='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+	allow_undefined_flag_FC=' -expect_unresolved \*'
+	archive_cmds_FC='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      archive_cmds_need_lc_FC='no'
+      hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir'
+      hardcode_libdir_separator_FC=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+	allow_undefined_flag_FC=' $wl-expect_unresolved $wl\*'
+	archive_cmds_FC='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	hardcode_libdir_flag_spec_FC='$wl-rpath $wl$libdir'
+      else
+	allow_undefined_flag_FC=' -expect_unresolved \*'
+	archive_cmds_FC='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	archive_expsym_cmds_FC='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	hardcode_libdir_flag_spec_FC='-rpath $libdir'
+      fi
+      archive_cmds_need_lc_FC='no'
+      hardcode_libdir_separator_FC=:
+      ;;
+
+    solaris*)
+      no_undefined_flag_FC=' -z defs'
+      if test yes = "$GCC"; then
+	wlarc='$wl'
+	archive_cmds_FC='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  archive_cmds_FC='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='$wl'
+	  archive_cmds_FC='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  archive_expsym_cmds_FC='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      hardcode_libdir_flag_spec_FC='-R$libdir'
+      hardcode_shlibpath_var_FC=no
+      case $host_os in
+      solaris2.[0-5] | solaris2.[0-5].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands '-z linker_flag'.  GCC discards it without '$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test yes = "$GCC"; then
+	  whole_archive_flag_spec_FC='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+	else
+	  whole_archive_flag_spec_FC='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      link_all_deplibs_FC=yes
+      ;;
+
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	archive_cmds_FC='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_FC='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      hardcode_libdir_flag_spec_FC='-L$libdir'
+      hardcode_direct_FC=yes
+      hardcode_minus_L_FC=yes
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_FC=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  archive_cmds_FC='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  reload_cmds_FC='$CC -r -o $output$reload_objs'
+	  hardcode_direct_FC=no
+        ;;
+	motorola)
+	  archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  hardcode_direct_FC=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    sysv4.3*)
+      archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var_FC=no
+      export_dynamic_flag_spec_FC='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_shlibpath_var_FC=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	ld_shlibs_FC=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      no_undefined_flag_FC='$wl-z,text'
+      archive_cmds_need_lc_FC=no
+      hardcode_shlibpath_var_FC=no
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	archive_cmds_FC='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_FC='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_FC='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_FC='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      no_undefined_flag_FC='$wl-z,text'
+      allow_undefined_flag_FC='$wl-z,nodefs'
+      archive_cmds_need_lc_FC=no
+      hardcode_shlibpath_var_FC=no
+      hardcode_libdir_flag_spec_FC='$wl-R,$libdir'
+      hardcode_libdir_separator_FC=':'
+      link_all_deplibs_FC=yes
+      export_dynamic_flag_spec_FC='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	archive_cmds_FC='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_FC='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	archive_cmds_FC='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	archive_expsym_cmds_FC='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      archive_cmds_FC='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec_FC='-L$libdir'
+      hardcode_shlibpath_var_FC=no
+      ;;
+
+    *)
+      ld_shlibs_FC=no
+      ;;
+    esac
+
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	export_dynamic_flag_spec_FC='$wl-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_FC" >&5
+$as_echo "$ld_shlibs_FC" >&6; }
+test no = "$ld_shlibs_FC" && can_build_shared=no
+
+with_gnu_ld_FC=$with_gnu_ld
+
+
+
+
+
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$archive_cmds_need_lc_FC" in
+x|xyes)
+  # Assume -lc should be added
+  archive_cmds_need_lc_FC=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $archive_cmds_FC in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
+$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
+if ${lt_cv_archive_cmds_need_lc_FC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  $RM -f conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$lt_prog_compiler_wl_FC
+	  pic_flag=$lt_prog_compiler_pic_FC
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$allow_undefined_flag_FC
+	  allow_undefined_flag_FC=
+	  if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
+  (eval $archive_cmds_FC 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+	  then
+	    lt_cv_archive_cmds_need_lc_FC=no
+	  else
+	    lt_cv_archive_cmds_need_lc_FC=yes
+	  fi
+	  allow_undefined_flag_FC=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM -f conftest*
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_FC" >&5
+$as_echo "$lt_cv_archive_cmds_need_lc_FC" >&6; }
+      archive_cmds_need_lc_FC=$lt_cv_archive_cmds_need_lc_FC
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
+$as_echo_n "checking dynamic linker characteristics... " >&6; }
+
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[4-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a(lib.so.V)'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[45]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[23].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[01]* | freebsdelf3.[01]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
+  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[3-9]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test yes = "$lt_cv_prog_gnu_ld"; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  hardcode_libdir_flag_spec_FC='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_FC\"; \
+	 LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_FC\""
+    cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_link "$LINENO"; then :
+  if  ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
+  lt_cv_shlibpath_overrides_runpath=yes
+fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+
+fi
+
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
+$as_echo "$dynamic_linker" >&6; }
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
+$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
+hardcode_action_FC=
+if test -n "$hardcode_libdir_flag_spec_FC" ||
+   test -n "$runpath_var_FC" ||
+   test yes = "$hardcode_automatic_FC"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$hardcode_direct_FC" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, FC)" &&
+     test no != "$hardcode_minus_L_FC"; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action_FC=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action_FC=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action_FC=unsupported
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_FC" >&5
+$as_echo "$hardcode_action_FC" >&6; }
+
+if test relink = "$hardcode_action_FC" ||
+   test yes = "$inherit_rpath_FC"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+
+
+
+
+
+
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_FC"
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if mpi.mod is available" >&5
+$as_echo_n "checking if mpi.mod is available... " >&6; }
+   ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+   cat > conftest.$ac_ext <<_ACEOF
+      program main
+        use mpi
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  mpi_mod=yes
+else
+  mpi_mod=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $mpi_mod" >&5
+$as_echo "$mpi_mod" >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MPIF90 is a valid MPI compiler" >&5
+$as_echo_n "checking if $MPIF90 is a valid MPI compiler... " >&6; }
+   if test "x${mpi_mod}" = xyes ; then
+      cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+           use mpi
+           integer err, rank
+           call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  valid_mpif90=yes
+else
+  valid_mpif90=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   else
+            cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+           include "mpif.h"
+           integer err, rank
+           call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  valid_mpif90=yes
+else
+  valid_mpif90=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   fi
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $valid_mpif90" >&5
+$as_echo "$valid_mpif90" >&6; }
+
+   if test "x${valid_mpif90}" = xno ; then
+      has_fortran=no
+      if test "x${enable_fortran}" = xyes ; then
+         as_fn_error $? "
+   -----------------------------------------------------------------------
+     Invalid MPI Fortran 90 compiler: \"${MPIF90}\"
+     A working MPI Fortran 90 compiler is required. Please specify the
+     location of a valid MPI Fortran 90 compiler, either in the MPIF90
+     environment variable or through --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+      fi
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+   -----------------------------------------------------------------------
+     \"${MPIF90}\" is not a working MPI Fortran 90 compiler.
+     Thus, the Fortran feature is disabled.
+   -----------------------------------------------------------------------" >&5
+$as_echo "$as_me: WARNING:
+   -----------------------------------------------------------------------
+     \"${MPIF90}\" is not a working MPI Fortran 90 compiler.
+     Thus, the Fortran feature is disabled.
+   -----------------------------------------------------------------------" >&2;}
+   else
+      if test "x${mpi_mod}" = xyes ; then
+         USE_MPIF_HEADER="use mpi, only: MPI_OFFSET_KIND"
+      else
+         USE_MPIF_HEADER="include \"mpif.h\""
+      fi
+
+   fi
+fi
+ if test x$has_fortran = xyes; then
+  HAS_FORTRAN_TRUE=
+  HAS_FORTRAN_FALSE='#'
+else
+  HAS_FORTRAN_TRUE='#'
+  HAS_FORTRAN_FALSE=
+fi
+
+ if test x$mpi_mod = xyes; then
+  HAVE_MPI_MOD_TRUE=
+  HAVE_MPI_MOD_FALSE='#'
+else
+  HAVE_MPI_MOD_TRUE='#'
+  HAVE_MPI_MOD_FALSE=
+fi
+
+
+if test "x${has_fortran}" = xyes ; then
+   if test "x${enable_strict}" = xyes && test "x${GFC}" = xyes; then
+            FFLAGS+=" -Wall"
+      FCFLAGS+=" -Wall"
+   fi
+               fi
+
+ac_f77_support_freeform=no
+if test "x${has_fortran}" = xyes ; then
+   FC_saved=${FC}
+   FC=${MPIF77}
+               ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5
+$as_echo_n "checking for Fortran flag needed to accept free-form source... " >&6; }
+if ${ac_cv_fc_freeform+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_fc_freeform=unknown
+ac_fc_freeform_FCFLAGS_save=$FCFLAGS
+for ac_flag in none -ffree-form -FR -free -qfree=f90 -qfree -Mfree -Mfreeform \
+	       -freeform "-f free" -8 +source=free -nfix --nfix -Free
+do
+  test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+
+  program freeform
+       ! FIXME: how to best confuse non-freeform compilers?
+       print *, 'Hello ', &
+          'world.'
+       end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_freeform=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+${RM} -f conftest.err conftest.$ac_objext conftest.$ac_ext
+FCFLAGS=$ac_fc_freeform_FCFLAGS_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5
+$as_echo "$ac_cv_fc_freeform" >&6; }
+if test "x$ac_cv_fc_freeform" = xunknown; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran $FC does not accept free-form source" >&5
+$as_echo "$as_me: WARNING: Fortran $FC does not accept free-form source" >&2;}
+else
+          if test "x$ac_cv_fc_freeform" = xnone; then
+     ac_cv_fc_freeform=
+  fi
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   if test "x${ac_cv_fc_freeform}" != xunknown ; then
+      ac_f77_support_freeform=yes
+      FFREEFORMFLAG=${ac_cv_fc_freeform}
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FFREEFORMFLAG=$FFREEFORMFLAG" >&5
+$as_echo "$as_me: DEBUG: FFREEFORMFLAG=$FFREEFORMFLAG" >&6;}
+          fi
+
+
+
+   FC=${FC_saved}
+fi
+ if test x$ac_f77_support_freeform = xyes; then
+  HAVE_F77_SUPPORT_FREEFORM_TRUE=
+  HAVE_F77_SUPPORT_FREEFORM_FALSE='#'
+else
+  HAVE_F77_SUPPORT_FREEFORM_TRUE='#'
+  HAVE_F77_SUPPORT_FREEFORM_FALSE=
+fi
+
+
+if test "x${has_fortran}" = xyes ; then
+                              ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile preprocessed .F files" >&5
+$as_echo_n "checking for Fortran flag to compile preprocessed .F files... " >&6; }
+if ${ac_cv_fc_pp_srcext_F+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=F
+ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_pp_srcext_F=unknown
+case $ac_ext in #(
+  [fF]77) ac_try=f77-cpp-input;; #(
+  *) ac_try=f95-cpp-input;;
+esac
+for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
+               -cpp -xpp=cpp -qsuffix=cpp=F "-x $ac_try" +cpp -Cpp; do
+  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+#if 0
+#include <ac_nonexistent.h>
+      choke me
+#endif
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+#if 1
+#include <ac_nonexistent.h>
+      choke me
+#endif
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+
+else
+  ac_cv_fc_pp_srcext_F=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.$ac_objext conftest.F
+ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_srcext_F" >&5
+$as_echo "$ac_cv_fc_pp_srcext_F" >&6; }
+if test "x$ac_cv_fc_pp_srcext_F" = xunknown; then
+  as_fn_error $? "Fortran could not compile preprocessed .F files" "$LINENO" 5
+else
+  ac_fc_srcext=F
+  if test "x$ac_cv_fc_pp_srcext_F" = xnone; then
+    ac_fcflags_srcext=""
+    FCFLAGS_F=""
+  else
+    ac_fcflags_srcext=$ac_cv_fc_pp_srcext_F
+    FCFLAGS_F=$ac_cv_fc_pp_srcext_F
+  fi
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+       ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile preprocessed .F90 files" >&5
+$as_echo_n "checking for Fortran flag to compile preprocessed .F90 files... " >&6; }
+if ${ac_cv_fc_pp_srcext_F90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=F90
+ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_pp_srcext_F90=unknown
+case $ac_ext in #(
+  [fF]77) ac_try=f77-cpp-input;; #(
+  *) ac_try=f95-cpp-input;;
+esac
+for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
+               -cpp -xpp=cpp -qsuffix=cpp=F90 "-x $ac_try" +cpp -Cpp; do
+  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+#if 0
+#include <ac_nonexistent.h>
+      choke me
+#endif
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+#if 1
+#include <ac_nonexistent.h>
+      choke me
+#endif
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+
+else
+  ac_cv_fc_pp_srcext_F90=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.$ac_objext conftest.F90
+ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_srcext_F90" >&5
+$as_echo "$ac_cv_fc_pp_srcext_F90" >&6; }
+if test "x$ac_cv_fc_pp_srcext_F90" = xunknown; then
+  as_fn_error $? "Fortran could not compile preprocessed .F90 files" "$LINENO" 5
+else
+  ac_fc_srcext=F90
+  if test "x$ac_cv_fc_pp_srcext_F90" = xnone; then
+    ac_fcflags_srcext=""
+    FCFLAGS_F90=""
+  else
+    ac_fcflags_srcext=$ac_cv_fc_pp_srcext_F90
+    FCFLAGS_F90=$ac_cv_fc_pp_srcext_F90
+  fi
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+               ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ac_fc_pp_define_srcext_save=$ac_fc_srcext
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile preprocessed .F files" >&5
+$as_echo_n "checking for Fortran flag to compile preprocessed .F files... " >&6; }
+if ${ac_cv_fc_pp_srcext_F+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=F
+ac_fcflags_pp_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_pp_srcext_F=unknown
+case $ac_ext in #(
+  [fF]77) ac_try=f77-cpp-input;; #(
+  *) ac_try=f95-cpp-input;;
+esac
+for ac_flag in none -ftpp -fpp -Tf "-fpp -Tf" -xpp=fpp -Mpreprocess "-e Z" \
+               -cpp -xpp=cpp -qsuffix=cpp=F "-x $ac_try" +cpp -Cpp; do
+  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+#if 0
+#include <ac_nonexistent.h>
+      choke me
+#endif
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+#if 1
+#include <ac_nonexistent.h>
+      choke me
+#endif
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+
+else
+  ac_cv_fc_pp_srcext_F=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.$ac_objext conftest.F
+ac_fcflags_srcext=$ac_fcflags_pp_srcext_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_srcext_F" >&5
+$as_echo "$ac_cv_fc_pp_srcext_F" >&6; }
+if test "x$ac_cv_fc_pp_srcext_F" = xunknown; then
+  as_fn_error $? "Fortran could not compile preprocessed .F files" "$LINENO" 5
+else
+  ac_fc_srcext=F
+  if test "x$ac_cv_fc_pp_srcext_F" = xnone; then
+    ac_fcflags_srcext=""
+    FCFLAGS_F=""
+  else
+    ac_fcflags_srcext=$ac_cv_fc_pp_srcext_F
+    FCFLAGS_F=$ac_cv_fc_pp_srcext_F
+  fi
+
+
+fi
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to define symbols for preprocessed Fortran" >&5
+$as_echo_n "checking how to define symbols for preprocessed Fortran... " >&6; }
+if ${ac_cv_fc_pp_define+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_fc_pp_define_srcext_save=$ac_fc_srcext
+ac_cv_fc_pp_define=unknown
+ac_fc_pp_define_FCFLAGS_save=$FCFLAGS
+for ac_flag in -D -WF,-D -Wp,-D -Wc,-D
+do
+  FCFLAGS="$ac_fc_pp_define_FCFLAGS_save ${ac_flag}FOOBAR ${ac_flag}ZORK=42"
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+#ifndef FOOBAR
+      choke me
+#endif
+#if ZORK != 42
+      choke me
+#endif
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_pp_define=$ac_flag
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test x"$ac_cv_fc_pp_define" != xunknown && break
+done
+FCFLAGS=$ac_fc_pp_define_FCFLAGS_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_pp_define" >&5
+$as_echo "$ac_cv_fc_pp_define" >&6; }
+ac_fc_srcext=$ac_fc_pp_define_srcext_save
+if test "x$ac_cv_fc_pp_define" = xunknown; then
+  FC_DEFINE=
+  as_fn_error 77 "Fortran does not allow to define preprocessor symbols" "$LINENO" 5
+else
+  FC_DEFINE=$ac_cv_fc_pp_define
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+      ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f files" >&5
+$as_echo_n "checking for Fortran flag to compile .f files... " >&6; }
+if ${ac_cv_fc_srcext_f+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=f
+ac_fcflags_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_srcext_f=unknown
+case $ac_ext in #(
+  [fF]77) ac_try=f77;; #(
+  *) ac_try=f95;;
+esac
+for ac_flag in none -qsuffix=f=f -Tf "-x $ac_try"; do
+  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_srcext_f=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.$ac_objext conftest.f
+ac_fcflags_srcext=$ac_fcflags_srcext_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f" >&5
+$as_echo "$ac_cv_fc_srcext_f" >&6; }
+if test "x$ac_cv_fc_srcext_f" = xunknown; then
+  as_fn_error $? "Fortran could not compile .f files" "$LINENO" 5
+else
+  ac_fc_srcext=f
+  if test "x$ac_cv_fc_srcext_f" = xnone; then
+    ac_fcflags_srcext=""
+    FCFLAGS_f=""
+  else
+    ac_fcflags_srcext=$ac_cv_fc_srcext_f
+    FCFLAGS_f=$ac_cv_fc_srcext_f
+  fi
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F files" >&5
+$as_echo_n "checking for Fortran flag to compile .F files... " >&6; }
+if ${ac_cv_fc_srcext_F+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=F
+ac_fcflags_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_srcext_F=unknown
+case $ac_ext in #(
+  [fF]77) ac_try=f77;; #(
+  *) ac_try=f95;;
+esac
+for ac_flag in none -qsuffix=f=F -Tf "-x $ac_try"; do
+  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_srcext_F=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.$ac_objext conftest.F
+ac_fcflags_srcext=$ac_fcflags_srcext_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F" >&5
+$as_echo "$ac_cv_fc_srcext_F" >&6; }
+if test "x$ac_cv_fc_srcext_F" = xunknown; then
+  as_fn_error $? "Fortran could not compile .F files" "$LINENO" 5
+else
+  ac_fc_srcext=F
+  if test "x$ac_cv_fc_srcext_F" = xnone; then
+    ac_fcflags_srcext=""
+    FCFLAGS_F=""
+  else
+    ac_fcflags_srcext=$ac_cv_fc_srcext_F
+    FCFLAGS_F=$ac_cv_fc_srcext_F
+  fi
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5
+$as_echo_n "checking for Fortran flag to compile .f90 files... " >&6; }
+if ${ac_cv_fc_srcext_f90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=f90
+ac_fcflags_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_srcext_f90=unknown
+case $ac_ext in #(
+  [fF]77) ac_try=f77;; #(
+  *) ac_try=f95;;
+esac
+for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do
+  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_srcext_f90=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.$ac_objext conftest.f90
+ac_fcflags_srcext=$ac_fcflags_srcext_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5
+$as_echo "$ac_cv_fc_srcext_f90" >&6; }
+if test "x$ac_cv_fc_srcext_f90" = xunknown; then
+  as_fn_error $? "Fortran could not compile .f90 files" "$LINENO" 5
+else
+  ac_fc_srcext=f90
+  if test "x$ac_cv_fc_srcext_f90" = xnone; then
+    ac_fcflags_srcext=""
+    FCFLAGS_f90=""
+  else
+    ac_fcflags_srcext=$ac_cv_fc_srcext_f90
+    FCFLAGS_f90=$ac_cv_fc_srcext_f90
+  fi
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5
+$as_echo_n "checking for Fortran flag to compile .F90 files... " >&6; }
+if ${ac_cv_fc_srcext_F90+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=F90
+ac_fcflags_srcext_save=$ac_fcflags_srcext
+ac_fcflags_srcext=
+ac_cv_fc_srcext_F90=unknown
+case $ac_ext in #(
+  [fF]77) ac_try=f77;; #(
+  *) ac_try=f95;;
+esac
+for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do
+  test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_srcext_F90=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest.$ac_objext conftest.F90
+ac_fcflags_srcext=$ac_fcflags_srcext_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5
+$as_echo "$ac_cv_fc_srcext_F90" >&6; }
+if test "x$ac_cv_fc_srcext_F90" = xunknown; then
+  as_fn_error $? "Fortran could not compile .F90 files" "$LINENO" 5
+else
+  ac_fc_srcext=F90
+  if test "x$ac_cv_fc_srcext_F90" = xnone; then
+    ac_fcflags_srcext=""
+    FCFLAGS_F90=""
+  else
+    ac_fcflags_srcext=$ac_cv_fc_srcext_F90
+    FCFLAGS_F90=$ac_cv_fc_srcext_F90
+  fi
+
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+               ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept fixed-form source" >&5
+$as_echo_n "checking for Fortran flag needed to accept fixed-form source... " >&6; }
+if ${ac_cv_fc_fixedform+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_fc_fixedform=unknown
+ac_fc_fixedform_FCFLAGS_save=$FCFLAGS
+for ac_flag in none -ffixed-form -fixed -qfixed -Mfixed -fixedform "-f fixed" \
+               +source=fixed -fix --fix -Fixed
+do
+  test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_fixedform_FCFLAGS_save $ac_flag"
+  cat > conftest.$ac_ext <<_ACEOF
+
+C     This comment should confuse free-form compilers.
+      program main
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_fixedform=$ac_flag; break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+${RM} -f conftest.err conftest.$ac_objext conftest.$ac_ext
+FCFLAGS=$ac_fc_fixedform_FCFLAGS_save
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_fixedform" >&5
+$as_echo "$ac_cv_fc_fixedform" >&6; }
+if test "x$ac_cv_fc_fixedform" = xunknown; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Fortran does not accept fixed-form source" >&5
+$as_echo "$as_me: WARNING: Fortran does not accept fixed-form source" >&2;}
+  ac_cv_fc_fixedform=
+else
+          if test "x$ac_cv_fc_fixedform" = xnone; then
+     ac_cv_fc_fixedform=
+  fi
+
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   FFIXEDFORMFLAG=${ac_cv_fc_fixedform}
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FC=$FC FFIXEDFORMFLAG=$FFIXEDFORMFLAG" >&5
+$as_echo "$as_me: DEBUG: FC=$FC FFIXEDFORMFLAG=$FFIXEDFORMFLAG" >&6;}
+          fi
+
+
+
+
+            ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5
+$as_echo_n "checking how to get verbose linking output from $FC... " >&6; }
+if ${ac_cv_prog_fc_v+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_prog_fc_v=
+# Try some options frequently used verbose output
+for ac_verb in -v -verbose -V -\#\#\# --verbose; do
+  cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_FCFLAGS=$FCFLAGS
+FCFLAGS="$FCFLAGS $ac_verb"
+eval "set x $ac_link"
+shift
+$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
+# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
+# LIBRARY_PATH; skip all such settings.
+ac_fc_v_output=`eval $ac_link 5>&1 2>&1 |
+  sed '/^Driving:/d; /^Configured with:/d;
+      '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
+$as_echo "$ac_fc_v_output" >&5
+FCFLAGS=$ac_save_FCFLAGS
+
+rm -rf conftest*
+
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_fc_v_output="`echo $ac_fc_v_output |
+	grep 'LPATH is:' |
+	sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output"
+
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+#        that detects unbalanced quotes in FLIBS should be implemented
+#        and (ugh) tested at some point.
+case $ac_fc_v_output in
+  # With xlf replace commas with spaces,
+  # and remove "-link" and closing parenthesis.
+  *xlfentry*)
+    ac_fc_v_output=`echo $ac_fc_v_output |
+      sed '
+        s/,/ /g
+        s/ -link / /g
+        s/) *$//
+      '
+    ` ;;
+
+  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+  # $LIBS confuse us, and the libraries appear later in the output anyway).
+  *mGLOB_options_string*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+
+  # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+  # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+  # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+  *-cmdline\ * | *-ignore\ * | *-def\ *)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed "\
+	s/-cmdline  *'[^']*'/ /g; s/-cmdline  *\"[^\"]*\"/ /g
+	s/-ignore  *'[^']*'/ /g; s/-ignore  *\"[^\"]*\"/ /g
+	s/-def  *'[^']*'/ /g; s/-def  *\"[^\"]*\"/ /g"` ;;
+
+  # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
+  *fort77*f2c*gcc*)
+    ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n '
+        /:[	 ]\+Running[	 ]\{1,\}"gcc"/{
+          /"-c"/d
+          /[.]c"*/d
+          s/^.*"gcc"/"gcc"/
+          s/"//gp
+        }'` ;;
+
+  # If we are using Cray Fortran then delete quotes.
+  *cft90*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;;
+esac
+
+
+  # look for -l* and *.a constructs in the output
+  for ac_arg in $ac_fc_v_output; do
+     case $ac_arg in
+	[\\/]*.a | ?:[\\/]*.a | -[lLRu]*)
+	  ac_cv_prog_fc_v=$ac_verb
+	  break 2 ;;
+     esac
+  done
+done
+if test -z "$ac_cv_prog_fc_v"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5
+$as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;}
+fi
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5
+$as_echo "$as_me: WARNING: compilation failed" >&2;}
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5
+$as_echo "$ac_cv_prog_fc_v" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5
+$as_echo_n "checking for Fortran libraries of $FC... " >&6; }
+if ${ac_cv_fc_libs+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "x$FCLIBS" != "x"; then
+  ac_cv_fc_libs="$FCLIBS" # Let the user override the test.
+else
+
+cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+      end
+_ACEOF
+
+# Compile and link our simple test program by passing a flag (argument
+# 1 to this macro) to the Fortran compiler in order to get
+# "verbose" output that we can then parse for the Fortran linker
+# flags.
+ac_save_FCFLAGS=$FCFLAGS
+FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v"
+eval "set x $ac_link"
+shift
+$as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5
+# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH,
+# LIBRARY_PATH; skip all such settings.
+ac_fc_v_output=`eval $ac_link 5>&1 2>&1 |
+  sed '/^Driving:/d; /^Configured with:/d;
+      '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"`
+$as_echo "$ac_fc_v_output" >&5
+FCFLAGS=$ac_save_FCFLAGS
+
+rm -rf conftest*
+
+# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where
+# /foo, /bar, and /baz are search directories for the Fortran linker.
+# Here, we change these into -L/foo -L/bar -L/baz (and put it first):
+ac_fc_v_output="`echo $ac_fc_v_output |
+	grep 'LPATH is:' |
+	sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output"
+
+# FIXME: we keep getting bitten by quoted arguments; a more general fix
+#        that detects unbalanced quotes in FLIBS should be implemented
+#        and (ugh) tested at some point.
+case $ac_fc_v_output in
+  # With xlf replace commas with spaces,
+  # and remove "-link" and closing parenthesis.
+  *xlfentry*)
+    ac_fc_v_output=`echo $ac_fc_v_output |
+      sed '
+        s/,/ /g
+        s/ -link / /g
+        s/) *$//
+      '
+    ` ;;
+
+  # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted
+  # $LIBS confuse us, and the libraries appear later in the output anyway).
+  *mGLOB_options_string*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;;
+
+  # Portland Group compiler has singly- or doubly-quoted -cmdline argument
+  # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4.
+  # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2".
+  *-cmdline\ * | *-ignore\ * | *-def\ *)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed "\
+	s/-cmdline  *'[^']*'/ /g; s/-cmdline  *\"[^\"]*\"/ /g
+	s/-ignore  *'[^']*'/ /g; s/-ignore  *\"[^\"]*\"/ /g
+	s/-def  *'[^']*'/ /g; s/-def  *\"[^\"]*\"/ /g"` ;;
+
+  # If we are using fort77 (the f2c wrapper) then filter output and delete quotes.
+  *fort77*f2c*gcc*)
+    ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n '
+        /:[	 ]\+Running[	 ]\{1,\}"gcc"/{
+          /"-c"/d
+          /[.]c"*/d
+          s/^.*"gcc"/"gcc"/
+          s/"//gp
+        }'` ;;
+
+  # If we are using Cray Fortran then delete quotes.
+  *cft90*)
+    ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;;
+esac
+
+
+
+ac_cv_fc_libs=
+
+# Save positional arguments (if any)
+ac_save_positional="$@"
+
+set X $ac_fc_v_output
+while test $# != 1; do
+  shift
+  ac_arg=$1
+  case $ac_arg in
+	[\\/]*.a | ?:[\\/]*.a)
+	    ac_exists=false
+  for ac_i in $ac_cv_fc_libs; do
+    if test x"$ac_arg" = x"$ac_i"; then
+      ac_exists=true
+      break
+    fi
+  done
+
+  if test x"$ac_exists" = xtrue; then :
+
+else
+  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+	  ;;
+	-bI:*)
+	    ac_exists=false
+  for ac_i in $ac_cv_fc_libs; do
+    if test x"$ac_arg" = x"$ac_i"; then
+      ac_exists=true
+      break
+    fi
+  done
+
+  if test x"$ac_exists" = xtrue; then :
+
+else
+  if test "$ac_compiler_gnu" = yes; then
+  for ac_link_opt in $ac_arg; do
+    ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
+  done
+else
+  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+fi
+	  ;;
+	  # Ignore these flags.
+	-lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \
+	  |-LANG:=* | -LIST:* | -LNO:* | -link)
+	  ;;
+	-lkernel32)
+	  case $host_os in
+	  *cygwin*) ;;
+	  *) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+	    ;;
+	  esac
+	  ;;
+	-[LRuYz])
+	  # These flags, when seen by themselves, take an argument.
+	  # We remove the space between option and argument and re-iterate
+	  # unless we find an empty arg or a new option (starting with -)
+	  case $2 in
+	     "" | -*);;
+	     *)
+		ac_arg="$ac_arg$2"
+		shift; shift
+		set X $ac_arg "$@"
+		;;
+	  esac
+	  ;;
+	-YP,*)
+	  for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do
+	      ac_exists=false
+  for ac_i in $ac_cv_fc_libs; do
+    if test x"$ac_j" = x"$ac_i"; then
+      ac_exists=true
+      break
+    fi
+  done
+
+  if test x"$ac_exists" = xtrue; then :
+
+else
+  ac_arg="$ac_arg $ac_j"
+			       ac_cv_fc_libs="$ac_cv_fc_libs $ac_j"
+fi
+	  done
+	  ;;
+	-[lLR]*)
+	    ac_exists=false
+  for ac_i in $ac_cv_fc_libs; do
+    if test x"$ac_arg" = x"$ac_i"; then
+      ac_exists=true
+      break
+    fi
+  done
+
+  if test x"$ac_exists" = xtrue; then :
+
+else
+  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+fi
+	  ;;
+	-zallextract*| -zdefaultextract)
+	  ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg"
+	  ;;
+	  # Ignore everything else.
+  esac
+done
+# restore positional arguments
+set X $ac_save_positional; shift
+
+# We only consider "LD_RUN_PATH" on Solaris systems.  If this is seen,
+# then we insist that the "run path" must be an absolute path (i.e. it
+# must begin with a "/").
+case `(uname -sr) 2>/dev/null` in
+   "SunOS 5"*)
+      ac_ld_run_path=`$as_echo "$ac_fc_v_output" |
+			sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'`
+      test "x$ac_ld_run_path" != x &&
+	if test "$ac_compiler_gnu" = yes; then
+  for ac_link_opt in $ac_ld_run_path; do
+    ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt"
+  done
+else
+  ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path"
+fi
+      ;;
+esac
+fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x"
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5
+$as_echo "$ac_cv_fc_libs" >&6; }
+FCLIBS="$ac_cv_fc_libs"
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5
+$as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; }
+if ${ac_cv_fc_dummy_main+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_fc_dm_save_LIBS=$LIBS
+ LIBS="$LIBS $FCLIBS"
+ ac_fortran_dm_var=FC_DUMMY_MAIN
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ # First, try linking without a dummy main:
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_fortran_dummy_main=none
+else
+  ac_cv_fortran_dummy_main=unknown
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+ if test $ac_cv_fortran_dummy_main = unknown; then
+   for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#define $ac_fortran_dm_var $ac_func
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_fortran_dummy_main=$ac_func; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+   done
+ fi
+ ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+ ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main
+ rm -rf conftest*
+ LIBS=$ac_fc_dm_save_LIBS
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5
+$as_echo "$ac_cv_fc_dummy_main" >&6; }
+FC_DUMMY_MAIN=$ac_cv_fc_dummy_main
+if test "$FC_DUMMY_MAIN" != unknown; then :
+  if test $FC_DUMMY_MAIN != none; then
+
+cat >>confdefs.h <<_ACEOF
+#define FC_DUMMY_MAIN $FC_DUMMY_MAIN
+_ACEOF
+
+  if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then
+
+$as_echo "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h
+
+  fi
+fi
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "linking to Fortran libraries from C fails
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5
+$as_echo_n "checking for Fortran name-mangling scheme... " >&6; }
+if ${ac_cv_fc_mangling+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.$ac_ext <<_ACEOF
+      subroutine foobar()
+      return
+      end
+      subroutine foo_bar()
+      return
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  mv conftest.$ac_objext cfortran_test.$ac_objext
+
+  ac_save_LIBS=$LIBS
+  LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS"
+
+  ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+  ac_success=no
+  for ac_foobar in foobar FOOBAR; do
+    for ac_underscore in "" "_"; do
+      ac_func="$ac_foobar$ac_underscore"
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_success=yes; break 2
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    done
+  done
+  ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+  if test "$ac_success" = "yes"; then
+     case $ac_foobar in
+	foobar)
+	   ac_case=lower
+	   ac_foo_bar=foo_bar
+	   ;;
+	FOOBAR)
+	   ac_case=upper
+	   ac_foo_bar=FOO_BAR
+	   ;;
+     esac
+
+     ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+     ac_success_extra=no
+     for ac_extra in "" "_"; do
+	ac_func="$ac_foo_bar$ac_underscore$ac_extra"
+	cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_success_extra=yes; break
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     done
+     ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+     if test "$ac_success_extra" = "yes"; then
+	ac_cv_fc_mangling="$ac_case case"
+	if test -z "$ac_underscore"; then
+	   ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore"
+	else
+	   ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore"
+	fi
+	if test -z "$ac_extra"; then
+	   ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore"
+	else
+	   ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore"
+	fi
+      else
+	ac_cv_fc_mangling="unknown"
+      fi
+  else
+     ac_cv_fc_mangling="unknown"
+  fi
+
+  LIBS=$ac_save_LIBS
+  rm -rf conftest*
+  rm -f cfortran_test*
+else
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compile a simple Fortran program
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5
+$as_echo "$ac_cv_fc_mangling" >&6; }
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+case $ac_cv_fc_mangling in
+  upper*) ac_val="SUB" ;;
+  lower*) ac_val="sub" ;;
+  *)      ac_val="unknown" ;;
+esac
+case $ac_cv_fc_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac
+
+FCALLSCSUB="$ac_val"
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+      case $FCALLSCSUB in
+       SUB)
+
+$as_echo "#define F77_NAME_UPPER /**/" >>confdefs.h
+
+           ;;
+       sub_)
+                                                       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C-equivalent to Fortran routine \"SUB_A\"" >&5
+$as_echo_n "checking for C-equivalent to Fortran routine \"SUB_A\"... " >&6; }
+                              ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+case $ac_cv_fc_mangling in
+  upper*) ac_val="SUB_A" ;;
+  lower*) ac_val="sub_a" ;;
+  *)      ac_val="unknown" ;;
+esac
+case $ac_cv_fc_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac
+case $ac_cv_fc_mangling in *," extra underscore"*) ac_val="$ac_val"_ ;; esac
+
+FCALLSCSUBA="$ac_val"
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+           { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FCALLSCSUBA" >&5
+$as_echo "$FCALLSCSUBA" >&6; }
+           case $FCALLSCSUBA in
+               sub_a__)
+
+$as_echo "#define F77_NAME_LOWER_2USCORE /**/" >>confdefs.h
+
+                   ;;
+               sub_a_)
+
+$as_echo "#define F77_NAME_LOWER_USCORE /**/" >>confdefs.h
+
+                   ;;
+               *)
+                   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unrecognized Fortran name mapping" >&5
+$as_echo "$as_me: WARNING: Unrecognized Fortran name mapping" >&2;}
+                   ;;
+           esac
+           ;;
+       sub)
+
+$as_echo "#define F77_NAME_LOWER /**/" >>confdefs.h
+
+           ;;
+       *)
+           { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unrecognized Fortran name mapping" >&5
+$as_echo "$as_me: WARNING: Unrecognized Fortran name mapping" >&2;}
+           ;;
+   esac
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler is NAG" >&5
+$as_echo_n "checking if Fortran compiler is NAG... " >&6; }
+if ${ac_cv_fc_compiler_nag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_fc_compiler_nag=no
+     eval $MPIF90 -V </dev/null >& conftest.ver
+     _FC_VENDOR=`head -c 3 conftest.ver`
+     if test "x${_FC_VENDOR}" = xNAG ; then
+        ac_cv_fc_compiler_nag=yes
+     fi
+     ${RM} -f conftest.ver
+     unset _FC_VENDOR
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_nag" >&5
+$as_echo "$ac_cv_fc_compiler_nag" >&6; }
+
+   if test "x${ac_cv_fc_compiler_nag}" = xyes ; then
+            if ! echo "${FFLAGS}" | ${EGREP} -q -- "-mismatch" ; then
+         FFLAGS+=" -mismatch"
+      fi
+      if ! echo "${FCFLAGS}" | ${EGREP} -q -- "-mismatch" ; then
+         FCFLAGS+=" -mismatch"
+      fi
+             FFLAGS+=" -DNAGFortran"
+      FCFLAGS+=" -DNAGFortran"
+   fi
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking Fortran compiler treating constant modifier" >&5
+$as_echo_n "checking Fortran compiler treating constant modifier... " >&6; }
+if ${ac_cv_fc_constant_modifier+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+        cat > conftest.$ac_ext <<_ACEOF
+
+         program main
+         integer*8  nf_fill_uint
+         integer*8  nf_fill_int64
+         parameter (nf_fill_uint  = 4294967295_8)
+         parameter (nf_fill_int64 = -9223372036854775806_8)
+         end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_fc_constant_modifier=8
+else
+  cat > conftest.$ac_ext <<_ACEOF
+
+         program main
+         integer*8  nf_fill_uint
+         integer*8  nf_fill_int64
+         parameter (nf_fill_uint  = 4294967295)
+         parameter (nf_fill_int64 = -9223372036854775806)
+         end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_fc_constant_modifier=none
+else
+  cat > conftest.$ac_ext <<_ACEOF
+
+         program main
+         integer, parameter :: EightByteInt = selected_int_kind(18)
+         integer*8  nf_fill_uint
+         integer*8  nf_fill_int64
+         parameter (nf_fill_uint  = 4294967295_EightByteInt)
+         parameter (nf_fill_int64 = -9223372036854775806_EightByteInt)
+         end
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_fc_constant_modifier=EightByteInt
+else
+  as_fn_error $? "no appropriate modifier found" "$LINENO" 5
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_constant_modifier" >&5
+$as_echo "$ac_cv_fc_constant_modifier" >&6; }
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_fc_constant_modifier=$ac_cv_fc_constant_modifier" >&5
+$as_echo "$as_me: DEBUG: ac_cv_fc_constant_modifier=$ac_cv_fc_constant_modifier" >&6;}
+          fi
+
+
+   PNF_INT8_MODIFIER=""
+   if test "x${ac_cv_fc_constant_modifier}" = xnone ; then
+      PNF_FILL_UINT=4294967295
+      PNF_FILL_INT64=-9223372036854775806
+      PNF_FILL_UINT64=18446744073709551614
+      PNF_X_UINT_MAX=4294967295
+      PNF_X_INT8_MIN=-9223372036854775807
+      PNF_X_INT8_MAX=9223372036854775807
+      PNF_X_UINT8_MAX=18446744073709551615
+   else
+      if test "x${ac_cv_fc_constant_modifier}" = xEightByteInt ; then
+         PNF_INT8_MODIFIER="      integer, parameter :: EightByteInt = selected_int_kind(18)"
+      fi
+      PNF_FILL_UINT=4294967295_${ac_cv_fc_constant_modifier}
+      PNF_FILL_INT64=-9223372036854775806_${ac_cv_fc_constant_modifier}
+      PNF_FILL_UINT64=18446744073709551614_${ac_cv_fc_constant_modifier}
+      PNF_X_UINT_MAX=4294967295_${ac_cv_fc_constant_modifier}
+      PNF_X_INT8_MIN=-9223372036854775807_${ac_cv_fc_constant_modifier}
+      PNF_X_INT8_MAX=9223372036854775807_${ac_cv_fc_constant_modifier}
+      PNF_X_UINT8_MAX=18446744073709551615_${ac_cv_fc_constant_modifier}
+   fi
+
+
+
+
+
+
+
+
+fi
+
+ac_cv_prog_f90_uppercase_mod=no
+if test "x${has_fortran}" = xyes ; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: checking Fortran 90 module extension" >&5
+$as_echo_n "checking Fortran 90 module extension... " >&6; }
+if ${ac_cv_fc_module_ext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+mkdir conftest.dir
+cd conftest.dir
+ac_cv_fc_module_ext=unknown
+cat > conftest.$ac_ext <<_ACEOF
+
+      module conftest_module
+      contains
+      subroutine conftest_routine
+      write(*,'(a)') 'gotcha!'
+      end subroutine
+      end module
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_module_ext=`ls | sed -n 's,conftest_module\.,,p'`
+   if test x$ac_cv_fc_module_ext = x; then
+     ac_cv_fc_module_ext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'`
+   fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+cd ..
+rm -rf conftest.dir
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_module_ext" >&5
+$as_echo "$ac_cv_fc_module_ext" >&6; }
+FC_MODEXT=$ac_cv_fc_module_ext
+if test "$FC_MODEXT" = unknown; then
+  FC_MODEXT=
+fi
+
+      if test "x${FC_MODEXT}" = x ; then
+      as_fn_error $? "cannot determine Fortran module file extension!" "$LINENO" 5
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FC_MODEXT=$FC_MODEXT" >&5
+$as_echo "$as_me: DEBUG: FC_MODEXT=$FC_MODEXT" >&6;}
+          fi
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Fortran 90 module inclusion flag" >&5
+$as_echo_n "checking Fortran 90 module inclusion flag... " >&6; }
+if ${ac_cv_fc_module_flag+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+ac_cv_fc_module_flag=unknown
+mkdir conftest.dir
+cd conftest.dir
+cat > conftest.$ac_ext <<_ACEOF
+
+      module conftest_module
+      contains
+      subroutine conftest_routine
+      write(*,'(a)') 'gotcha!'
+      end subroutine
+      end module
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  cd ..
+   ac_fc_module_flag_FCFLAGS_save=$FCFLAGS
+   # Flag ordering is significant for gfortran and Sun.
+   for ac_flag in -I '-I ' -M '-M ' -p '-mod ' '-mdir ' '-module ' '-Am -I'; do
+     # Add the flag twice to prevent matching an output flag.
+     FCFLAGS="$ac_fc_module_flag_FCFLAGS_save ${ac_flag}conftest.dir ${ac_flag}conftest.dir"
+     cat > conftest.$ac_ext <<_ACEOF
+
+      program main
+      use conftest_module
+      call conftest_routine
+      end program
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_module_flag="$ac_flag"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     if test "$ac_cv_fc_module_flag" != unknown; then
+       break
+     fi
+   done
+   FCFLAGS=$ac_fc_module_flag_FCFLAGS_save
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+${RM} -rf conftest.dir
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_module_flag" >&5
+$as_echo "$ac_cv_fc_module_flag" >&6; }
+if test "$ac_cv_fc_module_flag" != unknown; then
+  FC_MODINC=$ac_cv_fc_module_flag
+
+else
+  FC_MODINC=
+  as_fn_error $? "unable to find compiler flag for module search path" "$LINENO" 5
+fi
+
+# Ensure trailing whitespace is preserved in a Makefile.
+ac_empty=""
+
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: FC_MODINC=$FC_MODINC" >&5
+$as_echo "$as_me: DEBUG: FC_MODINC=$FC_MODINC" >&6;}
+          fi
+
+
+
+
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking Fortran 90 module extension" >&5
+$as_echo_n "checking Fortran 90 module extension... " >&6; }
+if ${ac_cv_fc_module_ext+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+mkdir conftest.dir
+cd conftest.dir
+ac_cv_fc_module_ext=unknown
+cat > conftest.$ac_ext <<_ACEOF
+
+      module conftest_module
+      contains
+      subroutine conftest_routine
+      write(*,'(a)') 'gotcha!'
+      end subroutine
+      end module
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  ac_cv_fc_module_ext=`ls | sed -n 's,conftest_module\.,,p'`
+   if test x$ac_cv_fc_module_ext = x; then
+     ac_cv_fc_module_ext=`ls | sed -n 's,CONFTEST_MODULE\.,,p'`
+   fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+cd ..
+${RM} -rf conftest.dir
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_module_ext" >&5
+$as_echo "$ac_cv_fc_module_ext" >&6; }
+FC_MODEXT=$ac_cv_fc_module_ext
+if test "$FC_MODEXT" = unknown; then
+  FC_MODEXT=
+fi
+
+
+
+ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran 90 compiler capitalizes .mod filenames" >&5
+$as_echo_n "checking if Fortran 90 compiler capitalizes .mod filenames... " >&6; }
+cat > conftest.$ac_ext <<_ACEOF
+
+        module conftest
+        end module conftest
+
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+if test -f conftest.${FC_MODEXT} ; then
+   ac_cv_prog_f90_uppercase_mod=no
+else
+   ac_cv_prog_f90_uppercase_mod=yes
+   ${RM} -f CONFTEST.${FC_MODEXT}
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f90_uppercase_mod" >&5
+$as_echo "$ac_cv_prog_f90_uppercase_mod" >&6; }
+${RM} -f conftest*
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+ if test x$ac_cv_prog_f90_uppercase_mod = xyes; then
+  UPPER_CASE_MOD_TRUE=
+  UPPER_CASE_MOD_FALSE='#'
+else
+  UPPER_CASE_MOD_TRUE='#'
+  UPPER_CASE_MOD_FALSE=
+fi
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in egrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sed handling option -i " >&5
+$as_echo_n "checking for sed handling option -i ... " >&6; }
+if ${ac_cv_SED_I+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+   cat > conftest.sed_i <<EOF
+   test str1
+EOF
+   ac_cv_err=`$SED -i '' -e 's|str1|str2|g' conftest.sed_i 2>&1`
+   if test "x$ac_cv_err" = x ; then
+      ac_cv_SED_I="$SED -i ''"
+   else
+      ac_cv_err=`sed -i'' -e 's|str1|str2|g' conftest.sed_i 2>&1`
+      if test "x$ac_cv_err" = x ; then
+         ac_cv_SED_I="$SED -i''"
+      else
+         as_fn_error $? "\"No proper sed -i option found\"" "$LINENO" 5
+      fi
+   fi
+   { ac_cv_err=; unset ac_cv_err;}
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_SED_I" >&5
+$as_echo "$ac_cv_SED_I" >&6; }
+   SED_I="$ac_cv_SED_I"
+
+   ${RM} -f conftest.sed_i
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
+if ${ac_cv_path_GREP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in grep ggrep; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+$as_echo "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+
+
+
+        case "${M4-unset}" in
+	unset) for ac_prog in m4 gm4
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_M4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$M4"; then
+  ac_cv_prog_M4="$M4" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_M4="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+M4=$ac_cv_prog_M4
+if test -n "$M4"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4" >&5
+$as_echo "$M4" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$M4" && break
+done
+test -n "$M4" || M4="m4"
+ ;;
+	*) for ac_prog in $M4 m4 gm4
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_M4+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$M4"; then
+  ac_cv_prog_M4="$M4" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_M4="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+M4=$ac_cv_prog_M4
+if test -n "$M4"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4" >&5
+$as_echo "$M4" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$M4" && break
+done
+test -n "$M4" || M4="m4"
+ ;;
+    esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking m4 flags" >&5
+$as_echo_n "checking m4 flags... " >&6; }
+    case "${M4FLAGS-unset}" in
+	unset)                `${M4} /dev/null > conftest.err 2>&1`
+               ac_cv_m4_stdout=`cat conftest.err`
+               if test "x$ac_cv_m4_stdout" != x; then
+                  M4FLAGS=-B10000
+               fi
+               ${RM} -f conftest.err
+               ;;
+    esac
+    if test "x$M4FLAGS" = x; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"none\"" >&5
+$as_echo "\"none\"" >&6; }
+    else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4FLAGS" >&5
+$as_echo "$M4FLAGS" >&6; }
+    fi
+    M4FFLAGS=`echo $M4FLAGS | sed 's/-s *//g'`
+
+
+
+M4FLAGS+=" -DPNETCDF"
+M4FFLAGS+=" -DPNETCDF"
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
+$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
+if ${ac_cv_header_stdbool_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+             #include <stdbool.h>
+             #ifndef bool
+              "error: bool is not defined"
+             #endif
+             #ifndef false
+              "error: false is not defined"
+             #endif
+             #if false
+              "error: false is not 0"
+             #endif
+             #ifndef true
+              "error: true is not defined"
+             #endif
+             #if true != 1
+              "error: true is not 1"
+             #endif
+             #ifndef __bool_true_false_are_defined
+              "error: __bool_true_false_are_defined is not defined"
+             #endif
+
+             struct s { _Bool s: 1; _Bool t; } s;
+
+             char a[true == 1 ? 1 : -1];
+             char b[false == 0 ? 1 : -1];
+             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
+             char d[(bool) 0.5 == true ? 1 : -1];
+             /* See body of main program for 'e'.  */
+             char f[(_Bool) 0.0 == false ? 1 : -1];
+             char g[true];
+             char h[sizeof (_Bool)];
+             char i[sizeof s.t];
+             enum { j = false, k = true, l = false * true, m = true * 256 };
+             /* The following fails for
+                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
+             _Bool n[m];
+             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
+             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
+             /* Catch a bug in an HP-UX C compiler.  See
+                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
+                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
+              */
+             _Bool q = true;
+             _Bool *pq = &q;
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+             bool e = &s;
+             *pq |= q;
+             *pq |= ! q;
+             /* Refer to every declared value, to avoid compiler optimizations.  */
+             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
+                     + !m + !n + !o + !p + !q + !pq);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_header_stdbool_h=yes
+else
+  ac_cv_header_stdbool_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
+$as_echo "$ac_cv_header_stdbool_h" >&6; }
+   ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
+if test "x$ac_cv_type__Bool" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE__BOOL 1
+_ACEOF
+
+
+fi
+
+
+if test $ac_cv_header_stdbool_h = yes; then
+
+$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
+
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for IEEE floating point format" >&5
+$as_echo_n "checking for IEEE floating point format... " >&6; }
+if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef NO_FLOAT_H
+#include <float.h>
+#endif
+
+#define EXIT_NOTIEEE	1
+#define EXIT_MAYBEIEEE	0
+
+int
+main()
+{
+#if	defined(FLT_RADIX)	&& FLT_RADIX != 2
+		return EXIT_NOTIEEE;
+#elif	defined(DBL_MAX_EXP)	&& DBL_MAX_EXP != 1024
+		return EXIT_NOTIEEE;
+#elif	defined(DBL_MANT_DIG)	&& DBL_MANT_DIG != 53
+		return EXIT_NOTIEEE;
+#elif 	defined(FLT_MAX_EXP)	&& !(FLT_MAX_EXP == 1024 || FLT_MAX_EXP == 128)
+		return EXIT_NOTIEEE;
+#elif	defined(FLT_MANT_DIG)	&& !(FLT_MANT_DIG == 53 || FLT_MANT_DIG == 24)
+		return EXIT_NOTIEEE;
+#else
+	/* (assuming eight bit char) */
+	if(sizeof(double) != 8)
+		return EXIT_NOTIEEE;
+	if(!(sizeof(float) == 4 || sizeof(float) == 8))
+		return EXIT_NOTIEEE;
+
+	return EXIT_MAYBEIEEE;
+#endif
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_ieeefloat=yes
+else
+  ac_cv_c_ieeefloat=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_ieeefloat" >&5
+$as_echo "$ac_cv_c_ieeefloat" >&6; }
+if test x$ac_cv_c_ieeefloat = xno; then
+  $as_echo "#define NO_IEEE_FLOAT 1" >>confdefs.h
+
+fi
+
+
+
+for ac_func in strerror access unlink
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+# Check whether --enable-debug was given.
+if test "${enable_debug+set}" = set; then :
+  enableval=$enable_debug; debug=${enableval}
+else
+  debug=no
+
+fi
+
+
+PNETCDF_DEBUG=0
+if test "x${debug}" = xyes; then
+      for ac_header in search.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default"
+if test "x$ac_cv_header_search_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SEARCH_H 1
+_ACEOF
+
+fi
+
+done
+
+   for ac_func in tsearch tdelete
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+      if (test "x${ac_cv_func_tsearch}" = xyes) &&
+      (test "x${ac_cv_func_tdelete}" = xyes) ; then
+      $as_echo "#define PNC_MALLOC_TRACE 1" >>confdefs.h
+
+   fi
+   PNETCDF_DEBUG=1
+fi
+
+ if test x"$PNETCDF_DEBUG" = x1; then
+  PNETCDF_DEBUG_TRUE=
+  PNETCDF_DEBUG_FALSE='#'
+else
+  PNETCDF_DEBUG_TRUE='#'
+  PNETCDF_DEBUG_FALSE=
+fi
+
+
+ac_fn_c_check_type "$LINENO" "MPI_Offset" "ac_cv_type_MPI_Offset" "#include <mpi.h>
+"
+if test "x$ac_cv_type_MPI_Offset" = xyes; then :
+
+fi
+
+if test "x${ac_cv_type_MPI_Offset}" = xyes; then
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of MPI_Offset" >&5
+$as_echo_n "checking size of MPI_Offset... " >&6; }
+if ${ac_cv_sizeof_MPI_Offset+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (MPI_Offset))" "ac_cv_sizeof_MPI_Offset"        "#include <mpi.h>
+"; then :
+
+else
+  if test "$ac_cv_type_MPI_Offset" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (MPI_Offset)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_MPI_Offset=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_MPI_Offset" >&5
+$as_echo "$ac_cv_sizeof_MPI_Offset" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_MPI_OFFSET $ac_cv_sizeof_MPI_Offset
+_ACEOF
+
+
+else
+   as_fn_error $? "Unable to find type MPI_Offset in mpi.h" "$LINENO" 5
+fi
+if test "$ac_cv_sizeof_MPI_Offset" -lt "8"; then
+   as_fn_error $? "
+   -----------------------------------------------------------------------
+     Building of Parallel NetCDF cannot continue due to the size of
+     MPI_Offset being less than 8 bytes. Please use an MPI library that
+     supports large files. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+fi
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of MPI_Aint" >&5
+$as_echo_n "checking size of MPI_Aint... " >&6; }
+if ${ac_cv_sizeof_MPI_Aint+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (MPI_Aint))" "ac_cv_sizeof_MPI_Aint"        "#include <mpi.h>
+"; then :
+
+else
+  if test "$ac_cv_type_MPI_Aint" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (MPI_Aint)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_MPI_Aint=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_MPI_Aint" >&5
+$as_echo "$ac_cv_sizeof_MPI_Aint" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_MPI_AINT $ac_cv_sizeof_MPI_Aint
+_ACEOF
+
+
+ if test x$ac_cv_sizeof_MPI_Aint = x4; then
+  SIZEOF_MPI_AINT_IS_4_TRUE=
+  SIZEOF_MPI_AINT_IS_4_FALSE='#'
+else
+  SIZEOF_MPI_AINT_IS_4_TRUE='#'
+  SIZEOF_MPI_AINT_IS_4_FALSE=
+fi
+
+
+if test "$ac_cv_sizeof_MPI_Offset" -ne "$ac_cv_sizeof_MPI_Aint"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+   -----------------------------------------------------------------------
+     MPI_Offset and MPI_Aint are detected of different sizes.
+     The request aggregation feature implemented in non-blocking APIs is
+     thus disabled.
+   -----------------------------------------------------------------------" >&5
+$as_echo "$as_me: WARNING:
+   -----------------------------------------------------------------------
+     MPI_Offset and MPI_Aint are detected of different sizes.
+     The request aggregation feature implemented in non-blocking APIs is
+     thus disabled.
+   -----------------------------------------------------------------------" >&2;}
+   enable_aggregation=no
+else
+
+$as_echo "#define ENABLE_REQ_AGGREGATION /**/" >>confdefs.h
+
+   enable_aggregation=yes
+fi
+
+for ac_func in MPI_Info_dup \
+                MPI_Info_free \
+                MPI_Get_address \
+                MPI_Type_create_subarray \
+                MPI_Type_create_hvector \
+                MPI_Type_create_hindexed \
+                MPI_Type_create_struct \
+                MPI_Type_create_resized \
+                MPI_Type_get_extent
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+if test "$ac_cv_func_MPI_Info_dup" = no ; then
+   as_fn_error $? "
+   -----------------------------------------------------------------------
+     Function MPI_Info_dup required by PnetCDF is missing from the MPI
+     library.  Please use an MPI library that supports MPI_Info_dup. Abort.
+   -----------------------------------------------------------------------" "$LINENO" 5
+fi
+
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_DUP" "ac_cv_have_decl_MPI_COMBINER_DUP" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_DUP" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_DUP $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_HVECTOR_INTEGER" "ac_cv_have_decl_MPI_COMBINER_HVECTOR_INTEGER" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_HVECTOR_INTEGER" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_HVECTOR_INTEGER $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_HINDEXED_INTEGER" "ac_cv_have_decl_MPI_COMBINER_HINDEXED_INTEGER" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_HINDEXED_INTEGER" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_HINDEXED_INTEGER $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_SUBARRAY" "ac_cv_have_decl_MPI_COMBINER_SUBARRAY" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_SUBARRAY" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_SUBARRAY $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_DARRAY" "ac_cv_have_decl_MPI_COMBINER_DARRAY" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_DARRAY" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_DARRAY $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_RESIZED" "ac_cv_have_decl_MPI_COMBINER_RESIZED" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_RESIZED" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_RESIZED $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_STRUCT_INTEGER" "ac_cv_have_decl_MPI_COMBINER_STRUCT_INTEGER" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_STRUCT_INTEGER" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_STRUCT_INTEGER $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_INDEXED_BLOCK" "ac_cv_have_decl_MPI_COMBINER_INDEXED_BLOCK" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_INDEXED_BLOCK" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_INDEXED_BLOCK $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_F90_REAL" "ac_cv_have_decl_MPI_COMBINER_F90_REAL" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_F90_REAL" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_F90_REAL $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_F90_INTEGER" "ac_cv_have_decl_MPI_COMBINER_F90_INTEGER" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_F90_INTEGER" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_F90_INTEGER $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_COMBINER_F90_COMPLEX" "ac_cv_have_decl_MPI_COMBINER_F90_COMPLEX" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_COMBINER_F90_COMPLEX" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_COMBINER_F90_COMPLEX $ac_have_decl
+_ACEOF
+
+
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_FILE_EXISTS" "ac_cv_have_decl_MPI_ERR_FILE_EXISTS" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_FILE_EXISTS" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_FILE_EXISTS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_NO_SUCH_FILE" "ac_cv_have_decl_MPI_ERR_NO_SUCH_FILE" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_NO_SUCH_FILE" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_NO_SUCH_FILE $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_AMODE" "ac_cv_have_decl_MPI_ERR_AMODE" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_AMODE" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_AMODE $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_NOT_SAME" "ac_cv_have_decl_MPI_ERR_NOT_SAME" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_NOT_SAME" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_NOT_SAME $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_BAD_FILE" "ac_cv_have_decl_MPI_ERR_BAD_FILE" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_BAD_FILE" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_BAD_FILE $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_READ_ONLY" "ac_cv_have_decl_MPI_ERR_READ_ONLY" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_READ_ONLY" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_READ_ONLY $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_ACCESS" "ac_cv_have_decl_MPI_ERR_ACCESS" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_ACCESS" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_ACCESS $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_NO_SPACE" "ac_cv_have_decl_MPI_ERR_NO_SPACE" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_NO_SPACE" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_NO_SPACE $ac_have_decl
+_ACEOF
+ac_fn_c_check_decl "$LINENO" "MPI_ERR_QUOTA" "ac_cv_have_decl_MPI_ERR_QUOTA" "#include <mpi.h>
+"
+if test "x$ac_cv_have_decl_MPI_ERR_QUOTA" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MPI_ERR_QUOTA $ac_have_decl
+_ACEOF
+
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_CHAR is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_CHAR is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_CHAR;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_CHAR=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_CHAR=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_CHAR" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_CHAR" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_CHAR" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_CHAR 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_BYTE is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_BYTE is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_BYTE;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_BYTE=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_BYTE=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_BYTE" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_BYTE" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_BYTE" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_BYTE 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_SIGNED_CHAR is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_SIGNED_CHAR is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_SIGNED_CHAR;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_SIGNED_CHAR=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_SIGNED_CHAR=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_SIGNED_CHAR" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_SIGNED_CHAR" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_SIGNED_CHAR" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_SIGNED_CHAR 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UNSIGNED_CHAR is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_UNSIGNED_CHAR is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_UNSIGNED_CHAR;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_CHAR=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_CHAR=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_CHAR" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_CHAR" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_CHAR" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_UNSIGNED_CHAR 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_SHORT is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_SHORT is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_SHORT;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_SHORT=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_SHORT=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_SHORT" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_SHORT" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_SHORT" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_SHORT 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UNSIGNED_SHORT is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_UNSIGNED_SHORT is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_UNSIGNED_SHORT;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_SHORT=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_SHORT=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_SHORT" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_SHORT" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_SHORT" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_UNSIGNED_SHORT 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INT is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_INT is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_INT;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INT=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INT=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_INT" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_INT" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_INT" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_INT 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UNSIGNED is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_UNSIGNED is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_UNSIGNED;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_UNSIGNED 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_LONG is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_LONG is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_LONG;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_LONG=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_LONG=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_LONG" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_LONG" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_LONG" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_LONG 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_FLOAT is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_FLOAT is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_FLOAT;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_FLOAT=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_FLOAT=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_FLOAT" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_FLOAT" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_FLOAT" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_FLOAT 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_DOUBLE is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_DOUBLE is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_DOUBLE;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_DOUBLE 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_LONG_LONG_INT is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_LONG_LONG_INT is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_LONG_LONG_INT;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_LONG_LONG_INT=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_LONG_LONG_INT=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_LONG_LONG_INT" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_LONG_LONG_INT" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_LONG_LONG_INT" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_LONG_LONG_INT 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UNSIGNED_LONG_LONG is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_UNSIGNED_LONG_LONG is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_UNSIGNED_LONG_LONG;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_LONG_LONG=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_LONG_LONG=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_LONG_LONG" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_LONG_LONG" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_UNSIGNED_LONG_LONG" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_UNSIGNED_LONG_LONG 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_UB is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_UB is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_UB;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UB=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_UB=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_UB" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_UB" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_UB" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_UB 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_LB is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_LB is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_LB;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_LB=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_LB=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_LB" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_LB" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_LB" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_LB 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_OFFSET is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_OFFSET is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_OFFSET;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_OFFSET=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_OFFSET=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_OFFSET" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_OFFSET" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_OFFSET" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_OFFSET 1" >>confdefs.h
+
+   fi
+
+ if test x$ac_cv_CHECK_MPI_DATATYPE_MPI_OFFSET = xyes; then
+  DECL_MPI_OFFSET_TRUE=
+  DECL_MPI_OFFSET_FALSE='#'
+else
+  DECL_MPI_OFFSET_TRUE='#'
+  DECL_MPI_OFFSET_FALSE=
+fi
+
+
+if test "x${has_fortran}" = xyes ; then
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_CHARACTER is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_CHARACTER is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_CHARACTER;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_CHARACTER=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_CHARACTER=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_CHARACTER" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_CHARACTER" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_CHARACTER" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_CHARACTER 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_REAL is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_REAL is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_REAL;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_REAL=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_REAL=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_REAL" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_REAL" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_REAL" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_REAL 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_INTEGER is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_INTEGER;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_INTEGER 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_DOUBLE_PRECISION is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_DOUBLE_PRECISION is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_DOUBLE_PRECISION;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE_PRECISION=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE_PRECISION=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE_PRECISION" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE_PRECISION" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_DOUBLE_PRECISION" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_DOUBLE_PRECISION 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER1 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_INTEGER1 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_INTEGER1;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER1=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER1=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER1" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER1" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER1" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_INTEGER1 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER2 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_INTEGER2 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_INTEGER2;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER2=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER2=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER2" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER2" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER2" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_INTEGER2 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER4 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_INTEGER4 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_INTEGER4;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER4=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER4=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER4" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER4" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER4" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_INTEGER4 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER8 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_INTEGER8 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_INTEGER8;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER8=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER8=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER8" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER8" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER8" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_INTEGER8 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_INTEGER16 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_INTEGER16 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_INTEGER16;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER16=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER16=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER16" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER16" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_INTEGER16" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_INTEGER16 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_REAL4 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_REAL4 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_REAL4;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_REAL4=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_REAL4=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_REAL4" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_REAL4" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_REAL4" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_REAL4 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_REAL8 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_REAL8 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_REAL8;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_REAL8=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_REAL8=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_REAL8" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_REAL8" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_REAL8" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_REAL8 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_REAL16 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_REAL16 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_REAL16;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_REAL16=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_REAL16=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_REAL16" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_REAL16" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_REAL16" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_REAL16 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_COMPLEX8 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_COMPLEX8 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_COMPLEX8;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX8=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX8=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX8" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX8" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX8" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_COMPLEX8 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_COMPLEX16 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_COMPLEX16 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_COMPLEX16;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX16=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX16=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX16" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX16" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX16" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_COMPLEX16 1" >>confdefs.h
+
+   fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI datatype MPI_COMPLEX32 is defined " >&5
+$as_echo_n "checking if MPI datatype MPI_COMPLEX32 is defined ... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #include <mpi.h>
+          MPI_Datatype dummy = MPI_COMPLEX32;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX32=yes
+else
+  ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX32=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX32" >&5
+$as_echo "$ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX32" >&6; }
+   if test "x$ac_cv_CHECK_MPI_DATATYPE_MPI_COMPLEX32" = xyes; then
+
+$as_echo "#define HAVE_DECL_MPI_COMPLEX32 1" >>confdefs.h
+
+   fi
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5
+$as_echo_n "checking whether char is unsigned... " >&6; }
+if ${ac_cv_c_char_unsigned+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+static int test_array [1 - 2 * !(((char) -1) < 0)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_char_unsigned=no
+else
+  ac_cv_c_char_unsigned=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5
+$as_echo "$ac_cv_c_char_unsigned" >&6; }
+if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
+  $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h
+
+fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+	       not a universal capable compiler
+	     #endif
+	     typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+	# Check for potential -arch flags.  It is not universal unless
+	# there are at least two -arch flags with different values.
+	ac_arch=
+	ac_prev=
+	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+	 if test -n "$ac_prev"; then
+	   case $ac_word in
+	     i?86 | x86_64 | ppc | ppc64)
+	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+		 ac_arch=$ac_word
+	       else
+		 ac_cv_c_bigendian=universal
+		 break
+	       fi
+	       ;;
+	   esac
+	   ac_prev=
+	 elif test "x$ac_word" = "x-arch"; then
+	   ac_prev=arch
+	 fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+	     #include <sys/param.h>
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+		     && LITTLE_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+		#include <sys/param.h>
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+	      bogus endian macros
+	     #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+		 not big endian
+		#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+		short int ascii_ii[] =
+		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+		int use_ascii (int i) {
+		  return ascii_mm[i] + ascii_ii[i];
+		}
+		short int ebcdic_ii[] =
+		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+		short int ebcdic_mm[] =
+		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+		int use_ebcdic (int i) {
+		  return ebcdic_mm[i] + ebcdic_ii[i];
+		}
+		extern int foo;
+
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+	      ac_cv_c_bigendian=yes
+	    fi
+	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+	      if test "$ac_cv_c_bigendian" = unknown; then
+		ac_cv_c_bigendian=no
+	      else
+		# finding both strings is unlikely to happen, but who knows?
+		ac_cv_c_bigendian=unknown
+	      fi
+	    fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+
+	     /* Are we little or big endian?  From Harbison&Steele.  */
+	     union
+	     {
+	       long int l;
+	       char c[sizeof (long int)];
+	     } u;
+	     u.l = 1;
+	     return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+ if test x$ac_cv_c_bigendian = xyes; then
+  IS_BIGENDIAN_TRUE=
+  IS_BIGENDIAN_FALSE='#'
+else
+  IS_BIGENDIAN_TRUE='#'
+  IS_BIGENDIAN_FALSE=
+fi
+
+
+in_place_swap=yes
+# Check whether --enable-in-place-swap was given.
+if test "${enable_in_place_swap+set}" = set; then :
+  enableval=$enable_in_place_swap; in_place_swap=${enableval}
+else
+  in_place_swap=yes
+
+fi
+
+if test "x${in_place_swap}" = xno ; then
+   if test "x${ac_cv_c_bigendian}" = xyes ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --disable-in-place-swap takes no effect on Big Endian" >&5
+$as_echo "$as_me: WARNING: --disable-in-place-swap takes no effect on Big Endian" >&2;}
+      in_place_swap=yes
+   else
+      $as_echo "#define DISABLE_IN_PLACE_SWAP 1" >>confdefs.h
+
+   fi
+fi
+
+if test "x${ac_cv_c_bigendian}" = xyes  || (test "x${in_place_swap}" = xno) ; then
+   INTENTV="IN"
+else
+   INTENTV="INOUT"
+fi
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
+if test "x$ac_cv_type_off_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
+if test "x$ac_cv_type_ssize_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define ssize_t int
+_ACEOF
+
+fi
+
+
+ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_PTRDIFF_T 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "schar" "ac_cv_type_schar" "$ac_includes_default"
+if test "x$ac_cv_type_schar" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_SCHAR 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "uchar" "ac_cv_type_uchar" "$ac_includes_default"
+if test "x$ac_cv_type_uchar" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UCHAR 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "ushort" "ac_cv_type_ushort" "$ac_includes_default"
+if test "x$ac_cv_type_ushort" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_USHORT 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "uint" "ac_cv_type_uint" "$ac_includes_default"
+if test "x$ac_cv_type_uint" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINT 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "longlong" "ac_cv_type_longlong" "$ac_includes_default"
+if test "x$ac_cv_type_longlong" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_LONGLONG 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "ulonglong" "ac_cv_type_ulonglong" "$ac_includes_default"
+if test "x$ac_cv_type_ulonglong" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_ULONGLONG 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "int64" "ac_cv_type_int64" "$ac_includes_default"
+if test "x$ac_cv_type_int64" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INT64 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_type "$LINENO" "uint64" "ac_cv_type_uint64" "$ac_includes_default"
+if test "x$ac_cv_type_uint64" = xyes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_UINT64 1
+_ACEOF
+
+
+fi
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
+$as_echo_n "checking size of size_t... " >&6; }
+if ${ac_cv_sizeof_size_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_size_t" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (size_t)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_size_t=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
+$as_echo "$ac_cv_sizeof_size_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5
+$as_echo_n "checking size of off_t... " >&6; }
+if ${ac_cv_sizeof_off_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_off_t" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (off_t)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_off_t=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5
+$as_echo "$ac_cv_sizeof_off_t" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
+$as_echo_n "checking size of char... " >&6; }
+if ${ac_cv_sizeof_char+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_char" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (char)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_char=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
+$as_echo "$ac_cv_sizeof_char" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_CHAR $ac_cv_sizeof_char
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of signed char" >&5
+$as_echo_n "checking size of signed char... " >&6; }
+if ${ac_cv_sizeof_signed_char+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed char))" "ac_cv_sizeof_signed_char"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_signed_char" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (signed char)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_signed_char=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed_char" >&5
+$as_echo "$ac_cv_sizeof_signed_char" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIGNED_CHAR $ac_cv_sizeof_signed_char
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned char" >&5
+$as_echo_n "checking size of unsigned char... " >&6; }
+if ${ac_cv_sizeof_unsigned_char+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned char))" "ac_cv_sizeof_unsigned_char"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_char" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned char)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_char=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_char" >&5
+$as_echo "$ac_cv_sizeof_unsigned_char" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_CHAR $ac_cv_sizeof_unsigned_char
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+$as_echo_n "checking size of short... " >&6; }
+if ${ac_cv_sizeof_short+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_short" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (short)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_short=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+$as_echo "$ac_cv_sizeof_short" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short int" >&5
+$as_echo_n "checking size of unsigned short int... " >&6; }
+if ${ac_cv_sizeof_unsigned_short_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short int))" "ac_cv_sizeof_unsigned_short_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_short_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned short int)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_short_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short_int" >&5
+$as_echo "$ac_cv_sizeof_unsigned_short_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_SHORT_INT $ac_cv_sizeof_unsigned_short_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5
+$as_echo_n "checking size of unsigned short... " >&6; }
+if ${ac_cv_sizeof_unsigned_short+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_short" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned short)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_short=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5
+$as_echo "$ac_cv_sizeof_unsigned_short" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if ${ac_cv_sizeof_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
+$as_echo_n "checking size of unsigned int... " >&6; }
+if ${ac_cv_sizeof_unsigned_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned int)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
+$as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+$as_echo_n "checking size of long... " >&6; }
+if ${ac_cv_sizeof_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+$as_echo "$ac_cv_sizeof_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of float" >&5
+$as_echo_n "checking size of float... " >&6; }
+if ${ac_cv_sizeof_float+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (float))" "ac_cv_sizeof_float"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_float" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (float)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_float=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_float" >&5
+$as_echo "$ac_cv_sizeof_float" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_FLOAT $ac_cv_sizeof_float
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
+$as_echo_n "checking size of double... " >&6; }
+if ${ac_cv_sizeof_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_double" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (double)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_double=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
+$as_echo "$ac_cv_sizeof_double" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_DOUBLE $ac_cv_sizeof_double
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+$as_echo_n "checking size of long long... " >&6; }
+if ${ac_cv_sizeof_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (long long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_long_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+$as_echo "$ac_cv_sizeof_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5
+$as_echo_n "checking size of unsigned long long... " >&6; }
+if ${ac_cv_sizeof_unsigned_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_unsigned_long_long" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (unsigned long long)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_unsigned_long_long=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5
+$as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long
+_ACEOF
+
+
+
+if test "$ac_cv_type_schar" = yes ; then
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of schar" >&5
+$as_echo_n "checking size of schar... " >&6; }
+if ${ac_cv_sizeof_schar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (schar))" "ac_cv_sizeof_schar"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_schar" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (schar)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_schar=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_schar" >&5
+$as_echo "$ac_cv_sizeof_schar" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SCHAR $ac_cv_sizeof_schar
+_ACEOF
+
+
+fi
+if test "$ac_cv_type_uchar" = yes ; then
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uchar" >&5
+$as_echo_n "checking size of uchar... " >&6; }
+if ${ac_cv_sizeof_uchar+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uchar))" "ac_cv_sizeof_uchar"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_uchar" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (uchar)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_uchar=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uchar" >&5
+$as_echo "$ac_cv_sizeof_uchar" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UCHAR $ac_cv_sizeof_uchar
+_ACEOF
+
+
+fi
+if test "$ac_cv_type_ushort" = yes ; then
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of ushort" >&5
+$as_echo_n "checking size of ushort... " >&6; }
+if ${ac_cv_sizeof_ushort+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ushort))" "ac_cv_sizeof_ushort"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_ushort" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (ushort)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_ushort=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ushort" >&5
+$as_echo "$ac_cv_sizeof_ushort" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_USHORT $ac_cv_sizeof_ushort
+_ACEOF
+
+
+fi
+if test "$ac_cv_type_uint" = yes ; then
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint" >&5
+$as_echo_n "checking size of uint... " >&6; }
+if ${ac_cv_sizeof_uint+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint))" "ac_cv_sizeof_uint"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_uint" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (uint)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_uint=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint" >&5
+$as_echo "$ac_cv_sizeof_uint" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT $ac_cv_sizeof_uint
+_ACEOF
+
+
+fi
+if test "$ac_cv_type_longlong" = yes ; then
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of longlong" >&5
+$as_echo_n "checking size of longlong... " >&6; }
+if ${ac_cv_sizeof_longlong+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (longlong))" "ac_cv_sizeof_longlong"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_longlong" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (longlong)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_longlong=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_longlong" >&5
+$as_echo "$ac_cv_sizeof_longlong" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONGLONG $ac_cv_sizeof_longlong
+_ACEOF
+
+
+fi
+if test "$ac_cv_type_ulonglong" = yes ; then
+   # The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of ulonglong" >&5
+$as_echo_n "checking size of ulonglong... " >&6; }
+if ${ac_cv_sizeof_ulonglong+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (ulonglong))" "ac_cv_sizeof_ulonglong"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_ulonglong" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (ulonglong)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_ulonglong=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_ulonglong" >&5
+$as_echo "$ac_cv_sizeof_ulonglong" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_ULONGLONG $ac_cv_sizeof_ulonglong
+_ACEOF
+
+
+fi
+
+if test "x${has_fortran}" = xyes ; then
+   if test "$cross_compiling" = yes; then
+
+    ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+    for ftype in integer*1 byte "integer(kind=1)"; do
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
+$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
+        cat > conftest.$ac_ext <<_ACEOF
+
+               subroutine sub(value)
+               $ftype value
+               end
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	    NF_INT1_T=$ftype
+	    cat >>confdefs.h <<_ACEOF
+#define NF_INT1_T $ftype
+_ACEOF
+
+            break
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    done
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+    ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+    for ftype in integer*2 "integer(kind=2)"; do
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
+$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
+        cat > conftest.$ac_ext <<_ACEOF
+
+               subroutine sub(value)
+               $ftype value
+               end
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	    NF_INT2_T=$ftype
+	    cat >>confdefs.h <<_ACEOF
+#define NF_INT2_T $ftype
+_ACEOF
+
+            break
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    done
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+    ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+    for ftype in integer*8 "integer(kind=8)"; do
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
+$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
+        cat > conftest.$ac_ext <<_ACEOF
+
+               subroutine sub(value)
+               $ftype value
+               end
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	    NF_INT8_T=$ftype
+	    cat >>confdefs.h <<_ACEOF
+#define NF_INT8_T $ftype
+_ACEOF
+
+            break
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    done
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+   else
+
+        case "${NM-unset}" in
+	unset) for ac_prog in nm
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  ac_cv_prog_NM="$NM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_NM="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NM=$ac_cv_prog_NM
+if test -n "$NM"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
+$as_echo "$NM" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$NM" && break
+done
+test -n "$NM" || NM="nm"
+ ;;
+	*) for ac_prog in $NM nm
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$NM"; then
+  ac_cv_prog_NM="$NM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_NM="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+NM=$ac_cv_prog_NM
+if test -n "$NM"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
+$as_echo "$NM" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$NM" && break
+done
+test -n "$NM" || NM="nm"
+ ;;
+    esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking nm flags" >&5
+$as_echo_n "checking nm flags... " >&6; }
+    case "${NMFLAGS-unset}" in
+	unset) NMFLAGS= ;;
+    esac
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMFLAGS" >&5
+$as_echo "$NMFLAGS" >&6; }
+
+
+
+        case "$FC" in
+	'') ;;
+	*)
+
+
+
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C-equivalent to Fortran routine \"SUB\"" >&5
+$as_echo_n "checking for C-equivalent to Fortran routine \"SUB\"... " >&6; }
+            ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+case $ac_cv_fc_mangling in
+  upper*) ac_val="SUB" ;;
+  lower*) ac_val="sub" ;;
+  *)      ac_val="unknown" ;;
+esac
+case $ac_cv_fc_mangling in *," underscore"*) ac_val="$ac_val"_ ;; esac
+
+FCALLSCSUB="$ac_val"
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FCALLSCSUB" >&5
+$as_echo "$FCALLSCSUB" >&6; }
+	    ;;
+    esac
+
+
+        case "$FC" in
+    '')
+	;;
+    *)
+
+
+    ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+    for ftype in integer*1 byte "integer(kind=1)"; do
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
+$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
+        cat > conftest.$ac_ext <<_ACEOF
+
+               subroutine sub(value)
+               $ftype value
+               end
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	    NF_INT1_T=$ftype
+	    cat >>confdefs.h <<_ACEOF
+#define NF_INT1_T $ftype
+_ACEOF
+
+            break
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    done
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+    ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+    for ftype in integer*2 "integer(kind=2)"; do
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
+$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
+        cat > conftest.$ac_ext <<_ACEOF
+
+               subroutine sub(value)
+               $ftype value
+               end
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	    NF_INT2_T=$ftype
+	    cat >>confdefs.h <<_ACEOF
+#define NF_INT2_T $ftype
+_ACEOF
+
+            break
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    done
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+    ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+    for ftype in integer*8 "integer(kind=8)"; do
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran \"$ftype\"" >&5
+$as_echo_n "checking for Fortran \"$ftype\"... " >&6; }
+        cat > conftest.$ac_ext <<_ACEOF
+
+               subroutine sub(value)
+               $ftype value
+               end
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	    NF_INT8_T=$ftype
+	    cat >>confdefs.h <<_ACEOF
+#define NF_INT8_T $ftype
+_ACEOF
+
+            break
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    done
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+	case "${NF_INT1_T}" in
+	    '') ;;
+	    *)
+    cat >conftestf.f <<EOF
+           $NF_INT1_T values(4)
+           integer status, sub
+           data values /-1, -2, -3, -4/
+           status = sub(values)
+           end
+EOF
+    ac_cv_ctype_fortran=no
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"$NF_INT1_T\" is " >&5
+$as_echo_n "checking if Fortran \"$NF_INT1_T\" is ... " >&6; }
+    for ctype in "signed char" short int long; do
+		cat >conftest.c <<EOF
+	    int $FCALLSCSUB($ctype values[4])
+	    {
+		return(values[1] != -2 || values[2] != -3);
+	    }
+EOF
+	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	    doit='$FC ${FFLAGS} -c conftestf.f'
+	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
+	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		    doit=./conftest
+		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
+$as_echo "\"$ctype\" in C" >&6; }
+		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
+			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+		        cat >>confdefs.h <<_ACEOF
+#define NF_INT1_IS_C_$cname 1
+_ACEOF
+
+                        ac_cv_ctype_fortran=yes
+		        break
+		    fi
+	        else
+		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
+	        fi
+	    else
+		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	    fi
+	else
+	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
+	fi
+    done
+    ${RM} -f conftest*
+
+    if test "$ac_cv_ctype_fortran" = no ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
+$as_echo "no correspond data type in C" >&6; }
+    fi
+    unset ac_cv_ctype_fortran
+
+		;;
+	esac
+	case "${NF_INT2_T}" in
+	    '') ;;
+	    *)
+    cat >conftestf.f <<EOF
+           $NF_INT2_T values(4)
+           integer status, sub
+           data values /-1, -2, -3, -4/
+           status = sub(values)
+           end
+EOF
+    ac_cv_ctype_fortran=no
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"$NF_INT2_T\" is " >&5
+$as_echo_n "checking if Fortran \"$NF_INT2_T\" is ... " >&6; }
+    for ctype in short int long; do
+		cat >conftest.c <<EOF
+	    int $FCALLSCSUB($ctype values[4])
+	    {
+		return(values[1] != -2 || values[2] != -3);
+	    }
+EOF
+	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	    doit='$FC ${FFLAGS} -c conftestf.f'
+	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
+	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		    doit=./conftest
+		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
+$as_echo "\"$ctype\" in C" >&6; }
+		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
+			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+		        cat >>confdefs.h <<_ACEOF
+#define NF_INT2_IS_C_$cname 1
+_ACEOF
+
+                        ac_cv_ctype_fortran=yes
+		        break
+		    fi
+	        else
+		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
+	        fi
+	    else
+		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	    fi
+	else
+	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
+	fi
+    done
+    ${RM} -f conftest*
+
+    if test "$ac_cv_ctype_fortran" = no ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
+$as_echo "no correspond data type in C" >&6; }
+    fi
+    unset ac_cv_ctype_fortran
+
+		;;
+	esac
+	case "${NF_INT8_T}" in
+	    '') ;;
+	    *)
+    cat >conftestf.f <<EOF
+           $NF_INT8_T values(4)
+           integer status, sub
+           data values /-1, -2, -3, -4/
+           status = sub(values)
+           end
+EOF
+    ac_cv_ctype_fortran=no
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"$NF_INT8_T\" is " >&5
+$as_echo_n "checking if Fortran \"$NF_INT8_T\" is ... " >&6; }
+    for ctype in int long "long long"; do
+		cat >conftest.c <<EOF
+	    int $FCALLSCSUB($ctype values[4])
+	    {
+		return(values[1] != -2 || values[2] != -3);
+	    }
+EOF
+	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	    doit='$FC ${FFLAGS} -c conftestf.f'
+	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
+	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		    doit=./conftest
+		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
+$as_echo "\"$ctype\" in C" >&6; }
+		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
+			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+		        cat >>confdefs.h <<_ACEOF
+#define NF_INT8_IS_C_$cname 1
+_ACEOF
+
+                        ac_cv_ctype_fortran=yes
+		        break
+		    fi
+	        else
+		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
+	        fi
+	    else
+		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	    fi
+	else
+	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
+	fi
+    done
+    ${RM} -f conftest*
+
+    if test "$ac_cv_ctype_fortran" = no ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
+$as_echo "no correspond data type in C" >&6; }
+    fi
+    unset ac_cv_ctype_fortran
+
+		;;
+	esac
+
+    cat >conftestf.f <<EOF
+           integer values(4)
+           integer status, sub
+           data values /-1, -2, -3, -4/
+           status = sub(values)
+           end
+EOF
+    ac_cv_ctype_fortran=no
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"integer\" is " >&5
+$as_echo_n "checking if Fortran \"integer\" is ... " >&6; }
+    for ctype in int long; do
+		cat >conftest.c <<EOF
+	    int $FCALLSCSUB($ctype values[4])
+	    {
+		return(values[1] != -2 || values[2] != -3);
+	    }
+EOF
+	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	    doit='$FC ${FFLAGS} -c conftestf.f'
+	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
+	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		    doit=./conftest
+		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
+$as_echo "\"$ctype\" in C" >&6; }
+		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
+			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+		        cat >>confdefs.h <<_ACEOF
+#define NF_INT_IS_C_$cname 1
+_ACEOF
+
+                        ac_cv_ctype_fortran=yes
+		        break
+		    fi
+	        else
+		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
+	        fi
+	    else
+		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	    fi
+	else
+	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
+	fi
+    done
+    ${RM} -f conftest*
+
+    if test "$ac_cv_ctype_fortran" = no ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
+$as_echo "no correspond data type in C" >&6; }
+    fi
+    unset ac_cv_ctype_fortran
+
+
+    cat >conftestf.f <<EOF
+           real values(4)
+           integer status, sub
+           data values /-1, -2, -3, -4/
+           status = sub(values)
+           end
+EOF
+    ac_cv_ctype_fortran=no
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"real\" is " >&5
+$as_echo_n "checking if Fortran \"real\" is ... " >&6; }
+    for ctype in float double; do
+		cat >conftest.c <<EOF
+	    int $FCALLSCSUB($ctype values[4])
+	    {
+		return(values[1] != -2 || values[2] != -3);
+	    }
+EOF
+	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	    doit='$FC ${FFLAGS} -c conftestf.f'
+	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
+	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		    doit=./conftest
+		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
+$as_echo "\"$ctype\" in C" >&6; }
+		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
+			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+		        cat >>confdefs.h <<_ACEOF
+#define NF_REAL_IS_C_$cname 1
+_ACEOF
+
+                        ac_cv_ctype_fortran=yes
+		        break
+		    fi
+	        else
+		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
+	        fi
+	    else
+		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	    fi
+	else
+	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
+	fi
+    done
+    ${RM} -f conftest*
+
+    if test "$ac_cv_ctype_fortran" = no ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
+$as_echo "no correspond data type in C" >&6; }
+    fi
+    unset ac_cv_ctype_fortran
+
+
+    cat >conftestf.f <<EOF
+           doubleprecision values(4)
+           integer status, sub
+           data values /-1, -2, -3, -4/
+           status = sub(values)
+           end
+EOF
+    ac_cv_ctype_fortran=no
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran \"doubleprecision\" is " >&5
+$as_echo_n "checking if Fortran \"doubleprecision\" is ... " >&6; }
+    for ctype in double float; do
+		cat >conftest.c <<EOF
+	    int $FCALLSCSUB($ctype values[4])
+	    {
+		return(values[1] != -2 || values[2] != -3);
+	    }
+EOF
+	doit='$CC -c ${CPPFLAGS} ${CFLAGS} conftest.c'
+	if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	    doit='$FC ${FFLAGS} -c conftestf.f'
+	    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+	        doit='$FC -o conftest ${FFLAGS} ${FLDFLAGS} conftestf.o conftest.o ${LDFLAGS} ${LIBS}'
+	        if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		    doit=./conftest
+		    if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$doit\""; } >&5
+  (eval $doit) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+		        		        { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"$ctype\" in C" >&5
+$as_echo "\"$ctype\" in C" >&6; }
+		        cname=`echo $ctype | tr ' abcdefghijklmnopqrstuvwxyz' \
+			    _ABCDEFGHIJKLMNOPQRSTUVWXYZ`
+		        cat >>confdefs.h <<_ACEOF
+#define NF_DOUBLEPRECISION_IS_C_$cname 1
+_ACEOF
+
+                        ac_cv_ctype_fortran=yes
+		        break
+		    fi
+	        else
+		    as_fn_error $? "Could not link conftestf.o and conftest.o" "$LINENO" 5
+	        fi
+	    else
+		as_fn_error $? "Could not compile conftestf.f" "$LINENO" 5
+	    fi
+	else
+	    as_fn_error $? "Could not compile conftest.c" "$LINENO" 5
+	fi
+    done
+    ${RM} -f conftest*
+
+    if test "$ac_cv_ctype_fortran" = no ; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no correspond data type in C" >&5
+$as_echo "no correspond data type in C" >&6; }
+    fi
+    unset ac_cv_ctype_fortran
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran-equivalent to netCDF \"byte\"" >&5
+$as_echo_n "checking for Fortran-equivalent to netCDF \"byte\"... " >&6; }
+
+    ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+    for type in byte integer*1 integer; do
+        cat > conftest.$ac_ext <<_ACEOF
+
+               $type foo
+               end
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  break
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    done
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+    cat >>confdefs.h <<_ACEOF
+#define NCBYTE_T $type
+_ACEOF
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $type" >&5
+$as_echo "$type" >&6; }
+    NCBYTE_T=$type
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran-equivalent to netCDF \"short\"" >&5
+$as_echo_n "checking for Fortran-equivalent to netCDF \"short\"... " >&6; }
+
+    ac_ext=${ac_fc_srcext-f}
+ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
+ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_fc_compiler_gnu
+
+    for type in integer*2 integer; do
+        cat > conftest.$ac_ext <<_ACEOF
+
+               $type foo
+               end
+
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  break
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    done
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+    cat >>confdefs.h <<_ACEOF
+#define NCSHORT_T $type
+_ACEOF
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $type" >&5
+$as_echo "$type" >&6; }
+    NCSHORT_T=$type
+
+
+
+
+	;;
+    esac
+
+   fi
+
+
+
+
+   NFMPI_OFFSET="integer*$ac_cv_sizeof_MPI_Offset"
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran NFMPI_OFFSET \"$NFMPI_OFFSET\"" >&5
+$as_echo_n "checking for Fortran NFMPI_OFFSET \"$NFMPI_OFFSET\"... " >&6; }
+      ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+   cat > conftest.$ac_ext <<_ACEOF
+
+            subroutine sub(value)
+            $NFMPI_OFFSET value
+            end
+
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_NFMPI_OFFSET=yes
+else
+  ac_cv_NFMPI_OFFSET=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+   if test "$ac_cv_NFMPI_OFFSET" = yes ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+   else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      as_fn_error $? "F77 does not support \"$NFMPI_OFFSET\"" "$LINENO" 5
+         fi
+   ${RM} -rf conftest*
+fi
+
+SIZEOF_MPI_OFFSET=$ac_cv_sizeof_MPI_Offset
+
+
+HAVE_F77_GNU_INT=no
+HAVE_F77_INT1=no
+HAVE_F77_INT2=no
+HAVE_F77_INT8=no
+if test "x${has_fortran}" = xyes ; then
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 GNU intrinsic INT" >&5
+$as_echo_n "checking for Fortran 77 GNU intrinsic INT... " >&6; }
+    ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+    cat > conftest.$ac_ext <<_ACEOF
+
+           program main
+           implicit none
+           real r
+           integer*1 i1
+           integer*2 i2
+           integer   i4
+           integer*8 i8
+           r = 12.34
+           i1 = INT(r, 1)
+           i2 = INT(r, 2)
+           i4 = INT(r)
+           i8 = INT(r, 8)
+           end
+
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_f77_gnu_int="yes"
+else
+  ac_cv_f77_gnu_int="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_gnu_int" >&5
+$as_echo "$ac_cv_f77_gnu_int" >&6; }
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_f77_gnu_int=$ac_cv_f77_gnu_int" >&5
+$as_echo "$as_me: DEBUG: ac_cv_f77_gnu_int=$ac_cv_f77_gnu_int" >&6;}
+          fi
+
+
+   HAVE_F77_GNU_INT=$ac_cv_f77_gnu_int
+
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 intrinsic INT1" >&5
+$as_echo_n "checking for Fortran 77 intrinsic INT1... " >&6; }
+    ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+    cat > conftest.$ac_ext <<_ACEOF
+
+           program main
+           implicit none
+           real r
+           integer*1 i1
+           r = 12.34
+           i1 = INT1(r)
+           end
+
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_f77_int1="yes"
+else
+  ac_cv_f77_int1="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_int1" >&5
+$as_echo "$ac_cv_f77_int1" >&6; }
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_f77_int1=$ac_cv_f77_int1" >&5
+$as_echo "$as_me: DEBUG: ac_cv_f77_int1=$ac_cv_f77_int1" >&6;}
+          fi
+
+
+   HAVE_F77_INT1=$ac_cv_f77_int1
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 intrinsic INT2" >&5
+$as_echo_n "checking for Fortran 77 intrinsic INT2... " >&6; }
+    ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+    cat > conftest.$ac_ext <<_ACEOF
+
+           program main
+           implicit none
+           real r
+           integer*2 i2
+           r = 12.34
+           i2 = INT2(r)
+           end
+
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_f77_int2="yes"
+else
+  ac_cv_f77_int2="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_int2" >&5
+$as_echo "$ac_cv_f77_int2" >&6; }
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_f77_int2=$ac_cv_f77_int2" >&5
+$as_echo "$as_me: DEBUG: ac_cv_f77_int2=$ac_cv_f77_int2" >&6;}
+          fi
+
+
+   HAVE_F77_INT2=$ac_cv_f77_int2
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 intrinsic INT8" >&5
+$as_echo_n "checking for Fortran 77 intrinsic INT8... " >&6; }
+    ac_ext=f
+ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
+ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
+
+    cat > conftest.$ac_ext <<_ACEOF
+
+           program main
+           implicit none
+           real r
+           integer*8 i8
+           r = 12.34
+           i8 = INT8(r)
+           end
+
+_ACEOF
+if ac_fn_f77_try_compile "$LINENO"; then :
+  ac_cv_f77_int8="yes"
+else
+  ac_cv_f77_int8="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_int8" >&5
+$as_echo "$ac_cv_f77_int8" >&6; }
+
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_cv_f77_int8=$ac_cv_f77_int8" >&5
+$as_echo "$as_me: DEBUG: ac_cv_f77_int8=$ac_cv_f77_int8" >&6;}
+          fi
+
+
+   HAVE_F77_INT8=$ac_cv_f77_int8
+
+fi
+ if test x$HAVE_F77_GNU_INT = xyes; then
+  HAVE_F77_GNU_INT_TRUE=
+  HAVE_F77_GNU_INT_FALSE='#'
+else
+  HAVE_F77_GNU_INT_TRUE='#'
+  HAVE_F77_GNU_INT_FALSE=
+fi
+
+ if test x$HAVE_F77_INT1 = xyes; then
+  HAVE_F77_INT1_TRUE=
+  HAVE_F77_INT1_FALSE='#'
+else
+  HAVE_F77_INT1_TRUE='#'
+  HAVE_F77_INT1_FALSE=
+fi
+
+ if test x$HAVE_F77_INT2 = xyes; then
+  HAVE_F77_INT2_TRUE=
+  HAVE_F77_INT2_FALSE='#'
+else
+  HAVE_F77_INT2_TRUE='#'
+  HAVE_F77_INT2_FALSE=
+fi
+
+ if test x$HAVE_F77_INT8 = xyes; then
+  HAVE_F77_INT8_TRUE=
+  HAVE_F77_INT8_FALSE='#'
+else
+  HAVE_F77_INT8_TRUE='#'
+  HAVE_F77_INT8_FALSE=
+fi
+
+
+
+if test "x${has_fortran}" = xyes ; then
+   enable_f77=yes
+   enable_fc=yes
+fi
+
+
+
+for ac_prog in gcov
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GCOV+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$GCOV"; then
+  ac_cv_prog_GCOV="$GCOV" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GCOV="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+GCOV=$ac_cv_prog_GCOV
+if test -n "$GCOV"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCOV" >&5
+$as_echo "$GCOV" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$GCOV" && break
+done
+
+
+# Check whether --enable-coverage was given.
+if test "${enable_coverage+set}" = set; then :
+  enableval=$enable_coverage;
+else
+  enable_coverage=no
+fi
+
+
+if test "$enable_coverage" = "yes" ; then
+    if test "$ac_cv_c_compiler_gnu" = "yes" ; then
+        CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
+        LIBS="$LIBS -lgcov"
+        if test "x${WRAPPER_CFLAGS}" = "x" ; then
+            WRAPPER_CFLAGS="$WRAPPER_CFLAGS -fprofile-arcs -ftest-coverage"
+        fi
+    else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GCC" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GCC" >&2;}
+    fi
+    if test "$enable_cxx" = "yes" ; then
+        if test "$ac_cv_cxx_compiler_gnu" = "yes" ; then
+            CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
+            LIBS="$LIBS -lgcov"
+            if test "x${WRAPPER_CXXFLAGS}" = "x" ; then
+                WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -fprofile-arcs -ftest-coverage"
+            fi
+        else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GCC" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GCC" >&2;}
+        fi
+    fi
+    # Add similar options for g77 so that the Fortran tests will also
+    #
+    if test "$enable_f77" = yes ; then
+        if test "$ac_cv_f77_compiler_gnu" = "yes" ; then
+             FFLAGS="$FFLAGS -fprofile-arcs -ftest-coverage"
+             LIBS="$LIBS -lgcov"
+             if test "x${WRAPPER_FFLAGS}" = "x" ; then
+                 WRAPPER_FFLAGS="$WRAPPER_FFLAGS -fprofile-arcs -ftest-coverage"
+             fi
+        else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for G77/GFORTRAN" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for G77/GFORTRAN" >&2;}
+        fi
+    fi
+    if test "$enable_fc" = yes ; then
+        if test "$ac_cv_fc_compiler_gnu" = "yes" ; then
+             FCFLAGS="$FCFLAGS -fprofile-arcs -ftest-coverage"
+             LIBS="$LIBS -lgcov"
+             if test "x${WRAPPER_FCFLAGS}" = "x" ; then
+                 WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -fprofile-arcs -ftest-coverage"
+             fi
+        else
+            { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage only supported for GFORTRAN" >&5
+$as_echo "$as_me: WARNING: --enable-coverage only supported for GFORTRAN" >&2;}
+        fi
+    fi
+    # On some platforms (e.g., Mac Darwin), we must also *link*
+    # with the -fprofile-args -ftest-coverage option.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compilation with coverage analysis enabled works" >&5
+$as_echo_n "checking whether compilation with coverage analysis enabled works... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+int main(int argc, char **argv){return 1;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+                    as_fn_error $? "Unable to link programs when coverage analysis enabled" "$LINENO" 5
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+    # Test for the routines that we need to use to ensure that the
+    # data files are (usually) written out
+    # FIXME: Some versions of Linux provide usleep, but it rounds times
+    # up to the next second (!)
+    for ac_func in usleep
+do :
+  ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep"
+if test "x$ac_cv_func_usleep" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_USLEEP 1
+_ACEOF
+
+fi
+done
+
+
+    # NOTE: using a "pac_cv_" prefix but not caching because of xFLAGS "side effects"
+    pac_cv_use_coverage=yes
+
+$as_echo "#define USE_COVERAGE 1" >>confdefs.h
+
+fi
+ if test "X$pac_cv_use_coverage" = "Xyes"; then
+  BUILD_COVERAGE_TRUE=
+  BUILD_COVERAGE_FALSE='#'
+else
+  BUILD_COVERAGE_TRUE='#'
+  BUILD_COVERAGE_FALSE=
+fi
+
+
+
+if test "x${has_mpicxx}" = xyes ; then
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C++ macro __func__ or __FUNCTION__ is defined" >&5
+$as_echo_n "checking if C++ macro __func__ or __FUNCTION__ is defined... " >&6; }
+if ${ac_cv_cxx_macro_func+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_cxx_macro_func=no
+    ac_cv_cxx_macro_function=no
+    ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <iostream>
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+std::cout << __func__;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_cxx_macro_func=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <iostream>
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+std::cout << __FUNCTION__;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"; then :
+  ac_cv_cxx_macro_function=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_macro_func" >&5
+$as_echo "$ac_cv_cxx_macro_func" >&6; }
+
+   if test "x${ac_cv_cxx_macro_func}" == xyes ; then
+      $as_echo "#define HAVE_FUNC_MACRO 1" >>confdefs.h
+
+   fi
+   if test "x${ac_cv_cxx_macro_function}" == xyes ; then
+      $as_echo "#define HAVE_FUNCTION_MACRO 1" >>confdefs.h
+
+   fi
+fi
+
+if test "x${debug}" = xyes; then
+            if ! echo "${CFLAGS}" | ${EGREP} -q -- "-g" ; then
+      CFLAGS+=" -g"
+   fi
+   CFLAGS=`echo $CFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
+   CFLAGS+=" -O0"
+
+   if test "x${has_mpicxx}" = xyes ; then
+      if ! echo "${CXXFLAGS}" | ${EGREP} -q -- "-g" ; then
+         CXXFLAGS+=" -g"
+      fi
+      CXXFLAGS=`echo $CXXFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
+      CXXFLAGS+=" -O0"
+   fi
+
+   if test "x${has_fortran}" = xyes ; then
+      if ! echo "${FFLAGS}" | ${EGREP} -q -- "-g" ; then
+         FFLAGS+=" -g"
+      fi
+      if ! echo "${FCFLAGS}" | ${EGREP} -q -- "-g" ; then
+         FCFLAGS+=" -g"
+      fi
+
+       FFLAGS=`echo $FFLAGS  | sed 's/-O. *//g' | sed 's/-fast *//g'`
+      FCFLAGS=`echo $FCFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
+       FFLAGS+=" -O0"
+      FCFLAGS+=" -O0"
+   fi
+fi
+
+chmod u+x ${srcdir}/scripts/install-sh
+
+# Check whether --enable-subfiling was given.
+if test "${enable_subfiling+set}" = set; then :
+  enableval=$enable_subfiling; enable_subfiling=${enableval}
+else
+  enable_subfiling=no
+
+fi
+
+
+ENABLE_SUBFILING=0
+if test "x$enable_subfiling" = "xyes" ; then
+   $as_echo "#define ENABLE_SUBFILING 1" >>confdefs.h
+
+   ENABLE_SUBFILING=1
+fi
+
+ if test x$enable_subfiling = xyes; then
+  ENABLE_SUBFILING_TRUE=
+  ENABLE_SUBFILING_FALSE='#'
+else
+  ENABLE_SUBFILING_TRUE='#'
+  ENABLE_SUBFILING_FALSE=
+fi
+
+
+# Check whether --enable-erange-fill was given.
+if test "${enable_erange_fill+set}" = set; then :
+  enableval=$enable_erange_fill; enable_erange_fill=${enableval}
+else
+  enable_erange_fill=yes
+
+fi
+
+ENABLE_ERANGE_FILL=0
+if test "x$enable_erange_fill" = "xyes" ; then
+   ENABLE_ERANGE_FILL=1
+fi
+
+ if test x$enable_erange_fill = xyes; then
+  ENABLE_ERANGE_FILL_TRUE=
+  ENABLE_ERANGE_FILL_FALSE='#'
+else
+  ENABLE_ERANGE_FILL_TRUE='#'
+  ENABLE_ERANGE_FILL_FALSE=
+fi
+
+
+# Check whether --enable-relax-coord-bound was given.
+if test "${enable_relax_coord_bound+set}" = set; then :
+  enableval=$enable_relax_coord_bound; enable_relax_coord_bound=${enableval}
+else
+  enable_relax_coord_bound=no
+
+fi
+
+RELAX_COORD_BOUND=0
+if test "x$enable_relax_coord_bound" = "xyes" ; then
+   $as_echo "#define RELAX_COORD_BOUND 1" >>confdefs.h
+
+   RELAX_COORD_BOUND=1
+fi
+
+ if test "x$RELAX_COORD_BOUND" = x1; then
+  RELAX_COORD_BOUND_TRUE=
+  RELAX_COORD_BOUND_FALSE='#'
+else
+  RELAX_COORD_BOUND_TRUE='#'
+  RELAX_COORD_BOUND_FALSE=
+fi
+
+
+# Check whether --enable-doxygen was given.
+if test "${enable_doxygen+set}" = set; then :
+  enableval=$enable_doxygen; enable_doxygen=${enableval}
+else
+  enable_doxygen=no
+
+fi
+
+ if test "x$enable_doxygen" = xyes; then
+  BUILD_DOCS_TRUE=
+  BUILD_DOCS_FALSE='#'
+else
+  BUILD_DOCS_TRUE='#'
+  BUILD_DOCS_FALSE=
+fi
+
+
+# Extract the first word of "latex", so it can be a program name with args.
+set dummy latex; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_LATEX+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $LATEX in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_LATEX="$LATEX" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_LATEX="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+LATEX=$ac_cv_path_LATEX
+if test -n "$LATEX"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LATEX" >&5
+$as_echo "$LATEX" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# Extract the first word of "dvipdf", so it can be a program name with args.
+set dummy dvipdf; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_DVIPDF+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $DVIPDF in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_DVIPDF="$DVIPDF" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_DVIPDF="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+DVIPDF=$ac_cv_path_DVIPDF
+if test -n "$DVIPDF"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPDF" >&5
+$as_echo "$DVIPDF" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+has_latex=no
+if test "x${LATEX}" != x ; then
+    has_latex=yes
+fi
+
+
+ if test "x$has_latex" = xyes; then
+  HAS_LATEX_TRUE=
+  HAS_LATEX_FALSE='#'
+else
+  HAS_LATEX_TRUE='#'
+  HAS_LATEX_FALSE=
+fi
+
+
+# Check whether --enable-file-sync was given.
+if test "${enable_file_sync+set}" = set; then :
+  enableval=$enable_file_sync; file_sync=${enableval}
+else
+  file_sync=yes
+
+fi
+
+if test "x${file_sync}" = xno ; then
+    $as_echo "#define DISABLE_FILE_SYNC 1" >>confdefs.h
+
+fi
+
+# Check whether --enable-large-file-test was given.
+if test "${enable_large_file_test+set}" = set; then :
+  enableval=$enable_large_file_test; large_file_test=${enableval}
+else
+  large_file_test=no
+
+fi
+
+ if test x$large_file_test = xyes; then
+  RUN_LARGE_FILE_TEST_TRUE=
+  RUN_LARGE_FILE_TEST_FALSE='#'
+else
+  RUN_LARGE_FILE_TEST_TRUE='#'
+  RUN_LARGE_FILE_TEST_FALSE=
+fi
+
+
+ if true; then
+  BUILD_TESTSETS_TRUE=
+  BUILD_TESTSETS_FALSE='#'
+else
+  BUILD_TESTSETS_TRUE='#'
+  BUILD_TESTSETS_FALSE=
+fi
+
+ if true; then
+  BUILD_BENCHMARKS_IN_PNETCDF_TRUE=
+  BUILD_BENCHMARKS_IN_PNETCDF_FALSE='#'
+else
+  BUILD_BENCHMARKS_IN_PNETCDF_TRUE='#'
+  BUILD_BENCHMARKS_IN_PNETCDF_FALSE=
+fi
+
+
+
+
+
+if test "x${TESTMPIRUN}" = x ; then
+
+   ac_mpi_prog_TESTMPIRUN=
+   if test "x$MPI_INSTALL" != x ; then
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is used" >&6;}
+          fi
+
+
+      if test -d "${MPI_INSTALL}/bin" ; then
+         if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search mpiexec mpirun srun under $MPI_INSTALL/bin" >&5
+$as_echo "$as_me: DEBUG: search mpiexec mpirun srun under $MPI_INSTALL/bin" >&6;}
+          fi
+
+
+         for ac_prog in mpiexec mpirun srun
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_TESTMPIRUN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_TESTMPIRUN in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_TESTMPIRUN="$ac_mpi_prog_TESTMPIRUN" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_TESTMPIRUN="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_TESTMPIRUN=$ac_cv_path_ac_mpi_prog_TESTMPIRUN
+if test -n "$ac_mpi_prog_TESTMPIRUN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_TESTMPIRUN" >&5
+$as_echo "$ac_mpi_prog_TESTMPIRUN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_TESTMPIRUN" && break
+done
+
+      else
+                  if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search mpiexec mpirun srun under $MPI_INSTALL" >&5
+$as_echo "$as_me: DEBUG: search mpiexec mpirun srun under $MPI_INSTALL" >&6;}
+          fi
+
+
+         for ac_prog in mpiexec mpirun srun
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_TESTMPIRUN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_TESTMPIRUN in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_TESTMPIRUN="$ac_mpi_prog_TESTMPIRUN" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $MPI_INSTALL
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_TESTMPIRUN="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_TESTMPIRUN=$ac_cv_path_ac_mpi_prog_TESTMPIRUN
+if test -n "$ac_mpi_prog_TESTMPIRUN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_TESTMPIRUN" >&5
+$as_echo "$ac_mpi_prog_TESTMPIRUN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_TESTMPIRUN" && break
+done
+
+      fi
+   else
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&5
+$as_echo "$as_me: DEBUG: --with-mpi=$MPI_INSTALL is NOT used" >&6;}
+          fi
+
+
+      if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: search mpiexec mpirun srun under $PATH" >&5
+$as_echo "$as_me: DEBUG: search mpiexec mpirun srun under $PATH" >&6;}
+          fi
+
+
+      for ac_prog in mpiexec mpirun srun
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_mpi_prog_TESTMPIRUN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_mpi_prog_TESTMPIRUN in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_mpi_prog_TESTMPIRUN="$ac_mpi_prog_TESTMPIRUN" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_mpi_prog_TESTMPIRUN="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_mpi_prog_TESTMPIRUN=$ac_cv_path_ac_mpi_prog_TESTMPIRUN
+if test -n "$ac_mpi_prog_TESTMPIRUN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_TESTMPIRUN" >&5
+$as_echo "$ac_mpi_prog_TESTMPIRUN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_TESTMPIRUN" && break
+done
+
+   fi
+   if test "x${_DEBUG}" = xyes ; then
+             { $as_echo "$as_me:${as_lineno-$LINENO}: DEBUG: ac_mpi_prog_TESTMPIRUN=${ac_mpi_prog_TESTMPIRUN}" >&5
+$as_echo "$as_me: DEBUG: ac_mpi_prog_TESTMPIRUN=${ac_mpi_prog_TESTMPIRUN}" >&6;}
+          fi
+
+
+   if test "x${ac_mpi_prog_TESTMPIRUN}" = x ; then
+                  for ac_prog in mpiexec mpirun srun
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_mpi_prog_TESTMPIRUN+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_mpi_prog_TESTMPIRUN"; then
+  ac_cv_prog_ac_mpi_prog_TESTMPIRUN="$ac_mpi_prog_TESTMPIRUN" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_mpi_prog_TESTMPIRUN="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_mpi_prog_TESTMPIRUN=$ac_cv_prog_ac_mpi_prog_TESTMPIRUN
+if test -n "$ac_mpi_prog_TESTMPIRUN"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_mpi_prog_TESTMPIRUN" >&5
+$as_echo "$ac_mpi_prog_TESTMPIRUN" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_mpi_prog_TESTMPIRUN" && break
+done
+
+                                                   fi
+   TESTMPIRUN=${ac_mpi_prog_TESTMPIRUN}
+
+   if test "x${TESTMPIRUN}" != x ; then
+      TESTMPIRUN+=" -n NP"
+   fi
+fi
+
+
+if test "x${TESTOUTDIR}" = x ; then
+      TESTOUTDIR=.
+fi
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_SEQ_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $SEQ_CC in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_SEQ_CC="$SEQ_CC" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_SEQ_CC="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_SEQ_CC" && ac_cv_path_SEQ_CC="$MPICC"
+  ;;
+esac
+fi
+SEQ_CC=$ac_cv_path_SEQ_CC
+if test -n "$SEQ_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SEQ_CC" >&5
+$as_echo "$SEQ_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+
+if test "x$SOURCE_DATE_EPOCH" != "x" ; then
+     CONFIG_DATE="`date -u -d "${SOURCE_DATE_EPOCH}"`"
+else
+     CONFIG_DATE="`date`"
+fi
+
+# Check whether --enable-versioning was given.
+if test "${enable_versioning+set}" = set; then :
+  enableval=$enable_versioning; enable_versioning=${enableval}
+else
+  enable_versioning=yes
+
+fi
+
+ABIVERSION="1:0:0"
+
+if test "$enable_versioning" = "yes" ; then
+   ABIVERSIONFLAGS="-version-info \$(ABIVERSION)"
+else
+   ABIVERSIONFLAGS="-avoid-version"
+fi
+
+
+ac_config_files="$ac_config_files Makefile src/Makefile src/dispatchers/Makefile src/libs/Makefile src/include/Makefile src/include/pnetcdf.h src/drivers/Makefile src/drivers/common/Makefile src/drivers/include/Makefile src/drivers/ncmpio/Makefile src/drivers/ncfoo/Makefile src/binding/Makefile src/binding/cxx/Makefile src/binding/f77/Makefile src/binding/f77/pnetcdf.inc src/binding/f90/Makefile src/binding/f90/pnetcdf.f90 src/binding/f90/api.fh src/binding/f90/nfmpi_constants.fh src/uti [...]
+
+
+
+ if test x${debug} = xyes; then
+  BUILD_DRIVER_FOO_TRUE=
+  BUILD_DRIVER_FOO_FALSE='#'
+else
+  BUILD_DRIVER_FOO_TRUE='#'
+  BUILD_DRIVER_FOO_FALSE=
+fi
+
+
+
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+      *) { eval $ac_var=; unset $ac_var;} ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes: double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \.
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    if test "x$cache_file" != "x/dev/null"; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
+  else
+    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+if test "x$FC_DEFINE" != "x-D" ; then
+   ac_fc_define_sed_str="s/-D/${FC_DEFINE}/g"
+   FC_DEFS=`echo $DEFS | sed $ac_fc_define_sed_str`
+else
+   FC_DEFS=$DEFS
+fi
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAS_MPICXX_TRUE}" && test -z "${HAS_MPICXX_FALSE}"; then
+  as_fn_error $? "conditional \"HAS_MPICXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${SEEK_SET_REDEFINED_TRUE}" && test -z "${SEEK_SET_REDEFINED_FALSE}"; then
+  as_fn_error $? "conditional \"SEEK_SET_REDEFINED\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAS_FORTRAN_TRUE}" && test -z "${HAS_FORTRAN_FALSE}"; then
+  as_fn_error $? "conditional \"HAS_FORTRAN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_MPI_MOD_TRUE}" && test -z "${HAVE_MPI_MOD_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_MPI_MOD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_F77_SUPPORT_FREEFORM_TRUE}" && test -z "${HAVE_F77_SUPPORT_FREEFORM_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_F77_SUPPORT_FREEFORM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+case $FC_MODINC in #(
+  *\ ) FC_MODINC=$FC_MODINC'${ac_empty}' ;;
+esac
+if test -z "${UPPER_CASE_MOD_TRUE}" && test -z "${UPPER_CASE_MOD_FALSE}"; then
+  as_fn_error $? "conditional \"UPPER_CASE_MOD\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${PNETCDF_DEBUG_TRUE}" && test -z "${PNETCDF_DEBUG_FALSE}"; then
+  as_fn_error $? "conditional \"PNETCDF_DEBUG\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${SIZEOF_MPI_AINT_IS_4_TRUE}" && test -z "${SIZEOF_MPI_AINT_IS_4_FALSE}"; then
+  as_fn_error $? "conditional \"SIZEOF_MPI_AINT_IS_4\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${DECL_MPI_OFFSET_TRUE}" && test -z "${DECL_MPI_OFFSET_FALSE}"; then
+  as_fn_error $? "conditional \"DECL_MPI_OFFSET\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+if test -z "${IS_BIGENDIAN_TRUE}" && test -z "${IS_BIGENDIAN_FALSE}"; then
+  as_fn_error $? "conditional \"IS_BIGENDIAN\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_F77_GNU_INT_TRUE}" && test -z "${HAVE_F77_GNU_INT_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_F77_GNU_INT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_F77_INT1_TRUE}" && test -z "${HAVE_F77_INT1_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_F77_INT1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_F77_INT2_TRUE}" && test -z "${HAVE_F77_INT2_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_F77_INT2\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_F77_INT8_TRUE}" && test -z "${HAVE_F77_INT8_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_F77_INT8\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_COVERAGE_TRUE}" && test -z "${BUILD_COVERAGE_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_COVERAGE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_SUBFILING_TRUE}" && test -z "${ENABLE_SUBFILING_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_SUBFILING\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${ENABLE_ERANGE_FILL_TRUE}" && test -z "${ENABLE_ERANGE_FILL_FALSE}"; then
+  as_fn_error $? "conditional \"ENABLE_ERANGE_FILL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${RELAX_COORD_BOUND_TRUE}" && test -z "${RELAX_COORD_BOUND_FALSE}"; then
+  as_fn_error $? "conditional \"RELAX_COORD_BOUND\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_DOCS_TRUE}" && test -z "${BUILD_DOCS_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_DOCS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAS_LATEX_TRUE}" && test -z "${HAS_LATEX_FALSE}"; then
+  as_fn_error $? "conditional \"HAS_LATEX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${RUN_LARGE_FILE_TEST_TRUE}" && test -z "${RUN_LARGE_FILE_TEST_FALSE}"; then
+  as_fn_error $? "conditional \"RUN_LARGE_FILE_TEST\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_TESTSETS_TRUE}" && test -z "${BUILD_TESTSETS_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_TESTSETS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_BENCHMARKS_IN_PNETCDF_TRUE}" && test -z "${BUILD_BENCHMARKS_IN_PNETCDF_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_BENCHMARKS_IN_PNETCDF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_DRIVER_FOO_TRUE}" && test -z "${BUILD_DRIVER_FOO_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_DRIVER_FOO\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
+  else
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in #(
+      *"$as_nl"*)
+	expr "X$arg" : "X\\(.*\\)$as_nl";
+	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
+  fi
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$1; test $as_status -eq 0 && as_status=1
+  if test "$4"; then
+    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+  fi
+  $as_echo "$as_me: error: $2" >&2
+  as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+  case `echo 'xy\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -pR'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -pR'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
+    as_ln_s='cp -pR'
+  fi
+else
+  as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p='mkdir -p "$as_dir"'
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+  test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by parallel-netcdf $as_me 1.9.0.pre1, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration.  Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+      --config     print configuration, then exit
+  -q, --quiet, --silent
+                   do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+      --file=FILE[:TEMPLATE]
+                   instantiate the configuration file FILE
+      --header=FILE[:TEMPLATE]
+                   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <parallel-netcdf at mcs.anl.gov>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+parallel-netcdf config.status 1.9.0.pre1
+configured by $0, generated by GNU Autoconf 2.69,
+  with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=?*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  --*=)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    $as_echo "$ac_cs_version"; exit ;;
+  --config | --confi | --conf | --con | --co | --c )
+    $as_echo "$ac_cs_config"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    '') as_fn_error $? "missing file argument" ;;
+    esac
+    as_fn_append CONFIG_FILES " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    case $ac_optarg in
+    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+  --help | --hel | -h )
+    $as_echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+  *) as_fn_append ac_config_targets " $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  shift
+  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  CONFIG_SHELL='$SHELL'
+  export CONFIG_SHELL
+  exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`'
+macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`'
+enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`'
+enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`'
+pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`'
+enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`'
+shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`'
+SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`'
+ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`'
+PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`'
+host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`'
+host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`'
+host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`'
+build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`'
+build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`'
+build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`'
+SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`'
+Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`'
+GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`'
+EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`'
+FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`'
+LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`'
+NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`'
+LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`'
+max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`'
+ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`'
+exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`'
+lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`'
+lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`'
+lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`'
+lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
+reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
+reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
+deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
+file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
+file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
+want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
+DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
+sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
+AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
+archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
+STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
+RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`'
+old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`'
+lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`'
+CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`'
+CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`'
+compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`'
+GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`'
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`'
+lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`'
+nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`'
+lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`'
+lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`'
+objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`'
+MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`'
+need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`'
+MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`'
+DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`'
+NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`'
+LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`'
+OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`'
+OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`'
+libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`'
+shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`'
+extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`'
+archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`'
+hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`'
+inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`'
+always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`'
+include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`'
+prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`'
+postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`'
+file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`'
+variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`'
+need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`'
+need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`'
+version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`'
+runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`'
+shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`'
+libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`'
+library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`'
+soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`'
+install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`'
+postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`'
+postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`'
+finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`'
+finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`'
+hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`'
+sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`'
+configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`'
+configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`'
+hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`'
+enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`'
+enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`'
+old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`'
+striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`'
+predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`'
+postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`'
+predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`'
+postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`'
+nostdlib_flag='`$ECHO "$nostdlib_flag" | $SED "$delay_single_quote_subst"`'
+LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`'
+LD_F77='`$ECHO "$LD_F77" | $SED "$delay_single_quote_subst"`'
+LD_FC='`$ECHO "$LD_FC" | $SED "$delay_single_quote_subst"`'
+reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`'
+reload_flag_F77='`$ECHO "$reload_flag_F77" | $SED "$delay_single_quote_subst"`'
+reload_flag_FC='`$ECHO "$reload_flag_FC" | $SED "$delay_single_quote_subst"`'
+reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+reload_cmds_F77='`$ECHO "$reload_cmds_F77" | $SED "$delay_single_quote_subst"`'
+reload_cmds_FC='`$ECHO "$reload_cmds_FC" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_F77='`$ECHO "$old_archive_cmds_F77" | $SED "$delay_single_quote_subst"`'
+old_archive_cmds_FC='`$ECHO "$old_archive_cmds_FC" | $SED "$delay_single_quote_subst"`'
+compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_F77='`$ECHO "$compiler_F77" | $SED "$delay_single_quote_subst"`'
+compiler_FC='`$ECHO "$compiler_FC" | $SED "$delay_single_quote_subst"`'
+GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`'
+GCC_F77='`$ECHO "$GCC_F77" | $SED "$delay_single_quote_subst"`'
+GCC_FC='`$ECHO "$GCC_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_F77='`$ECHO "$lt_prog_compiler_no_builtin_flag_F77" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_no_builtin_flag_FC='`$ECHO "$lt_prog_compiler_no_builtin_flag_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_F77='`$ECHO "$lt_prog_compiler_pic_F77" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_pic_FC='`$ECHO "$lt_prog_compiler_pic_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_F77='`$ECHO "$lt_prog_compiler_wl_F77" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_wl_FC='`$ECHO "$lt_prog_compiler_wl_FC" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_F77='`$ECHO "$lt_prog_compiler_static_F77" | $SED "$delay_single_quote_subst"`'
+lt_prog_compiler_static_FC='`$ECHO "$lt_prog_compiler_static_FC" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_F77='`$ECHO "$lt_cv_prog_compiler_c_o_F77" | $SED "$delay_single_quote_subst"`'
+lt_cv_prog_compiler_c_o_FC='`$ECHO "$lt_cv_prog_compiler_c_o_FC" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_F77='`$ECHO "$archive_cmds_need_lc_F77" | $SED "$delay_single_quote_subst"`'
+archive_cmds_need_lc_FC='`$ECHO "$archive_cmds_need_lc_FC" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_F77='`$ECHO "$enable_shared_with_static_runtimes_F77" | $SED "$delay_single_quote_subst"`'
+enable_shared_with_static_runtimes_FC='`$ECHO "$enable_shared_with_static_runtimes_FC" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_F77='`$ECHO "$export_dynamic_flag_spec_F77" | $SED "$delay_single_quote_subst"`'
+export_dynamic_flag_spec_FC='`$ECHO "$export_dynamic_flag_spec_FC" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_F77='`$ECHO "$whole_archive_flag_spec_F77" | $SED "$delay_single_quote_subst"`'
+whole_archive_flag_spec_FC='`$ECHO "$whole_archive_flag_spec_FC" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_F77='`$ECHO "$compiler_needs_object_F77" | $SED "$delay_single_quote_subst"`'
+compiler_needs_object_FC='`$ECHO "$compiler_needs_object_FC" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_F77='`$ECHO "$old_archive_from_new_cmds_F77" | $SED "$delay_single_quote_subst"`'
+old_archive_from_new_cmds_FC='`$ECHO "$old_archive_from_new_cmds_FC" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_F77='`$ECHO "$old_archive_from_expsyms_cmds_F77" | $SED "$delay_single_quote_subst"`'
+old_archive_from_expsyms_cmds_FC='`$ECHO "$old_archive_from_expsyms_cmds_FC" | $SED "$delay_single_quote_subst"`'
+archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_cmds_F77='`$ECHO "$archive_cmds_F77" | $SED "$delay_single_quote_subst"`'
+archive_cmds_FC='`$ECHO "$archive_cmds_FC" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_F77='`$ECHO "$archive_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`'
+archive_expsym_cmds_FC='`$ECHO "$archive_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`'
+module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_cmds_F77='`$ECHO "$module_cmds_F77" | $SED "$delay_single_quote_subst"`'
+module_cmds_FC='`$ECHO "$module_cmds_FC" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_F77='`$ECHO "$module_expsym_cmds_F77" | $SED "$delay_single_quote_subst"`'
+module_expsym_cmds_FC='`$ECHO "$module_expsym_cmds_FC" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_F77='`$ECHO "$with_gnu_ld_F77" | $SED "$delay_single_quote_subst"`'
+with_gnu_ld_FC='`$ECHO "$with_gnu_ld_FC" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_F77='`$ECHO "$allow_undefined_flag_F77" | $SED "$delay_single_quote_subst"`'
+allow_undefined_flag_FC='`$ECHO "$allow_undefined_flag_FC" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_F77='`$ECHO "$no_undefined_flag_F77" | $SED "$delay_single_quote_subst"`'
+no_undefined_flag_FC='`$ECHO "$no_undefined_flag_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_F77='`$ECHO "$hardcode_libdir_flag_spec_F77" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_flag_spec_FC='`$ECHO "$hardcode_libdir_flag_spec_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_F77='`$ECHO "$hardcode_libdir_separator_F77" | $SED "$delay_single_quote_subst"`'
+hardcode_libdir_separator_FC='`$ECHO "$hardcode_libdir_separator_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_F77='`$ECHO "$hardcode_direct_F77" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_FC='`$ECHO "$hardcode_direct_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_F77='`$ECHO "$hardcode_direct_absolute_F77" | $SED "$delay_single_quote_subst"`'
+hardcode_direct_absolute_FC='`$ECHO "$hardcode_direct_absolute_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_F77='`$ECHO "$hardcode_minus_L_F77" | $SED "$delay_single_quote_subst"`'
+hardcode_minus_L_FC='`$ECHO "$hardcode_minus_L_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_F77='`$ECHO "$hardcode_shlibpath_var_F77" | $SED "$delay_single_quote_subst"`'
+hardcode_shlibpath_var_FC='`$ECHO "$hardcode_shlibpath_var_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_F77='`$ECHO "$hardcode_automatic_F77" | $SED "$delay_single_quote_subst"`'
+hardcode_automatic_FC='`$ECHO "$hardcode_automatic_FC" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_F77='`$ECHO "$inherit_rpath_F77" | $SED "$delay_single_quote_subst"`'
+inherit_rpath_FC='`$ECHO "$inherit_rpath_FC" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_F77='`$ECHO "$link_all_deplibs_F77" | $SED "$delay_single_quote_subst"`'
+link_all_deplibs_FC='`$ECHO "$link_all_deplibs_FC" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_F77='`$ECHO "$always_export_symbols_F77" | $SED "$delay_single_quote_subst"`'
+always_export_symbols_FC='`$ECHO "$always_export_symbols_FC" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_F77='`$ECHO "$export_symbols_cmds_F77" | $SED "$delay_single_quote_subst"`'
+export_symbols_cmds_FC='`$ECHO "$export_symbols_cmds_FC" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_F77='`$ECHO "$exclude_expsyms_F77" | $SED "$delay_single_quote_subst"`'
+exclude_expsyms_FC='`$ECHO "$exclude_expsyms_FC" | $SED "$delay_single_quote_subst"`'
+include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`'
+include_expsyms_F77='`$ECHO "$include_expsyms_F77" | $SED "$delay_single_quote_subst"`'
+include_expsyms_FC='`$ECHO "$include_expsyms_FC" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_F77='`$ECHO "$prelink_cmds_F77" | $SED "$delay_single_quote_subst"`'
+prelink_cmds_FC='`$ECHO "$prelink_cmds_FC" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_F77='`$ECHO "$postlink_cmds_F77" | $SED "$delay_single_quote_subst"`'
+postlink_cmds_FC='`$ECHO "$postlink_cmds_FC" | $SED "$delay_single_quote_subst"`'
+file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`'
+file_list_spec_F77='`$ECHO "$file_list_spec_F77" | $SED "$delay_single_quote_subst"`'
+file_list_spec_FC='`$ECHO "$file_list_spec_FC" | $SED "$delay_single_quote_subst"`'
+hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`'
+hardcode_action_F77='`$ECHO "$hardcode_action_F77" | $SED "$delay_single_quote_subst"`'
+hardcode_action_FC='`$ECHO "$hardcode_action_FC" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_F77='`$ECHO "$compiler_lib_search_dirs_F77" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_dirs_FC='`$ECHO "$compiler_lib_search_dirs_FC" | $SED "$delay_single_quote_subst"`'
+predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+predep_objects_F77='`$ECHO "$predep_objects_F77" | $SED "$delay_single_quote_subst"`'
+predep_objects_FC='`$ECHO "$predep_objects_FC" | $SED "$delay_single_quote_subst"`'
+postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`'
+postdep_objects_F77='`$ECHO "$postdep_objects_F77" | $SED "$delay_single_quote_subst"`'
+postdep_objects_FC='`$ECHO "$postdep_objects_FC" | $SED "$delay_single_quote_subst"`'
+predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`'
+predeps_F77='`$ECHO "$predeps_F77" | $SED "$delay_single_quote_subst"`'
+predeps_FC='`$ECHO "$predeps_FC" | $SED "$delay_single_quote_subst"`'
+postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`'
+postdeps_F77='`$ECHO "$postdeps_F77" | $SED "$delay_single_quote_subst"`'
+postdeps_FC='`$ECHO "$postdeps_FC" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_F77='`$ECHO "$compiler_lib_search_path_F77" | $SED "$delay_single_quote_subst"`'
+compiler_lib_search_path_FC='`$ECHO "$compiler_lib_search_path_FC" | $SED "$delay_single_quote_subst"`'
+nostdlib_flag_CXX='`$ECHO "$nostdlib_flag_CXX" | $SED "$delay_single_quote_subst"`'
+nostdlib_flag_F77='`$ECHO "$nostdlib_flag_F77" | $SED "$delay_single_quote_subst"`'
+nostdlib_flag_FC='`$ECHO "$nostdlib_flag_FC" | $SED "$delay_single_quote_subst"`'
+
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in SHELL \
+ECHO \
+PATH_SEPARATOR \
+SED \
+GREP \
+EGREP \
+FGREP \
+LD \
+NM \
+LN_S \
+lt_SP2NL \
+lt_NL2SP \
+reload_flag \
+OBJDUMP \
+deplibs_check_method \
+file_magic_cmd \
+file_magic_glob \
+want_nocaseglob \
+DLLTOOL \
+sharedlib_from_linklib_cmd \
+AR \
+AR_FLAGS \
+archiver_list_spec \
+STRIP \
+RANLIB \
+CC \
+CFLAGS \
+compiler \
+lt_cv_sys_global_symbol_pipe \
+lt_cv_sys_global_symbol_to_cdecl \
+lt_cv_sys_global_symbol_to_import \
+lt_cv_sys_global_symbol_to_c_name_address \
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
+lt_cv_nm_interface \
+nm_file_list_spec \
+lt_cv_truncate_bin \
+lt_prog_compiler_no_builtin_flag \
+lt_prog_compiler_pic \
+lt_prog_compiler_wl \
+lt_prog_compiler_static \
+lt_cv_prog_compiler_c_o \
+need_locks \
+MANIFEST_TOOL \
+DSYMUTIL \
+NMEDIT \
+LIPO \
+OTOOL \
+OTOOL64 \
+shrext_cmds \
+export_dynamic_flag_spec \
+whole_archive_flag_spec \
+compiler_needs_object \
+with_gnu_ld \
+allow_undefined_flag \
+no_undefined_flag \
+hardcode_libdir_flag_spec \
+hardcode_libdir_separator \
+exclude_expsyms \
+include_expsyms \
+file_list_spec \
+variables_saved_for_relink \
+libname_spec \
+library_names_spec \
+soname_spec \
+install_override_mode \
+finish_eval \
+old_striplib \
+striplib \
+compiler_lib_search_dirs \
+predep_objects \
+postdep_objects \
+predeps \
+postdeps \
+compiler_lib_search_path \
+nostdlib_flag \
+LD_CXX \
+LD_F77 \
+LD_FC \
+reload_flag_CXX \
+reload_flag_F77 \
+reload_flag_FC \
+compiler_CXX \
+compiler_F77 \
+compiler_FC \
+lt_prog_compiler_no_builtin_flag_CXX \
+lt_prog_compiler_no_builtin_flag_F77 \
+lt_prog_compiler_no_builtin_flag_FC \
+lt_prog_compiler_pic_CXX \
+lt_prog_compiler_pic_F77 \
+lt_prog_compiler_pic_FC \
+lt_prog_compiler_wl_CXX \
+lt_prog_compiler_wl_F77 \
+lt_prog_compiler_wl_FC \
+lt_prog_compiler_static_CXX \
+lt_prog_compiler_static_F77 \
+lt_prog_compiler_static_FC \
+lt_cv_prog_compiler_c_o_CXX \
+lt_cv_prog_compiler_c_o_F77 \
+lt_cv_prog_compiler_c_o_FC \
+export_dynamic_flag_spec_CXX \
+export_dynamic_flag_spec_F77 \
+export_dynamic_flag_spec_FC \
+whole_archive_flag_spec_CXX \
+whole_archive_flag_spec_F77 \
+whole_archive_flag_spec_FC \
+compiler_needs_object_CXX \
+compiler_needs_object_F77 \
+compiler_needs_object_FC \
+with_gnu_ld_CXX \
+with_gnu_ld_F77 \
+with_gnu_ld_FC \
+allow_undefined_flag_CXX \
+allow_undefined_flag_F77 \
+allow_undefined_flag_FC \
+no_undefined_flag_CXX \
+no_undefined_flag_F77 \
+no_undefined_flag_FC \
+hardcode_libdir_flag_spec_CXX \
+hardcode_libdir_flag_spec_F77 \
+hardcode_libdir_flag_spec_FC \
+hardcode_libdir_separator_CXX \
+hardcode_libdir_separator_F77 \
+hardcode_libdir_separator_FC \
+exclude_expsyms_CXX \
+exclude_expsyms_F77 \
+exclude_expsyms_FC \
+include_expsyms_CXX \
+include_expsyms_F77 \
+include_expsyms_FC \
+file_list_spec_CXX \
+file_list_spec_F77 \
+file_list_spec_FC \
+compiler_lib_search_dirs_CXX \
+compiler_lib_search_dirs_F77 \
+compiler_lib_search_dirs_FC \
+predep_objects_CXX \
+predep_objects_F77 \
+predep_objects_FC \
+postdep_objects_CXX \
+postdep_objects_F77 \
+postdep_objects_FC \
+predeps_CXX \
+predeps_F77 \
+predeps_FC \
+postdeps_CXX \
+postdeps_F77 \
+postdeps_FC \
+compiler_lib_search_path_CXX \
+compiler_lib_search_path_F77 \
+compiler_lib_search_path_FC \
+nostdlib_flag_CXX \
+nostdlib_flag_F77 \
+nostdlib_flag_FC; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in reload_cmds \
+old_postinstall_cmds \
+old_postuninstall_cmds \
+old_archive_cmds \
+extract_expsyms_cmds \
+old_archive_from_new_cmds \
+old_archive_from_expsyms_cmds \
+archive_cmds \
+archive_expsym_cmds \
+module_cmds \
+module_expsym_cmds \
+export_symbols_cmds \
+prelink_cmds \
+postlink_cmds \
+postinstall_cmds \
+postuninstall_cmds \
+finish_cmds \
+sys_lib_search_path_spec \
+configure_time_dlsearch_path \
+configure_time_lt_sys_library_path \
+reload_cmds_CXX \
+reload_cmds_F77 \
+reload_cmds_FC \
+old_archive_cmds_CXX \
+old_archive_cmds_F77 \
+old_archive_cmds_FC \
+old_archive_from_new_cmds_CXX \
+old_archive_from_new_cmds_F77 \
+old_archive_from_new_cmds_FC \
+old_archive_from_expsyms_cmds_CXX \
+old_archive_from_expsyms_cmds_F77 \
+old_archive_from_expsyms_cmds_FC \
+archive_cmds_CXX \
+archive_cmds_F77 \
+archive_cmds_FC \
+archive_expsym_cmds_CXX \
+archive_expsym_cmds_F77 \
+archive_expsym_cmds_FC \
+module_cmds_CXX \
+module_cmds_F77 \
+module_cmds_FC \
+module_expsym_cmds_CXX \
+module_expsym_cmds_F77 \
+module_expsym_cmds_FC \
+export_symbols_cmds_CXX \
+export_symbols_cmds_F77 \
+export_symbols_cmds_FC \
+prelink_cmds_CXX \
+prelink_cmds_F77 \
+prelink_cmds_FC \
+postlink_cmds_CXX \
+postlink_cmds_F77 \
+postlink_cmds_FC; do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[\\\\\\\`\\"\\\$]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+ac_aux_dir='$ac_aux_dir'
+
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    RM='$RM'
+    ofile='$ofile'
+
+
+
+
+
+
+
+
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "src/include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/include/config.h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "src/dispatchers/Makefile") CONFIG_FILES="$CONFIG_FILES src/dispatchers/Makefile" ;;
+    "src/libs/Makefile") CONFIG_FILES="$CONFIG_FILES src/libs/Makefile" ;;
+    "src/include/Makefile") CONFIG_FILES="$CONFIG_FILES src/include/Makefile" ;;
+    "src/include/pnetcdf.h") CONFIG_FILES="$CONFIG_FILES src/include/pnetcdf.h" ;;
+    "src/drivers/Makefile") CONFIG_FILES="$CONFIG_FILES src/drivers/Makefile" ;;
+    "src/drivers/common/Makefile") CONFIG_FILES="$CONFIG_FILES src/drivers/common/Makefile" ;;
+    "src/drivers/include/Makefile") CONFIG_FILES="$CONFIG_FILES src/drivers/include/Makefile" ;;
+    "src/drivers/ncmpio/Makefile") CONFIG_FILES="$CONFIG_FILES src/drivers/ncmpio/Makefile" ;;
+    "src/drivers/ncfoo/Makefile") CONFIG_FILES="$CONFIG_FILES src/drivers/ncfoo/Makefile" ;;
+    "src/binding/Makefile") CONFIG_FILES="$CONFIG_FILES src/binding/Makefile" ;;
+    "src/binding/cxx/Makefile") CONFIG_FILES="$CONFIG_FILES src/binding/cxx/Makefile" ;;
+    "src/binding/f77/Makefile") CONFIG_FILES="$CONFIG_FILES src/binding/f77/Makefile" ;;
+    "src/binding/f77/pnetcdf.inc") CONFIG_FILES="$CONFIG_FILES src/binding/f77/pnetcdf.inc" ;;
+    "src/binding/f90/Makefile") CONFIG_FILES="$CONFIG_FILES src/binding/f90/Makefile" ;;
+    "src/binding/f90/pnetcdf.f90") CONFIG_FILES="$CONFIG_FILES src/binding/f90/pnetcdf.f90" ;;
+    "src/binding/f90/api.fh") CONFIG_FILES="$CONFIG_FILES src/binding/f90/api.fh" ;;
+    "src/binding/f90/nfmpi_constants.fh") CONFIG_FILES="$CONFIG_FILES src/binding/f90/nfmpi_constants.fh" ;;
+    "src/utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/Makefile" ;;
+    "src/utils/ncoffsets/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncoffsets/Makefile" ;;
+    "src/utils/pnetcdf_version/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/pnetcdf_version/Makefile" ;;
+    "src/utils/ncmpivalid/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncmpivalid/Makefile" ;;
+    "src/utils/ncmpidiff/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncmpidiff/Makefile" ;;
+    "src/utils/ncmpidump/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncmpidump/Makefile" ;;
+    "src/utils/ncmpigen/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncmpigen/Makefile" ;;
+    "src/utils/pnetcdf-config") CONFIG_FILES="$CONFIG_FILES src/utils/pnetcdf-config" ;;
+    "src/packaging/Makefile") CONFIG_FILES="$CONFIG_FILES src/packaging/Makefile" ;;
+    "src/packaging/pnetcdf.pc") CONFIG_FILES="$CONFIG_FILES src/packaging/pnetcdf.pc" ;;
+    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+    "examples/C/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/Makefile" ;;
+    "examples/tutorial/Makefile") CONFIG_FILES="$CONFIG_FILES examples/tutorial/Makefile" ;;
+    "examples/CXX/Makefile") CONFIG_FILES="$CONFIG_FILES examples/CXX/Makefile" ;;
+    "examples/F77/Makefile") CONFIG_FILES="$CONFIG_FILES examples/F77/Makefile" ;;
+    "examples/F90/Makefile") CONFIG_FILES="$CONFIG_FILES examples/F90/Makefile" ;;
+    "benchmarks/Makefile") CONFIG_FILES="$CONFIG_FILES benchmarks/Makefile" ;;
+    "benchmarks/C/Makefile") CONFIG_FILES="$CONFIG_FILES benchmarks/C/Makefile" ;;
+    "benchmarks/FLASH-IO/Makefile") CONFIG_FILES="$CONFIG_FILES benchmarks/FLASH-IO/Makefile" ;;
+    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+    "doc/pnetcdf-api/Makefile") CONFIG_FILES="$CONFIG_FILES doc/pnetcdf-api/Makefile" ;;
+    "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
+    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+    "test/common/Makefile") CONFIG_FILES="$CONFIG_FILES test/common/Makefile" ;;
+    "test/C/Makefile") CONFIG_FILES="$CONFIG_FILES test/C/Makefile" ;;
+    "test/fandc/Makefile") CONFIG_FILES="$CONFIG_FILES test/fandc/Makefile" ;;
+    "test/nc_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/nc_test/Makefile" ;;
+    "test/cdf_format/Makefile") CONFIG_FILES="$CONFIG_FILES test/cdf_format/Makefile" ;;
+    "test/header/Makefile") CONFIG_FILES="$CONFIG_FILES test/header/Makefile" ;;
+    "test/testcases/Makefile") CONFIG_FILES="$CONFIG_FILES test/testcases/Makefile" ;;
+    "test/nonblocking/Makefile") CONFIG_FILES="$CONFIG_FILES test/nonblocking/Makefile" ;;
+    "test/largefile/Makefile") CONFIG_FILES="$CONFIG_FILES test/largefile/Makefile" ;;
+    "test/CXX/Makefile") CONFIG_FILES="$CONFIG_FILES test/CXX/Makefile" ;;
+    "test/subfile/Makefile") CONFIG_FILES="$CONFIG_FILES test/subfile/Makefile" ;;
+    "test/nf_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/nf_test/Makefile" ;;
+    "test/nf_test/tests.inc") CONFIG_FILES="$CONFIG_FILES test/nf_test/tests.inc" ;;
+    "test/nf90_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/nf90_test/Makefile" ;;
+    "test/nf90_test/tests.inc") CONFIG_FILES="$CONFIG_FILES test/nf90_test/tests.inc" ;;
+    "test/F90/Makefile") CONFIG_FILES="$CONFIG_FILES test/F90/Makefile" ;;
+
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp= ac_tmp=
+  trap 'exit_status=$?
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+  trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+  eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+  ac_cs_awk_cr='\\r'
+else
+  ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+  echo "cat >conf$$subs.awk <<_ACEOF" &&
+  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+  echo "_ACEOF"
+} >conf$$subs.sh ||
+  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  . ./conf$$subs.sh ||
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+  if test $ac_delim_n = $ac_delim_num; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+  N
+  s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+  for (key in S) S_is_set[key] = 1
+  FS = ""
+
+}
+{
+  line = $ 0
+  nfields = split(line, field, "@")
+  substed = 0
+  len = length(field[1])
+  for (i = 2; i < nfields; i++) {
+    key = field[i]
+    keylen = length(key)
+    if (S_is_set[key]) {
+      value = S[key]
+      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+      len += length(value) + length(field[++i])
+      substed = 1
+    } else
+      len += 1 + keylen
+  }
+
+  print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+  cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+h
+s///
+s/^/:/
+s/[	 ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[	 ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
+    break
+  elif $ac_last_try; then
+    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any.  Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  for (key in D) D_is_set[key] = 1
+  FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+  line = \$ 0
+  split(line, arg, " ")
+  if (arg[1] == "#") {
+    defundef = arg[2]
+    mac1 = arg[3]
+  } else {
+    defundef = substr(arg[1], 2)
+    mac1 = arg[2]
+  }
+  split(mac1, mac2, "(") #)
+  macro = mac2[1]
+  prefix = substr(line, 1, index(line, defundef) - 1)
+  if (D_is_set[macro]) {
+    # Preserve the white space surrounding the "#".
+    print prefix "define", macro P[macro] D[macro]
+    next
+  } else {
+    # Replace #undef with comments.  This is necessary, for example,
+    # in the case of _POSIX_SOURCE, which is predefined and required
+    # on some systems where configure will not decide to define it.
+    if (defundef == "undef") {
+      print "/*", prefix defundef, macro, "*/"
+      next
+    }
+  }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$ac_tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+      esac
+      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      as_fn_append ac_file_inputs " '$ac_f'"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input='Generated from '`
+	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+	`' by configure.'
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+    fi
+    # Neutralize special characters interpreted by sed in replacement strings.
+    case $configure_input in #(
+    *\&* | *\|* | *\\* )
+       ac_sed_conf_input=`$as_echo "$configure_input" |
+       sed 's/[\\\\&|]/\\\\&/g'`;; #(
+    *) ac_sed_conf_input=$configure_input;;
+    esac
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  as_dir="$ac_dir"; as_fn_mkdir_p
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+  s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+      "$ac_tmp/out"`; test -z "$ac_out"; } &&
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined" >&2;}
+
+  rm -f "$ac_tmp/stdin"
+  case $ac_file in
+  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+  esac \
+  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+  if test x"$ac_file" != x-; then
+    {
+      $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f "$ac_file"
+      mv "$ac_tmp/config.h" "$ac_file" \
+	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
+    fi
+  else
+    $as_echo "/* $configure_input  */" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+      || as_fn_error $? "could not create -" "$LINENO" 5
+  fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Older Autoconf quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  case $CONFIG_FILES in
+  *\'*) eval set x "$CONFIG_FILES" ;;
+  *)   set x $CONFIG_FILES ;;
+  esac
+  shift
+  for mf
+  do
+    # Strip MF so we end up with the name of the file.
+    mf=`echo "$mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile or not.
+    # We used to match only the files named 'Makefile.in', but
+    # some people rename them; so instead we look at the file content.
+    # Grep'ing the first line is not enough: some people post-process
+    # each Makefile.in and add a new line on top of each file to say so.
+    # Grep'ing the whole file is not good either: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+      dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    else
+      continue
+    fi
+    # Extract the definition of DEPDIR, am__include, and am__quote
+    # from the Makefile without running 'make'.
+    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+    test -z "$DEPDIR" && continue
+    am__include=`sed -n 's/^am__include = //p' < "$mf"`
+    test -z "$am__include" && continue
+    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+    # Find all dependency output files, they are included files with
+    # $(DEPDIR) in their names.  We invoke sed twice because it is the
+    # simplest approach to changing $(DEPDIR) to its actual value in the
+    # expansion.
+    for file in `sed -n "
+      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+	 sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+      # Make sure the directory exists.
+      test -f "$dirpart/$file" && continue
+      fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      as_dir=$dirpart/$fdir; as_fn_mkdir_p
+      # echo "creating $dirpart/$file"
+      echo '# dummy' > "$dirpart/$file"
+    done
+  done
+}
+ ;;
+    "libtool":C)
+
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM -f \"$cfgfile\"; exit 1" 1 2 15
+    $RM -f "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-  test -n "$prog" && break
-done
 
-	    case "$prog" in
-		*catman*)
-		    MAKEWHATIS_CMD=$prog' -w -M $(MANDIR)'
-		    ;;
-		*makewhatis*)
-		    MAKEWHATIS_CMD=$prog' $(MANDIR)'
-		    ;;
-	    esac
-	    ;;
-    esac
+# The names of the tagged configurations supported by this script.
+available_tags='CXX F77 FC '
 
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for manual-page index command" >&5
-$as_echo_n "checking for manual-page index command... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEWHATIS_CMD" >&5
-$as_echo "$MAKEWHATIS_CMD" >&6; }
+# ### BEGIN LIBTOOL CONFIG
 
+# Which release of libtool.m4 was used?
+macro_version=$macro_version
+macro_revision=$macro_revision
 
-# Check whether --enable-coverage was given.
-if test "${enable_coverage+set}" = set; then :
-  enableval=$enable_coverage; enable_coverage=${enableval}
-else
-  enable_coverage=no
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
 
-fi
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
 
-if test "x${enable_coverage}" = xyes; then
-   if test "x${GCC}" = xyes; then
-              LCOV_FLAGS="-pg -fprofile-arcs -ftest-coverage --coverage -O0"
-       CFLAGS="${CFLAGS} ${LCOV_FLAGS}"
-       if test "x${has_mpicxx}" = xyes ; then
-          CXXFLAGS="${CXXFLAGS} ${LCOV_FLAGS}"
-       fi
-       if test "x${enable_fortran}" = xyes ; then
-           FCFLAGS="${FCFLAGS}  ${LCOV_FLAGS}"
-          F77FLAGS="${F77FLAGS} ${LCOV_FLAGS}"
-          F90FLAGS="${F90FLAGS} ${LCOV_FLAGS}"
-       fi
-       LCOV_LIB=-lgcov
+# What type of objects to build.
+pic_mode=$pic_mode
 
-   else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-coverage is for GNU compiler only" >&5
-$as_echo "$as_me: WARNING: --enable-coverage is for GNU compiler only" >&2;}
-      enable_coverage=no
-   fi
-fi
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
 
+# Shared archive member basename,for filename based shared library versioning on AIX.
+shared_archive_member_spec=$shared_archive_member_spec
 
-if test "x${has_mpicxx}" = xyes ; then
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if C++ macro __func__ or __FUNCTION__ is defined" >&5
-$as_echo_n "checking if C++ macro __func__ or __FUNCTION__ is defined... " >&6; }
-if ${ac_cv_cxx_macro_func+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_cxx_macro_func=no
-    ac_cv_cxx_macro_function=no
-    ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+# An echo program that protects backslashes.
+ECHO=$lt_ECHO
 
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <iostream>
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-std::cout << __func__;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_cxx_macro_func=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <iostream>
-#ifdef FC_DUMMY_MAIN
-#ifndef FC_DUMMY_MAIN_EQ_F77
-#  ifdef __cplusplus
-     extern "C"
-#  endif
-   int FC_DUMMY_MAIN() { return 1; }
-#endif
-#endif
-int
-main ()
-{
-std::cout << __FUNCTION__;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  ac_cv_cxx_macro_function=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-    ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# The PATH separator for the build system.
+PATH_SEPARATOR=$lt_PATH_SEPARATOR
 
+# The host system.
+host_alias=$host_alias
+host=$host
+host_os=$host_os
 
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_macro_func" >&5
-$as_echo "$ac_cv_cxx_macro_func" >&6; }
+# The build system.
+build_alias=$build_alias
+build=$build
+build_os=$build_os
 
-   if test "x${ac_cv_cxx_macro_func}" == xyes ; then
-      $as_echo "#define HAVE_FUNC_MACRO 1" >>confdefs.h
+# A sed program that does not truncate output.
+SED=$lt_SED
 
-   fi
-   if test "x${ac_cv_cxx_macro_function}" == xyes ; then
-      $as_echo "#define HAVE_FUNCTION_MACRO 1" >>confdefs.h
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="\$SED -e 1s/^X//"
 
-   fi
-fi
+# A grep program that handles long lines.
+GREP=$lt_GREP
 
-if test "x${debug}" = xyes; then
-            if ! echo "${CFLAGS}" | ${EGREP} -q -- "-g" ; then
-      CFLAGS="${CFLAGS} -g"
-   fi
-   CFLAGS=`echo $CFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-   CFLAGS="${CFLAGS} -O0"
+# An ERE matcher.
+EGREP=$lt_EGREP
 
-   if test "x${has_mpicxx}" = xyes ; then
-      if ! echo "${CXXFLAGS}" | ${EGREP} -q -- "-g" ; then
-         CXXFLAGS="${CXXFLAGS} -g"
-      fi
-      CXXFLAGS=`echo $CXXFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-      CXXFLAGS="${CXXFLAGS} -O0"
-   fi
+# A literal string matcher.
+FGREP=$lt_FGREP
 
-   if test "x${enable_fortran}" = xyes ; then
-      if ! echo "${FCFLAGS}" | ${EGREP} -q -- "-g" ; then
-         FCFLAGS="${FCFLAGS} -g"
-      fi
-      if ! echo "${F77FLAGS}" | ${EGREP} -q -- "-g" ; then
-         F77FLAGS="${F77FLAGS} -g"
-      fi
-      if ! echo "${F90FLAGS}" | ${EGREP} -q -- "-g" ; then
-         F90FLAGS="${F90FLAGS} -g"
-      fi
+# A BSD- or MS-compatible name lister.
+NM=$lt_NM
 
-       FCFLAGS=`echo $FCFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-      F77FLAGS=`echo $F77FLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-      F90FLAGS=`echo $F90FLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-       FCFLAGS="${FCFLAGS}  -O0"
-      F77FLAGS="${F77FLAGS} -O0"
-      F90FLAGS="${F90FLAGS} -O0"
-   fi
-fi
+# Whether we need soft or hard links.
+LN_S=$lt_LN_S
 
-chmod u+x ${srcdir}/scripts/install-sh
+# What is the maximum length of a command?
+max_cmd_len=$max_cmd_len
 
-# Check whether --enable-subfiling was given.
-if test "${enable_subfiling+set}" = set; then :
-  enableval=$enable_subfiling; enable_subfiling=${enableval}
-else
-  enable_subfiling=no
+# Object file suffix (normally "o").
+objext=$ac_objext
 
-fi
+# Executable file suffix (normally "").
+exeext=$exeext
 
+# whether the shell understands "unset".
+lt_unset=$lt_unset
 
+# turn spaces into newlines.
+SP2NL=$lt_lt_SP2NL
 
-ENABLE_SUBFILING=0
-if test "x$enable_subfiling" = "xyes" ; then
-   $as_echo "#define ENABLE_SUBFILING 1" >>confdefs.h
+# turn newlines into spaces.
+NL2SP=$lt_lt_NL2SP
 
-   ENABLE_SUBFILING=1
-fi
+# convert \$build file names to \$host format.
+to_host_file_cmd=$lt_cv_to_host_file_cmd
 
+# convert \$build files to toolchain format.
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
 
-# Check whether --enable-erange-fill was given.
-if test "${enable_erange_fill+set}" = set; then :
-  enableval=$enable_erange_fill; enable_erange_fill=${enableval}
-else
-  enable_erange_fill=yes
+# An object symbol dumper.
+OBJDUMP=$lt_OBJDUMP
 
-fi
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
 
+# Command to use when deplibs_check_method = "file_magic".
+file_magic_cmd=$lt_file_magic_cmd
 
+# How to find potential files when deplibs_check_method = "file_magic".
+file_magic_glob=$lt_file_magic_glob
 
-ENABLE_ERANGE_FILL=0
-if test "x$enable_erange_fill" = "xyes" ; then
-   ENABLE_ERANGE_FILL=1
-fi
+# Find potential files using nocaseglob when deplibs_check_method = "file_magic".
+want_nocaseglob=$lt_want_nocaseglob
 
+# DLL creation program.
+DLLTOOL=$lt_DLLTOOL
 
-# Check whether --enable-relax-coord-bound was given.
-if test "${enable_relax_coord_bound+set}" = set; then :
-  enableval=$enable_relax_coord_bound; enable_relax_coord_bound=${enableval}
-else
-  enable_relax_coord_bound=no
+# Command to associate shared and link libraries.
+sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
 
-fi
+# The archiver.
+AR=$lt_AR
 
-RELAX_COORD_BOUND=0
-if test "x$enable_relax_coord_bound" = "xyes" ; then
-   $as_echo "#define RELAX_COORD_BOUND 1" >>confdefs.h
+# Flags to create an archive.
+AR_FLAGS=$lt_AR_FLAGS
 
-   RELAX_COORD_BOUND=1
-fi
+# How to feed a file listing to the archiver.
+archiver_list_spec=$lt_archiver_list_spec
 
+# A symbol stripping program.
+STRIP=$lt_STRIP
 
-# Extract the first word of "latex", so it can be a program name with args.
-set dummy latex; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_LATEX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $LATEX in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_LATEX="$LATEX" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_LATEX="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+# Commands used to install an old-style archive.
+RANLIB=$lt_RANLIB
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
 
-  ;;
-esac
-fi
-LATEX=$ac_cv_path_LATEX
-if test -n "$LATEX"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LATEX" >&5
-$as_echo "$LATEX" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+# Whether to use a lock for old archive extraction.
+lock_old_archive_extraction=$lock_old_archive_extraction
 
+# A C compiler.
+LTCC=$lt_CC
 
-# Extract the first word of "dvipdf", so it can be a program name with args.
-set dummy dvipdf; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_DVIPDF+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $DVIPDF in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_DVIPDF="$DVIPDF" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_DVIPDF="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
+# LTCC compiler flags.
+LTCFLAGS=$lt_CFLAGS
 
-  ;;
-esac
-fi
-DVIPDF=$ac_cv_path_DVIPDF
-if test -n "$DVIPDF"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPDF" >&5
-$as_echo "$DVIPDF" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
 
+# Transform the output of nm in a proper C declaration.
+global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
 
-has_latex=no
-if test "x${LATEX}" != x ; then
-    has_latex=yes
-fi
+# Transform the output of nm into a list of symbols to manually relocate.
+global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import
 
+# Transform the output of nm in a C name address pair.
+global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 
+# Transform the output of nm in a C name address pair when lib prefix is needed.
+global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
 
+# The name lister interface.
+nm_interface=$lt_lt_cv_nm_interface
 
-BUILDDIR=`pwd`
+# Specify filename containing input files for \$NM.
+nm_file_list_spec=$lt_nm_file_list_spec
 
+# The root where to search for dependent libraries,and where our libraries should be installed.
+lt_sysroot=$lt_sysroot
 
-# Check whether --enable-file-sync was given.
-if test "${enable_file_sync+set}" = set; then :
-  enableval=$enable_file_sync; file_sync=${enableval}
-else
-  file_sync=yes
+# Command to truncate a binary pipe.
+lt_truncate_bin=$lt_lt_cv_truncate_bin
 
-fi
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
 
-if test "x${file_sync}" = xno ; then
-    $as_echo "#define DISABLE_FILE_SYNC 1" >>confdefs.h
+# Used to examine libraries when file_magic_cmd begins with "file".
+MAGIC_CMD=$MAGIC_CMD
 
-fi
+# Must we lock files when doing compilation?
+need_locks=$lt_need_locks
 
-# Check whether --enable-large-file-test was given.
-if test "${enable_large_file_test+set}" = set; then :
-  enableval=$enable_large_file_test; large_file_test=${enableval}
-else
-  large_file_test=no
+# Manifest tool.
+MANIFEST_TOOL=$lt_MANIFEST_TOOL
+
+# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
+DSYMUTIL=$lt_DSYMUTIL
+
+# Tool to change global to local symbols on Mac OS X.
+NMEDIT=$lt_NMEDIT
+
+# Tool to manipulate fat objects and archives on Mac OS X.
+LIPO=$lt_LIPO
+
+# ldd/readelf like tool for Mach-O binaries on Mac OS X.
+OTOOL=$lt_OTOOL
+
+# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
+OTOOL64=$lt_OTOOL64
+
+# Old archive suffix (normally "a").
+libext=$libext
+
+# Shared library suffix (normally ".so").
+shrext_cmds=$lt_shrext_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at link time.
+variables_saved_for_relink=$lt_variables_saved_for_relink
+
+# Do we need the "lib" prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Library versioning type.
+version_type=$version_type
+
+# Shared library runtime path variable.
+runpath_var=$runpath_var
+
+# Shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
 
-fi
+# Permission mode override for installation of shared libraries.
+install_override_mode=$lt_install_override_mode
 
+# Command to use after installation of a shared archive.
+postinstall_cmds=$lt_postinstall_cmds
 
+# Command to use after uninstallation of a shared archive.
+postuninstall_cmds=$lt_postuninstall_cmds
 
-PNETCDF_INC=${BUILDDIR}/src/libf90
-PNETCDF_LIB="-L${BUILDDIR}/src/lib"
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
 
+# As "finish_cmds", except a single script fragment to be evaled but
+# not shown.
+finish_eval=$lt_finish_eval
 
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
 
+# Compile-time system search path for libraries.
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
 
+# Detected run-time system search path for libraries.
+sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path
 
+# Explicit LT_SYS_LIBRARY_PATH set during ./configure time.
+configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path
 
-if test "x${TEST_MPIRUN}" = x ; then
-        TEST_MPIRUN="mpiexec -n NP"
-fi
-if test "x${TEST_OUTDIR}" = x ; then
-        TEST_OUTDIR=.
-fi
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
 
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
 
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
 
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
 
-# Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_SEQ_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $SEQ_CC in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_SEQ_CC="$SEQ_CC" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_SEQ_CC="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
 
-  test -z "$ac_cv_path_SEQ_CC" && ac_cv_path_SEQ_CC="$MPICC"
-  ;;
-esac
-fi
-SEQ_CC=$ac_cv_path_SEQ_CC
-if test -n "$SEQ_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SEQ_CC" >&5
-$as_echo "$SEQ_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+# The linker used to build libraries.
+LD=$lt_LD
 
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
 
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds
 
+# A language specific compiler.
+CC=$lt_compiler
 
-# Configuration Date
-if test "x$SOURCE_DATE_EPOCH" != "x" ; then
-     CONFIG_DATE="`date -u -d "${SOURCE_DATE_EPOCH}"`"
-else
-     CONFIG_DATE="`date`"
-fi
+# Is the compiler the GNU compiler?
+with_gcc=$GCC
 
-ac_config_headers="$ac_config_headers src/libf/nfconfig_inc"
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
 
-ac_config_files="$ac_config_files macros.make Makefile pnetcdf_pc src/Makefile src/lib/Makefile src/lib/pnetcdf.h src/utils/Makefile src/utils/ncmpidump/Makefile src/utils/ncmpidiff/Makefile src/utils/ncmpigen/Makefile src/utils/ncmpivalid/Makefile src/utils/pnetcdf_version/Makefile src/utils/ncoffsets/Makefile test/Makefile test/common/Makefile test/nc_test/Makefile test/C/Makefile test/fandc/Makefile test/testcases/Makefile test/nonblocking/Makefile test/header/Makefile test/cdf_format [...]
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic
 
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl
 
-# The following dependency is for configure.in and configure
-# See autoconf manual 2.69, Section 4.8.5 Automatic Remaking
-ac_config_files="$ac_config_files stamp-h"
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static
 
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o
 
-ac_config_files="$ac_config_files pnetcdf-config"
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc
 
-ac_config_files="$ac_config_files check_install"
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
 
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
 
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
 
-_ACEOF
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object
 
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
 
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-	"s/'/'\\\\''/g;
-	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-	cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-	  mv -f confcache "$cache_file"$$ &&
-	  mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-	  mv -f confcache "$cache_file" ;;
-	esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
 
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
 
-DEFS=-DHAVE_CONFIG_H
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds
+module_expsym_cmds=$lt_module_expsym_cmds
 
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld
 
-LTLIBOBJS=$ac_ltlibobjs
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
 
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
 
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 
-case $FC_MODINC in #(
-  *\ ) FC_MODINC=$FC_MODINC'${ac_empty}' ;;
-esac
-case $FC_MODOUT in #(
-  *\ ) FC_MODOUT=$FC_MODOUT'${ac_empty}' ;;
-esac
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
 
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct
 
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute
 
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L
 
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
 
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic
 
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-	expr "X$arg" : "X\\(.*\\)$as_nl";
-	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath
 
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
 
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols
 
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""	$as_nl"
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
 
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds
 
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
 
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
 
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects
+postdep_objects=$lt_postdep_objects
+predeps=$lt_predeps
+postdeps=$lt_postdeps
 
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path
+nostdlib_flag=$lt_nostdlib_flag
 
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
+# ### END LIBTOOL CONFIG
 
+_LT_EOF
 
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
+    cat <<'_LT_EOF' >> "$cfgfile"
 
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
 {
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
+    case x$2 in
+    x)
+        ;;
+    *:)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\"
+        ;;
+    x:*)
+        eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\"
+        ;;
+    *)
+        eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
 
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
+
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
 {
-  { eval $1=; unset $1;}
+    for cc_temp in $*""; do
+      case $cc_temp in
+        compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+        distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+        \-*) ;;
+        mpicc | mpicxx | mpif77 | mpif90 | *[\\/]mpicc | *[\\/]mpicxx | *[\\/]mpif77 | *[\\/]mpif90 )
+           # MPICH compilers
+           #   eval "$cc_temp -show" < /dev/null >& conftest.ver
+           #   func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           #   ${RM} -f conftest.ver
+           func_cc_basename_result=`$cc_temp -show | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        mpifccpx | mpiFCCpx | mpifrtpx | *[\\/]mpifccpx | *[\\/]mpiFCCpx | *[\\/]mpifrtpx )
+           # Fujitsu compilers: fccpx, FCCpx, frtpx
+           func_cc_basename_result=`$cc_temp -showme | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        cc | CC | ftn | *[\\/]cc | *[\\/]CC | *[\\/]ftn )
+           # For Cray PrgEnv-intel, cc is a wrapper of icc
+           # For Cray PrgEnv-gnu, cc is a wrapper of gcc
+           # func_cc_basename_result=`$cc_temp --version |& head -n 1 | cut -d' ' -f1 | xargs basename`
+           eval "$cc_temp --version" < /dev/null >& conftest.ver
+           func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           ${RM} -f conftest.ver
+           if test "x${func_cc_basename_result}" = xicc ||
+              test "x${func_cc_basename_result}" = xicpc ||
+              test "x${func_cc_basename_result}" = xifort ||
+              test "x${func_cc_basename_result}" = xgcc ||
+              test "x${func_cc_basename_result}" = xg++ ||
+              test "x${func_cc_basename_result}" = xgfortran ||
+              test "x${func_cc_basename_result}" = xGNU ; then
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+              return
+           fi
+           # For Cray PrgEnv-cray, cc is a wrapper of Cray CC
+           # Cray cc -V sends the output to stderr.
+           # func_cc_basename_result=`$cc_temp -V |& head -n 1 | cut -d' ' -f1 | xargs basename`
+           eval "$cc_temp -V" < /dev/null >& conftest.ver
+           func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           ${RM} -f conftest.ver
+           if test "x${func_cc_basename_result}" = xCray ; then
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+              return
+           fi
+           return
+           ;;
+        mpixlc | mpixlcxx | mpixlf77 | mpixlf90 | *[\\/]mpixlc | *[\\/]mpixlcxx | *[\\/]mpixlf77 | *[\\/]mpixlf90 )
+           func_cc_basename_result=`$cc_temp -show | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+    # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
 }
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
 
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
 
+# ### END FUNCTIONS SHARED WITH CONFIGURE
 
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
+_LT_EOF
 
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
 fi
+_LT_EOF
+    ;;
+  esac
 
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
 
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
+ltmain=$ac_aux_dir/ltmain.sh
 
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='	';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
 
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
 
 
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
+    cat <<_LT_EOF >> "$ofile"
 
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+# ### BEGIN LIBTOOL TAG CONFIG: CXX
+
+# The linker used to build libraries.
+LD=$lt_LD_CXX
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_CXX
+reload_cmds=$lt_reload_cmds_CXX
+
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_CXX
+
+# A language specific compiler.
+CC=$lt_compiler_CXX
+
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_CXX
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_CXX
+
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_CXX
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_CXX
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_CXX
+
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
+
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_CXX
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
+
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_CXX
+archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
+
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_CXX
+module_expsym_cmds=$lt_module_expsym_cmds_CXX
+
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_CXX
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_CXX
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_CXX
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_CXX
 
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_CXX
 
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_CXX
 
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
 
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_CXX
 
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_CXX
 
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_CXX
 
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_CXX
 
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_CXX
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by parallel-netcdf $as_me 1.8.1, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_CXX
 
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_CXX
 
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_CXX
 
-_ACEOF
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_CXX
 
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_CXX
 
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_CXX
 
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX
 
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_CXX
+postdep_objects=$lt_postdep_objects_CXX
+predeps=$lt_predeps_CXX
+postdeps=$lt_postdeps_CXX
 
-_ACEOF
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
+nostdlib_flag=$lt_nostdlib_flag_CXX
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
+# ### END LIBTOOL TAG CONFIG: CXX
+_LT_EOF
 
-Usage: $0 [OPTION]... [TAG]...
 
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
+    cat <<_LT_EOF >> "$ofile"
 
-Configuration files:
-$config_files
+# ### BEGIN LIBTOOL TAG CONFIG: F77
 
-Configuration headers:
-$config_headers
+# The linker used to build libraries.
+LD=$lt_LD_F77
 
-Report bugs to <parallel-netcdf at mcs.anl.gov>."
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_F77
+reload_cmds=$lt_reload_cmds_F77
 
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-parallel-netcdf config.status 1.8.1
-configured by $0, generated by GNU Autoconf 2.69,
-  with options \\"\$ac_cs_config\\"
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_F77
 
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
+# A language specific compiler.
+CC=$lt_compiler_F77
 
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_F77
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
 
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_F77
 
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_F77
 
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_F77
 
-  esac
-  shift
-done
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
 
-ac_configure_extra_args=
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_F77
 
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
 
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
 
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
 
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACEOF
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_F77
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
 
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "src/lib/ncconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS src/lib/ncconfig.h" ;;
-    "src/libf/nfconfig_inc") CONFIG_HEADERS="$CONFIG_HEADERS src/libf/nfconfig_inc" ;;
-    "macros.make") CONFIG_FILES="$CONFIG_FILES macros.make" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "pnetcdf_pc") CONFIG_FILES="$CONFIG_FILES pnetcdf_pc" ;;
-    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
-    "src/lib/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/Makefile" ;;
-    "src/lib/pnetcdf.h") CONFIG_FILES="$CONFIG_FILES src/lib/pnetcdf.h" ;;
-    "src/utils/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/Makefile" ;;
-    "src/utils/ncmpidump/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncmpidump/Makefile" ;;
-    "src/utils/ncmpidiff/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncmpidiff/Makefile" ;;
-    "src/utils/ncmpigen/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncmpigen/Makefile" ;;
-    "src/utils/ncmpivalid/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncmpivalid/Makefile" ;;
-    "src/utils/pnetcdf_version/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/pnetcdf_version/Makefile" ;;
-    "src/utils/ncoffsets/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/ncoffsets/Makefile" ;;
-    "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
-    "test/common/Makefile") CONFIG_FILES="$CONFIG_FILES test/common/Makefile" ;;
-    "test/nc_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/nc_test/Makefile" ;;
-    "test/C/Makefile") CONFIG_FILES="$CONFIG_FILES test/C/Makefile" ;;
-    "test/fandc/Makefile") CONFIG_FILES="$CONFIG_FILES test/fandc/Makefile" ;;
-    "test/testcases/Makefile") CONFIG_FILES="$CONFIG_FILES test/testcases/Makefile" ;;
-    "test/nonblocking/Makefile") CONFIG_FILES="$CONFIG_FILES test/nonblocking/Makefile" ;;
-    "test/header/Makefile") CONFIG_FILES="$CONFIG_FILES test/header/Makefile" ;;
-    "test/cdf_format/Makefile") CONFIG_FILES="$CONFIG_FILES test/cdf_format/Makefile" ;;
-    "test/largefile/Makefile") CONFIG_FILES="$CONFIG_FILES test/largefile/Makefile" ;;
-    "examples/C/Makefile") CONFIG_FILES="$CONFIG_FILES examples/C/Makefile" ;;
-    "examples/tutorial/Makefile") CONFIG_FILES="$CONFIG_FILES examples/tutorial/Makefile" ;;
-    "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
-    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
-    "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
-    "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
-    "benchmarks/Makefile") CONFIG_FILES="$CONFIG_FILES benchmarks/Makefile" ;;
-    "benchmarks/C/Makefile") CONFIG_FILES="$CONFIG_FILES benchmarks/C/Makefile" ;;
-    "test/nf_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/nf_test/Makefile" ;;
-    "test/nf_test/tests.inc") CONFIG_FILES="$CONFIG_FILES test/nf_test/tests.inc" ;;
-    "test/nf90_test/Makefile") CONFIG_FILES="$CONFIG_FILES test/nf90_test/Makefile" ;;
-    "test/F90/Makefile") CONFIG_FILES="$CONFIG_FILES test/F90/Makefile" ;;
-    "examples/F77/Makefile") CONFIG_FILES="$CONFIG_FILES examples/F77/Makefile" ;;
-    "examples/F90/Makefile") CONFIG_FILES="$CONFIG_FILES examples/F90/Makefile" ;;
-    "src/libf90/Makefile") CONFIG_FILES="$CONFIG_FILES src/libf90/Makefile" ;;
-    "src/libf90/pnetcdf.f90") CONFIG_FILES="$CONFIG_FILES src/libf90/pnetcdf.f90" ;;
-    "src/libf90/api.f90") CONFIG_FILES="$CONFIG_FILES src/libf90/api.f90" ;;
-    "src/libf90/nfmpi_constants.f90") CONFIG_FILES="$CONFIG_FILES src/libf90/nfmpi_constants.f90" ;;
-    "src/libf/Makefile") CONFIG_FILES="$CONFIG_FILES src/libf/Makefile" ;;
-    "src/libf/pnetcdf.inc") CONFIG_FILES="$CONFIG_FILES src/libf/pnetcdf.inc" ;;
-    "src/libcxx/Makefile") CONFIG_FILES="$CONFIG_FILES src/libcxx/Makefile" ;;
-    "examples/CXX/Makefile") CONFIG_FILES="$CONFIG_FILES examples/CXX/Makefile" ;;
-    "test/CXX/Makefile") CONFIG_FILES="$CONFIG_FILES test/CXX/Makefile" ;;
-    "benchmarks/FLASH-IO/Makefile") CONFIG_FILES="$CONFIG_FILES benchmarks/FLASH-IO/Makefile" ;;
-    "test/subfile/Makefile") CONFIG_FILES="$CONFIG_FILES test/subfile/Makefile" ;;
-    "stamp-h") CONFIG_FILES="$CONFIG_FILES stamp-h" ;;
-    "pnetcdf-config") CONFIG_FILES="$CONFIG_FILES pnetcdf-config" ;;
-    "check_install") CONFIG_FILES="$CONFIG_FILES check_install" ;;
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
 
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_F77
+archive_expsym_cmds=$lt_archive_expsym_cmds_F77
 
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_F77
+module_expsym_cmds=$lt_module_expsym_cmds_F77
 
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-fi
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_F77
 
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_F77
+
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_F77
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_F77
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_F77
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_F77
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_F77
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_F77
 
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_F77
 
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_F77
 
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_F77
 
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_F77
 
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_F77
 
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_F77
 
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_F77
 
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_F77
 
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = ""
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_F77
 
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77
 
-  print line
-}
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_F77
+postdep_objects=$lt_postdep_objects_F77
+predeps=$lt_predeps_F77
+postdeps=$lt_postdeps_F77
 
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_F77
+nostdlib_flag=$lt_nostdlib_flag_F77
 
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
-h
-s///
-s/^/:/
-s/[	 ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[	 ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[	 ]*$//
-}'
-fi
+# ### END LIBTOOL TAG CONFIG: F77
+_LT_EOF
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
 
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
+    cat <<_LT_EOF >> "$ofile"
 
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
+# ### BEGIN LIBTOOL TAG CONFIG: FC
 
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
+# The linker used to build libraries.
+LD=$lt_LD_FC
 
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag_FC
+reload_cmds=$lt_reload_cmds_FC
 
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[	 ]*#[	 ]*define[	 ][	 ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[	 ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
+# Commands used to build an old-style archive.
+old_archive_cmds=$lt_old_archive_cmds_FC
 
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
+# A language specific compiler.
+CC=$lt_compiler_FC
 
+# Is the compiler the GNU compiler?
+with_gcc=$GCC_FC
 
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_FC
 
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
-	 # because $ac_f cannot contain `:'.
-	 test -f "$ac_f" ||
-	   case $ac_f in
-	   [\\/$]*) false;;
-	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
+# Additional compiler flags for building library objects.
+pic_flag=$lt_lt_prog_compiler_pic_FC
 
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-	  $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-	`' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
+# How to pass a linker flag through the compiler.
+wl=$lt_lt_prog_compiler_wl_FC
 
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_lt_prog_compiler_static_FC
 
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$ac_file" : 'X\(//\)[^/]' \| \
-	 X"$ac_file" : 'X\(//\)$' \| \
-	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_lt_cv_prog_compiler_c_o_FC
 
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$archive_cmds_need_lc_FC
 
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+# Whether or not to disallow shared libs when runtime libs are static.
+allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_FC
 
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_FC
 
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec_FC
 
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-_ACEOF
+# Whether the compiler copes with passing no objects directly.
+compiler_needs_object=$lt_compiler_needs_object_FC
 
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_FC
 
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_FC
 
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
+# Commands used to build a shared archive.
+archive_cmds=$lt_archive_cmds_FC
+archive_expsym_cmds=$lt_archive_expsym_cmds_FC
 
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
- ;;
+# Commands used to build a loadable module if different from building
+# a shared archive.
+module_cmds=$lt_module_cmds_FC
+module_expsym_cmds=$lt_module_expsym_cmds_FC
 
+# Whether we are building with GNU ld or not.
+with_gnu_ld=$lt_with_gnu_ld_FC
 
-  esac
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag_FC
 
+# Flag that enforces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag_FC
 
-  case $ac_file$ac_mode in
-    "stamp-h":F) echo timestamp > stamp-h ;;
-    "pnetcdf-config":F) chmod u+x pnetcdf-config ;;
-    "check_install":F) chmod u+x check_install ;;
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_FC
+
+# Whether we need a single "-rpath" flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator_FC
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary.
+hardcode_direct=$hardcode_direct_FC
+
+# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes
+# DIR into the resulting binary and the resulting library dependency is
+# "absolute",i.e impossible to change by setting \$shlibpath_var if the
+# library is relocated.
+hardcode_direct_absolute=$hardcode_direct_absolute_FC
+
+# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+# into the resulting binary.
+hardcode_minus_L=$hardcode_minus_L_FC
+
+# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+# into the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var_FC
+
+# Set to "yes" if building a shared library automatically hardcodes DIR
+# into the library and all subsequent libraries and executables linked
+# against it.
+hardcode_automatic=$hardcode_automatic_FC
+
+# Set to yes if linker adds runtime paths of dependent libraries
+# to runtime path list.
+inherit_rpath=$inherit_rpath_FC
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs_FC
+
+# Set to "yes" if exported symbols are required.
+always_export_symbols=$always_export_symbols_FC
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds_FC
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms_FC
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms_FC
+
+# Commands necessary for linking programs (against libraries) with templates.
+prelink_cmds=$lt_prelink_cmds_FC
+
+# Commands necessary for finishing linking programs.
+postlink_cmds=$lt_postlink_cmds_FC
+
+# Specify filename containing input files.
+file_list_spec=$lt_file_list_spec_FC
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action_FC
+
+# The directories searched by this compiler when creating a shared library.
+compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_FC
+
+# Dependencies to place before and after the objects being linked to
+# create a shared library.
+predep_objects=$lt_predep_objects_FC
+postdep_objects=$lt_postdep_objects_FC
+predeps=$lt_predeps_FC
+postdeps=$lt_postdeps_FC
+
+# The library search path used internally by the compiler when linking
+# a shared library.
+compiler_lib_search_path=$lt_compiler_lib_search_path_FC
+nostdlib_flag=$lt_nostdlib_flag_FC
+
+# ### END LIBTOOL TAG CONFIG: FC
+_LT_EOF
+
+ ;;
 
   esac
 done # for ac_tag
@@ -15390,112 +36143,92 @@ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
 echo "------------------------------------------------------------------------------"
-
-if test "x${enable_mpi_io_test}" = xno ; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
-       NOTE: disabling the MPI-IO test is a VERY bad idea.
-       Please make sure you know what you are doing" >&5
-$as_echo "$as_me: WARNING:
-       NOTE: disabling the MPI-IO test is a VERY bad idea.
-       Please make sure you know what you are doing" >&2;}
-fi
-
-msg_large_files=no
-if test "$ac_cv_sizeof_off_t" -gt 4 ; then
-   msg_large_files=yes
-fi
-
 echo \
 "
    ${PACKAGE_NAME} Version ${PACKAGE_VERSION}
 
-   Features:  Support for large files (> 4 GB)                  - ${msg_large_files}
-              Build Fortran APIs                                - ${enable_fortran}
-              Build C++ APIs                                    - ${has_mpicxx}
-              Build CDF-2 and CDF-5 support                     - ${enable_cdf_2_n_5}"
+   Features:  Build static libraries                  - ${enable_static}
+              Build shared libraries                  - ${enable_shared}
+              Build Fortran APIs                      - ${has_fortran}
+              Build C++ APIs                          - ${has_mpicxx}"
 if test "x${enable_aggreg}" = xno; then
    echo "\
-              Request aggregation in nonblocking APIs           - $no"
+              Request aggregation in nonblocking APIs - OFF"
 fi
 if test "x${enable_erange_fill}" = xno; then
    echo "\
-              Fill variables when NC_ERANGE occurs              - no"
+              Fill variables when NC_ERANGE occurs    - OFF"
 fi
 if test "x${enable_subfiling}" = xyes; then
    echo "\
-              Build subfiling support                           - yes"
+              Build subfiling support                 - ON"
 fi
 if test "x${enable_relax_coord_bound}" = xyes; then
    echo "\
-              Relax start coordinate bound check                - enabled"
+              Relax start coordinate bound check      - ON"
 fi
 if test "x${ac_cv_c_bigendian}" = xno  && (test "x${in_place_swap}" = xno) ; then
    echo "\
-              Memory in-place byte swap                         - disabled"
+              Memory in-place byte swap               - OFF"
 fi
 if test "x${large_file_test}" = xyes; then
    echo "\
-              Testing large file/variable I/O                   - enabled"
+              Testing large file/variable I/O         - ON"
 fi
 if test "x${debug}" = xyes; then
    echo "\
-              PnetCDF internal debug mode                       - enabled"
+              PnetCDF internal debug mode             - ON"
 fi
-if test "x${enable_fortran}" = xyes && (test "x${F77_SUPPORT_FREEFORM}" = xno) ; then
+if test "x${has_fortran}" = xyes && (test "x${ac_f77_support_freeform}" = xno) ; then
    echo "\
-              Support free form in Fortran 77                   - no"
+              Support free form in Fortran 77         - OFF"
 fi
 
 echo "\
 
-   Compilers: MPICC       = ${MPICC}"
+   Compilers: MPICC    = ${MPICC}"
 if test "${has_mpicxx}" = yes ; then
    echo "\
-              MPICXX      = ${MPICXX}"
+              MPICXX   = ${MPICXX}"
 fi
-if test "${enable_fortran}" = yes ; then
+if test "${has_fortran}" = yes ; then
    echo "\
-              MPIF77      = ${MPIF77}
-              MPIF90      = ${MPIF90}"
+              MPIF77   = ${MPIF77}
+              MPIF90   = ${MPIF90}"
 fi
 echo "\
-              CFLAGS      = ${CFLAGS}"
+              CFLAGS   = ${CFLAGS}"
 if test "x${CPPFLAGS}" != x ; then
    echo "\
-              CPPFLAGS    = ${CPPFLAGS}"
+              CPPFLAGS = ${CPPFLAGS}"
 fi
 if test "${has_mpicxx}" = yes ; then
    echo "\
-              CXXFLAGS    = ${CXXFLAGS}"
-   if test "x${CXXCPPFLAGS}" != x ; then
-      echo "\
-              CXXCPPFLAGS = ${CXXCPPFLAGS}"
-   fi
+              CXXFLAGS = ${CXXFLAGS}"
 fi
-if test "${enable_fortran}" = yes ; then
+if test "${has_fortran}" = yes ; then
    echo "\
-              F77FLAGS    = ${F77FLAGS}
-              F90FLAGS    = ${F90FLAGS}"
-   if test "x${FPPFLAGS}" != x ; then
-      echo "\
-              FPPFLAGS    = ${FPPFLAGS}"
-   fi
+              FFLAGS   = ${FFLAGS}
+              FCFLAGS  = ${FCFLAGS}"
 fi
 if test "x${LDFLAGS}" != x ; then
    echo "\
-              LDFLAGS     = ${LDFLAGS}"
+              LDFLAGS  = ${LDFLAGS}"
 fi
 if test "x${LIBS}" != x ; then
    echo "\
-              LIBS        = ${LIBS}"
+              LIBS     = ${LIBS}"
 fi
 echo "\
 
-   Now type 'make' to build the library and utility tools and then
-   type 'make [<target>]' for testing and installation,
-       where the optional <target> is:
-           check            - test PnetCDF build for sequential run
-           ptest            - test PnetCDF build for parallel run
-           install          - install PnetCDF
+   Now run 'make' to build the library and utility tools.
+   Then run 'make [<target>]' for testing and installation, where the
+   optional <target> can be:
+              tests    - build all test programs (build only, no run)
+              check    - run sequential test programs
+              ptest    - run parallel test programs on 4 MPI processes
+              ptests   - run parallel test programs on 3,4,6,8 MPI processes
+              install  - install PnetCDF library in ${prefix}
+
 ------------------------------------------------------------------------------"
 
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..9b8000e
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,1568 @@
+dnl
+dnl Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+dnl See COPYRIGHT notice in top-level directory.
+dnl
+
+AC_REVISION([$Revision: 3498 $])dnl
+dnl The above uses SVN keyword Revision to copy the unique revision number as
+dnl a stamp into configure script. When using git, use the following line
+dnl instead.
+dnl AC_REVISION([m4_esyscmd_s([git describe --always])])
+
+dnl -*- Mode: shell-script-mode; -*-
+dnl Process this file with GNU autoconf(1) to produce a configure script.
+dnl
+
+dnl autoconf v2.69 was released in 2012-04-24
+AC_PREREQ([2.69])
+AC_INIT([parallel-netcdf],[1.9.0.pre1],[parallel-netcdf at mcs.anl.gov])
+
+dnl config.h.in will be created by autoreconf (autoheader)
+dnl call it right after AC_INIT, as suggested by autoconf
+AC_CONFIG_HEADERS([src/include/config.h])
+
+AC_CONFIG_SRCDIR([src/include/pnetcdf.h.in])
+
+AC_CONFIG_AUX_DIR([./scripts])
+
+dnl Note getting command line should be done before calling AM_INIT_AUTOMAKE
+dnl as AM_INIT_AUTOMAKE modifies command line $*
+CONFIGURE_ARGS_CLEAN=`echo $* | tr '"' ' '`
+
+dnl AM_INIT_AUTOMAKE([subdir-objects])
+AM_INIT_AUTOMAKE([1.13])
+dnl enable silent rules by default 
+AM_SILENT_RULES([yes])
+
+dnl if maintainer mode is disabled, make will *never* attempt to rebuild configure,
+dnl Makefile.ins, etc.
+AM_MAINTAINER_MODE([enable])
+
+m4_ifdef([AC_CONFIG_MACRO_DIRS], [AC_CONFIG_MACRO_DIRS([m4])], [AC_CONFIG_MACRO_DIR([m4])])
+
+dnl AM_EXTRA_RECURSIVE_TARGETS macro was introduced into automake 1.13
+m4_ifdef([AM_EXTRA_RECURSIVE_TARGETS], [AM_EXTRA_RECURSIVE_TARGETS([tests])])
+
+dnl parse the version numbers to 4 env variables
+PNETCDF_VERSION_MAJOR=`echo ${PACKAGE_VERSION} | cut -d. -f1`
+PNETCDF_VERSION_MINOR=`echo ${PACKAGE_VERSION} | cut -d. -f2`
+PNETCDF_VERSION_SUB=`echo ${PACKAGE_VERSION} | cut -d. -f3`
+PNETCDF_VERSION_PRE=`echo ${PACKAGE_VERSION} | cut -d. -f4`
+
+dnl Note major, minor, and sub are required, but pre is not.
+PNETCDF_VERSION=${PACKAGE_VERSION}
+
+dnl Do not change the following line, It is set by SVN automatically.
+dnl It defines PNETCDF_RELEASE_DATE, a string that will be used in
+dnl ncmpi_inq_libvers() to generate release date
+dnl SVN_DATE="$LastChangedDate: 2017-11-01 17:56:57 -0500 (Wed, 01 Nov 2017) $"
+dnl PNETCDF_RELEASE_DATE2=`echo $SVN_DATE | cut -d' ' -f2`
+dnl PNETCDF_RELEASE_DATE=`echo $SVN_DATE | cut -d' ' -f6,7,8 | cut -d')' -f1`
+
+dnl user defined macro for printing messages for debugging
+_DEBUG=no
+AC_DEFUN([UD_MSG_DEBUG],
+         [if test "x${_DEBUG}" = xyes ; then
+             AC_MSG_NOTICE([DEBUG: $1])
+          fi
+         ]
+)
+
+UD_MSG_DEBUG([PNETCDF_VERSION_MAJOR=$PNETCDF_VERSION_MAJOR])
+UD_MSG_DEBUG([PNETCDF_VERSION_MINOR=$PNETCDF_VERSION_MINOR])
+UD_MSG_DEBUG([PNETCDF_VERSION_SUB=$PNETCDF_VERSION_SUB])
+UD_MSG_DEBUG([PNETCDF_VERSION_PRE=$PNETCDF_VERSION_PRE])
+UD_MSG_DEBUG([PNETCDF_VERSION=$PNETCDF_VERSION])
+dnl UD_MSG_DEBUG([PNETCDF_RELEASE_DATE=$PNETCDF_RELEASE_DATE])
+
+dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION_MAJOR, $PNETCDF_VERSION_MAJOR, major version number)
+dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION_MINOR, $PNETCDF_VERSION_MINOR, minor version number)
+dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION_SUB, $PNETCDF_VERSION_SUB, sub version number)
+dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION_PRE, $PNETCDF_VERSION_PRE, pre-release string)
+dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION, ["$PNETCDF_VERSION"], full PnetCDF version string)
+dnl AC_DEFINE_UNQUOTED(PNETCDF_RELEASE_DATE, ["$PNETCDF_RELEASE_DATE"], PnetCDF release date string)
+dnl AC_DEFINE_UNQUOTED(CONFIGURE_ARGS_CLEAN, ["$CONFIGURE_ARGS_CLEAN"], configure command-line arguments used)
+
+AC_SUBST(PNETCDF_VERSION_MAJOR)
+AC_SUBST(PNETCDF_VERSION_MINOR)
+AC_SUBST(PNETCDF_VERSION_SUB)
+AC_SUBST(PNETCDF_VERSION_PRE)
+AC_SUBST(PNETCDF_VERSION)
+dnl AC_SUBST(PNETCDF_RELEASE_DATE)
+dnl AC_SUBST(PNETCDF_RELEASE_DATE2)
+AC_SUBST(PACKAGE_VERSION)
+AC_SUBST(CONFIGURE_ARGS_CLEAN)
+
+dnl autoheader only adds these templates to the first invocation of AC_CONFIG_HEADERS
+AH_TEMPLATE([NCBYTE_T],                 [Type of NC_BYTE])
+AH_TEMPLATE([NCSHORT_T],                [Type of NC_SHORT])
+AH_TEMPLATE([NF_DOUBLEPRECISION_IS_C_], [C type for Fortran double])
+AH_TEMPLATE([NF_INT1_IS_C_],            [C type for Fortran INT1])
+AH_TEMPLATE([NF_INT1_T],                [Type for Fortran INT1])
+AH_TEMPLATE([NF_INT2_IS_C_],            [C type for Fortran INT2])
+AH_TEMPLATE([NF_INT2_T],                [Type for Fortran INT2])
+AH_TEMPLATE([NF_INT_IS_C_],             [C type for Fortran INT])
+AH_TEMPLATE([NF_INT8_IS_C_],            [C type for Fortran INT8])
+AH_TEMPLATE([NF_INT8_T],                [Type for Fortran INT8])
+AH_TEMPLATE([NF_REAL_IS_C_],            [C type for Fortran REAL])
+AH_TEMPLATE([NO_IEEE_FLOAT],            [Does system have IEEE FLOAT])
+AH_TEMPLATE([DISABLE_FILE_SYNC],        [Define if to disable MPI_File_sync])
+AH_TEMPLATE([DISABLE_IN_PLACE_SWAP],    [Define if to disable in-place byte swap])
+AH_TEMPLATE([ENABLE_SUBFILING],         [Define if to enable subfiling feature])
+AH_TEMPLATE([PNC_MALLOC_TRACE],         [Define if to enable malloc tracing])
+AH_TEMPLATE([HAVE_FUNC_MACRO],          [Define if C++ macro __func__ is defined])
+AH_TEMPLATE([HAVE_FUNCTION_MACRO],      [Define if C++ macro __FUNCTION__ is defined])
+AH_TEMPLATE([RELAX_COORD_BOUND],        [Define if relaxed coordinate check is enabled])
+
+AH_TOP([#ifndef _CONFIG_H
+#define _CONFIG_H])
+AH_BOTTOM([#include <nctypes.h>
+#endif])
+
+dnl an option to use a customized rm command
+AC_ARG_VAR(RM, Command for deleting files or directories. @<:@default: rm@:>@)
+if test "x${RM}" != x ; then
+   AC_MSG_CHECKING(rm )
+   if ! test -f ${RM} ; then
+      AC_CHECK_PROG([rm_cmd], [${RM}], [yes], [no])
+      if test "x${rm_cmd}" = xyes ; then
+         RM=${RM}
+      fi
+   else
+      RM=${RM}
+   fi
+   AC_MSG_RESULT(using $RM)
+else
+   RM="rm"
+fi
+
+AC_ARG_ENABLE(echo,
+   [AS_HELP_STRING([--enable-echo],
+                   [Turn on strong echoing. @<:@default: disabled@:>@])],
+   [set -x]
+)
+
+MPI_INSTALL=
+AC_ARG_WITH(mpi,
+   [AS_HELP_STRING([--with-mpi=/path/to/implementation],
+                   [The installation prefix path for MPI implementation.])],
+   if test x"$withval" = xyes; then
+      AC_MSG_ERROR(--with-mpi must be given a pathname)
+   else
+      MPI_INSTALL=${withval}
+   fi
+)
+if test "x${MPI_INSTALL}" != x && (! test -d "${MPI_INSTALL}") ; then
+   AC_MSG_ERROR(Directory '${MPI_INSTALL}' specified in --with-mpi does not exist)
+fi
+dnl MPI_INSTALL will be referred in UD_MPI_PATH_PROGS and UD_MPI_PATH_PROG
+dnl defined in acinclude.m4
+
+AC_ARG_VAR(MPICC,  [MPI C compiler, @<:@default: CC@:>@])
+AC_ARG_VAR(MPICXX, [MPI C++ compiler, @<:@default: CXX@:>@])
+AC_ARG_VAR(MPIF77, [MPI Fortran 77 compiler, @<:@default: F77@:>@])
+AC_ARG_VAR(MPIF90, [MPI Fortran 90 compiler, @<:@default: FC@:>@])
+dnl AC_ARG_VAR(CPPFLAGS, [Preprocessor options for C and C++ compilers, e.g. -I<include_dir> if you have headers in a nonstandard directory <include_dir>])
+dnl AC_ARG_VAR(CFLAGS, Debugging and optimization options for the C compiler)
+dnl AC_ARG_VAR(CXXFLAGS, Debugging and optimization options for the C++ compiler)
+dnl AC_ARG_VAR(FFLAGS, Debugging and optimization options for the Fortran 77 compiler)
+dnl AC_ARG_VAR(FCFLAGS, Debugging and optimization options for the Fortran 90 compiler)
+
+dnl Check if MPICC, MPICXX, MPIF77, MPIF90 are set by the user.
+dnl If not, set MPICC equal to CC. Similarly, for MPICXX, MPIF77, and MPIF90
+ac_user_MPICC=$MPICC
+ac_user_MPICXX=$MPICXX
+ac_user_MPIF77=$MPIF77
+ac_user_MPIF90=$MPIF90
+if test "x$MPICC"  = x && test "x$CC"  != x ; then ac_user_MPICC=$CC   ; fi
+if test "x$MPICXX" = x && test "x$CXX" != x ; then ac_user_MPICXX=$CXX ; fi
+if test "x$MPIF77" = x && test "x$F77" != x ; then ac_user_MPIF77=$F77 ; fi
+if test "x$MPIF77" = x && test "x$FC"  != x ; then ac_user_MPIF77=$FC  ; fi
+if test "x$MPIF90" = x && test "x$F90" != x ; then ac_user_MPIF90=$F90 ; fi
+if test "x$MPIF90" = x && test "x$FC"  != x ; then ac_user_MPIF90=$FC  ; fi
+
+CANDIDATE_MPICC="${MPICC} mpicc" 
+CANDIDATE_MPICXX="${MPICXX} mpicxx mpic++ mpiCC" 
+CANDIDATE_MPIF77="${MPIF77} mpif77" 
+CANDIDATE_MPIF90="${MPIF90} mpif90" 
+
+dnl add IBM MPI compilers
+CANDIDATE_MPICC+=" mpcc_r mpcc mpixlc_r mpixlc"
+CANDIDATE_MPICXX+=" mpCC_r mpCC mpixlcxx_r mpixlcxx mpixlC_r mpixlC"
+CANDIDATE_MPIF77+=" mpixlf77_r mpixlf77"
+CANDIDATE_MPIF90+=" mpixlf90_r mpixlf90"
+
+dnl add IBM BGL MPI compilers
+CANDIDATE_MPICC+=" blrts_xlc mpxlc_r mpxlc"
+CANDIDATE_MPICXX+=" blrts_xlC mpxlC_r mpxlC"
+CANDIDATE_MPIF77+=" blrts_xlf mpxlf_r mpxlf"
+CANDIDATE_MPIF90+=" blrts_xlf90 mpxlf90_r mpxlf90 mpxlf95_r mpxlf95"
+
+dnl add Fujitsu MPI compilers
+CANDIDATE_MPICC+=" mpifccpx"
+CANDIDATE_MPICXX+=" mpiFCCpx"
+CANDIDATE_MPIF77+=" mpifrtpx"
+CANDIDATE_MPIF90+=" mpifrtpx"
+
+dnl add Cray MPI compiler wrappers
+CANDIDATE_MPICC+=" cc"
+CANDIDATE_MPICXX+=" CC"
+CANDIDATE_MPIF77+=" ftn"
+CANDIDATE_MPIF90+=" ftn"
+
+dnl add Intel MPI compiler wrappers
+CANDIDATE_MPICC+=" mpiicc icc"
+CANDIDATE_MPICXX+=" mpiicpc icpc"
+CANDIDATE_MPIF77+=" mpiifort mpiifc ifort"
+CANDIDATE_MPIF90+=" mpiifort mpiifc ifort"
+
+dnl find the full path of MPICC from CANDIDATE_MPICC and MPI_INSTALL
+if test "x${ac_user_MPICC}" = x ; then
+   UD_MPI_PATH_PROGS([MPICC], [$CANDIDATE_MPICC])
+else
+   dnl check whether user specified MPICC is valid
+   UD_MPI_PATH_PROG([MPICC], [$ac_user_MPICC])
+fi
+
+if test "x${MPICC}" = x ; then
+   if test "x$ac_user_MPICC" = x ; then
+      ERR_MSG="No MPI C compiler can be found"
+   else
+      ERR_MSG="Specified MPI C compiler \"$ac_user_MPICC\" cannot be found"
+   fi
+   if test "x$MPI_INSTALL" != x ; then
+      ERR_MSG+=" under $MPI_INSTALL"
+   fi
+   AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     $ERR_MSG
+     Parallel netCDF requires a working MPI C compiler. Please specify the
+     location of an MPI C compiler, either in the MPICC environment variable
+     or through --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------])
+fi
+UD_MSG_DEBUG([MPICC=$MPICC])
+
+dnl Now MPICC is configured, do some basic compiler tests
+CC=${MPICC}
+AC_PROG_CC
+dnl AM_PROG_CC_C_O
+
+dnl this call needs at least autoconf version 2.60
+dnl AC_USE_SYSTEM_EXTENSIONS
+
+dnl enable large file support
+AC_SYS_LARGEFILE
+
+dnl UD_PROG_CC_MAKEDEPEND
+
+dnl AC_HEADER_STDC
+dnl AC_CHECK_HEADERS([malloc.h])
+
+dnl check if MPICC works for basic MPI call: MPI_Comm_rank()
+AC_CHECK_FUNC([MPI_Comm_rank], [],
+   dnl maybe -lmpi is needed at link stage
+   [AC_SEARCH_LIBS([MPI_Comm_rank], [mpi mpich], [],
+                 [AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     Invalid MPI compiler specified or detected: "${MPICC}"
+     A working MPI C compiler is required. Please specify the location
+     of one either in the MPICC environment variable or through
+     --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------])
+])])
+
+AC_CHECK_FUNC([MPI_File_open], [],
+   dnl maybe -lmpio is needed at link stage
+   [AC_SEARCH_LIBS([MPI_File_open], [mpio], [],
+                   [AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     The underneath MPI implementation does not support MPI-IO.
+     PnetCDF requires MPI-IO support to work properly. Abort.
+   -----------------------------------------------------------------------])
+])])
+
+dnl check MPI C++ compiler
+AC_ARG_ENABLE(cxx,
+    [AS_HELP_STRING([--disable-cxx],
+                    [Turn off support for the C++ interface,
+                     if you only need the C interface. @<:@default: enabled@:>@])],
+    [enable_cxx=${enableval}], [enable_cxx=auto]
+)
+UD_MSG_DEBUG(enable_cxx=$enable_cxx)
+
+dnl If MPICXX or CXX has not been set by users, then
+dnl search from CANDIDATE_MPICXX and find the full path of MPICXX
+if test "x${enable_cxx}" != xno ; then
+   if test "x${ac_user_MPICXX}" = x ; then
+      UD_MPI_PATH_PROGS([MPICXX], [$CANDIDATE_MPICXX])
+   else
+      dnl check whether user specified MPICXX is valid
+      UD_MPI_PATH_PROG([MPICXX], [$ac_user_MPICXX])
+   fi
+   UD_MSG_DEBUG([MPICXX=$MPICXX])
+
+   if test "x${MPICXX}" = x ; then
+      if test "x$ac_user_MPICXX" = x ; then
+         ERR_MSG="No MPI C++ compiler can be found"
+      else
+         ERR_MSG="Specified MPI C++ compiler \"$ac_user_MPICXX\" cannot be found"
+      fi
+      if test "x$MPI_INSTALL" != x ; then
+         ERR_MSG+=" under $MPI_INSTALL"
+      fi
+      if test "x${enable_cxx}" = xyes ; then
+         dnl --enable-cxx is explicitly set at command line
+         AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Please specify the location of the MPI C++ compiler, either in the
+     MPICXX environment variable or the --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------])
+      else
+         dnl enable_cxx is auto, i.e. --enable-cxx is not set at command line
+         AC_MSG_WARN([
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus the C++ feature is disabled.
+     The location of the MPI C++ compiler can be specified either in the
+     MPICXX environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------])
+      fi
+   fi
+fi
+
+if test "x${enable_cxx}" = xno || test "x${MPICXX}" = x ; then
+   dnl when cxx is explicitly disabled or no MPICXX can be found
+   has_mpicxx=no
+else
+   has_mpicxx=yes
+   CXX=${MPICXX}
+fi
+
+dnl Must invoke AC_PROG_CXX here, because AC_PROG_CXX cannot be called
+dnl conditionally in Automake, otherwise got "error: conditional
+dnl "am__fastdepCXX" was never defined." So, if has_mpicxx is no, then
+dnl AC_PROG_CXX will search for g++. However, g++ will not be used at all.
+AC_PROG_CXX
+
+dnl autoconf 2.59 has not yet implemented AC_PROG_CXX_C_O
+dnl AC_PROG_CXX_C_O
+
+if test "x${has_mpicxx}" = xyes ; then
+   dnl test if MPICXX can compile an MPI-IO program
+   AC_LANG_PUSH(C++)
+   AC_CHECK_FUNC([MPI_File_close], [],
+      dnl maybe -lmpi++ is needed at link stage
+      [AC_SEARCH_LIBS([MPI_File_close], [mpi++ mpichcxx mpi_cxx], [],
+                      [has_mpicxx=no])])
+   AC_LANG_POP(C++)
+   if test "x$has_mpicxx" = xno ; then
+      if test "x${enable_cxx}" = xyes ; then
+         AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     Explicitly requesting C++ feature, but "${MPICXX}"
+     is not a working MPI C++ compiler. Abort.
+   -----------------------------------------------------------------------])
+      else dnl in case enable_cxx is auto
+         AC_MSG_WARN([
+   -----------------------------------------------------------------------
+     "${MPICXX}" is not a working MPI C++ compiler.
+     Thus, the C++ feature is disabled.
+   -----------------------------------------------------------------------])
+      fi
+   else
+      UD_CHECK_MPI_CPP_SEEK_SET
+      UD_MSG_DEBUG(ac_cv_CHECK_MPI_CPP_SEEK_SET=$ac_cv_CHECK_MPI_CPP_SEEK_SET)
+      dnl When using older version Intel compilers 4.x, SEEK_SET will be
+      dnl reported as redefined. We need to add the following C++ preprocessor
+      dnl flags. See doc/README.INTEL
+      if test "x${ac_cv_CHECK_MPI_CPP_SEEK_SET}" = xyes ; then
+         SEEK_SET_REDEFINED=yes
+      fi
+   fi
+fi
+AC_SUBST(has_mpicxx)dnl for src/utils/pnetcdf-config.in
+UD_MSG_DEBUG(has_mpicxx=$has_mpicxx)
+AM_CONDITIONAL(HAS_MPICXX, [test x$has_mpicxx = xyes])
+AM_CONDITIONAL(SEEK_SET_REDEFINED, [test x$ac_cv_CHECK_MPI_CPP_SEEK_SET = xyes])
+
+dnl compute canonical system types
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+
+dnl libtool v2.4.6 was released in 2015-02-15
+dnl Travis CI only has v2.4.2
+LT_PREREQ([2.4.2])
+dnl LT_INIT([dlopen disable-shared])
+dnl LT_INIT([dlopen])
+LT_INIT([disable-shared])
+
+dnl I took the "-ansi" off the CFLAGS for the strict case, as it was
+dnl preventing PATH_MAX from being defined for some of the test files,
+dnl and I was having a tough time figuring out how to get it back! -- RobR
+dnl Note this must be done after the type of C compiler is determined
+AC_ARG_ENABLE(strict,
+    [AS_HELP_STRING([--enable-strict],
+                    [Turn on strict debugging with gcc. @<:@default: disabled@:>@])],
+    [enable_strict=${enableval}], [enable_strict=no]
+)
+
+if test "x${enable_strict}" = xyes; then
+   if test "x${GCC}" = xyes; then
+      CFLAGS+=" -Wall -Wstrict-prototypes -Wmissing-prototypes -Wundef -Wpointer-arith -Wbad-function-cast"
+   else
+      AC_MSG_WARN([--enable-strict is for GNU compiler only])
+      enable_strict=no
+   fi
+fi
+
+AC_ARG_ENABLE(fortran,
+    [AS_HELP_STRING([--disable-fortran],
+                    [Turn off support for the Fortran interface,
+                     if you only need the C interface. @<:@default: enabled@:>@])],
+    [enable_fortran=${enableval}], [enable_fortran=auto]
+)
+
+if test "x${enable_fortran}" = xno ; then
+   has_fortran=no
+else
+   has_fortran=yes
+   if test "x${ac_user_MPIF77}" = x ; then
+      dnl if MPIF77 or F77 has not been set by users, then search from
+      dnl CANDIDATE_MPIF77, and find the full path of MPIF77
+      UD_MPI_PATH_PROGS([MPIF77], [$CANDIDATE_MPIF77])
+   else
+      dnl check whether user specified MPIF77 is valid
+      UD_MPI_PATH_PROG([MPIF77], [$ac_user_MPIF77])
+   fi
+
+   if test "x${MPIF77}" = x ; then
+      has_fortran=no
+      if test "x$ac_user_MPIF77" = x ; then
+         ERR_MSG="No MPI Fortran 77 compiler can be found"
+      else
+         ERR_MSG="Specified MPI Fortran 77 compiler \"$ac_user_MPIF77\" cannot be found"
+      fi
+      if test "x$MPI_INSTALL" != x ; then
+         ERR_MSG+=" under $MPI_INSTALL"
+      fi
+      if test "x${enable_fortran}" = xyes ; then
+         dnl --enable-fortran is explicitly set at command line
+         AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Please specify the location of the MPI Fortran 77 compiler, either in the
+     MPIF77 environment variable or the --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------])
+      else
+         dnl enable_fortran is auto, i.e. --enable-fortran is not set at command line
+         AC_MSG_WARN([
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus, the Fortran feature is disabled.
+     The location of the MPI Fortran 77 compiler can be specified either in the
+     MPIF77 environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------])
+      fi
+   fi
+fi
+
+if test "x${has_fortran}" = xyes ; then
+   if test "x${ac_user_MPIF90}" = x ; then
+      dnl if MPIF90 or F90 has not been set by users, then search from
+      dnl CANDIDATE_MPIF90, and find the full path of MPIF90
+      UD_MPI_PATH_PROGS([MPIF90], [$CANDIDATE_MPIF90])
+   else
+      dnl check whether user specified MPIF90 is valid
+      UD_MPI_PATH_PROG([MPIF90], [$ac_user_MPIF90])
+   fi
+
+   if test "x${MPIF90}" = x ; then
+      has_fortran=no
+      if test "x$ac_user_MPIF90" = x ; then
+         ERR_MSG="No MPI Fortran 90 compiler can be found"
+      else
+         ERR_MSG="Specified MPI Fortran 90 compiler \"$ac_user_MPIF90\" cannot be found"
+      fi
+      if test "x$MPI_INSTALL" != x ; then
+         ERR_MSG+=" under $MPI_INSTALL"
+      fi
+      if test "x${enable_fortran}" = xyes ; then
+         dnl --enable-fortran is explicitly set at command line
+         AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Please specify the location of the MPI Fortran 90 compiler, either in the
+     MPIF90 environment variable or the --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------])
+      else
+         dnl enable_fortran is auto, i.e. --enable-fortran is not set at command line
+         AC_MSG_WARN([
+   -----------------------------------------------------------------------
+     $ERR_MSG.
+     Thus, the Fortran feature is disabled.
+     The location of the MPI Fortran 90 compiler can be specified either in the
+     MPIF90 environment variable or through the --with-mpi configure flag.
+   -----------------------------------------------------------------------])
+      fi
+   fi
+fi
+UD_MSG_DEBUG(has_fortran=${has_fortran})
+UD_MSG_DEBUG([MPIF77=$MPIF77])
+UD_MSG_DEBUG([MPIF90=$MPIF90])
+
+if test "x${has_fortran}" = xyes ; then
+   dnl Check if MPIF77 is a valid MPI compiler
+   F77=${MPIF77}
+   AC_PROG_F77
+   dnl FFLAGS is set in AC_PROG_F77
+   dnl AC_F77_LIBRARY_LDFLAGS
+
+   AC_MSG_CHECKING([if $MPIF77 is a valid MPI compiler])
+   AC_LANG_PUSH([Fortran 77])
+   dnl check if can use mpif.h
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+           include "mpif.h"
+           integer err, rank
+           call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)]])],
+      [valid_mpif77=yes],[valid_mpif77=no])
+   AC_LANG_POP([Fortran 77])
+   AC_MSG_RESULT($valid_mpif77)
+
+   if test "x${valid_mpif77}" = xno ; then
+      has_fortran=no
+      if test "x${enable_fortran}" = xyes ; then
+         AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     Invalid MPI Fortran 77 compiler: "${MPIF77}"
+     A working MPI Fortran 77 compiler is required. Please specify the
+     location of a valid MPI Fortran 77 compiler, either in the MPIF77
+     environment variable or through --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------])
+      else
+         AC_MSG_WARN([
+   -----------------------------------------------------------------------
+     "${MPIF77}" is not a working MPI Fortran 77 compiler.
+     Thus, the Fortran feature is disabled.
+   -----------------------------------------------------------------------])
+      fi
+   fi
+fi
+
+mpi_mod=no
+if test "x${has_fortran}" = xyes ; then
+   dnl Check if MPIF90 is a valid MPI compiler
+   FC=${MPIF90}
+   AC_PROG_FC
+   dnl FCFLAGS is set in AC_PROG_FC
+
+   dnl FCLIBS_save="$FCLIBS"
+   dnl FCLIBS=""
+   dnl AC_FC_LIBRARY_LDFLAGS
+   dnl UD_MSG_DEBUG([before FCLIBS=$FCLIBS])
+   dnl The autoconf macro for finding FCLIBS sometimes makes mistakes
+   dnl (particularly with the Fujitsu frt compiler).  This next step
+   dnl first sees if the FCLIBS is valid with the Fortran compiler
+   dnl This also happens to Solaris Studio Fortran compilers
+   dnl AC_PROG_FC_FCLIBS_VALID
+   dnl Now see if FCLIBS works with the C compiler (remove invalid ones)
+   dnl PAC_PROG_FC_CHECK_FCLIBS
+
+   dnl replace FLIBS and F90LIBS with FCLIBS
+   dnl UD_MSG_DEBUG([after FCLIBS=$FCLIBS])
+   dnl FLIBS="$FCLIBS"
+   dnl F90LIBS="$FCLIBS"
+
+   AC_MSG_CHECKING([if mpi.mod is available])
+   AC_LANG_PUSH([Fortran])
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[        use mpi]])],
+                     [mpi_mod=yes], [mpi_mod=no]
+   )
+   AC_MSG_RESULT($mpi_mod)
+   AC_MSG_CHECKING([if $MPIF90 is a valid MPI compiler])
+   if test "x${mpi_mod}" = xyes ; then
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+           use mpi
+           integer err, rank
+           call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)]])],
+         [valid_mpif90=yes],[valid_mpif90=no]
+      )
+   else
+      dnl mpi.mod is not available, check if can use mpif.h
+      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
+           include "mpif.h"
+           integer err, rank
+           call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)]])],
+         [valid_mpif90=yes],[valid_mpif90=no]
+      )
+   fi
+   AC_LANG_POP([Fortran])
+   AC_MSG_RESULT($valid_mpif90)
+
+   if test "x${valid_mpif90}" = xno ; then
+      has_fortran=no
+      if test "x${enable_fortran}" = xyes ; then
+         AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     Invalid MPI Fortran 90 compiler: "${MPIF90}"
+     A working MPI Fortran 90 compiler is required. Please specify the
+     location of a valid MPI Fortran 90 compiler, either in the MPIF90
+     environment variable or through --with-mpi configure flag. Abort.
+   -----------------------------------------------------------------------])
+      fi
+      AC_MSG_WARN([
+   -----------------------------------------------------------------------
+     "${MPIF90}" is not a working MPI Fortran 90 compiler.
+     Thus, the Fortran feature is disabled.
+   -----------------------------------------------------------------------])
+   else
+      if test "x${mpi_mod}" = xyes ; then
+         USE_MPIF_HEADER="use mpi, only: MPI_OFFSET_KIND"
+      else
+         USE_MPIF_HEADER="include \"mpif.h\""
+      fi
+      AC_SUBST(USE_MPIF_HEADER)
+   fi
+fi
+AC_SUBST(has_fortran)dnl for src/utils/pnetcdf-config.in
+AM_CONDITIONAL(HAS_FORTRAN, [test x$has_fortran = xyes])
+AM_CONDITIONAL(HAVE_MPI_MOD, [test x$mpi_mod = xyes])
+
+if test "x${has_fortran}" = xyes ; then
+   if test "x${enable_strict}" = xyes && test "x${GFC}" = xyes; then
+      dnl not all Fortran compilers recognize -Wall
+      FFLAGS+=" -Wall"
+      FCFLAGS+=" -Wall"
+   fi
+   dnl AC_SUBST(FLIBS)
+   dnl AC_SUBST(FCLIBS)
+   dnl AC_SUBST(F90LIBS)
+   dnl AC_SUBST(FLDFLAGS)
+   dnl AC_SUBST(F90LDFLAGS)
+fi
+
+ac_f77_support_freeform=no
+if test "x${has_fortran}" = xyes ; then
+   FC_saved=${FC}
+   FC=${MPIF77}
+   dnl customized AC_FC_FREEFORM: to just get ac_cv_fc_freeform without
+   dnl appending ac_cv_fc_freeform to FCFLAGS
+   dnl ac_cv_fc_freeform is the flag for enabling Fortran free form
+   dnl we use this flag only in testing programs
+   UD_FC_FREEFORM
+   if test "x${ac_cv_fc_freeform}" != xunknown ; then
+      ac_f77_support_freeform=yes
+      FFREEFORMFLAG=${ac_cv_fc_freeform}
+   fi
+   UD_MSG_DEBUG([FFREEFORMFLAG=$FFREEFORMFLAG])
+   AC_SUBST(FFREEFORMFLAG)
+   FC=${FC_saved}
+fi
+AM_CONDITIONAL(HAVE_F77_SUPPORT_FREEFORM, [test x$ac_f77_support_freeform = xyes])
+
+if test "x${has_fortran}" = xyes ; then
+   dnl GNU Fortran compiler automatically invokes preprocessor for files with
+   dnl extension .F and .F90. To manually invoke the preprocessor on any file,
+   dnl use compiler flag -cpp. To disable, use -nocpp.
+   dnl For other compilers, we need to find the compile flags for Fortran
+   dnl preprocessor.
+   dnl AC_FC_PP_SRCEXT is first introduced in autoconf 2.69
+   dnl steal AC_FC_PP_SRCEXT from autoconf 2.69 to make UD_FC_PP_SRCEXT
+   dnl UD_FC_PP_SRCEXT([F])    dnl sets ac_cv_fc_pp_srcext_F
+   dnl UD_FC_PP_SRCEXT([F90])  dnl sets ac_cv_fc_pp_srcext_F90
+   AC_FC_PP_SRCEXT([F])    dnl sets ac_cv_fc_pp_srcext_F
+   AC_FC_PP_SRCEXT([F90])  dnl sets ac_cv_fc_pp_srcext_F90
+
+   dnl compiler command-line define preprocessor flag, result in ${FC_DEFINE}
+   dnl Not all Fortran compilers use -D
+   dnl UD_FC_PP_DEFINE
+   dnl AC_FC_PP_DEFINE is first introduced in autoconf 2.69
+   AC_FC_PP_DEFINE
+
+   dnl check compiler flags for file extensions in .f .F .f90 .F90
+   AC_FC_SRCEXT([f])
+   AC_FC_SRCEXT([F])
+   AC_FC_SRCEXT([f90])
+   AC_FC_SRCEXT([F90])
+
+   dnl customized AC_FC_FIXEDFORM: to just get ac_cv_fc_fixedform without
+   dnl appending ac_cv_fc_fixedform to FCFLAGS
+   dnl ac_cv_fc_fixedform flag is for enabling Fortran fixed form.
+   dnl we use this flag only in testing programs
+   UD_FC_FIXEDFORM
+   FFIXEDFORMFLAG=${ac_cv_fc_fixedform}
+   UD_MSG_DEBUG([FC=$FC FFIXEDFORMFLAG=$FFIXEDFORMFLAG])
+   AC_SUBST(FFIXEDFORMFLAG)
+
+   dnl Checking for Fortran types also determines the Fortran name mangling
+   dnl and places the value into FCALLSCSUB as the C name corresponding
+   dnl to the Fortran name SUB 
+   AC_FC_FUNC(sub, [FCALLSCSUB])
+
+   dnl determine the correct name mapping
+   case $FCALLSCSUB in
+       SUB)
+           AC_DEFINE(F77_NAME_UPPER,,[Define if Fortran names are uppercase])
+           ;;
+       sub_)
+           dnl This is the hard case.  Gcc uses one _ unless the name includes
+           dnl an underscore, in which case it gets two trailing underscores.
+           dnl Use essentially the same configure code that the original configure
+           dnl used to determine SUB
+           AC_MSG_CHECKING([for C-equivalent to Fortran routine "SUB_A"]) 
+                   dnl "
+           AC_FC_FUNC(sub_a, [FCALLSCSUBA])
+           AC_MSG_RESULT($FCALLSCSUBA)
+           case $FCALLSCSUBA in
+               sub_a__)
+                   AC_DEFINE(F77_NAME_LOWER_2USCORE,,[Define if Fortran names are lower case with two trailing underscore2])
+                   ;;
+               sub_a_)
+                   AC_DEFINE(F77_NAME_LOWER_USCORE,,[Define if Fortran names are lower case with one trailing underscore])
+                   ;;
+               *)
+                   AC_MSG_WARN([Unrecognized Fortran name mapping])
+                   ;;
+           esac
+           ;;
+       sub)
+           AC_DEFINE(F77_NAME_LOWER,,[Define if Fortran names are lower case])
+           ;;
+       *)
+           AC_MSG_WARN([Unrecognized Fortran name mapping])
+           ;;
+   esac
+
+   dnl Some Fortran 77 compilers, such as pgf77, do not allow "_8" modifier,
+   dnl because _8 modifier is a Fortran 90 feature
+   dnl UD_CHECK_PGF77
+   dnl UD_MSG_DEBUG([ac_cv_fc_compiler_pgf77=$ac_cv_fc_compiler_pgf77])
+
+   dnl Check if the Fortran compiler is an NAG
+   UD_CHECK_FC_NAG
+   if test "x${ac_cv_fc_compiler_nag}" = xyes ; then
+      dnl Add -mismatch if they are not set by users
+      if ! echo "${FFLAGS}" | ${EGREP} -q -- "-mismatch" ; then
+         FFLAGS+=" -mismatch"
+      fi
+      if ! echo "${FCFLAGS}" | ${EGREP} -q -- "-mismatch" ; then
+         FCFLAGS+=" -mismatch"
+      fi
+      dnl Add -DNAGFortran
+       FFLAGS+=" -DNAGFortran"
+      FCFLAGS+=" -DNAGFortran"
+   fi
+
+   dnl check Fortran parameter modifier for 8-byte integer type
+   dnl We need this to set the max constants for UINT, INT64, and UINT64
+   UD_FC_CONSTANT_MODIFIER
+   UD_MSG_DEBUG([ac_cv_fc_constant_modifier=$ac_cv_fc_constant_modifier])
+   PNF_INT8_MODIFIER=""
+   if test "x${ac_cv_fc_constant_modifier}" = xnone ; then
+      PNF_FILL_UINT=4294967295
+      PNF_FILL_INT64=-9223372036854775806
+      PNF_FILL_UINT64=18446744073709551614
+      PNF_X_UINT_MAX=4294967295
+      PNF_X_INT8_MIN=-9223372036854775807
+      PNF_X_INT8_MAX=9223372036854775807
+      PNF_X_UINT8_MAX=18446744073709551615
+   else
+      if test "x${ac_cv_fc_constant_modifier}" = xEightByteInt ; then
+         PNF_INT8_MODIFIER="      integer, parameter :: EightByteInt = selected_int_kind(18)"
+      fi
+      PNF_FILL_UINT=4294967295_${ac_cv_fc_constant_modifier}
+      PNF_FILL_INT64=-9223372036854775806_${ac_cv_fc_constant_modifier}
+      PNF_FILL_UINT64=18446744073709551614_${ac_cv_fc_constant_modifier}
+      PNF_X_UINT_MAX=4294967295_${ac_cv_fc_constant_modifier}
+      PNF_X_INT8_MIN=-9223372036854775807_${ac_cv_fc_constant_modifier}
+      PNF_X_INT8_MAX=9223372036854775807_${ac_cv_fc_constant_modifier}
+      PNF_X_UINT8_MAX=18446744073709551615_${ac_cv_fc_constant_modifier}
+   fi
+   AC_SUBST(PNF_INT8_MODIFIER)
+   AC_SUBST(PNF_FILL_UINT)
+   AC_SUBST(PNF_FILL_INT64)
+   AC_SUBST(PNF_FILL_UINT64)
+   AC_SUBST(PNF_X_UINT_MAX)
+   AC_SUBST(PNF_X_INT8_MIN)
+   AC_SUBST(PNF_X_INT8_MAX)
+   AC_SUBST(PNF_X_UINT8_MAX)
+fi
+
+ac_cv_prog_f90_uppercase_mod=no
+if test "x${has_fortran}" = xyes ; then
+   dnl
+   dnl Check Fortran module file extension
+   dnl
+   dnl UD_FC_MODULE_EXTENSION
+   AC_FC_MODULE_EXTENSION
+   dnl UD_FC_MODULE_EXTENSION defines FC_MODEXT
+   if test "x${FC_MODEXT}" = x ; then
+      AC_MSG_ERROR([cannot determine Fortran module file extension!])
+   fi
+   UD_MSG_DEBUG([FC_MODEXT=$FC_MODEXT])
+
+   dnl AC_FC_MODULE_FLAG was first introduced in autoconf 2.69
+   dnl AC_FC_MODULE_FLAG/UD_FC_MODULE_FLAG defines FC_MODINC
+   dnl However, AC_FC_MODULE_FLAG has a bug that mistakenly sets FC_MODINC to
+   dnl -M when Fujitsu frtpx is used. UD_FC_MODULE_FLAG fixes this problem.
+   UD_FC_MODULE_FLAG
+   UD_MSG_DEBUG([FC_MODINC=$FC_MODINC])
+
+   dnl AC_FC_MODULE_OUTPUT_FLAG
+   dnl UD_FC_MODULE_OUTPUT_FLAG
+   dnl UD_FC_MODULE_OUTPUT_FLAG defines FC_MODOUT
+   dnl UD_MSG_DEBUG([FC_MODOUT=$FC_MODOUT])
+
+   dnl
+   dnl Below is to check if a Fortran compiler produces module files with upper
+   dnl case file name, e.g. PNETCDF.mod. However, this does not work for Mac
+   dnl OSX file system which is case insensitive
+   dnl
+   UD_PROG_FC_UPPERCASE_MOD
+fi
+AM_CONDITIONAL(UPPER_CASE_MOD, [test x$ac_cv_prog_f90_uppercase_mod = xyes])
+
+dnl AC_PROG_INSTALL
+
+dnl have_yacc_lex=no
+dnl Starting from PnetCDF 1.5.0, yacc and lex is no longer needed
+dnl see comments in src/utils/ncmpigen/Makefile.in for build rules for
+dnl ncmpigenyy.c and ncmpigentab.c. If rebuild is desired, uncomment
+dnl below checking to check availability of yacc/lex/bison
+dnl AC_PROG_YACC
+dnl dnl if neither bison nor byacc is found, YACC will be set to yacc
+dnl have_yacc_lex=yes
+dnl if test "x$YACC" = xyacc; then
+dnl    AC_CHECK_PROGS(YACC_PATH, yacc)
+dnl    if test "x$YACC_PATH" = x; then
+dnl       dnl cannot find bison or yacc required to build ncmpigentab.c
+dnl       have_yacc_lex=no
+dnl    fi
+dnl fi
+dnl 
+dnl AC_PROG_LEX
+dnl if (test "x$LEX" != xflex) && (test "x$LEX" != xlex) ; then
+dnl    dnl cannot find flex or lex required to build ncmpigenyy.c
+dnl    have_yacc_lex=no
+dnl fi
+dnl AM_CONDITIONAL(HAVE_YACC_LEX, [test x$have_yacc_lex = xyes])
+
+dnl AC_PROG_AWK
+dnl AC_PROG_LN_S
+dnl AC_PROG_MAKE_SET
+dnl AC_SUBST(SET_MAKE)
+AC_PROG_EGREP
+
+dnl AC_PROG_SED and AC_PROG_GREP are only available on autoconf 2.60 and later
+AC_PROG_SED
+dnl check sed command option -i and set SED_I
+UD_PROG_SED_I
+AC_PROG_GREP
+
+dnl YACC and LEX are required to build PnetCDF utility tool ncmpigen
+dnl if configure finds bison then YACC is set to bison -y, so we need to clean
+dnl up the output a bit before testing 
+dnl Below checks commands yacc and lex availability under PATH. However, this
+dnl checking is redundant, as AC_PROG_* did that already
+dnl YACC_CMD="${YACC% *}"
+dnl AC_CHECK_PROG([yacc_cmd], [${YACC_CMD}], [yes], [no])
+dnl AC_CHECK_PROG([lex_cmd],  [${LEX}],      [yes], [no])
+dnl if test "x${yacc_cmd}" = no ; then
+dnl     AC_MSG_ERROR([could not find bison/yacc required by PnetCDF])
+dnl fi
+dnl if test "x${lex_cmd}" = no ; then
+dnl     AC_MSG_ERROR([could not find flex/lex required by PnetCDF])
+dnl fi
+
+UD_PROG_M4
+M4FLAGS+=" -DPNETCDF"
+M4FFLAGS+=" -DPNETCDF"
+
+dnl AM_PROG_AR is first recognized/traced in autoconf 2.68
+dnl Use it only if we want support for unusual archivers such as Microsoft
+dnl lib.
+dnl AM_PROG_AR
+dnl UD_PROG_AR()
+dnl UD_PROG_NM()
+dnl We could use the PAC check for ranlib (it also makes sure that ranlib
+dnl works, which is not always true, particularly when GNU tools are
+dnl installed on a system that does not have (or need) ranlib
+dnl libtoolize: `AC_PROG_RANLIB' is rendered obsolete by `LT_INIT'
+dnl AC_PROG_RANLIB
+
+dnl Check for <stdbool.h> that conforms to C99 requirements
+dnl this is also for using bool type in utf8proc.h/utf8proc.c to support
+dnl special characters in CDF-2 and CDF-5
+AC_HEADER_STDBOOL
+
+dnl AC_C_CONST
+AC_C_INLINE
+
+dnl we do not use struct stat yet
+dnl AC_CHECK_MEMBERS([struct stat.st_blksize])
+
+UD_CHECK_IEEE
+
+dnl cross compile fails with undefined reference to rpl_realloc and rpl_malloc
+dnl AC_FUNC_MALLOC
+dnl AC_FUNC_REALLOC
+
+dnl below checks availability of a bunch C functions, but we have not yet
+dnl implemented alternative calls
+dnl AC_FUNC_ERROR_AT_LINE
+dnl AC_FUNC_MEMCMP
+dnl AC_FUNC_STRTOD
+dnl AC_FUNC_VPRINTF
+dnl AC_CHECK_FUNCS([memset setlocale sqrt strchr strrchr strtol])
+dnl AC_CHECK_LIB([m], [tanh])
+dnl UD_CHECK_LIB_MATH
+AC_CHECK_FUNCS([strerror access unlink])
+
+AC_ARG_ENABLE([debug],
+    [AS_HELP_STRING([--enable-debug],
+                    [Enable PnetCDF internal debug mode. This also enables safe mode.
+                     @<:@default: disabled@:>@])],
+    [debug=${enableval}], [debug=no]
+)
+
+PNETCDF_DEBUG=0
+if test "x${debug}" = xyes; then
+   dnl malloc memory allocation tracing relies on tdelete and tsearch
+   AC_CHECK_HEADERS([search.h])
+   AC_CHECK_FUNCS([tsearch tdelete])
+
+   dnl check required functions for enabling malloc tracing
+   if (test "x${ac_cv_func_tsearch}" = xyes) &&
+      (test "x${ac_cv_func_tdelete}" = xyes) ; then
+      AC_DEFINE(PNC_MALLOC_TRACE)
+   fi
+   PNETCDF_DEBUG=1
+fi
+AC_SUBST(PNETCDF_DEBUG)
+AM_CONDITIONAL(PNETCDF_DEBUG, [test x"$PNETCDF_DEBUG" = x1])
+
+dnl check the size of MPI_Offset. PnetCDF requires it be 8 bytes.
+AC_CHECK_TYPE([MPI_Offset], [], [], [#include <mpi.h>])
+if test "x${ac_cv_type_MPI_Offset}" = xyes; then
+   AC_CHECK_SIZEOF([MPI_Offset], [], [#include <mpi.h>])
+else
+   AC_MSG_ERROR([Unable to find type MPI_Offset in mpi.h])
+fi
+if test "$ac_cv_sizeof_MPI_Offset" -lt "8"; then
+   AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     Building of Parallel NetCDF cannot continue due to the size of
+     MPI_Offset being less than 8 bytes. Please use an MPI library that
+     supports large files. Abort.
+   -----------------------------------------------------------------------])
+fi
+
+AC_CHECK_SIZEOF([MPI_Aint], [], [#include <mpi.h>])
+AM_CONDITIONAL(SIZEOF_MPI_AINT_IS_4, [test x$ac_cv_sizeof_MPI_Aint = x4])
+
+dnl the nonblocking routines build up lists of requests with MPI_Type_struct.
+dnl If MPI_Offset not the same size as MPI_Aint, the arrays passed around will
+dnl get mangled. 
+if test "$ac_cv_sizeof_MPI_Offset" -ne "$ac_cv_sizeof_MPI_Aint"; then
+   AC_MSG_WARN([
+   -----------------------------------------------------------------------
+     MPI_Offset and MPI_Aint are detected of different sizes.
+     The request aggregation feature implemented in non-blocking APIs is
+     thus disabled.
+   -----------------------------------------------------------------------])
+   enable_aggregation=no
+else
+   AC_DEFINE(ENABLE_REQ_AGGREGATION,,[Define if able to support request aggregation in nonblocking routines])
+   enable_aggregation=yes
+fi
+
+dnl check MPI-2 only functions
+AC_CHECK_FUNCS([MPI_Info_dup \
+                MPI_Info_free \
+                MPI_Get_address \
+                MPI_Type_create_subarray \
+                MPI_Type_create_hvector \
+                MPI_Type_create_hindexed \
+                MPI_Type_create_struct \
+                MPI_Type_create_resized \
+                MPI_Type_get_extent])
+
+if test "$ac_cv_func_MPI_Info_dup" = no ; then
+   AC_MSG_ERROR([
+   -----------------------------------------------------------------------
+     Function MPI_Info_dup required by PnetCDF is missing from the MPI
+     library.  Please use an MPI library that supports MPI_Info_dup. Abort.
+   -----------------------------------------------------------------------])
+fi
+
+dnl Check presence of MPI COMBINERS. These are of type int.
+AC_CHECK_DECLS([MPI_COMBINER_DUP,
+                MPI_COMBINER_HVECTOR_INTEGER,
+                MPI_COMBINER_HINDEXED_INTEGER,
+                MPI_COMBINER_SUBARRAY,
+                MPI_COMBINER_DARRAY,
+                MPI_COMBINER_RESIZED,
+                MPI_COMBINER_STRUCT_INTEGER,
+                MPI_COMBINER_INDEXED_BLOCK,
+                MPI_COMBINER_F90_REAL,
+                MPI_COMBINER_F90_INTEGER,
+                MPI_COMBINER_F90_COMPLEX],
+                [], [], [[#include <mpi.h>]])
+
+dnl Check presence of various MPI error classes.
+dnl These could be enums, so we have to do compile checks.
+AC_CHECK_DECLS([MPI_ERR_FILE_EXISTS,
+                MPI_ERR_NO_SUCH_FILE,
+                MPI_ERR_AMODE,
+                MPI_ERR_NOT_SAME,
+                MPI_ERR_BAD_FILE,
+                MPI_ERR_READ_ONLY,
+                MPI_ERR_ACCESS,
+                MPI_ERR_NO_SPACE,
+                MPI_ERR_QUOTA],
+                [], [], [[#include <mpi.h>]])
+
+dnl Check presence of C MPI data types.
+dnl Note they are of type MPI_Datatype, thus cannot use AC_CHECK_DECLS
+UD_CHECK_MPI_DATATYPE(MPI_CHAR)
+UD_CHECK_MPI_DATATYPE(MPI_BYTE)
+UD_CHECK_MPI_DATATYPE(MPI_SIGNED_CHAR)
+UD_CHECK_MPI_DATATYPE(MPI_UNSIGNED_CHAR)
+UD_CHECK_MPI_DATATYPE(MPI_SHORT)
+UD_CHECK_MPI_DATATYPE(MPI_UNSIGNED_SHORT)
+UD_CHECK_MPI_DATATYPE(MPI_INT)
+UD_CHECK_MPI_DATATYPE(MPI_UNSIGNED)
+UD_CHECK_MPI_DATATYPE(MPI_LONG)
+UD_CHECK_MPI_DATATYPE(MPI_FLOAT)
+UD_CHECK_MPI_DATATYPE(MPI_DOUBLE)
+UD_CHECK_MPI_DATATYPE(MPI_LONG_LONG_INT)
+UD_CHECK_MPI_DATATYPE(MPI_UNSIGNED_LONG_LONG)
+UD_CHECK_MPI_DATATYPE(MPI_UB)
+UD_CHECK_MPI_DATATYPE(MPI_LB)
+UD_CHECK_MPI_DATATYPE(MPI_OFFSET)
+AM_CONDITIONAL(DECL_MPI_OFFSET, [test x$ac_cv_CHECK_MPI_DATATYPE_MPI_OFFSET = xyes])
+
+dnl Check for presence of Fortran types
+dnl These could be enums, so we have to do compile checks.
+dnl
+dnl We do this for a couple of reasons.  First, the MPI might have been
+dnl built without Fortran support, in which case these types might not
+dnl exist.  Second, we need to map these types to corresponding C types
+dnl where possible to simplify processing at run time.
+if test "x${has_fortran}" = xyes ; then
+    UD_CHECK_MPI_DATATYPE(MPI_CHARACTER)
+    UD_CHECK_MPI_DATATYPE(MPI_REAL)
+    UD_CHECK_MPI_DATATYPE(MPI_INTEGER)
+    UD_CHECK_MPI_DATATYPE(MPI_DOUBLE_PRECISION)
+    UD_CHECK_MPI_DATATYPE(MPI_INTEGER1)
+    UD_CHECK_MPI_DATATYPE(MPI_INTEGER2)
+    UD_CHECK_MPI_DATATYPE(MPI_INTEGER4)
+    UD_CHECK_MPI_DATATYPE(MPI_INTEGER8)
+    UD_CHECK_MPI_DATATYPE(MPI_INTEGER16)
+    UD_CHECK_MPI_DATATYPE(MPI_REAL4)
+    UD_CHECK_MPI_DATATYPE(MPI_REAL8)
+    UD_CHECK_MPI_DATATYPE(MPI_REAL16)
+    UD_CHECK_MPI_DATATYPE(MPI_COMPLEX8)
+    UD_CHECK_MPI_DATATYPE(MPI_COMPLEX16)
+    UD_CHECK_MPI_DATATYPE(MPI_COMPLEX32)
+fi
+
+AC_C_CHAR_UNSIGNED
+AC_C_BIGENDIAN
+AM_CONDITIONAL(IS_BIGENDIAN, [test x$ac_cv_c_bigendian = xyes])
+AC_SUBST(ac_cv_c_bigendian)dnl for src/utils/pnetcdf-config.in
+
+in_place_swap=yes
+AC_ARG_ENABLE([in-place-swap],
+    [AS_HELP_STRING([--disable-in-place-swap],
+                    [Disable memory in-place byte swap on Little Endian
+                     machines. @<:@default: enabled@:>@])],
+    [in_place_swap=${enableval}], [in_place_swap=yes]
+)
+if test "x${in_place_swap}" = xno ; then
+   if test "x${ac_cv_c_bigendian}" = xyes ; then
+      AC_MSG_WARN([--disable-in-place-swap takes no effect on Big Endian])
+      in_place_swap=yes
+   else
+      AC_DEFINE(DISABLE_IN_PLACE_SWAP)
+   fi
+fi
+AC_SUBST(in_place_swap)dnl for src/utils/pnetcdf-config.in
+
+dnl For big Endian, put buffer needs no byte swap and hence can be declared as
+dnl INTENT(IN). For little Endian, put buffer may be used for byte swap in
+dnl place and hence must be declared as INTENT(INOUT).
+dnl This will configure/produce the file src/binding/f90/api.f90
+if test "x${ac_cv_c_bigendian}" = xyes  || (test "x${in_place_swap}" = xno) ; then
+   INTENTV="IN"
+else
+   INTENTV="INOUT"
+fi
+AC_SUBST(INTENTV)dnl for src/binding/f90/api.fh.in
+
+AC_TYPE_SIZE_T
+AC_TYPE_OFF_T
+AC_TYPE_SSIZE_T
+
+AC_CHECK_TYPES([ptrdiff_t, schar, uchar, ushort, uint, longlong, ulonglong, int64, uint64])
+
+AC_CHECK_SIZEOF(size_t)
+AC_CHECK_SIZEOF(off_t)
+AC_CHECK_SIZEOF(char)
+AC_CHECK_SIZEOF(signed char)
+AC_CHECK_SIZEOF(unsigned char)
+AC_CHECK_SIZEOF(short)
+AC_CHECK_SIZEOF(unsigned short int)
+AC_CHECK_SIZEOF(unsigned short)
+AC_CHECK_SIZEOF(int)
+AC_CHECK_SIZEOF(unsigned int)
+AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(float)
+AC_CHECK_SIZEOF(double)
+AC_CHECK_SIZEOF(long long)
+AC_CHECK_SIZEOF(unsigned long long)
+
+if test "$ac_cv_type_schar" = yes ; then 
+   AC_CHECK_SIZEOF(schar) 
+fi 
+if test "$ac_cv_type_uchar" = yes ; then 
+   AC_CHECK_SIZEOF(uchar) 
+fi 
+if test "$ac_cv_type_ushort" = yes ; then 
+   AC_CHECK_SIZEOF(ushort) 
+fi 
+if test "$ac_cv_type_uint" = yes ; then 
+   AC_CHECK_SIZEOF(uint) 
+fi 
+if test "$ac_cv_type_longlong" = yes ; then 
+   AC_CHECK_SIZEOF(longlong) 
+fi 
+if test "$ac_cv_type_ulonglong" = yes ; then 
+   AC_CHECK_SIZEOF(ulonglong) 
+fi 
+
+if test "x${has_fortran}" = xyes ; then
+   if test "$cross_compiling" = yes; then
+      UD_CHECK_FORTRAN_TYPE([NF_INT1_T], [integer*1 byte "integer(kind=1)"])
+      UD_CHECK_FORTRAN_TYPE([NF_INT2_T], [integer*2 "integer(kind=2)"])
+      UD_CHECK_FORTRAN_TYPE([NF_INT8_T], [integer*8 "integer(kind=8)"])
+   else
+      UD_FORTRAN_TYPES
+   fi
+   AC_SUBST(NF_INT1_T)
+   AC_SUBST(NF_INT2_T)
+   AC_SUBST(NF_INT8_T)
+
+   NFMPI_OFFSET="integer*$ac_cv_sizeof_MPI_Offset"
+   AC_MSG_CHECKING([for Fortran NFMPI_OFFSET "$NFMPI_OFFSET"])
+   dnl "
+   AC_LANG_PUSH([Fortran 77])
+   AC_COMPILE_IFELSE(
+      [AC_LANG_SOURCE([
+            subroutine sub(value)
+            $NFMPI_OFFSET value
+            end
+      ])],
+      [ac_cv_NFMPI_OFFSET=yes], [ac_cv_NFMPI_OFFSET=no]
+   )
+   AC_LANG_POP([Fortran 77])
+   if test "$ac_cv_NFMPI_OFFSET" = yes ; then
+      AC_MSG_RESULT(yes)
+   else
+      AC_MSG_RESULT(no)
+      AC_MSG_ERROR([F77 does not support "$NFMPI_OFFSET"])
+      dnl "
+   fi
+   ${RM} -rf conftest*
+fi
+
+SIZEOF_MPI_OFFSET=$ac_cv_sizeof_MPI_Offset
+AC_SUBST(SIZEOF_MPI_OFFSET)
+
+HAVE_F77_GNU_INT=no
+HAVE_F77_INT1=no
+HAVE_F77_INT2=no
+HAVE_F77_INT8=no
+if test "x${has_fortran}" = xyes ; then
+   UD_CHECK_F77_GNU_INT
+   UD_MSG_DEBUG([ac_cv_f77_gnu_int=$ac_cv_f77_gnu_int])
+   HAVE_F77_GNU_INT=$ac_cv_f77_gnu_int
+   AC_SUBST(HAVE_F77_GNU_INT)
+
+   UD_CHECK_F77_INT1
+   UD_MSG_DEBUG([ac_cv_f77_int1=$ac_cv_f77_int1])
+   HAVE_F77_INT1=$ac_cv_f77_int1
+   AC_SUBST(HAVE_F77_INT1)
+   UD_CHECK_F77_INT2
+   UD_MSG_DEBUG([ac_cv_f77_int2=$ac_cv_f77_int2])
+   HAVE_F77_INT2=$ac_cv_f77_int2
+   AC_SUBST(HAVE_F77_INT2)
+   UD_CHECK_F77_INT8
+   UD_MSG_DEBUG([ac_cv_f77_int8=$ac_cv_f77_int8])
+   HAVE_F77_INT8=$ac_cv_f77_int8
+   AC_SUBST(HAVE_F77_INT8)
+fi
+AM_CONDITIONAL(HAVE_F77_GNU_INT, [test x$HAVE_F77_GNU_INT = xyes])
+AM_CONDITIONAL(HAVE_F77_INT1, [test x$HAVE_F77_INT1 = xyes])
+AM_CONDITIONAL(HAVE_F77_INT2, [test x$HAVE_F77_INT2 = xyes])
+AM_CONDITIONAL(HAVE_F77_INT8, [test x$HAVE_F77_INT8 = xyes])
+
+dnl UD_MAKEWHATIS
+
+dnl
+dnl GNU coverage
+dnl
+dnl This is for internal testing only. It should not be enabled for building a
+dnl production PnetCDF. This is because running an executable compiled with
+dnl coverage will produce an output file named "gmon.out". Since coverage is
+dnl not parallelized, running a program compiled with coverage may cause
+dnl problems on concurrently writing to gmon.out in conflicts, possible
+dnl corrupting the file or program hanging. Thus, make target "ptest" should
+dnl also be disabled when coverage is enabled.
+dnl
+dnl After all other tests, optionally enable coverage,  we do this last
+dnl because legend has it that sometimes on some compilers the coverage flags
+dnl mess up other checks
+dnl
+if test "x${has_fortran}" = xyes ; then
+   enable_f77=yes
+   enable_fc=yes
+fi
+PAC_ENABLE_COVERAGE
+
+if test "x${has_mpicxx}" = xyes ; then
+   UD_CXX_MACRO_FUNC
+   if test "x${ac_cv_cxx_macro_func}" == xyes ; then
+      AC_DEFINE(HAVE_FUNC_MACRO)
+   fi
+   if test "x${ac_cv_cxx_macro_function}" == xyes ; then
+      AC_DEFINE(HAVE_FUNCTION_MACRO)
+   fi
+fi
+
+if test "x${debug}" = xyes; then
+   dnl add -g flag if not presented
+   dnl remove all -O and -fast flags
+   dnl add -O0 to all flags
+   if ! echo "${CFLAGS}" | ${EGREP} -q -- "-g" ; then
+      CFLAGS+=" -g"
+   fi
+   CFLAGS=`echo $CFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
+   CFLAGS+=" -O0"
+
+   if test "x${has_mpicxx}" = xyes ; then
+      if ! echo "${CXXFLAGS}" | ${EGREP} -q -- "-g" ; then
+         CXXFLAGS+=" -g"
+      fi
+      CXXFLAGS=`echo $CXXFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
+      CXXFLAGS+=" -O0"
+   fi
+
+   if test "x${has_fortran}" = xyes ; then
+      if ! echo "${FFLAGS}" | ${EGREP} -q -- "-g" ; then
+         FFLAGS+=" -g"
+      fi
+      if ! echo "${FCFLAGS}" | ${EGREP} -q -- "-g" ; then
+         FCFLAGS+=" -g"
+      fi
+
+       FFLAGS=`echo $FFLAGS  | sed 's/-O. *//g' | sed 's/-fast *//g'`
+      FCFLAGS=`echo $FCFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
+       FFLAGS+=" -O0"
+      FCFLAGS+=" -O0"
+   fi
+fi
+
+chmod u+x ${srcdir}/scripts/install-sh
+
+AC_ARG_ENABLE([subfiling],
+   [AS_HELP_STRING([--enable-subfiling],
+                   [Enable subfiling support. @<:@default: disabled@:>@])],
+   [enable_subfiling=${enableval}], [enable_subfiling=no]
+)
+
+ENABLE_SUBFILING=0
+if test "x$enable_subfiling" = "xyes" ; then
+   AC_DEFINE(ENABLE_SUBFILING)
+   ENABLE_SUBFILING=1
+fi
+AC_SUBST(ENABLE_SUBFILING)
+AM_CONDITIONAL(ENABLE_SUBFILING, [test x$enable_subfiling = xyes])
+
+AC_ARG_ENABLE([erange-fill],
+   [AS_HELP_STRING([--disable-erange-fill],
+                   [Disable use of fill value when out-of-range type
+                    conversion causes NC_ERANGE error. @<:@default: enabled@:>@])],
+   [enable_erange_fill=${enableval}], [enable_erange_fill=yes]
+)
+ENABLE_ERANGE_FILL=0
+if test "x$enable_erange_fill" = "xyes" ; then
+   ENABLE_ERANGE_FILL=1
+fi
+AC_SUBST(ENABLE_ERANGE_FILL)
+AM_CONDITIONAL(ENABLE_ERANGE_FILL, [test x$enable_erange_fill = xyes])
+
+AC_ARG_ENABLE([relax-coord-bound],
+   [AS_HELP_STRING([--enable-relax-coord-bound],
+                   [Enable relaxed error NC_EINVALCOORDS to allow coordinate
+                    start argument equal to dimension size when argument
+                    count is zero. @<:@default: disabled@:>@])],
+   [enable_relax_coord_bound=${enableval}], [enable_relax_coord_bound=no]
+)
+RELAX_COORD_BOUND=0
+if test "x$enable_relax_coord_bound" = "xyes" ; then
+   AC_DEFINE(RELAX_COORD_BOUND)
+   RELAX_COORD_BOUND=1
+fi
+AC_SUBST(RELAX_COORD_BOUND)
+AM_CONDITIONAL([RELAX_COORD_BOUND], [test "x$RELAX_COORD_BOUND" = x1])
+
+AC_ARG_ENABLE([doxygen],
+   [AS_HELP_STRING([--enable-doxygen], [Enable generation of documentation. @<:@default: disabled@:>@])],
+   [enable_doxygen=${enableval}], [enable_doxygen=no]
+)
+AM_CONDITIONAL([BUILD_DOCS], [test "x$enable_doxygen" = xyes])
+
+AC_PATH_PROG([LATEX],  [latex])
+AC_PATH_PROG([DVIPDF], [dvipdf])
+has_latex=no
+if test "x${LATEX}" != x ; then
+    has_latex=yes
+fi
+AC_SUBST(LATEX)
+AC_SUBST(DVIPDF)
+AM_CONDITIONAL([HAS_LATEX], [test "x$has_latex" = xyes])
+
+AC_ARG_ENABLE([file-sync],
+    [AS_HELP_STRING([--disable-file-sync],
+                    [Disable MPI file sync if you know your file system can
+                     provide data consistency. @<:@default: enabled@:>@])],
+    [file_sync=${enableval}], [file_sync=yes]
+)
+if test "x${file_sync}" = xno ; then
+    AC_DEFINE(DISABLE_FILE_SYNC)
+fi
+
+AC_ARG_ENABLE([large-file-test],
+    [AS_HELP_STRING([--enable-large-file-test],
+                    [Enable testing for large (>4GB) file/variable I/O. Note
+                     "make check" can run very slow. @<:@default: disabled@:>@])],
+    [large_file_test=${enableval}], [large_file_test=no]
+)
+AM_CONDITIONAL(RUN_LARGE_FILE_TEST, [test x$large_file_test = xyes])
+
+dnl build test programs and benchmark programs
+AM_CONDITIONAL(BUILD_TESTSETS, [true])
+AM_CONDITIONAL(BUILD_BENCHMARKS_IN_PNETCDF, [true])
+
+AC_ARG_VAR(TESTSEQRUN, [Run command (on one MPI process) for "make check" on cross-compile environment. Example: "aprun -n 1". @<:@default: none@:>@])
+
+AC_ARG_VAR(TESTMPIRUN, [MPI run command for "make ptest", @<:@default: mpiexec -n NP@:>@])
+if test "x${TESTMPIRUN}" = x ; then
+   dnl set default to "mpiexec -n NP"
+   UD_MPI_PATH_PROGS([TESTMPIRUN], [mpiexec mpirun srun])
+   if test "x${TESTMPIRUN}" != x ; then
+      TESTMPIRUN+=" -n NP"
+   fi
+fi
+
+AC_ARG_VAR(TESTOUTDIR, [Output file directory for "make check" and "make ptest", @<:@default: ./@:>@])
+if test "x${TESTOUTDIR}" = x ; then
+   dnl set default to current directory
+   TESTOUTDIR=.
+fi
+
+dnl find if gcc is available for compiling ncoffsets to run in sequential
+AC_PATH_PROG([SEQ_CC], [gcc], [$MPICC])
+AC_SUBST(SEQ_CC)
+
+dnl Configuration Date
+if test "x$SOURCE_DATE_EPOCH" != "x" ; then
+    AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date -u -d "${SOURCE_DATE_EPOCH}"`"
+else
+    AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date`"
+fi
+
+dnl Enable creation of libtool-style versioning or no versioning
+AC_ARG_ENABLE(versioning,
+        [AC_HELP_STRING([--disable-versioning],[Disable library versioning. @<:@default: enabled@:>@])],
+        [enable_versioning=${enableval}], [enable_versioning=yes]
+)
+dnl For libtool ABI versioning rules see:
+dnl http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
+dnl Update the version information only immediately before a public release.
+dnl PnetCDF starts with 1:0:0 (shared library is first supported in 1.9.0)
+dnl because some package distributors, such as Debian, may have already built
+dnl PnetCDF with shared libraries.
+ABIVERSION="1:0:0"
+AC_SUBST(ABIVERSION)
+if test "$enable_versioning" = "yes" ; then
+   ABIVERSIONFLAGS="-version-info \$(ABIVERSION)"
+else
+   ABIVERSIONFLAGS="-avoid-version"
+fi
+AC_SUBST(ABIVERSIONFLAGS)
+
+dnl AC_CONFIG_HEADERS([src/binding/f77/nfconfig_inc])
+AC_CONFIG_FILES(Makefile \
+                src/Makefile \
+                src/dispatchers/Makefile \
+                src/libs/Makefile \
+                src/include/Makefile \
+                src/include/pnetcdf.h \
+                src/drivers/Makefile \
+                src/drivers/common/Makefile \
+                src/drivers/include/Makefile \
+                src/drivers/ncmpio/Makefile \
+                src/drivers/ncfoo/Makefile \
+                src/binding/Makefile \
+                src/binding/cxx/Makefile \
+                src/binding/f77/Makefile \
+                src/binding/f77/pnetcdf.inc \
+                src/binding/f90/Makefile \
+                src/binding/f90/pnetcdf.f90 \
+                src/binding/f90/api.fh \
+                src/binding/f90/nfmpi_constants.fh \
+                src/utils/Makefile \
+                src/utils/ncoffsets/Makefile \
+                src/utils/pnetcdf_version/Makefile \
+                src/utils/ncmpivalid/Makefile \
+                src/utils/ncmpidiff/Makefile \
+                src/utils/ncmpidump/Makefile \
+                src/utils/ncmpigen/Makefile \
+                src/utils/pnetcdf-config \
+                src/packaging/Makefile \
+                src/packaging/pnetcdf.pc \
+                examples/Makefile \
+                examples/C/Makefile \
+                examples/tutorial/Makefile \
+                examples/CXX/Makefile \
+                examples/F77/Makefile \
+                examples/F90/Makefile \
+                benchmarks/Makefile \
+                benchmarks/C/Makefile \
+                benchmarks/FLASH-IO/Makefile \
+                doc/Makefile \
+                doc/pnetcdf-api/Makefile \
+                man/Makefile \
+                test/Makefile \
+                test/common/Makefile \
+                test/C/Makefile \
+                test/fandc/Makefile \
+                test/nc_test/Makefile \
+                test/cdf_format/Makefile \
+                test/header/Makefile \
+                test/testcases/Makefile \
+                test/nonblocking/Makefile \
+                test/largefile/Makefile \
+                test/CXX/Makefile \
+                test/subfile/Makefile \
+                test/nf_test/Makefile \
+                test/nf_test/tests.inc \
+                test/nf90_test/Makefile \
+                test/nf90_test/tests.inc \
+                test/F90/Makefile \
+)
+
+dnl The following dependency is for configure.in and configure
+dnl See autoconf manual 2.69, Section 4.8.5 Automatic Remaking
+dnl AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
+
+dnl build ncfoo driver only in debug mode
+AM_CONDITIONAL(BUILD_DRIVER_FOO, [test x${debug} = xyes])
+
+AC_SUBST(enable_static)
+AC_SUBST(enable_shared)
+
+AC_OUTPUT
+echo "------------------------------------------------------------------------------"
+echo \
+"
+   ${PACKAGE_NAME} Version ${PACKAGE_VERSION}
+
+   Features:  Build static libraries                  - ${enable_static}
+              Build shared libraries                  - ${enable_shared}
+              Build Fortran APIs                      - ${has_fortran}
+              Build C++ APIs                          - ${has_mpicxx}"
+if test "x${enable_aggreg}" = xno; then
+   echo "\
+              Request aggregation in nonblocking APIs - OFF"
+fi
+if test "x${enable_erange_fill}" = xno; then
+   echo "\
+              Fill variables when NC_ERANGE occurs    - OFF"
+fi
+if test "x${enable_subfiling}" = xyes; then
+   echo "\
+              Build subfiling support                 - ON"
+fi
+if test "x${enable_relax_coord_bound}" = xyes; then
+   echo "\
+              Relax start coordinate bound check      - ON"
+fi
+if test "x${ac_cv_c_bigendian}" = xno  && (test "x${in_place_swap}" = xno) ; then
+   echo "\
+              Memory in-place byte swap               - OFF"
+fi
+if test "x${large_file_test}" = xyes; then
+   echo "\
+              Testing large file/variable I/O         - ON"
+fi
+if test "x${debug}" = xyes; then
+   echo "\
+              PnetCDF internal debug mode             - ON"
+fi
+if test "x${has_fortran}" = xyes && (test "x${ac_f77_support_freeform}" = xno) ; then
+   echo "\
+              Support free form in Fortran 77         - OFF"
+fi
+
+echo "\
+
+   Compilers: MPICC    = ${MPICC}"
+if test "${has_mpicxx}" = yes ; then
+   echo "\
+              MPICXX   = ${MPICXX}"
+fi
+if test "${has_fortran}" = yes ; then
+   echo "\
+              MPIF77   = ${MPIF77}
+              MPIF90   = ${MPIF90}"
+fi
+echo "\
+              CFLAGS   = ${CFLAGS}"
+if test "x${CPPFLAGS}" != x ; then
+   echo "\
+              CPPFLAGS = ${CPPFLAGS}"
+fi
+if test "${has_mpicxx}" = yes ; then
+   echo "\
+              CXXFLAGS = ${CXXFLAGS}"
+fi
+if test "${has_fortran}" = yes ; then
+   echo "\
+              FFLAGS   = ${FFLAGS}
+              FCFLAGS  = ${FCFLAGS}"
+fi
+if test "x${LDFLAGS}" != x ; then
+   echo "\
+              LDFLAGS  = ${LDFLAGS}"
+fi
+if test "x${LIBS}" != x ; then
+   echo "\
+              LIBS     = ${LIBS}"
+fi
+echo "\
+
+   Now run 'make' to build the library and utility tools.
+   Then run 'make @<:@<target>@:>@' for testing and installation, where the
+   optional <target> can be:
+              tests    - build all test programs (build only, no run)
+              check    - run sequential test programs
+              ptest    - run parallel test programs on 4 MPI processes
+              ptests   - run parallel test programs on 3,4,6,8 MPI processes
+              install  - install PnetCDF library in ${prefix}
+
+------------------------------------------------------------------------------"
+
diff --git a/configure.in b/configure.in
deleted file mode 100644
index bad66e9..0000000
--- a/configure.in
+++ /dev/null
@@ -1,1387 +0,0 @@
-AC_REVISION($Id: configure.in 2853 2017-01-28 07:47:58Z wkliao $)dnl
-dnl -*- Mode: shell-script-mode; -*-
-dnl Process this file with GNU autoconf(1) to produce a configure script.
-dnl
-
-AC_PREREQ([2.59])
-AC_INIT([parallel-netcdf],[1.8.1],[parallel-netcdf at mcs.anl.gov])
-
-dnl ncconfig.h.in will be created by autoreconf (autoheader)
-AC_CONFIG_HEADERS([src/lib/ncconfig.h])
-AC_CONFIG_SRCDIR([src/lib/pnetcdf.h.in])
-
-AC_CONFIG_AUX_DIR([./scripts])
-
-CONFIGURE_ARGS_CLEAN=`echo $* | tr '"' ' '`
-
-dnl parse the version numbers to 4 env variables
-PNETCDF_VERSION_MAJOR=`echo ${PACKAGE_VERSION} | cut -d. -f1`
-PNETCDF_VERSION_MINOR=`echo ${PACKAGE_VERSION} | cut -d. -f2`
-PNETCDF_VERSION_SUB=`echo ${PACKAGE_VERSION} | cut -d. -f3`
-PNETCDF_VERSION_PRE=`echo ${PACKAGE_VERSION} | cut -d. -f4`
-
-dnl Note major, minor, and sub are required, but pre is not.
-PNETCDF_VERSION=${PACKAGE_VERSION}
-
-dnl Do not change the following line, It is set by SVN automatically.
-dnl It defines PNETCDF_RELEASE_DATE, a string that will be used in
-dnl ncmpi_inq_libvers() to generate release date
-SVN_DATE="$LastChangedDate: 2017-01-28 01:47:58 -0600 (Sat, 28 Jan 2017) $"
-PNETCDF_RELEASE_DATE2=`echo $SVN_DATE | cut -d' ' -f2`
-PNETCDF_RELEASE_DATE=`echo $SVN_DATE | cut -d' ' -f6,7,8 | cut -d')' -f1`
-
-dnl user defined macro for printing messages for debugging
-_DEBUG=no
-AC_DEFUN([UD_MSG_DEBUG],
-         [if test "x${_DEBUG}" = xyes ; then
-             AC_MSG_NOTICE([DEBUG: $1])
-          fi
-         ]
-)
-
-UD_MSG_DEBUG([PNETCDF_VERSION_MAJOR=$PNETCDF_VERSION_MAJOR])
-UD_MSG_DEBUG([PNETCDF_VERSION_MINOR=$PNETCDF_VERSION_MINOR])
-UD_MSG_DEBUG([PNETCDF_VERSION_SUB=$PNETCDF_VERSION_SUB])
-UD_MSG_DEBUG([PNETCDF_VERSION_PRE=$PNETCDF_VERSION_PRE])
-UD_MSG_DEBUG([PNETCDF_VERSION=$PNETCDF_VERSION])
-UD_MSG_DEBUG([PNETCDF_RELEASE_DATE=$PNETCDF_RELEASE_DATE])
-
-dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION_MAJOR, $PNETCDF_VERSION_MAJOR, major version number)
-dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION_MINOR, $PNETCDF_VERSION_MINOR, minor version number)
-dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION_SUB, $PNETCDF_VERSION_SUB, sub version number)
-dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION_PRE, $PNETCDF_VERSION_PRE, pre-release string)
-dnl AC_DEFINE_UNQUOTED(PNETCDF_VERSION, ["$PNETCDF_VERSION"], full PnetCDF version string)
-dnl AC_DEFINE_UNQUOTED(PNETCDF_RELEASE_DATE, ["$PNETCDF_RELEASE_DATE"], PnetCDF release date string)
-dnl AC_DEFINE_UNQUOTED(CONFIGURE_ARGS_CLEAN, ["$CONFIGURE_ARGS_CLEAN"], configure command-line arguments used)
-
-AC_SUBST(PNETCDF_VERSION_MAJOR)
-AC_SUBST(PNETCDF_VERSION_MINOR)
-AC_SUBST(PNETCDF_VERSION_SUB)
-AC_SUBST(PNETCDF_VERSION_PRE)
-AC_SUBST(PNETCDF_VERSION)
-AC_SUBST(PNETCDF_RELEASE_DATE)
-AC_SUBST(PNETCDF_RELEASE_DATE2)
-AC_SUBST(PACKAGE_VERSION)
-AC_SUBST(CONFIGURE_ARGS_CLEAN)
-
-dnl these used to live in acconfig.h
-dnl autoheader only adds these templates to the first invocation of AC_CONFIG_HEADERS
-AH_TEMPLATE([NCBYTE_T],                 [Type of NC_BYTE])
-AH_TEMPLATE([NCSHORT_T],                [Type of NC_SHORT])
-AH_TEMPLATE([NF_DOUBLEPRECISION_IS_C_], [C type for Fortran double])
-AH_TEMPLATE([NF_INT1_IS_C_],            [C type for Fortran INT1])
-AH_TEMPLATE([NF_INT1_T],                [Type for Fortran INT1])
-AH_TEMPLATE([NF_INT2_IS_C_],            [C type for Fortran INT2])
-AH_TEMPLATE([NF_INT2_T],                [Type for Fortran INT2])
-AH_TEMPLATE([NF_INT_IS_C_],             [C type for Fortran INT])
-AH_TEMPLATE([NF_INT8_IS_C_],            [C type for Fortran INT8])
-AH_TEMPLATE([NF_INT8_T],                [Type for Fortran INT8])
-AH_TEMPLATE([NF_REAL_IS_C_],            [C type for Fortran REAL])
-AH_TEMPLATE([NO_IEEE_FLOAT],            [Does system have IEEE FLOAT])
-AH_TEMPLATE([DISABLE_FILE_SYNC],        [Define if to disable MPI_File_sync])
-AH_TEMPLATE([DISABLE_IN_PLACE_SWAP],    [Define if to disable in-place byte swap])
-AH_TEMPLATE([ENABLE_SUBFILING],         [Define if to enable subfiling feature])
-AH_TEMPLATE([PNC_MALLOC_TRACE],         [Define if to enable malloc tracing])
-AH_TEMPLATE([HAVE_FUNC_MACRO],          [Define if C++ macro __func__ is defined])
-AH_TEMPLATE([HAVE_FUNCTION_MACRO],      [Define if C++ macro __FUNCTION__ is defined])
-AH_TEMPLATE([RELAX_COORD_BOUND],        [Define if relaxed coord check is enabled])
-
-dnl an option to use a customized rm command
-AC_ARG_VAR(RM, Command for deleting files or directories. default: rm)
-if test "x${RM}" != x ; then
-   AC_MSG_CHECKING(rm )
-   if ! test -f ${RM} ; then
-      AC_CHECK_PROG([rm_cmd], [${RM}], [yes], [no])
-      if test "x${rm_cmd}" = xyes ; then
-         RM=${RM}
-      fi
-   else
-      RM=${RM}
-   fi
-   AC_MSG_RESULT(using $RM)
-else
-   RM="rm"
-fi
-AC_SUBST(RM)
-
-AC_ARG_ENABLE(echo,
-   [AS_HELP_STRING([--enable-echo],
-                   [Turn on strong echoing. @<:@default: disabled@:>@])],
-   [set -x]
-)
-
-MPI_INSTALL=
-AC_ARG_WITH(mpi,
-   [AS_HELP_STRING([--with-mpi=/path/to/implementation],
-                   [installation prefix for MPI implementation])],
-   if test x"$withval" = xyes; then
-      AC_MSG_ERROR(--with-mpi must be given a pathname)
-   else
-      MPI_INSTALL=${withval}
-   fi
-)
-if test "x${MPI_INSTALL}" != x && (! test -d "${MPI_INSTALL}") ; then
-   AC_MSG_ERROR(Directory '${MPI_INSTALL}' specified in --with-mpi does not exist)
-fi
-
-AC_ARG_VAR(MPICC,  MPI C compiler)
-AC_ARG_VAR(MPICXX, MPI C++ compiler)
-AC_ARG_VAR(MPIF77, MPI Fortran 77 compiler)
-AC_ARG_VAR(MPIF90, MPI Fortran 90 compiler)
-AC_ARG_VAR(CC,     Overwritten by MPICC  if MPICC is set)
-AC_ARG_VAR(CXX,    Overwritten by MPICXX if MPICXX is set)
-AC_ARG_VAR(F77,    Overwritten by MPIF77 if MPIF77 is set)
-AC_ARG_VAR(FC,     Overwritten by MPIF90 if MPIF90 is set)
-AC_ARG_VAR(CFLAGS, Debugging and optimization options for the C compiler)
-AC_ARG_VAR(CPPFLAGS, [Preprocessor options for C and C++ compilers, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir>])
-AC_ARG_VAR(CXXFLAGS, Debugging and optimization options for the C compiler)
-AC_ARG_VAR(FFLAGS, Debugging and optimization options for the Fortran 77 compiler)
-AC_ARG_VAR(FCFLAGS, Debugging and optimization options for the Fortran 90 compiler)
-AC_ARG_VAR(FPPFLAGS, [Preprocessor options for Fortran compilers, e.g. -I<include dir>])
-
-dnl Check if MPICC, MPICXX, MPIF77, MPIF90 are set by the user.
-dnl If not, set MPICC equal to CC. Similarly, for MPICXX, MPIF77, and MPIF90
-if test "x$MPICC"  = x && test "x$CC"  != x ; then MPICC=$CC   ; fi
-if test "x$MPICXX" = x && test "x$CXX" != x ; then MPICXX=$CXX ; fi
-if test "x$MPIF77" = x && test "x$F77" != x ; then MPIF77=$F77 ; fi
-if test "x$MPIF77" = x && test "x$FC"  != x ; then MPIF77=$FC  ; fi
-if test "x$MPIF90" = x && test "x$F90" != x ; then MPIF90=$F90 ; fi
-if test "x$MPIF90" = x && test "x$FC"  != x ; then MPIF90=$FC  ; fi
-
-CANDIDATE_MPICC="${MPICC} mpicc"
-CANDIDATE_MPICXX="${MPICXX} mpicxx mpic++ mpiCC"
-CANDIDATE_MPIF77="${MPIF77} mpif77"
-CANDIDATE_MPIF90="${MPIF90} mpif90"
-
-dnl add IBM MPI compilers
-CANDIDATE_MPICC="${CANDIDATE_MPICC} mpcc_r mpcc mpixlc_r mpixlc"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} mpCC_r mpCC mpixlcxx_r mpixlcxx mpixlC_r mpixlC"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} mpixlf77_r mpixlf77"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} mpixlf90_r mpixlf90"
-
-dnl add IBM BGL MPI compilers
-CANDIDATE_MPICC="${CANDIDATE_MPICC} blrts_xlc mpxlc_r mpxlc"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} blrts_xlC mpxlC_r mpxlC"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} blrts_xlf mpxlf_r mpxlf"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} blrts_xlf90 mpxlf90_r mpxlf90 mpxlf95_r mpxlf95"
-
-dnl add Fujitsu MPI compilers
-CANDIDATE_MPICC="${CANDIDATE_MPICC} mpifccpx"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} mpiFCCpx"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} mpifrtpx"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} mpifrtpx"
-
-dnl add Cray MPI compiler wrappers
-CANDIDATE_MPICC="${CANDIDATE_MPICC} cc"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} CC"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} ftn"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} ftn"
-
-dnl add Intel MPI compiler wrappers
-CANDIDATE_MPICC="${CANDIDATE_MPICC} mpiicc icc"
-CANDIDATE_MPICXX="${CANDIDATE_MPICXX} mpiicpc icpc"
-CANDIDATE_MPIF77="${CANDIDATE_MPIF77} mpiifort mpiifc ifort"
-CANDIDATE_MPIF90="${CANDIDATE_MPIF90} mpiifort mpiifc ifort"
-
-UD_CHECK_MPI_COMPILER([MPICC], [$CANDIDATE_MPICC])
-if test "x${MPICC}" = x ; then
-   AC_MSG_ERROR([
-   -----------------------------------------------------------------------
-    No MPI C compiler can be found. Parallel netCDF requires an MPI C
-    compiler. Please specify the location of one either with the MPICC
-    environment variable or the --with-mpi configure flag
-   -----------------------------------------------------------------------])
-fi
-
-CC=${MPICC}
-AC_SUBST(MPICC)
-
-dnl Now MPICC is configured, let's do some basic compiler tests
-AC_PROG_CC
-
-dnl this call needs at least autoconf version 2.60
-dnl AC_USE_SYSTEM_EXTENSIONS
-
-dnl enable large file support
-AC_SYS_LARGEFILE
-
-UD_PROG_CC_MAKEDEPEND
-
-dnl AC_HEADER_STDC
-dnl AC_CHECK_HEADERS([malloc.h])
-
-# check if MPICC works for basic MPI call: MPI_Comm_rank()
-AC_CHECK_FUNC([MPI_Comm_rank], [],
-   dnl maybe -lmpi is needed at link stage
-   [AC_SEARCH_LIBS([MPI_Comm_rank], [mpi mpich], [],
-                 [AC_MSG_ERROR([
-    ------------------------------------------------------------
-     Invalid MPI compiler specified or detected: "${MPICC}"
-     A working MPI compiler is required. Please specify the location
-     of one either with the MPICC environment variable or the
-     --with-mpi configure flag
-    ------------------------------------------------------------])
-])])
-
-
-AC_ARG_ENABLE([mpi-io-test],
-   [AS_HELP_STRING([--disable-mpi-io-test],
-                   [Disable check for MPI-IO support in MPI implementation,
-                    if you know your MPI implementation has MPI-IO support
-                    but the configure test fails to find it.
-                    @<:@default: enabled@:>@])],
-   [enable_mpi_io_test=${enableval}], [enable_mpi_io_test=yes]
-)
-
-if test "x${enable_mpi_io_test}" = xyes ; then
-   AC_CHECK_FUNC([MPI_File_open], [],
-      dnl maybe -lmpio is needed at link stage
-      [AC_SEARCH_LIBS([MPI_File_open], [mpio], [],
-                    [AC_MSG_ERROR([
-            ------------------------------------------------------------
-             MPI implementation does not support MPI-IO
-             PnetCDF requires MPI-IO support to work properly.
-            ------------------------------------------------------------])]
-   )])
-fi
-
-dnl check MPI C++ compiler
-AC_ARG_ENABLE(cxx,
-    [AS_HELP_STRING([--disable-cxx],
-                    [Turn off support for the C++ interface,
-                     if you only need the C interface. @<:@default: enabled@:>@])],
-    [enable_cxx=${enableval}], [enable_cxx=auto]
-)
-
-if test "x${enable_cxx}" != xno ; then
-   UD_CHECK_MPI_COMPILER([MPICXX], [$CANDIDATE_MPICXX])
-
-   if test "x${MPICXX}" = x ; then
-      AC_MSG_ERROR([
-         ------------------------------------------------------------
-           configure cannot find a C++ compiler. Please specify the
-           locations of the compiler either with the MPICXX
-           environment variable or the --with-mpi configure flag.
-         ------------------------------------------------------------])
-      has_mpicxx=no
-   else
-      CXX=${MPICXX}
-      AC_SUBST(MPICXX)
-      has_mpicxx=yes
-
-      dnl UD_PROG_CXX
-      AC_PROG_CXX(${MPICXX})
-      dnl autoconf 2.5.9 has not yet implemented AC_PROG_CXX_C_O
-      dnl AC_PROG_CXX_C_O
-
-      dnl test if MPICXX can compile an MPI-IO program
-      if test "x${enable_mpi_io_test}" = xyes ; then
-          AC_LANG_PUSH(C++)
-          AC_CHECK_FUNC([MPI_File_close], [],
-             dnl maybe -lmpi++ is needed at link stage
-             [AC_SEARCH_LIBS([MPI_File_close], [mpi++ mpichcxx mpi_cxx], [],
-                 [has_mpicxx=no
-                  MPICXX=
-                  AC_MSG_WARN([
-                  ----------------------------------------------------------
-                   MPI C++ implementation does not support MPI-IO
-                   Disabling C++ testing programs
-                  ----------------------------------------------------------])]
-          )])
-          AC_LANG_POP(C++)
-      fi
-   fi
-   if test "x${has_mpicxx}" = xyes ; then
-      UD_CHECK_MPI_CPP_SEEK_SET
-      UD_MSG_DEBUG(ac_cv_CHECK_MPI_CPP_SEEK_SET=$ac_cv_CHECK_MPI_CPP_SEEK_SET)
-      if test "x${ac_cv_CHECK_MPI_CPP_SEEK_SET}" = xyes ; then
-         CXXCPPFLAGS="${CXXCPPFLAGS} -DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX"
-      fi
-   fi
-else
-has_mpicxx=no
-fi
-AC_SUBST(has_mpicxx)
-
-dnl I took the "-ansi" off the CFLAGS for the strict case, as it was
-dnl preventing PATH_MAX from being defined for some of the test files,
-dnl and I was having a tough time figuring out how to get it back! -- RobR
-dnl Note this must be done after the type of C compiler is determined
-AC_ARG_ENABLE(strict,
-    [AS_HELP_STRING([--enable-strict],
-                    [Turn on strict debugging with gcc. @<:@default: disabled@:>@])],
-    [enable_strict=${enableval}], [enable_strict=no]
-)
-
-if test "x${enable_strict}" = xyes; then
-   if test "x${GCC}" = xyes; then
-      CPPFLAGS="${CPPFLAGS} -Wall -Wstrict-prototypes -Wmissing-prototypes -Wundef -Wpointer-arith -Wbad-function-cast"
-      CXXCPPFLAGS="${CXXCPPFLAGS} -Wall -Wundef -Wpointer-arith"
-   else
-      AC_MSG_WARN([--enable-strict is for GNU compiler only])
-      enable_strict=no
-   fi
-fi
-AC_SUBST(CXXCPPFLAGS)
-
-AC_ARG_ENABLE(fortran,
-    [AS_HELP_STRING([--disable-fortran],
-                    [Turn off support for the Fortran interface,
-                     if you only need the C interface. @<:@default: enabled@:>@])],
-    [enable_fortran=${enableval}], [enable_fortran=auto]
-)
-
-if test "x${enable_fortran}" != xno ; then
-    UD_CHECK_MPI_COMPILER([MPIF77], [$CANDIDATE_MPIF77])
-    UD_CHECK_MPI_COMPILER([MPIF90], [$CANDIDATE_MPIF90])
-fi
-if test "x${enable_fortran}" = xyes ; then
-   dnl user explicitly requests to build Fortran APIs
-   if test "x${MPIF77}" = x && test "x${MPIF90}" = x ; then
-      AC_MSG_ERROR([
-         ------------------------------------------------------------
-           Fortran support is explicitly requested, but configure
-           cannot find a Fortran 77 or Fortran 90 compiler. Please
-           specify the locations of the compilers either with the
-           MPIF77 MPIF90 environment variables or the --with-mpi
-           configure flag.
-         ------------------------------------------------------------])
-   fi
-fi
-
-dnl AC_MSG_NOTICE(enable_fortran=${enable_fortran})
-
-dnl Check if MPIF90 is a valid MPI compiler
-if test "x${MPIF90}" != x ; then
-   FC=${MPIF90}
-   AC_PROG_FC
-   dnl FCFLAGS is set in AC_PROG_FC
-
-   FCLIBS_save="$FCLIBS"
-   FCLIBS=""
-   AC_FC_LIBRARY_LDFLAGS
-   UD_MSG_DEBUG([before FCLIBS=$FCLIBS])
-   dnl The autoconf macro for finding FCLIBS sometimes makes mistakes
-   dnl (particularly with the Fujitsu frt compiler).  This next step
-   dnl first sees if the FCLIBS is valid with the Fortran compiler
-   dnl This also happens to Solaris Studio Fortran compilers
-   dnl AC_PROG_FC_FCLIBS_VALID
-   dnl Now see if FCLIBS works with the C compiler (remove invalid ones)
-   PAC_PROG_FC_CHECK_FCLIBS
-
-   dnl replace FLIBS and F90LIBS with FCLIBS
-   UD_MSG_DEBUG([after FCLIBS=$FCLIBS])
-   FLIBS="$FCLIBS"
-   F90LIBS="$FCLIBS"
-
-   dnl We use F90FLAGS for debugging and optimization options for Fortran 90 programs
-   F90FLAGS=${FCFLAGS}
-   AC_SUBST(F90FLAGS)
-
-   AC_LANG_PUSH([Fortran])
-   AC_MSG_CHECKING([if mpi.mod is available])
-   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[        use mpi]])],
-                     [mpi_mod=yes], [mpi_mod=no]
-   )
-   AC_MSG_RESULT($mpi_mod)
-   AC_MSG_CHECKING([if MPIF90 is valid])
-   if test "x${mpi_mod}" = xyes ; then
-      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[        use mpi
-        integer err, rank
-        call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)]])],
-                           [valid_mpif90=yes],[valid_mpif90=no]
-      )
-   else
-      dnl mpi.mod is not available, check if can use mpif.h
-      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[        include "mpif.h"
-        integer err, rank
-        call MPI_Comm_rank(MPI_COMM_WORLD, rank, err)]])],
-                           [valid_mpif90=yes],[valid_mpif90=no]
-      )
-   fi
-   AC_MSG_RESULT($valid_mpif90)
-   AC_LANG_POP([Fortran])
-   if test "x${valid_mpif90}" = xno ; then
-      if test "x${enable_fortran}" = xyes ; then
-         AC_MSG_ERROR([
-            ------------------------------------------------------------
-              Invalid MPI Fortran 90 compiler specified: "${MPIF90}"
-              A working MPI compiler is required. Please specify the
-              location of one either with the MPIF90 environment
-              variable or the --with-mpi configure flag.
-            ------------------------------------------------------------])
-      fi
-      AC_MSG_WARN([
-         ------------------------------------------------------------
-           Invalid MPI Fortran 90 compiler: "${MPIF90}"
-           Fortran feature is disabled
-         ------------------------------------------------------------])
-      enable_fortran=no
-   else
-      if test "x${mpi_mod}" = xyes ; then
-         USE_MPIF_HEADER="use mpi, only: MPI_OFFSET_KIND"
-      else
-         USE_MPIF_HEADER="include \"mpif.h\""
-      fi
-      AC_SUBST(USE_MPIF_HEADER)
-      AC_SUBST(mpi_mod)
-   fi
-fi
-
-dnl Check if MPIF77 is a valid MPI compiler
-F77_SUPPORT_FREEFORM=no
-if test "x${enable_fortran}" != xno && test "x${MPIF77}" != xno ; then
-   F77=${MPIF77}
-   AC_PROG_F77
-   dnl FFLAGS is set in AC_PROG_F77
-
-   AC_F77_LIBRARY_LDFLAGS
-
-   dnl We use F77FLAGS for debugging and optimization options for Fortran 77 programs
-   F77FLAGS=${FFLAGS}
-   AC_SUBST(F77FLAGS)
-
-   dnl get flag for Fortran free form (this flag is only used in testing)
-   FC_saved=${FC}
-   FC=${F77}
-   UD_FC_FREEFORM
-   if test "x${ac_cv_fc_freeform}" != xunknown ; then
-      F77_SUPPORT_FREEFORM=yes
-      FFREEFORMFLAG=${ac_cv_fc_freeform}
-   fi
-   UD_MSG_DEBUG([FC=$FC F90FLAGS=$F90FLAGS FFREEFORMFLAG=$FFREEFORMFLAG])
-   AC_SUBST(FFREEFORMFLAG)
-   FC=${FC_saved}
-
-   AC_LANG_PUSH([Fortran 77])
-   AC_MSG_CHECKING([if MPIF77 is valid])
-   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[        include "mpif.h"
-        integer comm
-        comm = MPI_COMM_WORLD]])],
-                     [valid_mpif77=yes], [valid_mpif77=no]
-   )
-   AC_MSG_RESULT($valid_mpif77)
-   AC_LANG_POP([Fortran 77])
-   if test "x${valid_mpif77}" = xno ; then
-      if test "x${enable_fortran}" = xyes ; then
-         AC_MSG_ERROR([
-            ------------------------------------------------------------
-              Invalid MPI Fortran 77 compiler specified: "${MPIF77}"
-              A working MPI compiler is required. Please specify the
-              location of one either with the MPIF77 environment
-              variable or the --with-mpi configure flag
-            ------------------------------------------------------------])
-      fi
-      AC_MSG_WARN([
-         ------------------------------------------------------------
-           MPI Fortran header file mpif.h is not valid:
-           Fortran feature is disabled
-         ------------------------------------------------------------])
-      enable_fortran=no
-   fi
-fi
-AC_SUBST(F77_SUPPORT_FREEFORM)
-
-if test "x${enable_fortran}" = xauto ; then
-   if test "x${valid_mpif77}" = xyes && test "x${valid_mpif90}" = xyes ; then
-      enable_fortran=yes
-   else
-      enable_fortran=no
-      AC_MSG_WARN([
-         ------------------------------------------------------------
-           Either MPI Fortran 77 or 90 compiler is not working:
-               "MPIF77 = ${MPIF77}"
-               "MPIF90 = ${MPIF90}"
-           Disable Fortran feature ...
-         ------------------------------------------------------------])
-   fi
-fi
-
-if test "x${enable_fortran}" = xyes ; then
-   dnl GNU Fortran compiler automatically invokes preprocessor for files with
-   dnl extension .F and .F90. To manually invoke the preprocessor on any file,
-   dnl use compiler flag -cpp. To disable, use -nocpp.
-   dnl For other compilers, we need to find the compile flags for Fortran
-   dnl preprocessor.
-   dnl steal AC_FC_PP_SRCEXT from autoconf V2.69 to make UD_FC_PP_SRCEXT
-   UD_FC_PP_SRCEXT([f])    dnl sets ac_cv_fc_pp_srcext_f
-   UD_FC_PP_SRCEXT([F])    dnl sets ac_cv_fc_pp_srcext_F
-   UD_FC_PP_SRCEXT([f90])  dnl sets ac_cv_fc_pp_srcext_f90
-   UD_FC_PP_SRCEXT([F90])  dnl sets ac_cv_fc_pp_srcext_F90
-
-   F77PPFLAGS_f=${ac_cv_fc_pp_srcext_f}
-   F77PPFLAGS_F=${ac_cv_fc_pp_srcext_F}
-   F90PPFLAGS_f90=${ac_cv_fc_pp_srcext_f90}
-   F90PPFLAGS_F90=${ac_cv_fc_pp_srcext_F90}
-   AC_SUBST(F77PPFLAGS_f)
-   AC_SUBST(F77PPFLAGS_F)
-   AC_SUBST(F90PPFLAGS_f90)
-   AC_SUBST(F90PPFLAGS_F90)
-
-   FPPFLAGS=${FPPFLAGS-}
-   AC_SUBST(FPP)
-   AC_SUBST(FPPFLAGS)
-
-   dnl compiler command-line define preprocessor flag, result in FC_DEFINE
-   UD_FC_PP_DEFINE
-
-   dnl check compiler flags for file extensions in .f .F .f90 .F90
-   AC_LANG_PUSH([Fortran])
-   AC_FC_SRCEXT([f])
-   AC_FC_SRCEXT([F])
-   AC_FC_SRCEXT([f90])
-   AC_FC_SRCEXT([F90])
-   AC_SUBST(F77FLAGS_f)
-   AC_SUBST(F77FLAGS_F)
-   AC_SUBST(F90FLAGS_f90)
-   AC_SUBST(F90FLAGS_F90)
-   AC_LANG_POP([Fortran])
-
-   dnl get flag for Fortran fixed form (this flag is only used in testing)
-   UD_FC_FIXEDFORM
-   FFIXEDFORMFLAG=${ac_cv_fc_fixedform}
-   UD_MSG_DEBUG([FC=$FC F90FLAGS=$F90FLAGS FFIXEDFORMFLAG=$FFIXEDFORMFLAG])
-   AC_SUBST(FFIXEDFORMFLAG)
-
-   # Checking for Fortran types also determines the Fortran name mangling
-   # and places the value into FCALLSCSUB as the C name corresponding
-   # to the Fortran name SUB 
-   AC_FC_FUNC(sub, [FCALLSCSUB])
-
-   # determine the correct name mapping
-   case $FCALLSCSUB in
-       SUB)
-           AC_DEFINE(F77_NAME_UPPER,,[Define if Fortran names are uppercase])
-           ;;
-       sub_)
-           # This is the hard case.  Gcc uses one _ unless the name includes
-           # an underscore, in which case it gets two trailing underscores.
-           # Use essentially the same configure code that the original configure
-           # used to determine SUB
-           AC_MSG_CHECKING([for C-equivalent to Fortran routine "SUB_A"]) 
-                   dnl "
-           AC_FC_FUNC(sub_a, [FCALLSCSUBA])
-           AC_MSG_RESULT($FCALLSCSUBA)
-           case $FCALLSCSUBA in
-               sub_a__)
-                   AC_DEFINE(F77_NAME_LOWER_2USCORE,,[Define if Fortran names are lower case with two trailing underscore2])
-                   ;;
-               sub_a_)
-                   AC_DEFINE(F77_NAME_LOWER_USCORE,,[Define if Fortran names are lower case with one trailing underscore])
-                   ;;
-               *)
-                   AC_MSG_WARN([Unrecognized Fortran name mapping])
-                   ;;
-           esac
-           ;;
-       sub)
-           AC_DEFINE(F77_NAME_LOWER,,[Define if Fortran names are lower case])
-           ;;
-       *)
-           AC_MSG_WARN([Unrecognized Fortran name mapping])
-           ;;
-   esac
-
-   dnl Some Fortran 77 compilers, such as pgf77, do not allow "_8" modifier,
-   dnl because _8 modifier is a Fortran 90 feature
-   dnl UD_CHECK_PGF77
-   dnl UD_MSG_DEBUG([ac_cv_fc_compiler_pgf77=$ac_cv_fc_compiler_pgf77])
-
-   dnl Check if the Fortran compiler is an NAG
-   UD_CHECK_FC_NAG
-   if test "x${ac_cv_fc_compiler_nag}" = xyes ; then
-      NAGf90FPPFLAGS="-DNAGf90Fortran"
-      NAG_FCFLAGS="-mismatch"
-      AC_SUBST(NAGf90FPPFLAGS)
-      AC_SUBST(NAG_FCFLAGS)
-   fi
-
-   dnl check Fortran parameter modifier for 8-byte integer type
-   dnl We need this to set the max constants for UINT, INT64, and UINT64
-   UD_FC_CONSTANT_MODIFIER
-   UD_MSG_DEBUG([ac_cv_fc_constant_modifier=$ac_cv_fc_constant_modifier])
-   PNF_INT8_MODIFIER=""
-   if test "x${ac_cv_fc_constant_modifier}" = xnone ; then
-      PNF_FILL_UINT=4294967295
-      PNF_FILL_INT64=-9223372036854775806
-      PNF_FILL_UINT64=18446744073709551614
-      PNF_X_UINT_MAX=4294967295
-      PNF_X_INT8_MIN=-9223372036854775807
-      PNF_X_INT8_MAX=9223372036854775807
-      PNF_X_UINT8_MAX=18446744073709551615
-   else
-      if test "x${ac_cv_fc_constant_modifier}" = xEightByteInt ; then
-         PNF_INT8_MODIFIER="      integer, parameter :: EightByteInt = selected_int_kind(18)"
-      fi
-      PNF_FILL_UINT=4294967295_${ac_cv_fc_constant_modifier}
-      PNF_FILL_INT64=-9223372036854775806_${ac_cv_fc_constant_modifier}
-      PNF_FILL_UINT64=18446744073709551614_${ac_cv_fc_constant_modifier}
-      PNF_X_UINT_MAX=4294967295_${ac_cv_fc_constant_modifier}
-      PNF_X_INT8_MIN=-9223372036854775807_${ac_cv_fc_constant_modifier}
-      PNF_X_INT8_MAX=9223372036854775807_${ac_cv_fc_constant_modifier}
-      PNF_X_UINT8_MAX=18446744073709551615_${ac_cv_fc_constant_modifier}
-   fi
-   AC_SUBST(PNF_INT8_MODIFIER)
-   AC_SUBST(PNF_FILL_UINT)
-   AC_SUBST(PNF_FILL_INT64)
-   AC_SUBST(PNF_FILL_UINT64)
-   AC_SUBST(PNF_X_UINT_MAX)
-   AC_SUBST(PNF_X_INT8_MIN)
-   AC_SUBST(PNF_X_INT8_MAX)
-   AC_SUBST(PNF_X_UINT8_MAX)
-
-   AC_SUBST(MPIF77)
-   AC_SUBST(MPIF90)
-fi
-
-AC_PROG_INSTALL
-
-have_yacc_lex=no
-dnl Starting from PnetCDF 1.5.0, yacc and lex is no longer needed
-dnl see comments in src/utils/ncmpigen/Makefile.in for build rules for
-dnl ncmpigenyy.c and ncmpigentab.c. If rebuild is desired, uncomment
-dnl below checking to check availability of yacc/lex/bison
-dnl AC_PROG_YACC
-dnl dnl if neither bison nor byacc is found, YACC will be set to yacc
-dnl have_yacc_lex=yes
-dnl if test "x$YACC" = xyacc; then
-dnl    AC_CHECK_PROGS(YACC_PATH, yacc)
-dnl    if test "x$YACC_PATH" = x; then
-dnl       dnl cannot find bison or yacc required to build ncmpigentab.c
-dnl       have_yacc_lex=no
-dnl    fi
-dnl fi
-dnl 
-dnl AC_PROG_LEX
-dnl if (test "x$LEX" != xflex) && (test "x$LEX" != xlex) ; then
-dnl    dnl cannot find flex or lex required to build ncmpigenyy.c
-dnl    have_yacc_lex=no
-dnl fi
-AC_SUBST(have_yacc_lex)
-
-dnl AC_PROG_AWK
-AC_PROG_LN_S
-AC_PROG_MAKE_SET
-AC_SUBST(SET_MAKE)
-AC_PROG_EGREP
-
-dnl AC_PROG_SED and AC_PROG_GREP are only available on autoconf 2.60 and later
-dnl AC_PROG_SED
-dnl AC_PROG_GREP
-
-dnl YACC and LEX are required to build PnetCDF utility tool ncmpigen
-dnl if configure finds bison then YACC is set to bison -y, so we need to clean
-dnl up the output a bit before testing 
-dnl Below checks commands yacc and lex availability under PATH. However, this
-dnl checking is redundant, as AC_PROG_* did that already
-dnl YACC_CMD="${YACC% *}"
-dnl AC_CHECK_PROG([yacc_cmd], [${YACC_CMD}], [yes], [no])
-dnl AC_CHECK_PROG([lex_cmd],  [${LEX}],      [yes], [no])
-dnl if test "x${yacc_cmd}" = no ; then
-dnl     AC_MSG_ERROR([could not find bison/yacc required by PnetCDF])
-dnl fi
-dnl if test "x${lex_cmd}" = no ; then
-dnl     AC_MSG_ERROR([could not find flex/lex required by PnetCDF])
-dnl fi
-
-UD_PROG_M4
-UD_PROG_AR()
-UD_PROG_NM()
-# We could use the PAC check for ranlib (it also makes sure that ranlib works,
-# which is not always true, particularly when GNU tools are installed on 
-# a system that doesn't have (or need) ranlib
-AC_PROG_RANLIB
-
-dnl Check for <stdbool.h> that conforms to C99 requirements
-dnl this is also for using bool type in utf8proc.h/utf8proc.c to support
-dnl special characters in CDF-2 and CDF-5
-AC_HEADER_STDBOOL
-
-dnl AC_C_CONST
-AC_C_INLINE
-
-dnl we do not use struct stat yet
-dnl AC_CHECK_MEMBERS([struct stat.st_blksize])
-
-UD_CHECK_IEEE
-
-dnl cross compile fails with undefined reference to rpl_realloc and rpl_malloc
-dnl AC_FUNC_MALLOC
-dnl AC_FUNC_REALLOC
-
-dnl below checks availability of a bunch C functions, but we have not yet
-dnl implemented alternative calls
-dnl AC_FUNC_ERROR_AT_LINE
-dnl AC_FUNC_MEMCMP
-dnl AC_FUNC_STRTOD
-dnl AC_FUNC_VPRINTF
-dnl AC_CHECK_FUNCS([memset setlocale sqrt strchr strrchr strtol])
-dnl AC_CHECK_LIB([m], [tanh])
-dnl UD_CHECK_LIB_MATH
-AC_CHECK_FUNCS([strerror access unlink])
-
-AC_ARG_ENABLE([debug],
-    [AS_HELP_STRING([--enable-debug],
-                    [Enable PnetCDF internal debug mode. This also enables safe mode.
-                     @<:@default: disabled@:>@])],
-    [debug=${enableval}], [debug=no]
-)
-
-PNETCDF_DEBUG=0
-if test "x${debug}" = xyes; then
-   dnl malloc memory allocation tracing relies on tdelete and tsearch
-   AC_CHECK_HEADERS([search.h])
-   AC_CHECK_FUNCS([tsearch tdelete])
-
-   dnl check required functions for enabling malloc tracing
-   if (test "x${ac_cv_func_tsearch}" = xyes) &&
-      (test "x${ac_cv_func_tdelete}" = xyes) ; then
-      AC_DEFINE(PNC_MALLOC_TRACE)
-   fi
-   PNETCDF_DEBUG=1
-fi
-AC_SUBST(PNETCDF_DEBUG)
-
-AC_CHECK_TYPE([MPI_Offset], [], [], [#include <mpi.h>])
-if test "x${ac_cv_type_MPI_Offset}" = xyes; then
-   AC_CHECK_SIZEOF([MPI_Offset], [], [#include <mpi.h>])
-else
-   AC_MSG_ERROR([Unable to find type MPI_Offset in mpi.h])
-fi
-AC_CHECK_SIZEOF([MPI_Aint], [], [#include <mpi.h>])
-
-dnl Now we know how big MPI_Offset is.  If it's less than 8 bytes 
-dnl we have to disable support for CDF-2 and CDF-5 file formats
-if test "$ac_cv_sizeof_MPI_Offset" -lt "8"; then
-   AC_MSG_WARN("Unable to support CDF-2 and CDF-5 formats");
-   enable_cdf_2_n_5=no
-else
-   AC_DEFINE(ENABLE_CDF5,,[Define if able to support CDF-5 file format])
-   enable_cdf_2_n_5=yes
-fi
-
-SIZEOF_MPI_AINT_IS_4=no
-if test "x$ac_cv_sizeof_MPI_Aint" = x4; then
-   SIZEOF_MPI_AINT_IS_4=yes
-fi
-AC_SUBST(SIZEOF_MPI_AINT_IS_4)
-
-dnl the nonblocking routines build up lists of requests with MPI_Type_struct.
-dnl If MPI_Offset not the same size as MPI_Aint, the arrays passed around will
-dnl get mangled. 
-if test "$ac_cv_sizeof_MPI_Offset" -ne "$ac_cv_sizeof_MPI_Aint"; then
-   AC_MSG_WARN(MPI_Offset and MPI_Aint are detected of different sizes: the request aggregation in non-blocking APIs is thus disabled)
-   enable_aggregation=no
-else
-   AC_DEFINE(ENABLE_REQ_AGGREGATION,,[Define if able to support request aggregation in nonblocking routines])
-   enable_aggregation=yes
-fi
-
-# check for MPI-2 only functions
-AC_CHECK_FUNCS(MPI_Info_dup MPI_Info_free MPI_Get_address)
-AC_CHECK_FUNCS(MPI_Type_create_subarray MPI_Type_create_hvector MPI_Type_create_hindexed MPI_Type_create_struct MPI_Type_create_resized MPI_Type_get_extent)
-
-dnl Check for presence of MPI COMBINERS.
-UD_HAS_MPI_CONST(MPI_COMBINER_DUP)
-UD_HAS_MPI_CONST(MPI_COMBINER_HVECTOR_INTEGER)
-UD_HAS_MPI_CONST(MPI_COMBINER_HINDEXED_INTEGER)
-UD_HAS_MPI_CONST(MPI_COMBINER_SUBARRAY)
-UD_HAS_MPI_CONST(MPI_COMBINER_DARRAY)
-UD_HAS_MPI_CONST(MPI_COMBINER_RESIZED)
-UD_HAS_MPI_CONST(MPI_COMBINER_STRUCT_INTEGER)
-UD_HAS_MPI_CONST(MPI_COMBINER_INDEXED_BLOCK)
-UD_HAS_MPI_CONST(MPI_COMBINER_F90_REAL)
-UD_HAS_MPI_CONST(MPI_COMBINER_F90_INTEGER)
-UD_HAS_MPI_CONST(MPI_COMBINER_F90_COMPLEX)
-
-dnl Check for presence of various MPI error classes.
-dnl These could be enums, so we have to do compile checks.
-UD_HAS_MPI_CONST(MPI_ERR_FILE_EXISTS)
-UD_HAS_MPI_CONST(MPI_ERR_NO_SUCH_FILE)
-UD_HAS_MPI_CONST(MPI_ERR_AMODE)
-UD_HAS_MPI_CONST(MPI_ERR_NOT_SAME)
-UD_HAS_MPI_CONST(MPI_ERR_BAD_FILE)
-UD_HAS_MPI_CONST(MPI_ERR_READ_ONLY)
-UD_HAS_MPI_CONST(MPI_ERR_ACCESS)
-UD_HAS_MPI_CONST(MPI_ERR_NO_SPACE)
-UD_HAS_MPI_CONST(MPI_ERR_QUOTA)
-
-dnl Check for presence of C types
-UD_HAS_MPI_DATATYPE(MPI_CHAR)
-UD_HAS_MPI_DATATYPE(MPI_BYTE)
-UD_HAS_MPI_DATATYPE(MPI_SIGNED_CHAR)
-UD_HAS_MPI_DATATYPE(MPI_UNSIGNED_CHAR)
-UD_HAS_MPI_DATATYPE(MPI_SHORT)
-UD_HAS_MPI_DATATYPE(MPI_UNSIGNED_SHORT)
-UD_HAS_MPI_DATATYPE(MPI_INT)
-UD_HAS_MPI_DATATYPE(MPI_UNSIGNED)
-UD_HAS_MPI_DATATYPE(MPI_LONG)
-UD_HAS_MPI_DATATYPE(MPI_FLOAT)
-UD_HAS_MPI_DATATYPE(MPI_DOUBLE)
-UD_HAS_MPI_DATATYPE(MPI_LONG_LONG_INT)
-UD_HAS_MPI_DATATYPE(MPI_UNSIGNED_LONG_LONG)
-UD_HAS_MPI_DATATYPE(MPI_UB)
-UD_HAS_MPI_DATATYPE(MPI_LB)
-dnl UD_HAS_MPI_DATATYPE(MPI_OFFSET)
-dnl HAVE_MPI_OFFSET might have already been defined in mpi.h
-dnl Add "_DATATYPE" suffix to distinguish from checking MPI_Offset
-UD_HAS_MPI_DATATYPE(MPI_OFFSET, _DATATYPE)
-
-dnl Check for presence of Fortran types
-dnl These could be enums, so we have to do compile checks.
-dnl
-dnl We do this for a couple of reasons.  First, the MPI might have been
-dnl built without Fortran support, in which case these types might not
-dnl exist.  Second, we need to map these types to corresponding C types
-dnl where possible to simplify processing at run time.
-if test "x${enable_fortran}" = xyes ; then
-    UD_HAS_MPI_DATATYPE(MPI_CHARACTER)
-    UD_HAS_MPI_DATATYPE(MPI_REAL)
-    UD_HAS_MPI_DATATYPE(MPI_INTEGER)
-    UD_HAS_MPI_DATATYPE(MPI_DOUBLE_PRECISION)
-    UD_HAS_MPI_DATATYPE(MPI_INTEGER1)
-    UD_HAS_MPI_DATATYPE(MPI_INTEGER2)
-    UD_HAS_MPI_DATATYPE(MPI_INTEGER4)
-    UD_HAS_MPI_DATATYPE(MPI_INTEGER8)
-    UD_HAS_MPI_DATATYPE(MPI_INTEGER16)
-    UD_HAS_MPI_DATATYPE(MPI_REAL4)
-    UD_HAS_MPI_DATATYPE(MPI_REAL8)
-    UD_HAS_MPI_DATATYPE(MPI_REAL16)
-    UD_HAS_MPI_DATATYPE(MPI_COMPLEX8)
-    UD_HAS_MPI_DATATYPE(MPI_COMPLEX16)
-    UD_HAS_MPI_DATATYPE(MPI_COMPLEX32)
-fi
-
-in_place_swap=yes
-AC_ARG_ENABLE([in-place-swap],
-    [AS_HELP_STRING([--disable-in-place-swap],
-                    [Disable memory in-place byte swap on Little Endian
-                     machines. @<:@default: enabled@:>@])],
-    [in_place_swap=${enableval}], [in_place_swap=yes]
-)
-if test "x${in_place_swap}" = xno ; then
-    AC_DEFINE(DISABLE_IN_PLACE_SWAP)
-fi
-AC_SUBST(in_place_swap)
-
-AC_C_CHAR_UNSIGNED
-AC_C_BIGENDIAN
-is_bigendian=no
-if test "x${ac_cv_c_bigendian}" = xyes ; then
-   is_bigendian=yes
-fi
-AC_SUBST(is_bigendian)
-
-dnl For big Endian, put buffer needs no byte swap and hence can be declared as
-dnl INTENT(IN). For little Endian, put buffer may be used for byte swap in
-dnl place and hence must be declared as INTENT(INOUT).
-dnl This will configure/produce the file src/libf90/api.f90
-if test "x${ac_cv_c_bigendian}" = xyes  || (test "x${in_place_swap}" = xno) ; then
-   INTENTV="IN"
-else
-   INTENTV="INOUT"
-fi
-AC_SUBST(INTENTV)
-
-AC_TYPE_SIZE_T
-AC_TYPE_OFF_T
-AC_CHECK_TYPES([ssize_t, ptrdiff_t, uchar, ushort, uint, longlong, ulonglong, int64, uint64])
-
-AC_CHECK_SIZEOF(size_t)
-AC_CHECK_SIZEOF(off_t)
-AC_CHECK_SIZEOF(signed char)
-AC_CHECK_SIZEOF(unsigned char)
-AC_CHECK_SIZEOF(short)
-AC_CHECK_SIZEOF(unsigned short int)
-AC_CHECK_SIZEOF(unsigned short)
-AC_CHECK_SIZEOF(int)
-AC_CHECK_SIZEOF(unsigned int)
-AC_CHECK_SIZEOF(long)
-AC_CHECK_SIZEOF(float)
-AC_CHECK_SIZEOF(double)
-AC_CHECK_SIZEOF(long long)
-AC_CHECK_SIZEOF(unsigned long long)
-
-if test "$ac_cv_type_ushort" = yes ; then 
-    AC_CHECK_SIZEOF(ushort) 
-fi 
-if test "$ac_cv_type_uint" = yes ; then 
-    AC_CHECK_SIZEOF(uint) 
-fi 
-if test "$ac_cv_type_longlong" = yes ; then 
-    AC_CHECK_SIZEOF(longlong) 
-fi 
-if test "$ac_cv_type_ulonglong" = yes ; then 
-    AC_CHECK_SIZEOF(ulonglong) 
-fi 
-
-if test "x${enable_fortran}" = xyes ; then
-    if test "$cross_compiling" = yes; then
-        UD_CHECK_FORTRAN_TYPE([NF_INT1_T], [integer*1 byte "integer(kind=1)"])
-        UD_CHECK_FORTRAN_TYPE([NF_INT2_T], [integer*2 "integer(kind=2)"])
-        UD_CHECK_FORTRAN_TYPE([NF_INT8_T], [integer*8 "integer(kind=8)"])
-    else
-        UD_FORTRAN_TYPES
-    fi
-
-    NFMPI_OFFSET="integer*$ac_cv_sizeof_MPI_Offset"
-    AC_MSG_CHECKING([for Fortran NFMPI_OFFSET "$NFMPI_OFFSET"])
-    dnl "
-    AC_LANG_PUSH([Fortran 77])
-    AC_COMPILE_IFELSE(
-        [AC_LANG_SOURCE([
-            subroutine sub(value)
-            $NFMPI_OFFSET value
-            end
-        ])],
-        [ac_cv_NFMPI_OFFSET=yes], [ac_cv_NFMPI_OFFSET=no]
-    )
-    AC_LANG_POP([Fortran 77])
-    if test "$ac_cv_NFMPI_OFFSET" = yes ; then
-        AC_MSG_RESULT(yes)
-    else
-        AC_MSG_RESULT(no)
-        AC_MSG_ERROR([F77 does not support "$NFMPI_OFFSET"])
-        dnl "
-    fi
-    ${RM} -rf conftest*
-fi
-
-SIZEOF_MPI_OFFSET=$ac_cv_sizeof_MPI_Offset
-AC_SUBST(SIZEOF_MPI_OFFSET)
-
-if test "x${enable_fortran}" = xyes ; then
-
-   UD_FC_MODULE_EXTENSION
-   dnl UD_FC_MODULE_EXTENSION defines FC_MODEXT
-   if test "x${FC_MODEXT}" = x ; then
-      AC_MSG_ERROR([cannot determine Fortran module file extension!])
-   fi
-   UD_MSG_DEBUG([FC_MODEXT=$FC_MODEXT])
-
-   UD_FC_MODULE_FLAG
-   dnl UD_FC_MODULE_FLAG defines FC_MODINC
-   UD_MSG_DEBUG([FC_MODINC=$FC_MODINC])
-
-   UD_FC_MODULE_OUTPUT_FLAG
-   dnl UD_FC_MODULE_OUTPUT_FLAG defines FC_MODOUT
-   UD_MSG_DEBUG([FC_MODOUT=$FC_MODOUT])
-fi
-
-HAVE_F77_GNU_INT=no
-HAVE_F77_INT1=no
-HAVE_F77_INT2=no
-HAVE_F77_INT8=no
-if test "x${enable_fortran}" = xyes ; then
-   UD_CHECK_F77_GNU_INT
-   UD_MSG_DEBUG([ac_cv_f77_gnu_int=$ac_cv_f77_gnu_int])
-   HAVE_F77_GNU_INT=$ac_cv_f77_gnu_int
-   AC_SUBST(HAVE_F77_GNU_INT)
-
-   UD_CHECK_F77_INT1
-   UD_MSG_DEBUG([ac_cv_f77_int1=$ac_cv_f77_int1])
-   HAVE_F77_INT1=$ac_cv_f77_int1
-   AC_SUBST(HAVE_F77_INT1)
-   UD_CHECK_F77_INT2
-   UD_MSG_DEBUG([ac_cv_f77_int2=$ac_cv_f77_int2])
-   HAVE_F77_INT2=$ac_cv_f77_int2
-   AC_SUBST(HAVE_F77_INT2)
-   UD_CHECK_F77_INT8
-   UD_MSG_DEBUG([ac_cv_f77_int8=$ac_cv_f77_int8])
-   HAVE_F77_INT8=$ac_cv_f77_int8
-   AC_SUBST(HAVE_F77_INT8)
-fi
-
-dnl
-dnl Below is to check if a Fortran compiler produces module files with upper
-dnl case file name, e.g. PNETCDF.mod. However, this does not work for Mac OSX
-dnl file system which is case insensitive
-dnl
-if test "x${enable_fortran}" = xyes ; then
-   UD_PROG_FC_UPPERCASE_MOD
-fi
-UPPER_CASE_MOD=no
-if test "x$ac_cv_prog_f90_uppercase_mod" = xyes ; then
-   UPPER_CASE_MOD=yes
-fi
-AC_SUBST(UPPER_CASE_MOD)
-
-if test "x${enable_fortran}" = xyes ; then
-   if test "x${enable_strict}" = xyes; then
-      FPPFLAGS="${FPPFLAGS} -Wall"
-   fi
-   AC_SUBST(FLIBS)
-   AC_SUBST(FCLIBS)
-   AC_SUBST(F90LIBS)
-   AC_SUBST(FLDFLAGS)
-   AC_SUBST(F90LDFLAGS)
-fi
-
-has_fortran=${enable_fortran}
-AC_SUBST(has_fortran)
-
-UD_MAKEWHATIS
-
-dnl
-dnl GNU coverage
-dnl
-dnl This is for internal testing only. It should not be enabled for building a
-dnl production PnetCDF. This is because running an executable compiled with
-dnl coverage will produce an output file named "gmon.out". Since coverage is
-dnl not parallelized, running a program compiled with coverage may cause
-dnl problems on concurrently writing to gmon.out in conflicts, possible
-dnl corrupting the file or program hanging. Thus, make target "ptest" should
-dnl also be disabled when coverage is enabled.
-dnl
-dnl After all other tests, optionally enable coverage,  we do this last
-dnl because legend has it that sometimes on some compilers the coverage flags
-dnl mess up other checks
-dnl
-AC_ARG_ENABLE([coverage],
-   [AS_HELP_STRING([--enable-coverage],
-       [Compile with coverage support (gcc-based only). @<:@default: disabled@:>@])],
-   [enable_coverage=${enableval}], [enable_coverage=no]
-)
-if test "x${enable_coverage}" = xyes; then
-   if test "x${GCC}" = xyes; then
-       dnl it is GNU compiler
-       LCOV_FLAGS="-pg -fprofile-arcs -ftest-coverage --coverage -O0"
-       CFLAGS="${CFLAGS} ${LCOV_FLAGS}"
-       if test "x${has_mpicxx}" = xyes ; then
-          CXXFLAGS="${CXXFLAGS} ${LCOV_FLAGS}"
-       fi
-       if test "x${enable_fortran}" = xyes ; then
-           FCFLAGS="${FCFLAGS}  ${LCOV_FLAGS}"
-          F77FLAGS="${F77FLAGS} ${LCOV_FLAGS}"
-          F90FLAGS="${F90FLAGS} ${LCOV_FLAGS}"
-       fi
-       LCOV_LIB=-lgcov
-       AC_SUBST(LCOV_LIB)
-   else
-      AC_MSG_WARN([--enable-coverage is for GNU compiler only])
-      enable_coverage=no
-   fi
-fi
-AC_SUBST(enable_coverage)
-
-if test "x${has_mpicxx}" = xyes ; then
-   UD_CXX_MACRO_FUNC
-   if test "x${ac_cv_cxx_macro_func}" == xyes ; then
-      AC_DEFINE(HAVE_FUNC_MACRO)
-   fi
-   if test "x${ac_cv_cxx_macro_function}" == xyes ; then
-      AC_DEFINE(HAVE_FUNCTION_MACRO)
-   fi
-fi
-
-if test "x${debug}" = xyes; then
-   dnl add -g flag if not presented
-   dnl remove all -O and -fast flags
-   dnl add -O0 to all flags
-   if ! echo "${CFLAGS}" | ${EGREP} -q -- "-g" ; then
-      CFLAGS="${CFLAGS} -g"
-   fi
-   CFLAGS=`echo $CFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-   CFLAGS="${CFLAGS} -O0"
-
-   if test "x${has_mpicxx}" = xyes ; then
-      if ! echo "${CXXFLAGS}" | ${EGREP} -q -- "-g" ; then
-         CXXFLAGS="${CXXFLAGS} -g"
-      fi
-      CXXFLAGS=`echo $CXXFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-      CXXFLAGS="${CXXFLAGS} -O0"
-   fi
-
-   if test "x${enable_fortran}" = xyes ; then
-      if ! echo "${FCFLAGS}" | ${EGREP} -q -- "-g" ; then
-         FCFLAGS="${FCFLAGS} -g"
-      fi
-      if ! echo "${F77FLAGS}" | ${EGREP} -q -- "-g" ; then
-         F77FLAGS="${F77FLAGS} -g"
-      fi
-      if ! echo "${F90FLAGS}" | ${EGREP} -q -- "-g" ; then
-         F90FLAGS="${F90FLAGS} -g"
-      fi
-
-       FCFLAGS=`echo $FCFLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-      F77FLAGS=`echo $F77FLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-      F90FLAGS=`echo $F90FLAGS | sed 's/-O. *//g' | sed 's/-fast *//g'`
-       FCFLAGS="${FCFLAGS}  -O0"
-      F77FLAGS="${F77FLAGS} -O0"
-      F90FLAGS="${F90FLAGS} -O0"
-   fi
-fi
-
-chmod u+x ${srcdir}/scripts/install-sh
-
-AC_ARG_ENABLE([subfiling],
-   [AS_HELP_STRING([--enable-subfiling],
-                   [Enable subfiling support. @<:@default: disabled@:>@])],
-   [enable_subfiling=${enableval}], [enable_subfiling=no]
-)
-AC_SUBST(enable_subfiling)
-
-ENABLE_SUBFILING=0
-if test "x$enable_subfiling" = "xyes" ; then
-   AC_DEFINE(ENABLE_SUBFILING)
-   ENABLE_SUBFILING=1
-fi
-AC_SUBST(ENABLE_SUBFILING)
-
-AC_ARG_ENABLE([erange-fill],
-   [AS_HELP_STRING([--disable-erange-fill],
-                   [Disable use of fill value when out-of-range type
-                    conversion causes NC_ERANGE error. @<:@default: enabled@:>@])],
-   [enable_erange_fill=${enableval}], [enable_erange_fill=yes]
-)
-AC_SUBST(enable_erange_fill)
-
-ENABLE_ERANGE_FILL=0
-if test "x$enable_erange_fill" = "xyes" ; then
-   ENABLE_ERANGE_FILL=1
-fi
-AC_SUBST(ENABLE_ERANGE_FILL)
-
-AC_ARG_ENABLE([relax-coord-bound],
-   [AS_HELP_STRING([--enable-relax-coord-bound],
-                   [Enable relaxed error NC_EINVALCOORDS to allow coordinate
-                    start argument equal to dimension size when argument
-                    count is zero. @<:@default: disabled@:>@])],
-   [enable_relax_coord_bound=${enableval}], [enable_relax_coord_bound=no]
-)
-RELAX_COORD_BOUND=0
-if test "x$enable_relax_coord_bound" = "xyes" ; then
-   AC_DEFINE(RELAX_COORD_BOUND)
-   RELAX_COORD_BOUND=1
-fi
-AC_SUBST(RELAX_COORD_BOUND)
-
-AC_PATH_PROG([LATEX],  [latex])
-AC_PATH_PROG([DVIPDF], [dvipdf])
-has_latex=no
-if test "x${LATEX}" != x ; then
-    has_latex=yes
-fi
-AC_SUBST(LATEX)
-AC_SUBST(DVIPDF)
-AC_SUBST(has_latex)
-
-BUILDDIR=`pwd`
-AC_SUBST(BUILDDIR)
-
-AC_ARG_ENABLE([file-sync],
-    [AS_HELP_STRING([--disable-file-sync],
-                    [Disable MPI file sync if you know your file system can
-                     provide data consistency. @<:@default: enabled@:>@])],
-    [file_sync=${enableval}], [file_sync=yes]
-)
-if test "x${file_sync}" = xno ; then
-    AC_DEFINE(DISABLE_FILE_SYNC)
-fi
-
-AC_ARG_ENABLE([large-file-test],
-    [AS_HELP_STRING([--enable-large-file-test],
-                    [Enable testing for large (>4GB) file/variable I/O. Note
-                     "make testing" can run very slow. @<:@default: disabled@:>@])],
-    [large_file_test=${enableval}], [large_file_test=no]
-)
-AC_SUBST(large_file_test)
-
-dnl PNETCDF_INC and PNETCDF_LIB are for benchmark programs use only
-PNETCDF_INC=${BUILDDIR}/src/libf90
-PNETCDF_LIB="-L${BUILDDIR}/src/lib"
-AC_SUBST(PNETCDF_INC)
-AC_SUBST(PNETCDF_LIB)
-
-AC_ARG_VAR(TEST_SEQRUN, [Run command (on one process) for make target check on cross-compile environment. Example: "aprun -n 1". @<:@default: none@:>@])
-AC_ARG_VAR(TEST_MPIRUN, [MPI run command for make target ptest, @<:@default: mpiexec -n NP@:>@])
-AC_ARG_VAR(TEST_OUTDIR, [Output file directory for make target ptest, @<:@default: ./@:>@])
-if test "x${TEST_MPIRUN}" = x ; then
-    dnl set default to mpiexec
-    TEST_MPIRUN="mpiexec -n NP"
-fi
-if test "x${TEST_OUTDIR}" = x ; then
-    dnl set default to current directory
-    TEST_OUTDIR=.
-fi
-AC_SUBST(TEST_SEQRUN)
-AC_SUBST(TEST_MPIRUN)
-AC_SUBST(TEST_OUTDIR)
-
-dnl find if gcc is available for compiling ncoffsets to run in sequential
-AC_PATH_PROG([SEQ_CC], [gcc], [$MPICC])
-AC_SUBST(SEQ_CC)
-
-# Configuration Date
-if test "x$SOURCE_DATE_EPOCH" != "x" ; then
-    AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date -u -d "${SOURCE_DATE_EPOCH}"`"
-else
-    AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date`"
-fi
-
-AC_CONFIG_HEADERS([src/libf/nfconfig_inc])
-AC_CONFIG_FILES(macros.make \
-                Makefile \
-                pnetcdf_pc \
-                src/Makefile \
-                src/lib/Makefile \
-                src/lib/pnetcdf.h \
-                src/utils/Makefile \
-                src/utils/ncmpidump/Makefile \
-                src/utils/ncmpidiff/Makefile \
-                src/utils/ncmpigen/Makefile \
-                src/utils/ncmpivalid/Makefile \
-                src/utils/pnetcdf_version/Makefile \
-                src/utils/ncoffsets/Makefile \
-                test/Makefile \
-                test/common/Makefile \
-                test/nc_test/Makefile \
-                test/C/Makefile \
-                test/fandc/Makefile \
-                test/testcases/Makefile \
-                test/nonblocking/Makefile \
-                test/header/Makefile \
-                test/cdf_format/Makefile \
-                test/largefile/Makefile \
-                examples/C/Makefile \
-                examples/tutorial/Makefile \
-                examples/Makefile \
-                doc/Makefile \
-                man/Makefile \
-                scripts/Makefile \
-                benchmarks/Makefile \
-                benchmarks/C/Makefile \
-                test/nf_test/Makefile \
-                test/nf_test/tests.inc \
-                test/nf90_test/Makefile \
-                test/F90/Makefile \
-                examples/F77/Makefile \
-                examples/F90/Makefile \
-                src/libf90/Makefile \
-                src/libf90/pnetcdf.f90 \
-                src/libf90/api.f90 \
-                src/libf90/nfmpi_constants.f90 \
-                src/libf/Makefile \
-                src/libf/pnetcdf.inc \
-                src/libcxx/Makefile \
-                examples/CXX/Makefile \
-                test/CXX/Makefile \
-                benchmarks/FLASH-IO/Makefile \
-                test/subfile/Makefile)
-
-# The following dependency is for configure.in and configure
-# See autoconf manual 2.69, Section 4.8.5 Automatic Remaking
-AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
-
-dnl add executable permission to pnetcdf-config and check_install
-AC_CONFIG_FILES([pnetcdf-config], [chmod u+x pnetcdf-config])
-AC_CONFIG_FILES([check_install],  [chmod u+x check_install])
-
-AC_OUTPUT
-echo "------------------------------------------------------------------------------"
-
-if test "x${enable_mpi_io_test}" = xno ; then
-    AC_MSG_WARN([
-       NOTE: disabling the MPI-IO test is a VERY bad idea.
-       Please make sure you know what you are doing])
-fi
-
-msg_large_files=no
-if test "$ac_cv_sizeof_off_t" -gt 4 ; then
-   msg_large_files=yes
-fi
-
-echo \
-"
-   ${PACKAGE_NAME} Version ${PACKAGE_VERSION}
-
-   Features:  Support for large files (> 4 GB)                  - ${msg_large_files}
-              Build Fortran APIs                                - ${enable_fortran}
-              Build C++ APIs                                    - ${has_mpicxx}
-              Build CDF-2 and CDF-5 support                     - ${enable_cdf_2_n_5}"
-if test "x${enable_aggreg}" = xno; then
-   echo "\
-              Request aggregation in nonblocking APIs           - $no"
-fi
-if test "x${enable_erange_fill}" = xno; then
-   echo "\
-              Fill variables when NC_ERANGE occurs              - no"
-fi
-if test "x${enable_subfiling}" = xyes; then
-   echo "\
-              Build subfiling support                           - yes"
-fi
-if test "x${enable_relax_coord_bound}" = xyes; then
-   echo "\
-              Relax start coordinate bound check                - enabled"
-fi
-if test "x${ac_cv_c_bigendian}" = xno  && (test "x${in_place_swap}" = xno) ; then
-   echo "\
-              Memory in-place byte swap                         - disabled"
-fi
-if test "x${large_file_test}" = xyes; then
-   echo "\
-              Testing large file/variable I/O                   - enabled"
-fi
-if test "x${debug}" = xyes; then
-   echo "\
-              PnetCDF internal debug mode                       - enabled"
-fi
-if test "x${enable_fortran}" = xyes && (test "x${F77_SUPPORT_FREEFORM}" = xno) ; then
-   echo "\
-              Support free form in Fortran 77                   - no"
-fi
-
-echo "\
-
-   Compilers: MPICC       = ${MPICC}"
-if test "${has_mpicxx}" = yes ; then
-   echo "\
-              MPICXX      = ${MPICXX}"
-fi
-if test "${enable_fortran}" = yes ; then
-   echo "\
-              MPIF77      = ${MPIF77}
-              MPIF90      = ${MPIF90}"
-fi
-echo "\
-              CFLAGS      = ${CFLAGS}"
-if test "x${CPPFLAGS}" != x ; then
-   echo "\
-              CPPFLAGS    = ${CPPFLAGS}"
-fi
-if test "${has_mpicxx}" = yes ; then
-   echo "\
-              CXXFLAGS    = ${CXXFLAGS}"
-   if test "x${CXXCPPFLAGS}" != x ; then
-      echo "\
-              CXXCPPFLAGS = ${CXXCPPFLAGS}"
-   fi
-fi
-if test "${enable_fortran}" = yes ; then
-   echo "\
-              F77FLAGS    = ${F77FLAGS}
-              F90FLAGS    = ${F90FLAGS}"
-   if test "x${FPPFLAGS}" != x ; then
-      echo "\
-              FPPFLAGS    = ${FPPFLAGS}"
-   fi
-fi
-if test "x${LDFLAGS}" != x ; then
-   echo "\
-              LDFLAGS     = ${LDFLAGS}"
-fi
-if test "x${LIBS}" != x ; then
-   echo "\
-              LIBS        = ${LIBS}"
-fi
-echo "\
-
-   Now type 'make' to build the library and utility tools and then
-   type 'make @<:@<target>@:>@' for testing and installation,
-       where the optional <target> is:
-           check            - test PnetCDF build for sequential run
-           ptest            - test PnetCDF build for parallel run
-           install          - install PnetCDF
-------------------------------------------------------------------------------"
-
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..588aa0e
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,31 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3453 2017-10-19 23:19:19Z wkliao $
+#
+# @configure_input@
+
+SUBDIRS = pnetcdf-api
+DIST_SUBDIRS = $(SUBDIRS)
+
+EXTRA_DIST = README.CRAY \
+             README.Fujitsu \
+             README.INTEL \
+             README.IBM \
+             README.K-Computer \
+             README.LINUX \
+             README.SGI \
+             README.SX \
+             README.Ubuntu \
+             README.consistency \
+             README.large_files \
+             pbs.script
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 1880b80..312a1c1 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,45 +1,737 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 1468 2013-10-26 16:53:18Z wkliao $
+# $Id: Makefile.am 3453 2017-10-19 23:19:19Z wkliao $
 #
 # @configure_input@
-
-srcdir = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = pnetcdf-api
+DIST_SUBDIRS = $(SUBDIRS)
+EXTRA_DIST = README.CRAY \
+             README.Fujitsu \
+             README.INTEL \
+             README.IBM \
+             README.K-Computer \
+             README.LINUX \
+             README.SGI \
+             README.SX \
+             README.Ubuntu \
+             README.consistency \
+             README.large_files \
+             pbs.script
 
-include ../macros.make
+all: all-recursive
 
-LATEX  = @LATEX@
-DVIPDF = @DVIPDF@
-ifeq (@has_latex@, yes)
-    API_GUIDE = pnetcdf-api.pdf
-else
-    API_GUIDE =
-endif
-
-all: $(API_GUIDE)
-
-pnetcdf-api.pdf: $(srcdir)/pnetcdf-api.tex
-	$(LATEX) $<
-	$(LATEX) $<
-	$(DVIPDF) pnetcdf-api
-
-PACKING_LIST = Makefile.in \
-               c_api.tex \
-               data_mode_api.tex \
-               flexible_api.tex \
-               latex8.sty \
-               Makefile.in \
-               multiple_io.tex \
-               nonblocking.tex \
-               pnetcdf-api.bbl \
-               pnetcdf-api.tex \
-               porting_notes.txt \
-               symbol_renaming.txt
-
-GARBAGE = *.dvi *.log *.aux *.ps $(API_GUIDE)
-
-include $(srcdir)/../rules.make
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu doc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+tests: tests-recursive
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-generic distclean-libtool \
+	distclean-local distclean-tags distdir dvi dvi-am html html-am \
+	info info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/README.CRAY b/doc/README.CRAY
new file mode 100644
index 0000000..23d265e
--- /dev/null
+++ b/doc/README.CRAY
@@ -0,0 +1,204 @@
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.CRAY 3496 2017-11-01 20:35:21Z wkliao $
+
+===============================================================================
+    Cray XC40
+===============================================================================
+
+Building PnetCDF on the Cray XC40 (tested on Cori @ NERSC)
+http://www.nersc.gov/systems/cori/
+
+    ./configure --prefix=/path/to/install \
+                cross_compiling="yes" \
+                CFLAGS="-fast -no-ipo" CXXFLAGS="-fast -no-ipo" \
+                FFLAGS="-fast -no-ipo"  FCFLAGS="-fast -no-ipo"
+
+(The default is to build static libraries only.)
+
+To also build shared libraries, add "--enable-shared LDFLAGS=-dynamic" to the
+configure command and change the compile flags to "-O2".
+
+    ./configure --prefix=/path/to/install \
+                cross_compiling="yes" \
+                CFLAGS="-O2" CXXFLAGS="-O2" \
+                FFLAGS="-O2"  FCFLAGS="-O2" \
+                --enable-shared LDFLAGS=-dynamic
+
+See further information about Shared and Dynamic Libraries from the following
+NERSC web site:
+http://www.nersc.gov/users/computational-systems/edison/running-jobs/shared-and-dynamic-libraries/
+
+Note on using command-line option "-fast".
+    According to the NERSC URL below, the flag "-no-ipo" must be used together
+    with flag "-fast" to build an application.
+    http://www.nersc.gov/users/software/compilers/intel-fortran-c-and-c/
+
+    In addition, option "-fast" implies "-static". Thus please use "-O2" flags
+    when building PnetCDF shared libraries.
+
+Note on running "make check" or "make ptest".
+    Cori is a cross-compile environment. Jobs must be run through a batch
+    scheduler. At the time of this writing, the schedule is Slurm. Below
+    configure command line adds 3 variables in preparation for job submission.
+
+    ./configure --prefix=/path/to/install \
+                cross_compiling="yes" \
+                CFLAGS="-fast -no-ipo" CXXFLAGS="-fast -no-ipo" \
+                FFLAGS="-fast -no-ipo"  FCFLAGS="-fast -no-ipo" \
+                TESTMPIRUN="srun -n NP" TESTSEQRUN="srun -n 1" \
+                TESTOUTDIR="$SCRATCH"
+
+    A sample batch script shown below allocates 4 compute nodes. "make ptest"
+    requires at least 4 MPI processes. The number can be changed to use less
+    number of nodes. Variable TESTOUTDIR should be set to the file directory
+    for storing the test output files.
+    #!/bin/bash -l
+    #SBATCH -p debug
+    #SBATCH -N 4
+    #SBATCH -t 00:20:00
+    #SBATCH -L SCRATCH
+    #SBATCH -C haswell
+    make ptest
+
+Note on using GNU compilers
+    To swap to the GNU programming environment from default, run command below
+    first:
+        module swap PrgEnv-intel PrgEnv-gnu
+
+    We found that libtool does not work well with Cray's GNU-based compiler
+    wrappers, e.g. cc, CC, and ftn when building static-only library. If you
+    must use GNU compilers, please add "LDFLAGS=-all-static" to the make
+    command line, i.e.
+
+    ./configure --prefix=/path/to/install \
+                cross_compiling="yes" \
+                CFLAGS="-O2" CXXFLAGS="-O2" \
+                FFLAGS="-O2"  FCFLAGS="-O2"
+
+    and then run
+
+                make LDFLAGS=-all-static
+
+    Without adding LDFLAGS, you may encounter the following error messages. 
+    libtool: warning: '/opt/gcc/6.3.0/snos/lib/gcc/x86_64-suse-linux/6.3.0/../../../../lib64/libgfortran.la' seems to be moved 
+    libtool: warning: '/opt/gcc/6.3.0/snos/lib/gcc/x86_64-suse-linux/6.3.0/../../../../lib64/libquadmath.la' seems to be moved 
+    libtool: warning: '/opt/gcc/6.3.0/snos/lib/gcc/x86_64-suse-linux/6.3.0/../../../../lib64/libstdc++.la' seems to be moved 
+    /usr/bin/ld: attempted static link of dynamic object `/opt/gcc/6.3.0/snos/lib/../lib64/libgfortran.so' 
+    collect2: error: ld returned 1 exit status 
+
+    Building shared libraries has no such problem. Simply use command below.
+
+    ./configure --prefix=/path/to/install \
+                cross_compiling="yes" \
+                CFLAGS="-O2" CXXFLAGS="-O2" \
+                FFLAGS="-O2"  FCFLAGS="-O2" \
+                --enable-shared LDFLAGS=-dynamic
+
+    and then run
+
+                make
+
+Note on using Cray compilers (i.e. craycc, crayCC, crayftn)
+    libtool fails to work with Cray compiler based wrappers. See discussion in
+    https://trac.mpich.org/projects/mpich/ticket/1909 and
+    http://lists.gnu.org/archive/html/libtool/2015-04/msg00003.html
+    Before libtool fixes this, PnetCDF 1.9.0 does not support Cray-based
+    compilers.
+
+===============================================================================
+    Cray XC30
+===============================================================================
+
+Building PnetCDF on the Cray XC30 (tested on Edison @ NERSC)
+http://www.nersc.gov/systems/edison-cray-xc30/
+
+The building recipe for Edison is the same as Cori.
+
+===============================================================================
+    Cray XE6
+===============================================================================
+
+Building PnetCDF on the Cray XE6 (tested on Hopper @ NERSC)
+http://www.nersc.gov/systems/hopper-cray-xe6/
+
+./configure --prefix=/path/to/install \
+            --with-mpi=/path/to/mpi/implementation \
+            CFLAGS=-fast CXXFLAGS=-fast FFLAGS=-fast FCFLAGS=-fast
+
+
+The configure command above works for PGI, GNU, and Intel
+compilers, i.e. when one of the module load commands below is used:
+
+    module load PrgEnv-pgi
+    module load PrgEnv-gnu
+    module load PrgEnv-intel
+
+
+For Pathscale compilers, i.e.
+    module load PrgEnv-pathscale
+    use command below:
+    ./configure --prefix=/path/to/install \
+                --with-mpi=/path/to/mpi/implementation \
+                CFLAGS=-Ofast CXXFLAGS=-Ofast FFLAGS=-Ofast FCFLAGS=-Ofast
+
+
+For Cray compilers, i.e.
+    module load PrgEnv-cray
+    use command below:
+    ./configure --prefix=/path/to/install \
+                --with-mpi=/path/to/mpi/implementation \
+                CFLAGS=-O2 CXXFLAGS=-O2 FFLAGS=-O2 FCFLAGS="-O2 -emf" \
+                LDFLAGS=-Wl,-z,muldefs
+
+    Check crayftn man page for using option "-emf" in FCFLAGS:
+    to creates .mod files to hold module and allows the creation
+    of lower-case module .mod file names.
+
+    Option "-Wl,-z,muldefs" in LDFLAGS is to get around the
+    error of multiple definitions of `tc_version', etc.
+
+
+===============================================================================
+    Cray X1
+===============================================================================
+
+2 May 2005
+
+I performed the following steps to get Parallel-NetCDF to build on the Cray X1
+at Oak Ridge (phoenix.ccs.ornl.gov).   Note that out-of-tree (or VPATH) builds
+do not work for the Fortran interface as of 1.0.0-pre2, but we will try to
+address this issue in a future release.  
+
+prompt:$ module load mpt
+prompt:$ export CC=cc
+prompt:$ export FC=ftn
+prompt:$ export MPIF77=$FC
+prompt:$ export MPICC=$CC
+prompt:$ export FFLAGS="-eh"
+prompt:$ ./configure --prefix=/path/to/install
+# note: configure takes a fairly long time. 
+prompt:$ make
+
+The "nc_test" test will exhaust the available MPI datatypes on the X1.  Your
+application might see this error:
+
+   MPI has run out of internal datatype entries.                  
+   Please set the environment variable MPI_TYPE_MAX for additional space.
+   The current value of MPI_TYPE_MAX is 2098                      
+
+I did as asked and nc_test completed with MPI_TYPE_MAX set to 4096
+
+If you run on the login node, expect to see a lot of these messages:
+
+  Process [nc_test] 89345 generated trap, but has signal 8 held or ignored
+        epc 0x1219bb4 ra 0x1219b94 badvaddr 0x40004f0004000020 
+
+The messages don't *appear* to impact the program results, and additionally do
+not show up if you submit the job to PBS.
+
+Fortran codes should use '-eh' so that the Cray ftn compiler will use 1 byte
+for int*1 and 2 bytes for int*2.  Otherwise, our Fortran bindings will pass
+incorrect values to the C routines.   
diff --git a/README.Fujitsu b/doc/README.Fujitsu
similarity index 89%
rename from README.Fujitsu
rename to doc/README.Fujitsu
index 63ef46f..57cf152 100644
--- a/README.Fujitsu
+++ b/doc/README.Fujitsu
@@ -1,4 +1,8 @@
-# $Id: README.Fujitsu 2713 2016-12-16 20:32:36Z wkliao $
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.Fujitsu 3433 2017-09-29 17:34:49Z wkliao $
 
 This file is for users who will edit file "configure.in" and run command
 "autoreconf" to regenerate file "configure".
@@ -49,8 +53,8 @@ or
               CXXFLAGS="-Kfast" \
               FFLAGS="-Kfast" \
               FCFLAGS="-Kfast" \
-              TEST_MPIRUN="mpiexec -n NP" \
-              TEST_SEQRUN="mpiexec -n 1"
+              TESTMPIRUN="mpiexec -n NP" \
+              TESTSEQRUN="mpiexec -n 1"
 
 
 ----------------------------------
diff --git a/README.IBM b/doc/README.IBM
similarity index 68%
rename from README.IBM
rename to doc/README.IBM
index 3c4af3b..6487f74 100644
--- a/README.IBM
+++ b/doc/README.IBM
@@ -1,4 +1,8 @@
-# $Id: README.IBM 1741 2014-08-23 16:13:13Z wkliao $
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.IBM 3487 2017-10-26 23:42:27Z wkliao $
 
 1. Building PnetCDF on BGQ
 2. Building PnetCDF on BGP
@@ -11,45 +15,98 @@
 -------------------------------------------------------------------------------
 
 Building for BGQ is not so different from BGP or BGL: front end node is still a
-cross compile host for the back end.    (as of this writing, the "log in io
-nodes", a.k.a lion nodes, are not on line for the Mira BGQ machine)
+cross compile host for the back end (as of this writing, the "log in io nodes",
+a.k.a lion nodes, are not on line for the Mira BGQ machine).
 
 Be sure to run configure with the --build and --host flags to put it in "cross
 compile mode".  This will make configure use compile-only tests, instead of the
 usual compile-and-run tests (running tests on the BGP login node won't work as
-the compute nodes are totally different.  This will change if/when lion
-nodes are available).
+the compute nodes are totally different. This will change if/when lion nodes
+are available).
 
-./configure --host powerpc64-bgq-linux --build ppc64-redhat-linux \
-            MPICC=mpicc MPICXX=mpicxx MPIF77=mpif77 MPIF90=mpif90
+---- To build PnetCDF with the IBM xl compilers ----
 
-Note if running make is slow, try parallel make, e.g.
+    ./configure --prefix=/path/to/install \
+                --host powerpc64-bgq-linux \
+                --build ppc64-redhat-linux \
+                MPICC=mpixlc \
+                MPICXX=mpixlcxx \
+                MPIF77=mpixlf77 \
+                MPIF90=mpixlf90 \
+                FFLAGS="-qsuppress=cmpmsg" \
+                FCFLAGS="-qsuppress=cmpmsg" \
 
-    make -j8
+Fortran flag "-qsuppress=cmpmsg" can suppresses XLF compile informational
+messages that report compilation progress and a successful completion.
 
-It's possible to build PnetCDF with the IBM xl compilers:
+If you encounter the following warning message,
+"(W) Option DLINES is ignored within Fortran 90 free form and IBM free form"
+it is safe to ignore. This is due to Automake adds -DHAVE_CONFIG_H to Fortran
+compile command line, in addition to C. However, xlf compiler uses -WF,-D
+instead of -D for command-line macro definition.
 
-./configure --host powerpc64-bgq-linux --build ppc64-redhat-linux \
-            --with-mpi=/bgsys/drivers/ppcfloor/comm/xl \
-            MPICC=mpixlc MPICXX=mpixlcxx MPIF77=mpixlf77 MPIF90=mpixlf90 \
-            FFLAGS="-qsuppress=cmpmsg" FCFLAGS="-qsuppress=cmpmsg"
+If you encounter error messages related to Darshan when running "make check",
+"make ptest", or "make tests", such as
+/soft/perftools/darshan/darshan-2.3.0/lib/libdarshan-mpi-io.a(darshan-pnetcdf.o): In function `__wrap_ncmpi_close':
+try disable Darshan by setting the environment variable DARSHAN_DISABLE to 1.
 
-Fortran flag "-qsuppress=cmpmsg" can suppresses XLF compile informational
-messages that report compilation progress and a successful completion.
+---- To build shared library with XL based compilers ----
 
+    PnetCDF's default is to build static libraries only. To build shared
+    libraries, add the following to the above configure command line.
 
-Another possibility that uses thread-safe XL compilers is:
+                --enable-shared \
+                LDFLAGS=-qmkshrobj
 
-./configure --host powerpc64-bgq-linux --build ppc64-redhat-linux \
-            --with-mpi=/bgsys/drivers/ppcfloor/comm/xl \
-            MPICC=mpixlc_r    MPICXX=mpixlcxx_r \
-            MPIF77=mpixlf77_r MPIF90=mpixlf90_r \
-            CFLAGS=-O2 CXXFLAGS=-O2 FFLAGS=-O2 FCFLAGS=-O2 \
-            --prefix=/path/to/install
+    Link flag -qmkshrobj is required to build shared libraries when using the
+    IBM xl C/C++ compilers. It should not be used when building static
+    libraried only.
+
+    See the Mira compiling and linking FAQ on shared libraries at
+    https://www.alcf.anl.gov/user-guides/compiling-and-linking-faq#how-do-i-compile-and-link-a-shared-library
+
+
+---- To build PnetCDF with the GNU compilers ----
+
+At first, you may want to "swap" the softenv to use the GNU compiler wrappers.
+The commands to do so are:
+
+    soft delete +mpiwrapper-xl
+    soft add +mpiwrapper-gcc
+
+    ./configure --prefix=/path/to/install \
+                --host powerpc64-bgq-linux \
+                --build ppc64-redhat-linux \
+                MPICC=mpicc \
+                MPICXX=mpicxx \
+                MPIF77=mpif77 \
+                MPIF90=mpif90
+
+---- To build shared library with GNU based compilers ----
+
+    PnetCDF's default is to build static libraries only. To build shared
+    libraries, add the following to the above configure command line.
+
+                --enable-shared \
+                LDFLAGS=-dynamic
+
+    Link flag -dynamic is required to build shared libraries when using the
+    GNU C/C++ compilers. It should not be used when building static
+    libraried only.
+
+---- To use thread-safe XL compilers ----
+
+    You can simply replace the XL based MPI compilers with the followings
+    in the configure command line.
+
+                MPICC=mpixlc_r    \
+                MPICXX=mpixlcxx_r \
+                MPIF77=mpixlf77_r \
+                MPIF90=mpixlf90_r \
 
 
 As far as we know, there are no issues with PnetCDF on BGQ, but should you
-find any, email parallel-netcdf at mcs.anl.gov
+find any, please email parallel-netcdf at mcs.anl.gov
 
 ----
 Note on compiling Fortran 90 programs on Intrepid @ ANL
@@ -87,13 +144,27 @@ V1R4M1. You may build with it using the wrappers in comm/xl:
 ----
 Mira and Cetus are IBM BlueGene Q, a cross-compile system. Hence, one cannot
 run PnetCDF test programs on the login nodes. Test programs must run on the
-compute nodes through submitting a batch job. An example batch script file is
-provided in cobalt.script. The submission command for allocating 8 node with 90
-minutes is given below. Note the testing requires at least 8 MPI processes and
-in this example the command requests 8 nodes and the script runs 1 MPI process
-per node.
+compute nodes through submitting a batch job. An example batch script file and
+the submission command for allocating 8 node with 90 minutes are shown below.
+Note the testing requires at least 8 MPI processes and in this example the
+command requests 8 nodes and the script runs 1 MPI process per node.
+
+% cat cobalt.script
+#!/bin/sh
+echo "Starting Cobalt job script"
+
+# test seqential programs
+make check TESTMPIRUN="runjob --block $COBALT_PARTNAME --ranks-per-node 1 --np NP : " \
+           TESTSEQRUN="runjob --block $COBALT_PARTNAME --ranks-per-node 1 --np 1 : " \
+           TESTOUTDIR=/path/to/GPFS/directory
+
+# test parallel programs
+make ptest TESTMPIRUN="runjob --block $COBALT_PARTNAME --ranks-per-node 1 --np NP : " \
+           TESTSEQRUN="runjob --block $COBALT_PARTNAME --ranks-per-node 1 --np 1 : " \
+           TESTOUTDIR=/path/to/GPFS/directory
+
 
-qsub -A YOUR_ACCOUNT -n 8 -t 30 --mode script ./cobalt.script
+% qsub -A YOUR_ACCOUNT -n 8 -t 30 --mode script ./cobalt.script
 
 Running "make testing" can take a while (more than one hour on Mira/Cetus).
 This is because the testing performs many small read/write requests and under
diff --git a/README.INTEL b/doc/README.INTEL
similarity index 80%
rename from README.INTEL
rename to doc/README.INTEL
index 2f00d9a..7ad731b 100644
--- a/README.INTEL
+++ b/doc/README.INTEL
@@ -1,5 +1,12 @@
-When using old versions of Intel MPI compilers (4.x), you might get the
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.INTEL 3433 2017-09-29 17:34:49Z wkliao $
+
+When using old versions of Intel MPI compilers (4.x), you might encounter the
 following error message.
+
 In file included from /opt/intel/impi/4.1.3/include/mpi.h(1279),
                  from ../lib/pnetcdf.h(10),
                  from ../../../trunk/src/libcxx/ncmpiType.h(2),
@@ -11,7 +18,8 @@ In file included from /opt/intel/impi/4.1.3/include/mpi.h(1279),
 
 A solution is to add the following C++ preprocessor flags at the configure
 command line, for example.
-./configure CXXCPPFLAGS="-DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX"
+
+    ./configure CXXCPPFLAGS="-DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX"
 
 
 Note that this error has been resolved when using newer Intel MPI
diff --git a/README.K-Computer b/doc/README.K-Computer
similarity index 82%
rename from README.K-Computer
rename to doc/README.K-Computer
index 09597d9..854e769 100644
--- a/README.K-Computer
+++ b/doc/README.K-Computer
@@ -1,4 +1,8 @@
-# $Id: README.K-Computer 2210 2015-11-29 02:06:41Z wkliao $
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.K-Computer 3499 2017-11-01 22:57:57Z wkliao $
 
 ===============================================================================
     The K computer
@@ -33,8 +37,9 @@ configure command that was used to build PnetCDF successfully on K.
             CXXFLAGS="-Kfast" \
             FFLAGS="-Kfast" \
             FCFLAGS="-Kfast" \
-            TEST_MPIRUN="mpiexec -n NP" \
-            TEST_SEQRUN="mpiexec -n 1"
+            MANIFEST_TOOL=: \
+            TESTMPIRUN="mpiexec -n NP" \
+            TESTSEQRUN="mpiexec -n 1"
 
 For users who would customize the source codes and edit configure.in, it is
 necessary to run command "autoreconf" to generate an updated "configure" file.
@@ -46,6 +51,12 @@ configure command line.  Adding LDFLAGS="-L." is necessary as the Fujitsu
 Fortran compiler requires no "-L" for its internal library files.  Without
 this, configure command may fail.
 
+To build shared library, add configure command-line option "--enable-shared"
+and set the MPICC and MPICXX environment variables to the followings.
+            MPICC="mpifccpx -Xg" \
+            MPICXX="mpiFCCpx -Xg" \
+            LDFLAGS="--shared"
+
 ----------------
 Testing PnetCDF:
 ----------------
diff --git a/README.LINUX b/doc/README.LINUX
similarity index 89%
rename from README.LINUX
rename to doc/README.LINUX
index 4ee9afe..6849e53 100644
--- a/README.LINUX
+++ b/doc/README.LINUX
@@ -1,4 +1,8 @@
-# $Id: README.LINUX 2082 2015-08-22 00:01:53Z wkliao $
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.LINUX 3433 2017-09-29 17:34:49Z wkliao $
 
 
 -----------------------------------------------------------------------------
diff --git a/README.SGI b/doc/README.SGI
similarity index 90%
rename from README.SGI
rename to doc/README.SGI
index 88d6f96..5e7795c 100644
--- a/README.SGI
+++ b/doc/README.SGI
@@ -1,4 +1,8 @@
-# $Id: README.SGI 2082 2015-08-22 00:01:53Z wkliao $
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.SGI 3433 2017-09-29 17:34:49Z wkliao $
 
 ===============================================================================
     SGI UV 2000
diff --git a/README.SX b/doc/README.SX
similarity index 87%
rename from README.SX
rename to doc/README.SX
index 5bee293..452d6ca 100644
--- a/README.SX
+++ b/doc/README.SX
@@ -1,3 +1,9 @@
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.SX 3433 2017-09-29 17:34:49Z wkliao $
+#
 # Current notes for NEC SX; based on pnetcdf version 1.0.0; 28 July, 2005
 
 . SX Cross compiler environment is not supported yet (the check for a working
diff --git a/doc/README.Ubuntu b/doc/README.Ubuntu
new file mode 100644
index 0000000..70a74c8
--- /dev/null
+++ b/doc/README.Ubuntu
@@ -0,0 +1,33 @@
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.Ubuntu 3433 2017-09-29 17:34:49Z wkliao $
+
+-----------------------------------------------------------------------------
+ Build PnetCDF shared libraries on Ubuntu
+-----------------------------------------------------------------------------
+
+Please set LDFLAGS to the following at the configure command line, i.e.,
+
+    ./configure --prefix=/path/to/install \
+                --enable-shared \
+                LDFLAGS="-Wl,--allow-shlib-undefined"
+
+
+Without option "--enable-shared", only the static libraries will be built
+and in this case there is no need to set LDFLAGS.
+
+Note that without setting the LDFLAGS to the above, you might see error
+messages similar to below, when using gfortran based MPI compilers.
+
+../../../src/libs/.libs/libpnetcdf.so: undefined reference to `_gfortran_shape_4'
+../../../src/libs/.libs/libpnetcdf.so: undefined reference to `_gfortran_os_error'
+../../../src/libs/.libs/libpnetcdf.so: undefined reference to `_gfortran_runtime_error_at'
+../../../src/libs/.libs/libpnetcdf.so: undefined reference to `_gfortran_runtime_error'
+../../../src/libs/.libs/libpnetcdf.so: undefined reference to `_gfortran_internal_unpack'
+../../../src/libs/.libs/libpnetcdf.so: undefined reference to `_gfortran_compare_string'
+../../../src/libs/.libs/libpnetcdf.so: undefined reference to `_gfortran_internal_pack'
+../../../src/libs/.libs/libpnetcdf.so: undefined reference to `_gfortran_string_len_trim'
+collect2: error: ld returned 1 exit status
+
diff --git a/README.consistency b/doc/README.consistency
similarity index 95%
rename from README.consistency
rename to doc/README.consistency
index 879c8cc..92b4e85 100644
--- a/README.consistency
+++ b/doc/README.consistency
@@ -1,6 +1,13 @@
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.consistency 3433 2017-09-29 17:34:49Z wkliao $
+
 ---------------------------------------------
 Note on parallel I/O data consistency
 ---------------------------------------------
+
 PnetCDF follows the same parallel I/O data consistency as MPI-IO standard.
 Refer the URL below for more information.
 http://www.mpi-forum.org/docs/mpi-2.2/mpi22-report/node296.htm#Node296
diff --git a/doc/README.large_files b/doc/README.large_files
new file mode 100644
index 0000000..1378e3e
--- /dev/null
+++ b/doc/README.large_files
@@ -0,0 +1,58 @@
+#
+# Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: README.large_files 3433 2017-09-29 17:34:49Z wkliao $
+
+For latest information of large-file support, please visit:
+http://trac.mcs.anl.gov/projects/parallel-netcdf
+
+
+==== BACKGROUND
+
+The "traditional" netcdf file format (CDF-1) uses a 4-byte value to hold the
+offset into the file where one can find a variable's data
+
+Recently (October 2003), Greg Sjaardema <gdsjaar at sandia.gov> proposed a new
+file format (CDF-2) which uses an 8-byte value for the offset.  We use his
+approach in parallel netcdf, though we have modified his patch against
+netcdf-3.5-beta1 to apply to our codebase.  
+
+I couldn't find a URL to Greg's original message, but here's Russ Rew's
+followup: 
+http://www.unidata.ucar.edu/projects/coohl/mhonarc/MailArchives/netcdf/msg04811.html
+
+This means there are two different but compatible implementations of the CDF-2
+file format.  We (the Parallel Netcdf developers) will make our best effort to
+keep our implementation compatible with the serial netcdf implementation.
+Please report any incompatibilities to the developers at
+parallel-netcdf at mcs.anl.gov. 
+
+==== PRELIMINARIES
+
+First, it is important that your MPI-IO implementation uses an 8 byte type to
+represent the 'MPI_Offset'. Starting from 1.9.0, PnetCDF requires the
+underneath MPI library's MPI_Offset to be of 8-byte size.
+
+Second, your platform should use an 8 byte type to represent the 'off_t' type.
+On Linux, solaris, IRIX64 (and quite possibly others), parallel-netcdf will
+automatically add the right options to the compiler to make this happen.   
+
+Run configure as you normally would.  Let the developers know if configure says
+your 'off_t' is 4 bytes.  Proceed to compile and install the library.
+
+==== USAGE
+
+By default, parallel-netcdf will create CDF-1 formatted files.  This
+will ensure that datasets created by our library will be compatible with
+the large body of applications which expect NetCDF files to be CDF-1
+formatted.
+
+To write a CDF-2 formatted file, add the flag 'NC_64BIT_OFFSET' to the
+ncmpi_create() function call ( or nfmpi_create() if using the Fortran
+interface)
+
+The parallel-netcdf library will detect the format of the dataset.
+There are no special options needed to read back files created with the
+NC_64BIT_OFFSET flag set.
+
diff --git a/pbs.script b/doc/pbs.script
similarity index 55%
rename from pbs.script
rename to doc/pbs.script
index 8494a0d..d3a664f 100644
--- a/pbs.script
+++ b/doc/pbs.script
@@ -10,9 +10,9 @@ cd $PBS_O_WORKDIR
 set OUT_DIR = /output/file/directory
 
 # test seqential programs
-make check TEST_MPIRUN="aprun -n NP" TEST_OUTDIR=$OUT_DIR TEST_SEQRUN="aprun -n 1"
+make check TESTMPIRUN="aprun -n NP" TESTOUTDIR=$OUT_DIR TESTSEQRUN="aprun -n 1"
 
 # test parallel programs
-make ptest TEST_MPIRUN="aprun -n NP" TEST_OUTDIR=$OUT_DIR TEST_SEQRUN="aprun -n 1"
+make ptest TESTMPIRUN="aprun -n NP" TESTOUTDIR=$OUT_DIR TESTSEQRUN="aprun -n 1"
 
 
diff --git a/doc/pnetcdf-api/Makefile.am b/doc/pnetcdf-api/Makefile.am
new file mode 100644
index 0000000..d028ab7
--- /dev/null
+++ b/doc/pnetcdf-api/Makefile.am
@@ -0,0 +1,40 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3486 2017-10-25 22:33:12Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .tex .pdf
+
+AM_DEFAULT_SOURCE_EXT = .tex
+
+API_GUIDE =
+if BUILD_DOCS
+if HAS_LATEX
+    API_GUIDE += pnetcdf-api.pdf
+endif
+endif
+
+all: $(API_GUIDE)
+
+pnetcdf-api.pdf: pnetcdf-api.tex
+	cd $(srcdir) ; $(LATEX) -output-directory=$(abs_builddir) $< && $(LATEX) -output-directory=$(abs_builddir) $<
+	$(DVIPDF) pnetcdf-api.dvi $@
+
+EXTRA_DIST = c_api.tex \
+             data_mode_api.tex \
+             flexible_api.tex \
+             latex8.sty \
+             Makefile.in \
+             multiple_io.tex \
+             nonblocking.tex \
+             pnetcdf-api.bbl \
+             pnetcdf-api.tex
+
+CLEANFILES = *.dvi *.log *.aux *.ps $(API_GUIDE)
+
+# Turn off parallel builds in this directory.
+.NOTPARALLEL:
+
diff --git a/doc/pnetcdf-api/Makefile.in b/doc/pnetcdf-api/Makefile.in
new file mode 100644
index 0000000..6a6461a
--- /dev/null
+++ b/doc/pnetcdf-api/Makefile.in
@@ -0,0 +1,559 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3486 2017-10-25 22:33:12Z wkliao $
+#
+# @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at BUILD_DOCS_TRUE@@HAS_LATEX_TRUE at am__append_1 = pnetcdf-api.pdf
+subdir = doc/pnetcdf-api
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .tex .pdf
+AM_DEFAULT_SOURCE_EXT = .tex
+API_GUIDE = $(am__append_1)
+EXTRA_DIST = c_api.tex \
+             data_mode_api.tex \
+             flexible_api.tex \
+             latex8.sty \
+             Makefile.in \
+             multiple_io.tex \
+             nonblocking.tex \
+             pnetcdf-api.bbl \
+             pnetcdf-api.tex
+
+CLEANFILES = *.dvi *.log *.aux *.ps $(API_GUIDE)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .tex .pdf
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/pnetcdf-api/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu doc/pnetcdf-api/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags-am distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags-am tests-am tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+all: $(API_GUIDE)
+
+pnetcdf-api.pdf: pnetcdf-api.tex
+	cd $(srcdir) ; $(LATEX) -output-directory=$(abs_builddir) $< && $(LATEX) -output-directory=$(abs_builddir) $<
+	$(DVIPDF) pnetcdf-api.dvi $@
+
+# Turn off parallel builds in this directory.
+.NOTPARALLEL:
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/c_api.tex b/doc/pnetcdf-api/c_api.tex
similarity index 100%
rename from doc/c_api.tex
rename to doc/pnetcdf-api/c_api.tex
diff --git a/doc/data_mode_api.tex b/doc/pnetcdf-api/data_mode_api.tex
similarity index 100%
rename from doc/data_mode_api.tex
rename to doc/pnetcdf-api/data_mode_api.tex
diff --git a/doc/flexible_api.tex b/doc/pnetcdf-api/flexible_api.tex
similarity index 100%
rename from doc/flexible_api.tex
rename to doc/pnetcdf-api/flexible_api.tex
diff --git a/doc/latex8.sty b/doc/pnetcdf-api/latex8.sty
similarity index 98%
rename from doc/latex8.sty
rename to doc/pnetcdf-api/latex8.sty
index c9e4df3..07abfc1 100644
--- a/doc/latex8.sty
+++ b/doc/pnetcdf-api/latex8.sty
@@ -1,6 +1,6 @@
 % --------------------------------------------------------------- 
 %
-% $Id: latex8.sty 93 2003-04-14 15:00:43Z robl $
+% $Id: latex8.sty 3341 2017-08-25 22:29:08Z wkliao $
 % 
 % by Paolo.Ienne at di.epfl.ch 
 %
diff --git a/doc/multiple_io.tex b/doc/pnetcdf-api/multiple_io.tex
similarity index 100%
rename from doc/multiple_io.tex
rename to doc/pnetcdf-api/multiple_io.tex
diff --git a/doc/nonblocking.tex b/doc/pnetcdf-api/nonblocking.tex
similarity index 100%
rename from doc/nonblocking.tex
rename to doc/pnetcdf-api/nonblocking.tex
diff --git a/doc/pnetcdf-api.bbl b/doc/pnetcdf-api/pnetcdf-api.bbl
similarity index 100%
rename from doc/pnetcdf-api.bbl
rename to doc/pnetcdf-api/pnetcdf-api.bbl
diff --git a/doc/pnetcdf-api.tex b/doc/pnetcdf-api/pnetcdf-api.tex
similarity index 100%
rename from doc/pnetcdf-api.tex
rename to doc/pnetcdf-api/pnetcdf-api.tex
diff --git a/doc/porting_notes.txt b/doc/porting_notes.txt
deleted file mode 100644
index f091ec8..0000000
--- a/doc/porting_notes.txt
+++ /dev/null
@@ -1,50 +0,0 @@
- 
- these are some rough notes for porting code from the serial netcdf api to
- the pnetcdf API.  Pnetcdf is very similar but there are some changes that
- have to be made:
-
-
-. the nc_* functions are called ncmpi_*
-
-. the nf_* functions are called nfmpi_*
-
-. ncmpi_open takes a communicator and an info structure, in addition to the
-  parameters in the serial nc_open()
-
-For example:
-	status = nc_open(path, NC_NOWRITE, &ncid);
-becomes
-	status = ncmpi_open(MPI_COMM_WORLD, path, NC_NOWRITE, 
-		MPI_INFO_NULL, &ncid);
-
-. if you make any independent calls ( those not ending in _all), you must put
-  yourself into independent data mode with ncmpi_begin_indep_data(ncid) and
-  ncmpi_end_indep_data(ncid)
-
-. FILL_DOUBLE and FILL_FLOAT are called  NC_FILL_DOUBLE and NC_FILL_FLOAT
-  respectively.  We do not define these NetCDF-2.x era constants in pnetcdf.
-
-.  #include <mpi.h> .  If you want, define a communicator.  MPI_COMM_WORLD
-     should work ok for most things.
-
-. somewhere near main, call MPI_Init(): pnetcdf won't do that for you.
-
-. pnetcdf does not implement nc_advise
-
-. pnetcdf does not support all types that serial netcdf supports. see
-  src/lib/TODO for more specifics
-
-. If for some reason your code uses 'ptrdiff_t' types, consider using
-  MPI_Offset types
-
-. likewise, in many places where serial netcdf takes size_t types, we instead
-  take MPI_Offset types
-
-. Fortran users should use '#include <mpif.h>' and '#include "pnetcdf.inc"',
-  instead of using the Fortran INCLUDE directive.
-
-. Fortran 90 users can use 'use mpi' and 'use pnetcdf'.
-
-. Fortran  dimension sizes should be declared as type
-  INTEGER(KIND=MPI_OFFSET_KIND) 
-
diff --git a/doc/symbol_renaming.txt b/doc/symbol_renaming.txt
deleted file mode 100644
index 6179f94..0000000
--- a/doc/symbol_renaming.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# We want apps to be able to link with both serial NetCDF and Parallel-NetCDF,
-# so we had to alter some symbols in the library.  The following list is a
-# start at documenting the changes.  I found such a list helpful when merging
-# netcdf-3.5 patches to pnetcdf
-#
-
-serial           parallel
--------------------------
-ncx_len_NC       ncmpii_hdr_len_NC
-ncx_put_NC       ncmpii_hdr_put_NC
-nc_get_NC        ncmpii_hdr_get_NC
-ncx_get_size_t   ncmpix_get_size_t
-new_NC           ncmpii_new_NC
-v1h_get_NC_attarray  hdr_len_NC_attarray
-ncx_len_NC_var       hdr_len_NC_var
-ncx_len_NC_vararray  hdr_len_NC_vararray
-check_v1hs           hdr_check_buffer
-struct v1hs      struct bufferinfo
-NC_*		 ncmpii_NC_*
-nc__
-ncx_*            ncmpix_*
-
diff --git a/examples/C/Makefile.am b/examples/C/Makefile.am
new file mode 100644
index 0000000..440636b
--- /dev/null
+++ b/examples/C/Makefile.am
@@ -0,0 +1,92 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+
+check_PROGRAMS = collective_write \
+                 nonblocking_write \
+                 nonblocking_write_in_def \
+                 column_wise \
+                 block_cyclic \
+                 flexible_api \
+                 get_info \
+                 hints \
+                 mput \
+                 put_varn_float \
+                 put_varn_int \
+                 create_open \
+                 global_attributes \
+                 put_vara \
+                 get_vara \
+                 transpose \
+                 vard_int \
+                 i_varn_int64 \
+                 bput_varn_uint \
+                 bput_varn_int64 \
+                 fill_mode \
+                 ghost_cell \
+                 req_all
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+
+# Note: put_vara must be run immediately before get_vara
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+TESTMPIRUN3  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/3/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+
+ptest ptest4: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS:  C  parallel run on 4 processes --------------- $$i"; \
+        else \
+           echo "FAILED:  C  parallel run on 4 processes ------------- $$i"; \
+	   exit 1; \
+        fi ; } ; done ; } ; done
+
+ptest8: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN8) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS:  C  parallel run on 8 processes --------------- $$i"; \
+        else \
+           echo "FAILED:  C  parallel run on 8 processes ------------- $$i"; \
+	   exit 1; \
+        fi ; } ; done ; } ; done
+
+ptest3: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS) ; do { \
+        $(TESTMPIRUN3) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS:  C  parallel run on 3 processes --------------- $$i"; \
+        else \
+           echo "FAILED:  C  parallel run on 3 processes ------------- $$i"; \
+	   exit 1; \
+        fi ; } ; done ; } ; done
+
+ptests: ptest3 ptest4 ptest8
+ptest2 ptest6 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
+
diff --git a/examples/C/Makefile.in b/examples/C/Makefile.in
index f95adfe..4c159f6 100644
--- a/examples/C/Makefile.in
+++ b/examples/C/Makefile.in
@@ -1,169 +1,960 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2698 2016-12-11 20:02:52Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
-
-srcdir  = @srcdir@
-VPATH   = @srcdir@
-
-include ../../macros.make
-
-# note the order of -L list matters
-INCLUDES  = -I../../src/lib
-LDFLAGS  := -L../../src/lib $(LDFLAGS)
-LIBS     := -lpnetcdf $(LIBS)
-
-C_SRCS  = collective_write.c \
-          nonblocking_write.c \
-          nonblocking_write_in_def.c \
-          column_wise.c \
-          block_cyclic.c \
-          flexible_api.c \
-          get_info.c \
-          hints.c \
-          mput.c \
-          put_varn_float.c \
-          put_varn_int.c \
-          create_open.c \
-          global_attributes.c \
-          put_vara.c \
-          get_vara.c \
-          transpose.c \
-          vard_int.c \
-          i_varn_int64.c \
-          bput_varn_uint.c \
-          bput_varn_int64.c \
-          fill_mode.c \
-          ghost_cell.c \
-          req_all.c
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = collective_write$(EXEEXT) nonblocking_write$(EXEEXT) \
+	nonblocking_write_in_def$(EXEEXT) column_wise$(EXEEXT) \
+	block_cyclic$(EXEEXT) flexible_api$(EXEEXT) get_info$(EXEEXT) \
+	hints$(EXEEXT) mput$(EXEEXT) put_varn_float$(EXEEXT) \
+	put_varn_int$(EXEEXT) create_open$(EXEEXT) \
+	global_attributes$(EXEEXT) put_vara$(EXEEXT) get_vara$(EXEEXT) \
+	transpose$(EXEEXT) vard_int$(EXEEXT) i_varn_int64$(EXEEXT) \
+	bput_varn_uint$(EXEEXT) bput_varn_int64$(EXEEXT) \
+	fill_mode$(EXEEXT) ghost_cell$(EXEEXT) req_all$(EXEEXT)
+subdir = examples/C
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+block_cyclic_SOURCES = block_cyclic.c
+block_cyclic_OBJECTS = block_cyclic.$(OBJEXT)
+block_cyclic_LDADD = $(LDADD)
+block_cyclic_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+bput_varn_int64_SOURCES = bput_varn_int64.c
+bput_varn_int64_OBJECTS = bput_varn_int64.$(OBJEXT)
+bput_varn_int64_LDADD = $(LDADD)
+bput_varn_int64_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+bput_varn_uint_SOURCES = bput_varn_uint.c
+bput_varn_uint_OBJECTS = bput_varn_uint.$(OBJEXT)
+bput_varn_uint_LDADD = $(LDADD)
+bput_varn_uint_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+collective_write_SOURCES = collective_write.c
+collective_write_OBJECTS = collective_write.$(OBJEXT)
+collective_write_LDADD = $(LDADD)
+collective_write_DEPENDENCIES =  \
+	$(top_builddir)/src/libs/libpnetcdf.la
+column_wise_SOURCES = column_wise.c
+column_wise_OBJECTS = column_wise.$(OBJEXT)
+column_wise_LDADD = $(LDADD)
+column_wise_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+create_open_SOURCES = create_open.c
+create_open_OBJECTS = create_open.$(OBJEXT)
+create_open_LDADD = $(LDADD)
+create_open_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+fill_mode_SOURCES = fill_mode.c
+fill_mode_OBJECTS = fill_mode.$(OBJEXT)
+fill_mode_LDADD = $(LDADD)
+fill_mode_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+flexible_api_SOURCES = flexible_api.c
+flexible_api_OBJECTS = flexible_api.$(OBJEXT)
+flexible_api_LDADD = $(LDADD)
+flexible_api_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+get_info_SOURCES = get_info.c
+get_info_OBJECTS = get_info.$(OBJEXT)
+get_info_LDADD = $(LDADD)
+get_info_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+get_vara_SOURCES = get_vara.c
+get_vara_OBJECTS = get_vara.$(OBJEXT)
+get_vara_LDADD = $(LDADD)
+get_vara_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+ghost_cell_SOURCES = ghost_cell.c
+ghost_cell_OBJECTS = ghost_cell.$(OBJEXT)
+ghost_cell_LDADD = $(LDADD)
+ghost_cell_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+global_attributes_SOURCES = global_attributes.c
+global_attributes_OBJECTS = global_attributes.$(OBJEXT)
+global_attributes_LDADD = $(LDADD)
+global_attributes_DEPENDENCIES =  \
+	$(top_builddir)/src/libs/libpnetcdf.la
+hints_SOURCES = hints.c
+hints_OBJECTS = hints.$(OBJEXT)
+hints_LDADD = $(LDADD)
+hints_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+i_varn_int64_SOURCES = i_varn_int64.c
+i_varn_int64_OBJECTS = i_varn_int64.$(OBJEXT)
+i_varn_int64_LDADD = $(LDADD)
+i_varn_int64_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+mput_SOURCES = mput.c
+mput_OBJECTS = mput.$(OBJEXT)
+mput_LDADD = $(LDADD)
+mput_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+nonblocking_write_SOURCES = nonblocking_write.c
+nonblocking_write_OBJECTS = nonblocking_write.$(OBJEXT)
+nonblocking_write_LDADD = $(LDADD)
+nonblocking_write_DEPENDENCIES =  \
+	$(top_builddir)/src/libs/libpnetcdf.la
+nonblocking_write_in_def_SOURCES = nonblocking_write_in_def.c
+nonblocking_write_in_def_OBJECTS = nonblocking_write_in_def.$(OBJEXT)
+nonblocking_write_in_def_LDADD = $(LDADD)
+nonblocking_write_in_def_DEPENDENCIES =  \
+	$(top_builddir)/src/libs/libpnetcdf.la
+put_vara_SOURCES = put_vara.c
+put_vara_OBJECTS = put_vara.$(OBJEXT)
+put_vara_LDADD = $(LDADD)
+put_vara_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+put_varn_float_SOURCES = put_varn_float.c
+put_varn_float_OBJECTS = put_varn_float.$(OBJEXT)
+put_varn_float_LDADD = $(LDADD)
+put_varn_float_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+put_varn_int_SOURCES = put_varn_int.c
+put_varn_int_OBJECTS = put_varn_int.$(OBJEXT)
+put_varn_int_LDADD = $(LDADD)
+put_varn_int_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+req_all_SOURCES = req_all.c
+req_all_OBJECTS = req_all.$(OBJEXT)
+req_all_LDADD = $(LDADD)
+req_all_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+transpose_SOURCES = transpose.c
+transpose_OBJECTS = transpose.$(OBJEXT)
+transpose_LDADD = $(LDADD)
+transpose_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+vard_int_SOURCES = vard_int.c
+vard_int_OBJECTS = vard_int.$(OBJEXT)
+vard_int_LDADD = $(LDADD)
+vard_int_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = block_cyclic.c bput_varn_int64.c bput_varn_uint.c \
+	collective_write.c column_wise.c create_open.c fill_mode.c \
+	flexible_api.c get_info.c get_vara.c ghost_cell.c \
+	global_attributes.c hints.c i_varn_int64.c mput.c \
+	nonblocking_write.c nonblocking_write_in_def.c put_vara.c \
+	put_varn_float.c put_varn_int.c req_all.c transpose.c \
+	vard_int.c
+DIST_SOURCES = block_cyclic.c bput_varn_int64.c bput_varn_uint.c \
+	collective_write.c column_wise.c create_open.c fill_mode.c \
+	flexible_api.c get_info.c get_vara.c ghost_cell.c \
+	global_attributes.c hints.c i_varn_int64.c mput.c \
+	nonblocking_write.c nonblocking_write_in_def.c put_vara.c \
+	put_varn_float.c put_varn_int.c req_all.c transpose.c \
+	vard_int.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
 
 # Note: put_vara must be run immediately before get_vara
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTMPIRUN3 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/3/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/C/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/C/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+block_cyclic$(EXEEXT): $(block_cyclic_OBJECTS) $(block_cyclic_DEPENDENCIES) $(EXTRA_block_cyclic_DEPENDENCIES) 
+	@rm -f block_cyclic$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(block_cyclic_OBJECTS) $(block_cyclic_LDADD) $(LIBS)
+
+bput_varn_int64$(EXEEXT): $(bput_varn_int64_OBJECTS) $(bput_varn_int64_DEPENDENCIES) $(EXTRA_bput_varn_int64_DEPENDENCIES) 
+	@rm -f bput_varn_int64$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bput_varn_int64_OBJECTS) $(bput_varn_int64_LDADD) $(LIBS)
+
+bput_varn_uint$(EXEEXT): $(bput_varn_uint_OBJECTS) $(bput_varn_uint_DEPENDENCIES) $(EXTRA_bput_varn_uint_DEPENDENCIES) 
+	@rm -f bput_varn_uint$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bput_varn_uint_OBJECTS) $(bput_varn_uint_LDADD) $(LIBS)
+
+collective_write$(EXEEXT): $(collective_write_OBJECTS) $(collective_write_DEPENDENCIES) $(EXTRA_collective_write_DEPENDENCIES) 
+	@rm -f collective_write$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(collective_write_OBJECTS) $(collective_write_LDADD) $(LIBS)
+
+column_wise$(EXEEXT): $(column_wise_OBJECTS) $(column_wise_DEPENDENCIES) $(EXTRA_column_wise_DEPENDENCIES) 
+	@rm -f column_wise$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(column_wise_OBJECTS) $(column_wise_LDADD) $(LIBS)
+
+create_open$(EXEEXT): $(create_open_OBJECTS) $(create_open_DEPENDENCIES) $(EXTRA_create_open_DEPENDENCIES) 
+	@rm -f create_open$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(create_open_OBJECTS) $(create_open_LDADD) $(LIBS)
+
+fill_mode$(EXEEXT): $(fill_mode_OBJECTS) $(fill_mode_DEPENDENCIES) $(EXTRA_fill_mode_DEPENDENCIES) 
+	@rm -f fill_mode$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(fill_mode_OBJECTS) $(fill_mode_LDADD) $(LIBS)
+
+flexible_api$(EXEEXT): $(flexible_api_OBJECTS) $(flexible_api_DEPENDENCIES) $(EXTRA_flexible_api_DEPENDENCIES) 
+	@rm -f flexible_api$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(flexible_api_OBJECTS) $(flexible_api_LDADD) $(LIBS)
+
+get_info$(EXEEXT): $(get_info_OBJECTS) $(get_info_DEPENDENCIES) $(EXTRA_get_info_DEPENDENCIES) 
+	@rm -f get_info$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(get_info_OBJECTS) $(get_info_LDADD) $(LIBS)
+
+get_vara$(EXEEXT): $(get_vara_OBJECTS) $(get_vara_DEPENDENCIES) $(EXTRA_get_vara_DEPENDENCIES) 
+	@rm -f get_vara$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(get_vara_OBJECTS) $(get_vara_LDADD) $(LIBS)
+
+ghost_cell$(EXEEXT): $(ghost_cell_OBJECTS) $(ghost_cell_DEPENDENCIES) $(EXTRA_ghost_cell_DEPENDENCIES) 
+	@rm -f ghost_cell$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ghost_cell_OBJECTS) $(ghost_cell_LDADD) $(LIBS)
+
+global_attributes$(EXEEXT): $(global_attributes_OBJECTS) $(global_attributes_DEPENDENCIES) $(EXTRA_global_attributes_DEPENDENCIES) 
+	@rm -f global_attributes$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(global_attributes_OBJECTS) $(global_attributes_LDADD) $(LIBS)
+
+hints$(EXEEXT): $(hints_OBJECTS) $(hints_DEPENDENCIES) $(EXTRA_hints_DEPENDENCIES) 
+	@rm -f hints$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(hints_OBJECTS) $(hints_LDADD) $(LIBS)
+
+i_varn_int64$(EXEEXT): $(i_varn_int64_OBJECTS) $(i_varn_int64_DEPENDENCIES) $(EXTRA_i_varn_int64_DEPENDENCIES) 
+	@rm -f i_varn_int64$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(i_varn_int64_OBJECTS) $(i_varn_int64_LDADD) $(LIBS)
+
+mput$(EXEEXT): $(mput_OBJECTS) $(mput_DEPENDENCIES) $(EXTRA_mput_DEPENDENCIES) 
+	@rm -f mput$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mput_OBJECTS) $(mput_LDADD) $(LIBS)
+
+nonblocking_write$(EXEEXT): $(nonblocking_write_OBJECTS) $(nonblocking_write_DEPENDENCIES) $(EXTRA_nonblocking_write_DEPENDENCIES) 
+	@rm -f nonblocking_write$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nonblocking_write_OBJECTS) $(nonblocking_write_LDADD) $(LIBS)
+
+nonblocking_write_in_def$(EXEEXT): $(nonblocking_write_in_def_OBJECTS) $(nonblocking_write_in_def_DEPENDENCIES) $(EXTRA_nonblocking_write_in_def_DEPENDENCIES) 
+	@rm -f nonblocking_write_in_def$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nonblocking_write_in_def_OBJECTS) $(nonblocking_write_in_def_LDADD) $(LIBS)
+
+put_vara$(EXEEXT): $(put_vara_OBJECTS) $(put_vara_DEPENDENCIES) $(EXTRA_put_vara_DEPENDENCIES) 
+	@rm -f put_vara$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(put_vara_OBJECTS) $(put_vara_LDADD) $(LIBS)
+
+put_varn_float$(EXEEXT): $(put_varn_float_OBJECTS) $(put_varn_float_DEPENDENCIES) $(EXTRA_put_varn_float_DEPENDENCIES) 
+	@rm -f put_varn_float$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(put_varn_float_OBJECTS) $(put_varn_float_LDADD) $(LIBS)
+
+put_varn_int$(EXEEXT): $(put_varn_int_OBJECTS) $(put_varn_int_DEPENDENCIES) $(EXTRA_put_varn_int_DEPENDENCIES) 
+	@rm -f put_varn_int$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(put_varn_int_OBJECTS) $(put_varn_int_LDADD) $(LIBS)
+
+req_all$(EXEEXT): $(req_all_OBJECTS) $(req_all_DEPENDENCIES) $(EXTRA_req_all_DEPENDENCIES) 
+	@rm -f req_all$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(req_all_OBJECTS) $(req_all_LDADD) $(LIBS)
+
+transpose$(EXEEXT): $(transpose_OBJECTS) $(transpose_DEPENDENCIES) $(EXTRA_transpose_DEPENDENCIES) 
+	@rm -f transpose$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(transpose_OBJECTS) $(transpose_LDADD) $(LIBS)
+
+vard_int$(EXEEXT): $(vard_int_OBJECTS) $(vard_int_DEPENDENCIES) $(EXTRA_vard_int_DEPENDENCIES) 
+	@rm -f vard_int$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(vard_int_OBJECTS) $(vard_int_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/block_cyclic.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bput_varn_int64.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bput_varn_uint.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/collective_write.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/column_wise.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/create_open.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fill_mode.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flexible_api.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/get_info.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/get_vara.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ghost_cell.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/global_attributes.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hints.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/i_varn_int64.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mput.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nonblocking_write.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nonblocking_write_in_def.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/put_vara.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/put_varn_float.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/put_varn_int.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/req_all.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/transpose.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vard_int.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
 
-PROGS     = $(C_SRCS:.c=)
-OBJS      = $(C_SRCS:.c=.o)
+html-am:
+
+info: info-am
 
-GARBAGE      = $(PROGS) *.nc
+info-am:
 
-PACKING_LIST = $(C_SRCS) depend Makefile.in
+install-data-am:
 
-all: $(PROGS)
+install-dvi: install-dvi-am
 
-install:
+install-dvi-am:
 
-uninstall:
+install-exec-am:
 
-collective_write: collective_write.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-html: install-html-am
 
-nonblocking_write: nonblocking_write.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-html-am:
 
-nonblocking_write_in_def: nonblocking_write_in_def.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-info: install-info-am
 
-get_info: get_info.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-info-am:
 
-column_wise: column_wise.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-man:
 
-block_cyclic: block_cyclic.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-pdf: install-pdf-am
 
-put_vara: put_vara.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-pdf-am:
 
-mput: mput.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-ps: install-ps-am
 
-hints: hints.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-ps-am:
 
-flexible_api: flexible_api.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+installcheck-am:
 
-put_varn_int: put_varn_int.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-put_varn_float: put_varn_float.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mostlyclean: mostlyclean-am
 
-create_open: create_open.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-global_attributes: global_attributes.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+pdf: pdf-am
 
-get_vara: get_vara.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+pdf-am:
 
-transpose: transpose.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+ps: ps-am
 
-vard_int: vard_int.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+ps-am:
 
-i_varn_int64: i_varn_int64.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tests: tests-am
 
-bput_varn_uint: bput_varn_uint.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tests-am: tests-local
 
-bput_varn_int64: bput_varn_int64.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+uninstall-am:
 
-fill_mode: fill_mode.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+.MAKE: check-am install-am install-strip
 
-ghost_cell: ghost_cell.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
 
-req_all: req_all.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_8  = $(subst NP,8,$(TEST_MPIRUN))
-TEST_MPIRUN_3  = $(subst NP,3,$(TEST_MPIRUN))
 
-ptest4: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_4) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest ptest4: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS:  C  parallel run on 4 processes --------------- $$i"; \
         else \
            echo "FAILED:  C  parallel run on 4 processes ------------- $$i"; \
 	   exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest8: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_8) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest8: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN8) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS:  C  parallel run on 8 processes --------------- $$i"; \
         else \
            echo "FAILED:  C  parallel run on 8 processes ------------- $$i"; \
 	   exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest3: $(PROGS)
-	@for i in $(PROGS) ; do { \
-        $(TEST_MPIRUN_3) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest3: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS) ; do { \
+        $(TESTMPIRUN3) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS:  C  parallel run on 3 processes --------------- $$i"; \
         else \
            echo "FAILED:  C  parallel run on 3 processes ------------- $$i"; \
 	   exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest: ptest4
 ptests: ptest3 ptest4 ptest8
 ptest2 ptest6 ptest10:
 
-include $(srcdir)/depend
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/C/block_cyclic.c b/examples/C/block_cyclic.c
index 34b26e7..3bf6f3c 100644
--- a/examples/C/block_cyclic.c
+++ b/examples/C/block_cyclic.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: block_cyclic.c 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: block_cyclic.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example, generalized from column_wise.c, makes a number of nonblocking
@@ -74,10 +74,6 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 10
 #define NX 4
 
@@ -85,7 +81,7 @@
 #define MIN(a,b) (((a)<(b))?(a):(b))
 #endif
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -119,7 +115,7 @@ int main(int argc, char** argv) {
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -206,8 +202,8 @@ int main(int argc, char** argv) {
     /* check status of all requests */
     for (i=0; i<num_reqs; i++)
         if (sts[i] != NC_NOERR)
-            printf("Error: nonblocking write fails on request %d (%s)\n",
-                   i, ncmpi_strerror(sts[i]));
+            printf("Error at line %d in %s: nonblocking write fails on request %d (%s)\n",
+                   __LINE__,__FILE__,i, ncmpi_strerror(sts[i]));
 
     err = ncmpi_close(ncid);
     ERR
@@ -280,8 +276,8 @@ int main(int argc, char** argv) {
     /* check status of all requests */
     for (i=0; i<num_reqs; i++)
         if (sts[i] != NC_NOERR)
-            printf("Error: nonblocking read fails on request %d (%s)\n",
-                   i, ncmpi_strerror(sts[i]));
+            printf("Error at line %d in %s: nonblocking read fails on request %d (%s)\n",
+                   __LINE__,__FILE__,i, ncmpi_strerror(sts[i]));
 
     err = ncmpi_close(ncid);
     ERR
@@ -310,6 +306,6 @@ int main(int argc, char** argv) {
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/bput_varn_int64.c b/examples/C/bput_varn_int64.c
index 100478b..e434c75 100644
--- a/examples/C/bput_varn_int64.c
+++ b/examples/C/bput_varn_int64.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: bput_varn_int64.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: bput_varn_int64.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests nonblocking buffered write varn APIs, including
@@ -87,21 +87,17 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 10
 #define NX 4
 #define NDIMS 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 #define ERRS(n,a) { \
     int _i; \
     for (_i=0; _i<(n); _i++) { \
         if ((a)[_i] != NC_NOERR) { \
-            printf("Error at line=%d: err[%d] %s\n", __LINE__, _i, \
+            printf("Error at line %d in %s: err[%d] %s\n", __LINE__,__FILE__, _i, \
                    ncmpi_strerror((a)[_i])); \
                    nerrs++; \
         } \
@@ -204,7 +200,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -423,6 +419,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/bput_varn_uint.c b/examples/C/bput_varn_uint.c
index 7ab48dc..2b016ea 100644
--- a/examples/C/bput_varn_uint.c
+++ b/examples/C/bput_varn_uint.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: bput_varn_uint.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: bput_varn_uint.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests nonblocking buffered write varn APIs, including
@@ -63,21 +63,17 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 4
 #define NX 10
 #define NDIMS 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 #define ERRS(n,a) { \
     int _i; \
     for (_i=0; _i<(n); _i++) { \
         if ((a)[_i] != NC_NOERR) { \
-            printf("Error at line=%d: err[%d] %s\n", __LINE__, _i, \
+            printf("Error at line %d in %s: err[%d] %s\n", __LINE__,__FILE__, _i, \
                    ncmpi_strerror((a)[_i])); \
                    nerrs++; \
         } \
@@ -180,7 +176,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -357,6 +353,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/collective_write.c b/examples/C/collective_write.c
index 95611b0..dc73758 100644
--- a/examples/C/collective_write.c
+++ b/examples/C/collective_write.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: collective_write.c 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: collective_write.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*
  *    This example mimics the coll_perf.c from ROMIO.
@@ -41,20 +41,10 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NDIMS    3
 #define NUM_VARS 10
 
-#define HANDLE_ERROR {                                \
-    if (err != NC_NOERR) {                            \
-        printf("Error at line %d (%s)\n", __LINE__,   \
-               ncmpi_strerror(err));                  \
-        nerrs++;                                      \
-    }                                                 \
-}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -116,7 +106,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -156,7 +146,8 @@ int main(int argc, char **argv)
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
                        MPI_INFO_NULL, &ncid);
     if (err != NC_NOERR) {
-        printf("Error: ncmpi_create() file %s (%s)\n",filename,ncmpi_strerror(err));
+        printf("Error at line %d in %s: ncmpi_create() file %s (%s)\n",
+               __LINE__,__FILE__,filename,ncmpi_strerror(err));
         MPI_Abort(MPI_COMM_WORLD, -1);
         exit(1);
     }
@@ -165,33 +156,33 @@ int main(int argc, char **argv)
     for (i=0; i<NDIMS; i++) {
         sprintf(str, "%c", 'x'+i);
         err = ncmpi_def_dim(ncid, str, gsizes[i], &dimids[i]);
-        HANDLE_ERROR
+        ERR
     }
 
     /* define variables */
     for (i=0; i<NUM_VARS; i++) {
         sprintf(str, "var%d", i);
         err = ncmpi_def_var(ncid, str, NC_INT, NDIMS, dimids, &varids[i]);
-        HANDLE_ERROR
+        ERR
     }
 
     /* exit the define mode */
     err = ncmpi_enddef(ncid);
-    HANDLE_ERROR
+    ERR
 
     /* get all the hints used */
     err = ncmpi_inq_file_info(ncid, &info_used);
-    HANDLE_ERROR
+    ERR
 
     /* write one variable at a time */
     for (i=0; i<NUM_VARS; i++) {
         err = ncmpi_put_vara_int_all(ncid, varids[i], starts, counts, buf[i]);
-        HANDLE_ERROR
+        ERR
     }
 
     /* close the file */
     err = ncmpi_close(ncid);
-    HANDLE_ERROR
+    ERR
 
     write_timing = MPI_Wtime() - write_timing;
 
@@ -235,6 +226,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/column_wise.c b/examples/C/column_wise.c
index 7e89e4b..cdd237b 100644
--- a/examples/C/column_wise.c
+++ b/examples/C/column_wise.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: column_wise.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: column_wise.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example makes a number of nonblocking API calls, each writes a single
@@ -65,14 +65,10 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 10
 #define NX 4
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -106,7 +102,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -178,10 +174,16 @@ int main(int argc, char** argv)
     /* check status of all requests */
     for (i=0; i<num_reqs; i++)
         if (sts[i] != NC_NOERR)
-            printf("Error: nonblocking write fails on request %d (%s)\n",
-                   i, ncmpi_strerror(sts[i]));
+            printf("Error at line %d in %s: nonblocking write fails on request %d (%s)\n",
+                   __LINE__,__FILE__,i, ncmpi_strerror(sts[i]));
+
+    err = ncmpi_close(ncid); ERR
 
     /* read back using the same access pattern */
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); ERR
+
+    err = ncmpi_inq_varid(ncid, "var", &varid); ERR
+
     for (i=0; i<myNX; i++)
         for (j=0; j<NY; j++) buf[i][j] = -1;
 
@@ -202,13 +204,14 @@ int main(int argc, char** argv)
     /* check status of all requests */
     for (i=0; i<num_reqs; i++)
         if (sts[i] != NC_NOERR)
-            printf("Error: nonblocking write fails on request %d (%s)\n",
-                   i, ncmpi_strerror(sts[i]));
+            printf("Error at line %d in %s: nonblocking write fails on request %d (%s)\n",
+                   __LINE__,__FILE__,i, ncmpi_strerror(sts[i]));
 
     for (i=0; i<myNX; i++) {
         for (j=0; j<NY; j++)
             if (buf[i][j] != rank)
-                printf("Error: expect buf[%d][%d]=%d but got %d\n",i,j,rank,buf[i][j]);
+                printf("Error at line %d in %s: expect buf[%d][%d]=%d but got %d\n",
+                __LINE__,__FILE__,i,j,rank,buf[i][j]);
     }
 
     err = ncmpi_close(ncid);
@@ -230,6 +233,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/create_open.c b/examples/C/create_open.c
index 293dccd..f0aec07 100644
--- a/examples/C/create_open.c
+++ b/examples/C/create_open.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: create_open.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: create_open.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use ncmpi_create() to create a new file and
@@ -32,11 +32,7 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -67,7 +63,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -105,6 +101,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/depend b/examples/C/depend
deleted file mode 100644
index 961cd0e..0000000
--- a/examples/C/depend
+++ /dev/null
@@ -1,23 +0,0 @@
-block_cyclic.o: block_cyclic.c
-collective_write.o: collective_write.c
-column_wise.o: column_wise.c
-flexible_api.o: flexible_api.c
-get_info.o: get_info.c
-hints.o: hints.c
-nonblocking_write.o: nonblocking_write.c
-nonblocking_write_in_def.o: nonblocking_write_in_def.c
-put_vara.o: put_vara.c
-put_varn_float.o: put_varn_float.c
-put_varn_int.o: put_varn_int.c
-mput.o: mput.c
-create_open.o: create_open.c
-global_attributes.o: global_attributes.c
-get_vara.o: get_vara.c
-transpose.o: transpose.c
-vard_int.o: vard_int.c
-i_varn_int64.o: i_varn_int64.c
-bput_varn_uint.o: bput_varn_uint.c
-bput_varn_int64.o: bput_varn_int64.c
-fill_mode.o: fill_mode.c
-ghost_cell.o: ghost_cell.c
-req_all.o: req_all.c
diff --git a/examples/C/fill_mode.c b/examples/C/fill_mode.c
index f7ef29a..e2b8910 100644
--- a/examples/C/fill_mode.c
+++ b/examples/C/fill_mode.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: fill_mode.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: fill_mode.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use 
@@ -62,15 +62,11 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 3
 #define NX 4
 
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -104,7 +100,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -171,9 +167,11 @@ int main(int argc, char** argv)
 
     err = ncmpi_inq_var_fill(ncid, fix_varid, &no_fill, &fill_value); ERR
     if (no_fill != 0)
-        printf("Error: expecting no_fill to be 0\n");
+        printf("Error at line %d in %s: expecting no_fill to be 0\n",
+        __LINE__,__FILE__);
     if (fill_value != NC_FILL_INT)
-        printf("Error: expecting no_fill to be %ld but got %d\n",NC_FILL_INT,fill_value);
+        printf("Error at line %d in %s: expecting no_fill to be %ld but got %d\n",
+        __LINE__,__FILE__,NC_FILL_INT,fill_value);
 
     /* fill the 1st record of the record variable */
     start[0] = 0;
@@ -204,6 +202,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/flexible_api.c b/examples/C/flexible_api.c
index ad8ea41..214025f 100644
--- a/examples/C/flexible_api.c
+++ b/examples/C/flexible_api.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: flexible_api.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: flexible_api.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -78,15 +78,11 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NZ 5
 #define NY 5
 #define NX 5
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -122,7 +118,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -171,7 +167,8 @@ int main(int argc, char** argv)
     /* check the contents of put buffer */
     for (i=0; i<buffer_len; i++) {
         if (buf_zy[i] != rank)
-            printf("Error put buffer[%d] is altered\n",i);
+            printf("Error at line %d in %s: put buffer[%d] is altered\n",
+            __LINE__,__FILE__,i);
     }
 
     for (i=0; i<buffer_len; i++) buf_zy[i] = -1;
@@ -227,7 +224,8 @@ int main(int argc, char** argv)
     /* check the contents of put buffer */
     for (i=0; i<buffer_len; i++) {
         if (buf_yx[i] != rank)
-            printf("Error iput buffer[%d]=%f is altered\n",i,buf_yx[i]);
+            printf("Error at line %d in %s: iput buffer[%d]=%f is altered\n",
+            __LINE__,__FILE__,i,buf_yx[i]);
     }
 
     for (i=0; i<buffer_len; i++) buf_yx[i] = -1;
@@ -271,6 +269,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/get_info.c b/examples/C/get_info.c
index 0714b57..81aabc5 100644
--- a/examples/C/get_info.c
+++ b/examples/C/get_info.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: get_info.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: get_info.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*
  *    prints all MPI-IO hints used
@@ -43,17 +43,7 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
-#define HANDLE_ERROR {                                \
-    if (err != NC_NOERR) {                            \
-        printf("Error at line %d (%s)\n", __LINE__,   \
-               ncmpi_strerror(err));                  \
-        nerrs++;                                      \
-    }                                                 \
-}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -104,7 +94,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -115,22 +105,22 @@ int main(int argc, char **argv)
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
                        MPI_INFO_NULL, &ncid);
     if (err != NC_NOERR) {
-        printf("Error: ncmpi_create() file %s (%s)\n",filename,ncmpi_strerror(err));
+        ERR
         MPI_Abort(MPI_COMM_WORLD, -1);
         exit(1);
     }
 
     /* exit the define mode */
     err = ncmpi_enddef(ncid);
-    HANDLE_ERROR
+    ERR
 
     /* get all the hints used */
     err = ncmpi_inq_file_info(ncid, &info_used);
-    HANDLE_ERROR
+    ERR
 
     /* close the file */
     err = ncmpi_close(ncid);
-    HANDLE_ERROR
+    ERR
 
     if (rank == 0 && verbose) print_info(&info_used);
     MPI_Info_free(&info_used);
@@ -146,6 +136,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/get_vara.c b/examples/C/get_vara.c
index 0d18df3..1ba5a7e 100644
--- a/examples/C/get_vara.c
+++ b/examples/C/get_vara.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: get_vara.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: get_vara.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example is the read counterpart of example put_vara.c. It shows how to
@@ -60,13 +60,9 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define CHECK_ERR { \
     if (err!=NC_NOERR) { \
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); \
+        printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err)); \
         nerrs++; \
         goto fn_exit; \
     } \
@@ -104,7 +100,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -191,6 +187,6 @@ int main(int argc, char** argv)
 
 fn_exit:
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/ghost_cell.c b/examples/C/ghost_cell.c
index 754d8f8..4c6985a 100644
--- a/examples/C/ghost_cell.c
+++ b/examples/C/ghost_cell.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: ghost_cell.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: ghost_cell.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*
  * This example shows how to use varm API to write a 2D array buffer with ghost
@@ -74,11 +74,7 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -115,7 +111,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -167,7 +163,8 @@ int main(int argc, char **argv)
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
                        MPI_INFO_NULL, &ncid);
     if (err != NC_NOERR) {
-        printf("Error: ncmpi_create() file %s (%s)\n",filename,ncmpi_strerror(err));
+        printf("Error at line %d in %s: ncmpi_create() file %s (%s)\n",
+        __LINE__,__FILE__,filename,ncmpi_strerror(err));
         MPI_Abort(MPI_COMM_WORLD, -1);
         exit(1);
     }
@@ -198,6 +195,6 @@ int main(int argc, char **argv)
     free(buf);
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/global_attributes.c b/examples/C/global_attributes.c
index 51382df..1b3f572 100644
--- a/examples/C/global_attributes.c
+++ b/examples/C/global_attributes.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: global_attributes.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: global_attributes.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example creates a new file and add 2 global attributes, one is of text
@@ -39,13 +39,9 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define ERR { \
     if(err!=NC_NOERR) { \
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); \
+        printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err)); \
         nerrs++; \
         goto fn_exit; \
     } \
@@ -82,7 +78,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -130,8 +126,8 @@ int main(int argc, char** argv)
 
     err = 0;
     if (ngatts != 2) {
-        printf("Error: expected number of global attributes is 2, but got %d\n",
-               ngatts);
+        printf("Error at line %d in %s: expected number of global attributes is 2, but got %d\n",
+               __LINE__,__FILE__,ngatts);
         err = -1;
     }
     MPI_Allreduce(MPI_IN_PLACE, &err, 1, MPI_INT, MPI_MIN, MPI_COMM_WORLD);
@@ -143,8 +139,8 @@ int main(int argc, char** argv)
 
     err = 0;
     if (strncmp(att_name, "history", strlen("history"))) {
-        printf("Error: expected attribute name \"history\", but got %s\n",
-               att_name);
+        printf("Error at line %d in %s: expected attribute name \"history\", but got %s\n",
+               __LINE__,__FILE__,att_name);
         err = -1;
     }
     MPI_Allreduce(MPI_IN_PLACE, &err, 1, MPI_INT, MPI_MIN, MPI_COMM_WORLD);
@@ -160,8 +156,8 @@ int main(int argc, char** argv)
 
     err = 0;
     if (strncmp(att_name, "digits", strlen("digits"))) {
-        printf("Error: expected attribute name \"digits\", but got %s\n",
-               att_name);
+        printf("Error at line %d in %s: expected attribute name \"digits\", but got %s\n",
+               __LINE__,__FILE__,att_name);
         err = -1;
     }
     MPI_Allreduce(MPI_IN_PLACE, &err, 1, MPI_INT, MPI_MIN, MPI_COMM_WORLD);
@@ -187,6 +183,6 @@ int main(int argc, char** argv)
 
 fn_exit:
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/hints.c b/examples/C/hints.c
index 293fc79..94c8be9 100644
--- a/examples/C/hints.c
+++ b/examples/C/hints.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: hints.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: hints.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example sets two PnetCDF hints:
@@ -35,15 +35,11 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NZ 5
 #define NY 5
 #define NX 5
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -133,7 +129,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -196,6 +192,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/i_varn_int64.c b/examples/C/i_varn_int64.c
index f382aa8..b53ad55 100644
--- a/examples/C/i_varn_int64.c
+++ b/examples/C/i_varn_int64.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: i_varn_int64.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: i_varn_int64.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests nonblocking varn APIs, including
@@ -64,21 +64,17 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 4
 #define NX 10
 #define NDIMS 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 #define ERRS(n,a) { \
     int _i; \
     for (_i=0; _i<(n); _i++) { \
         if ((a)[_i] != NC_NOERR) { \
-            printf("Error at line=%d: err[%d] %s\n", __LINE__, _i, \
+            printf("Error at line %d in %s: err[%d] %s\n", __LINE__, __FILE__, _i, \
                    ncmpi_strerror((a)[_i])); \
             nerrs++; \
         } \
@@ -181,7 +177,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -381,6 +377,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/mput.c b/examples/C/mput.c
index 07ebdef..0aead42 100644
--- a/examples/C/mput.c
+++ b/examples/C/mput.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: mput.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: mput.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use a single call of ncmpi_mput_vara_all() to
@@ -48,16 +48,11 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 4
 #define NX 10
 #define NDIMS 2
 
-
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -92,7 +87,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -243,6 +238,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/nonblocking_write.c b/examples/C/nonblocking_write.c
index f43ae21..f8a8e57 100644
--- a/examples/C/nonblocking_write.c
+++ b/examples/C/nonblocking_write.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: nonblocking_write.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: nonblocking_write.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*    This example is similar to collective_write.c but using nonblocking APIs.
  *    It creates a netcdf file in CD-5 format and writes a number of
@@ -39,14 +39,10 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NDIMS    3
 #define NUM_VARS 10
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -110,7 +106,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -154,7 +150,8 @@ int main(int argc, char **argv)
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
                        info, &ncid);
     if (err != NC_NOERR) {
-        printf("Error: ncmpi_create() file %s (%s)\n",filename,ncmpi_strerror(err));
+        printf("Error at line %d in %s: ncmpi_create() file %s (%s)\n",
+        __LINE__,__FILE__,filename,ncmpi_strerror(err));
         MPI_Abort(MPI_COMM_WORLD, -1);
         exit(1);
     }
@@ -194,8 +191,8 @@ int main(int argc, char **argv)
     ERR
     for (i=0; i<NUM_VARS; i++) {
         if (st[i] != NC_NOERR)
-            printf("Error: nonblocking write fails on request %d (%s)\n",
-                   i, ncmpi_strerror(st[i]));
+            printf("Error at line %d in %s: nonblocking write fails on request %d (%s)\n",
+            __LINE__,__FILE__,i, ncmpi_strerror(st[i]));
     }
 
     /* write one variable at a time using bput */
@@ -216,8 +213,8 @@ int main(int argc, char **argv)
     ERR
     for (i=0; i<NUM_VARS; i++) {
         if (st[i] != NC_NOERR)
-            printf("Error: nonblocking write fails on request %d (%s)\n",
-                   i, ncmpi_strerror(st[i]));
+            printf("Error at line %d in %s: nonblocking write fails on request %d (%s)\n",
+            __LINE__,__FILE__,i, ncmpi_strerror(st[i]));
     }
 
     /* detach the temporary buffer */
@@ -271,6 +268,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/nonblocking_write_in_def.c b/examples/C/nonblocking_write_in_def.c
index aa7363d..1b96e82 100644
--- a/examples/C/nonblocking_write_in_def.c
+++ b/examples/C/nonblocking_write_in_def.c
@@ -40,14 +40,10 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NDIMS    3
 #define NUM_VARS 10
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -112,7 +108,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -155,7 +151,8 @@ int main(int argc, char **argv)
     /* create the file */
     err = ncmpi_create(comm, filename, NC_CLOBBER|NC_64BIT_DATA, info, &ncid);
     if (err != NC_NOERR) {
-        printf("Error: ncmpi_create() file %s (%s)\n",filename,ncmpi_strerror(err));
+        printf("Error at line %d in %s: ncmpi_create() file %s (%s)\n",
+        __LINE__,__FILE__,filename,ncmpi_strerror(err));
         MPI_Abort(comm, -1);
         exit(1);
     }
@@ -263,6 +260,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/put_vara.c b/examples/C/put_vara.c
index 1d7d362..3148610 100644
--- a/examples/C/put_vara.c
+++ b/examples/C/put_vara.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: put_vara.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: put_vara.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use ncmpi_put_vara_int_all() to write a 2D
@@ -61,15 +61,10 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 10
 #define NX 4
 
-
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -105,7 +100,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -192,6 +187,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/put_varn_float.c b/examples/C/put_varn_float.c
index 18fb81c..b2d2d64 100644
--- a/examples/C/put_varn_float.c
+++ b/examples/C/put_varn_float.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: put_varn_float.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: put_varn_float.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use a single call of ncmpi_put_varn_float_all()
@@ -40,15 +40,11 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 4
 #define NX 10
 #define NDIMS 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -82,7 +78,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -221,6 +217,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/put_varn_int.c b/examples/C/put_varn_int.c
index ae42386..ce17b33 100644
--- a/examples/C/put_varn_int.c
+++ b/examples/C/put_varn_int.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: put_varn_int.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: put_varn_int.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use a single call of ncmpi_put_varn_int_all() to
@@ -48,15 +48,11 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 4
 #define NX 10
 #define NDIMS 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -89,7 +85,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -222,6 +218,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/req_all.c b/examples/C/req_all.c
index 8011fcf..3cb03c3 100644
--- a/examples/C/req_all.c
+++ b/examples/C/req_all.c
@@ -57,14 +57,10 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 10
 #define NX 4
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -98,7 +94,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -111,8 +107,7 @@ int main(int argc, char** argv)
     MPI_Info_set(info, "nc_var_align_size", "1");
 
     cmode = NC_CLOBBER;
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid);
-    ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); ERR
 
     MPI_Info_free(&info);
 
@@ -122,14 +117,10 @@ int main(int argc, char** argv)
     myNX  = NX;
     if (verbose) printf("%2d: myOff=%3d myNX=%3d\n",rank,myOff,myNX);
 
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]);
-    ERR
-    err = ncmpi_def_dim(ncid, "X", G_NX, &dimid[1]);
-    ERR
-    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimid, &varid);
-    ERR
-    err = ncmpi_enddef(ncid);
-    ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); ERR
+    err = ncmpi_def_dim(ncid, "X", G_NX, &dimid[1]); ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimid, &varid); ERR
+    err = ncmpi_enddef(ncid); ERR
 
     /* initialize the buffer with rank ID */
     buf = (int**) malloc(myNX * sizeof(int*));
@@ -150,10 +141,15 @@ int main(int argc, char** argv)
         ERR
         start[1] += nprocs;
     }
-    err = ncmpi_wait_all(ncid, NC_REQ_ALL, NULL, NULL);
-    ERR
+    err = ncmpi_wait_all(ncid, NC_REQ_ALL, NULL, NULL); ERR
+
+    err = ncmpi_close(ncid); ERR
 
     /* read back using the same access pattern */
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); ERR
+
+    err = ncmpi_inq_varid(ncid, "var", &varid); ERR
+
     for (i=0; i<myNX; i++)
         for (j=0; j<NY; j++) buf[i][j] = -1;
 
@@ -166,18 +162,17 @@ int main(int argc, char** argv)
         ERR
         start[1] += nprocs;
     }
-    err = ncmpi_wait_all(ncid, NC_REQ_ALL, NULL, NULL);
-    ERR
+    err = ncmpi_wait_all(ncid, NC_REQ_ALL, NULL, NULL); ERR
 
     /* check contents of read data of all requests */
     for (i=0; i<myNX; i++) {
         for (j=0; j<NY; j++)
             if (buf[i][j] != rank)
-                printf("Error: expect buf[%d][%d]=%d but got %d\n",i,j,rank,buf[i][j]);
+                printf("Error at line %d in %s: expect buf[%d][%d]=%d but got %d\n",
+                __LINE__,__FILE__,i,j,rank,buf[i][j]);
     }
 
-    err = ncmpi_close(ncid);
-    ERR
+    err = ncmpi_close(ncid); ERR
 
     for (i=0; i<myNX; i++) free(buf[i]);
     free(buf);
@@ -193,6 +188,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/transpose.c b/examples/C/transpose.c
index cdc00c0..0dfbcb7 100644
--- a/examples/C/transpose.c
+++ b/examples/C/transpose.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: transpose.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: transpose.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*
  *    This example shows how to use varm API to write six 3D integer array
@@ -36,13 +36,9 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NDIMS 3
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -81,7 +77,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -143,7 +139,8 @@ int main(int argc, char **argv)
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
                        info, &ncid);
     if (err != NC_NOERR) {
-        printf("Error: ncmpi_create() file %s (%s)\n",filename,ncmpi_strerror(err));
+        printf("Error at line %d in %s: ncmpi_create() file %s (%s)\n",
+        __LINE__,__FILE__,filename,ncmpi_strerror(err));
         MPI_Abort(MPI_COMM_WORLD, -1);
         exit(1);
     }
@@ -241,6 +238,6 @@ int main(int argc, char **argv)
     free(buf);
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/examples/C/vard_int.c b/examples/C/vard_int.c
index 73a900f..d3131ce 100644
--- a/examples/C/vard_int.c
+++ b/examples/C/vard_int.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: vard_int.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: vard_int.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use the vard API ncmpi_put_vard() and
@@ -49,13 +49,9 @@
 #include <mpi.h>
 #include <pnetcdf.h>
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 2
 #define NX 3
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
+#define ERR {if(err!=NC_NOERR){printf("Error at line %d in %s: %s\n", __LINE__,__FILE__, ncmpi_strerror(err));nerrs++;}}
 
 static void
 usage(char *argv0)
@@ -92,7 +88,7 @@ int main(int argc, char **argv) {
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -154,7 +150,8 @@ int main(int argc, char **argv) {
     err = ncmpi_inq_unlimdim(ncid, &dimids[0]); ERR
     err = ncmpi_inq_dimlen(ncid, dimids[0], &len); ERR
     if (len != 2)
-        printf("Error: number of records should be 2 but got %lld\n", len);
+        printf("Error at line %d in %s: number of records should be 2 but got %lld\n",
+        __LINE__,__FILE__,len);
 
     /* write the fixed-size variable */
     err = ncmpi_put_vard_all(ncid, varid1, fix_filetype, buf, bufcount,buftype);
@@ -192,5 +189,5 @@ int main(int argc, char **argv) {
     }
 
     MPI_Finalize();
-    return nerrs;
+    return (nerrs > 0);
 }
diff --git a/examples/CXX/Makefile.am b/examples/CXX/Makefile.am
new file mode 100644
index 0000000..9d4f2a6
--- /dev/null
+++ b/examples/CXX/Makefile.am
@@ -0,0 +1,84 @@
+#
+# Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .cpp .o
+
+AM_DEFAULT_SOURCE_EXT = .cpp
+
+AM_CPPFLAGS = -I$(top_builddir)/src/binding/cxx -I$(top_builddir)/src/include
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la
+
+check_PROGRAMS = collective_write \
+                 nonblocking_write \
+                 column_wise \
+                 block_cyclic \
+                 flexible_api \
+                 get_info \
+                 hints \
+                 put_varn_float \
+                 put_varn_int \
+                 put_vara \
+                 get_vara \
+                 transpose \
+                 vard_int \
+                 fill_mode \
+                 SimpleXyWr
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+
+CLEANFILES = *.nc core core.*
+
+TESTMPIRUN3  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/3/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+
+ptest ptest4: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: C++ parallel run on 4 processes --------------- $$i"; \
+        else \
+           echo "FAILED: C++ parallel run on 4 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptest8: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS) ; do { \
+        $(TESTMPIRUN8) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: C++ parallel run on 8 processes --------------- $$i"; \
+        else \
+           echo "FAILED: C++ parallel run on 8 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptest3: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS) ; do { \
+        $(TESTMPIRUN3) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: C++ parallel run on 3 processes --------------- $$i"; \
+        else \
+           echo "FAILED: C++ parallel run on 3 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptests: ptest3 ptest4 ptest8 
+ptest2 ptest6 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
+
diff --git a/examples/CXX/Makefile.in b/examples/CXX/Makefile.in
index 3cb9aca..d1badc4 100644
--- a/examples/CXX/Makefile.in
+++ b/examples/CXX/Makefile.in
@@ -1,133 +1,875 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2698 2016-12-11 20:02:52Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = collective_write$(EXEEXT) nonblocking_write$(EXEEXT) \
+	column_wise$(EXEEXT) block_cyclic$(EXEEXT) \
+	flexible_api$(EXEEXT) get_info$(EXEEXT) hints$(EXEEXT) \
+	put_varn_float$(EXEEXT) put_varn_int$(EXEEXT) \
+	put_vara$(EXEEXT) get_vara$(EXEEXT) transpose$(EXEEXT) \
+	vard_int$(EXEEXT) fill_mode$(EXEEXT) SimpleXyWr$(EXEEXT)
+subdir = examples/CXX
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SimpleXyWr_SOURCES = SimpleXyWr.cpp
+SimpleXyWr_OBJECTS = SimpleXyWr.$(OBJEXT)
+SimpleXyWr_LDADD = $(LDADD)
+SimpleXyWr_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+block_cyclic_SOURCES = block_cyclic.cpp
+block_cyclic_OBJECTS = block_cyclic.$(OBJEXT)
+block_cyclic_LDADD = $(LDADD)
+block_cyclic_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+collective_write_SOURCES = collective_write.cpp
+collective_write_OBJECTS = collective_write.$(OBJEXT)
+collective_write_LDADD = $(LDADD)
+collective_write_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+column_wise_SOURCES = column_wise.cpp
+column_wise_OBJECTS = column_wise.$(OBJEXT)
+column_wise_LDADD = $(LDADD)
+column_wise_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+fill_mode_SOURCES = fill_mode.cpp
+fill_mode_OBJECTS = fill_mode.$(OBJEXT)
+fill_mode_LDADD = $(LDADD)
+fill_mode_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+flexible_api_SOURCES = flexible_api.cpp
+flexible_api_OBJECTS = flexible_api.$(OBJEXT)
+flexible_api_LDADD = $(LDADD)
+flexible_api_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+get_info_SOURCES = get_info.cpp
+get_info_OBJECTS = get_info.$(OBJEXT)
+get_info_LDADD = $(LDADD)
+get_info_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+get_vara_SOURCES = get_vara.cpp
+get_vara_OBJECTS = get_vara.$(OBJEXT)
+get_vara_LDADD = $(LDADD)
+get_vara_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+hints_SOURCES = hints.cpp
+hints_OBJECTS = hints.$(OBJEXT)
+hints_LDADD = $(LDADD)
+hints_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+nonblocking_write_SOURCES = nonblocking_write.cpp
+nonblocking_write_OBJECTS = nonblocking_write.$(OBJEXT)
+nonblocking_write_LDADD = $(LDADD)
+nonblocking_write_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+put_vara_SOURCES = put_vara.cpp
+put_vara_OBJECTS = put_vara.$(OBJEXT)
+put_vara_LDADD = $(LDADD)
+put_vara_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+put_varn_float_SOURCES = put_varn_float.cpp
+put_varn_float_OBJECTS = put_varn_float.$(OBJEXT)
+put_varn_float_LDADD = $(LDADD)
+put_varn_float_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+put_varn_int_SOURCES = put_varn_int.cpp
+put_varn_int_OBJECTS = put_varn_int.$(OBJEXT)
+put_varn_int_LDADD = $(LDADD)
+put_varn_int_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+transpose_SOURCES = transpose.cpp
+transpose_OBJECTS = transpose.$(OBJEXT)
+transpose_LDADD = $(LDADD)
+transpose_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+vard_int_SOURCES = vard_int.cpp
+vard_int_OBJECTS = vard_int.$(OBJEXT)
+vard_int_LDADD = $(LDADD)
+vard_int_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = SimpleXyWr.cpp block_cyclic.cpp collective_write.cpp \
+	column_wise.cpp fill_mode.cpp flexible_api.cpp get_info.cpp \
+	get_vara.cpp hints.cpp nonblocking_write.cpp put_vara.cpp \
+	put_varn_float.cpp put_varn_int.cpp transpose.cpp vard_int.cpp
+DIST_SOURCES = SimpleXyWr.cpp block_cyclic.cpp collective_write.cpp \
+	column_wise.cpp fill_mode.cpp flexible_api.cpp get_info.cpp \
+	get_vara.cpp hints.cpp nonblocking_write.cpp put_vara.cpp \
+	put_varn_float.cpp put_varn_int.cpp transpose.cpp vard_int.cpp
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .cpp .o
+AM_DEFAULT_SOURCE_EXT = .cpp
+AM_CPPFLAGS = -I$(top_builddir)/src/binding/cxx -I$(top_builddir)/src/include
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+CLEANFILES = *.nc core core.*
+TESTMPIRUN3 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/3/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .o .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/CXX/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/CXX/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+SimpleXyWr$(EXEEXT): $(SimpleXyWr_OBJECTS) $(SimpleXyWr_DEPENDENCIES) $(EXTRA_SimpleXyWr_DEPENDENCIES) 
+	@rm -f SimpleXyWr$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(SimpleXyWr_OBJECTS) $(SimpleXyWr_LDADD) $(LIBS)
+
+block_cyclic$(EXEEXT): $(block_cyclic_OBJECTS) $(block_cyclic_DEPENDENCIES) $(EXTRA_block_cyclic_DEPENDENCIES) 
+	@rm -f block_cyclic$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(block_cyclic_OBJECTS) $(block_cyclic_LDADD) $(LIBS)
+
+collective_write$(EXEEXT): $(collective_write_OBJECTS) $(collective_write_DEPENDENCIES) $(EXTRA_collective_write_DEPENDENCIES) 
+	@rm -f collective_write$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(collective_write_OBJECTS) $(collective_write_LDADD) $(LIBS)
+
+column_wise$(EXEEXT): $(column_wise_OBJECTS) $(column_wise_DEPENDENCIES) $(EXTRA_column_wise_DEPENDENCIES) 
+	@rm -f column_wise$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(column_wise_OBJECTS) $(column_wise_LDADD) $(LIBS)
+
+fill_mode$(EXEEXT): $(fill_mode_OBJECTS) $(fill_mode_DEPENDENCIES) $(EXTRA_fill_mode_DEPENDENCIES) 
+	@rm -f fill_mode$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(fill_mode_OBJECTS) $(fill_mode_LDADD) $(LIBS)
+
+flexible_api$(EXEEXT): $(flexible_api_OBJECTS) $(flexible_api_DEPENDENCIES) $(EXTRA_flexible_api_DEPENDENCIES) 
+	@rm -f flexible_api$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(flexible_api_OBJECTS) $(flexible_api_LDADD) $(LIBS)
+
+get_info$(EXEEXT): $(get_info_OBJECTS) $(get_info_DEPENDENCIES) $(EXTRA_get_info_DEPENDENCIES) 
+	@rm -f get_info$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(get_info_OBJECTS) $(get_info_LDADD) $(LIBS)
+
+get_vara$(EXEEXT): $(get_vara_OBJECTS) $(get_vara_DEPENDENCIES) $(EXTRA_get_vara_DEPENDENCIES) 
+	@rm -f get_vara$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(get_vara_OBJECTS) $(get_vara_LDADD) $(LIBS)
+
+hints$(EXEEXT): $(hints_OBJECTS) $(hints_DEPENDENCIES) $(EXTRA_hints_DEPENDENCIES) 
+	@rm -f hints$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(hints_OBJECTS) $(hints_LDADD) $(LIBS)
+
+nonblocking_write$(EXEEXT): $(nonblocking_write_OBJECTS) $(nonblocking_write_DEPENDENCIES) $(EXTRA_nonblocking_write_DEPENDENCIES) 
+	@rm -f nonblocking_write$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(nonblocking_write_OBJECTS) $(nonblocking_write_LDADD) $(LIBS)
+
+put_vara$(EXEEXT): $(put_vara_OBJECTS) $(put_vara_DEPENDENCIES) $(EXTRA_put_vara_DEPENDENCIES) 
+	@rm -f put_vara$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(put_vara_OBJECTS) $(put_vara_LDADD) $(LIBS)
+
+put_varn_float$(EXEEXT): $(put_varn_float_OBJECTS) $(put_varn_float_DEPENDENCIES) $(EXTRA_put_varn_float_DEPENDENCIES) 
+	@rm -f put_varn_float$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(put_varn_float_OBJECTS) $(put_varn_float_LDADD) $(LIBS)
+
+put_varn_int$(EXEEXT): $(put_varn_int_OBJECTS) $(put_varn_int_DEPENDENCIES) $(EXTRA_put_varn_int_DEPENDENCIES) 
+	@rm -f put_varn_int$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(put_varn_int_OBJECTS) $(put_varn_int_LDADD) $(LIBS)
+
+transpose$(EXEEXT): $(transpose_OBJECTS) $(transpose_DEPENDENCIES) $(EXTRA_transpose_DEPENDENCIES) 
+	@rm -f transpose$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(transpose_OBJECTS) $(transpose_LDADD) $(LIBS)
+
+vard_int$(EXEEXT): $(vard_int_OBJECTS) $(vard_int_DEPENDENCIES) $(EXTRA_vard_int_DEPENDENCIES) 
+	@rm -f vard_int$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(vard_int_OBJECTS) $(vard_int_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/SimpleXyWr.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/block_cyclic.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/collective_write.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/column_wise.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fill_mode.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flexible_api.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/get_info.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/get_vara.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/hints.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nonblocking_write.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/put_vara.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/put_varn_float.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/put_varn_int.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/transpose.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vard_int.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+install-dvi-am:
 
-include ../../macros.make
+install-exec-am:
 
-# note the order of -L list matters
-INCLUDES  = -I../../src/lib -I../../src/libcxx
-LDFLAGS  := -L../../src/lib $(LDFLAGS)
-LIBS     := -lpnetcdf $(LIBS)
+install-html: install-html-am
 
-C_SRCS  = collective_write.cpp \
-          nonblocking_write.cpp \
-          column_wise.cpp \
-          block_cyclic.cpp \
-          flexible_api.cpp \
-          get_info.cpp \
-          hints.cpp \
-          put_varn_float.cpp \
-          put_varn_int.cpp \
-          put_vara.cpp \
-          get_vara.cpp \
-          transpose.cpp \
-          vard_int.cpp \
-          fill_mode.cpp
+install-html-am:
 
-PROGS        = $(C_SRCS:.cpp=)
-OBJS         = $(C_SRCS:.cpp=.o)
+install-info: install-info-am
 
-PAR_PROGS    = $(PROGS)
+install-info-am:
 
-GARBAGE      = $(PROGS) *.nc
+install-man:
 
-PACKING_LIST = $(C_SRCS) depend Makefile.in
+install-pdf: install-pdf-am
 
-all: $(PROGS)
+install-pdf-am:
 
-install:
+install-ps: install-ps-am
 
-uninstall:
+install-ps-am:
 
-collective_write: collective_write.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+installcheck-am:
 
-nonblocking_write: nonblocking_write.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-get_info: get_info.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+mostlyclean: mostlyclean-am
 
-column_wise: column_wise.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-block_cyclic: block_cyclic.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+pdf: pdf-am
 
-put_vara: put_vara.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+pdf-am:
 
-hints: hints.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+ps: ps-am
 
-flexible_api: flexible_api.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+ps-am:
 
-put_varn_int: put_varn_int.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+tests: tests-am
 
-put_varn_float: put_varn_float.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+tests-am: tests-local
 
-get_vara: get_vara.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+uninstall-am:
 
-transpose: transpose.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+.MAKE: check-am install-am install-strip
 
-vard_int: vard_int.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
 
-fill_mode: fill_mode.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_8  = $(subst NP,8,$(TEST_MPIRUN))
-TEST_MPIRUN_3  = $(subst NP,3,$(TEST_MPIRUN))
 
-ptest4: $(PAR_PROGS)
-	@for i in $(PAR_PROGS); do { \
-        $(TEST_MPIRUN_4) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest ptest4: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: C++ parallel run on 4 processes --------------- $$i"; \
         else \
            echo "FAILED: C++ parallel run on 4 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest8: $(PAR_PROGS)
-	@for i in $(PAR_PROGS) ; do { \
-        $(TEST_MPIRUN_8) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest8: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS) ; do { \
+        $(TESTMPIRUN8) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: C++ parallel run on 8 processes --------------- $$i"; \
         else \
            echo "FAILED: C++ parallel run on 8 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest3: $(PAR_PROGS)
-	@for i in $(PAR_PROGS) ; do { \
-        $(TEST_MPIRUN_3) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest3: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS) ; do { \
+        $(TESTMPIRUN3) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: C++ parallel run on 3 processes --------------- $$i"; \
         else \
            echo "FAILED: C++ parallel run on 3 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest: ptest4
 ptests: ptest3 ptest4 ptest8 
 ptest2 ptest6 ptest10:
 
-include $(srcdir)/depend
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/CXX/SimpleXyWr.cpp b/examples/CXX/SimpleXyWr.cpp
new file mode 100644
index 0000000..0ab80a8
--- /dev/null
+++ b/examples/CXX/SimpleXyWr.cpp
@@ -0,0 +1,131 @@
+/*********************************************************************
+ *
+ *  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *********************************************************************/
+/* $Id: SimpleXyWr.cpp 3466 2017-10-20 02:52:12Z wkliao $ */
+
+/* This is part of the netCDF package.
+   Copyright 2006 University Corporation for Atmospheric Research/Unidata.
+   See COPYRIGHT file for conditions of use.
+
+   This program is adopted from the netCDFexample program, URL:
+   http://www.unidata.ucar.edu/software/netcdf/examples/programs/SimpleXyWr.cpp
+
+   This example writes a 2D array of sample data. We create two shared
+   dimensions, "x" and "y", and a netCDF variable, called "data".
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <iostream>
+#include <vector>
+#include <string.h> /* strcpy(), strncpy() */
+#include <unistd.h> /* getopt() */
+#include <pnetcdf>
+
+using namespace std;
+using namespace PnetCDF;
+using namespace PnetCDF::exceptions;
+
+// We are writing 2D data, a 6 x 12 grid. 
+static const int NX = 6;
+static const int NY = 12;
+
+static void
+usage(char *argv0)
+{
+    cerr <<
+    "Usage: %s [-h] | [-q] [file_name]\n"
+    "       [-h] Print help\n"
+    "       [-q] Quiet mode (reports when fail)\n"
+    "       [filename] output netCDF file name\n"
+    << argv0;
+}
+
+int main(int argc, char *argv[])
+{
+    extern int optind;
+    char filename[256];
+    int i, rank, nprocs, verbose=1;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    /* get command-line arguments */
+    while ((i = getopt(argc, argv, "hq")) != EOF)
+        switch(i) {
+            case 'q': verbose = 0;
+                      break;
+            case 'h':
+            default:  if (rank==0) usage(argv[0]);
+                      MPI_Finalize();
+                      return 1;
+        }
+    argc -= optind;
+    argv += optind;
+    if (argc == 1) snprintf(filename, 256, "%s", argv[0]);
+    else           strcpy(filename, "testfile.nc");
+
+    // This is the data array we will write. It will just be filled
+    // with a progression of numbers for this example.
+    int dataOut[NX][NY];
+  
+    // Create some pretend data. If this wasn't an example program, we
+    // would have some real data to write, for example, model output.
+    for (int i = 0; i < NX; i++)
+        for (int j = 0; j < NY; j++)
+            dataOut[i][j] = i * NY + j;
+  
+    // The default behavior of the C++ API is to throw an exception i
+    // an error occurs. A try catch block is necessary.
+   
+    try {  
+        // Create the file. The Replace parameter tells netCDF to overwrite
+        // this file, if it already exists.
+        NcmpiFile dataFile(MPI_COMM_WORLD, filename, NcmpiFile::replace);
+      
+        // Create netCDF dimensions
+        NcmpiDim xDim = dataFile.addDim("x", NX);
+        NcmpiDim yDim = dataFile.addDim("y", NY);
+      
+        // Define the variable. The type of the variable in this case is
+        // ncInt (32-bit integer).
+        vector<NcmpiDim> dims;
+        dims.push_back(xDim);
+        dims.push_back(yDim);
+        NcmpiVar data = dataFile.addVar("data", ncmpiInt, dims);
+   
+        // Write the data to the file. Although netCDF supports
+        // reading and writing subsets of data, in this case we write all
+        // the data in one operation.
+        data.putVar_all(&dataOut[0][0]);
+      
+        // The file will be automatically close when the NcmpiFile object goes
+        // out of scope. This frees up any internal netCDF resources
+        // associated with the file, and flushes any buffers.
+      
+        if (verbose)
+            cout << "*** SUCCESS writing example file simple_xy.nc!" << endl;
+    }
+    catch(NcmpiException& e) {
+        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+        return 1;
+    }
+
+    /* check if there is any PnetCDF internal malloc residue */
+    MPI_Offset malloc_size, sum_size;
+    int err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+    }
+
+    MPI_Finalize();
+    return 0;
+}
diff --git a/examples/CXX/block_cyclic.cpp b/examples/CXX/block_cyclic.cpp
index 76a2d66..b30e2b3 100644
--- a/examples/CXX/block_cyclic.cpp
+++ b/examples/CXX/block_cyclic.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: block_cyclic.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: block_cyclic.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example, generalized from column_wise.cpp, makes a number of nonblocking
@@ -79,10 +79,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 10
 #define NX 4
 
@@ -120,7 +116,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -287,6 +283,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/collective_write.cpp b/examples/CXX/collective_write.cpp
index ca1b07c..7afa771 100644
--- a/examples/CXX/collective_write.cpp
+++ b/examples/CXX/collective_write.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: collective_write.cpp 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: collective_write.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*
  *    This example mimics the coll_perf.c from ROMIO.
@@ -46,10 +46,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NDIMS    3
 #define NUM_VARS 10
 
@@ -114,7 +110,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
diff --git a/examples/CXX/column_wise.cpp b/examples/CXX/column_wise.cpp
index 7a875df..df04699 100644
--- a/examples/CXX/column_wise.cpp
+++ b/examples/CXX/column_wise.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: column_wise.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: column_wise.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example makes a number of nonblocking API calls, each writes a single
@@ -72,10 +72,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 10
 #define NX 4
 
@@ -110,7 +106,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -186,6 +182,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/depend b/examples/CXX/depend
deleted file mode 100644
index cfd6d2b..0000000
--- a/examples/CXX/depend
+++ /dev/null
@@ -1,14 +0,0 @@
-collective_write.o: collective_write.cpp
-nonblocking_write.o: nonblocking_write.cpp
-column_wise.o: column_wise.cpp
-block_cyclic.o: block_cyclic.cpp
-flexible_api.o: flexible_api.cpp
-get_info.o: get_info.cpp
-hints.o: hints.cpp
-put_vara.o: put_vara.cpp
-get_vara.o: get_vara.cpp
-put_varn_float.o: put_varn_float.cpp
-put_varn_int.o: put_varn_int.cpp
-transpose.o: transpose.cpp
-vard_int.o: vard_int.cpp
-fill_mode.o: fill_mode.cpp
diff --git a/examples/CXX/fill_mode.cpp b/examples/CXX/fill_mode.cpp
index 774b8a0..2c72552 100644
--- a/examples/CXX/fill_mode.cpp
+++ b/examples/CXX/fill_mode.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: fill_mode.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: fill_mode.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use 
@@ -72,10 +72,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 3
 #define NX 4
 
@@ -109,7 +105,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -199,6 +195,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/flexible_api.cpp b/examples/CXX/flexible_api.cpp
index c572182..0c849f4 100644
--- a/examples/CXX/flexible_api.cpp
+++ b/examples/CXX/flexible_api.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: flexible_api.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: flexible_api.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -83,10 +83,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NZ 5
 #define NY 5
 #define NX 5
@@ -123,7 +119,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -214,6 +210,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/get_info.cpp b/examples/CXX/get_info.cpp
index f6fc8f7..0185d67 100644
--- a/examples/CXX/get_info.cpp
+++ b/examples/CXX/get_info.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: get_info.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: get_info.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*
  *    prints all MPI-IO hints used
@@ -49,10 +49,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 static void
 usage(char *argv0)
 {
@@ -102,7 +98,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
diff --git a/examples/CXX/get_vara.cpp b/examples/CXX/get_vara.cpp
index 4896afb..b1442a8 100644
--- a/examples/CXX/get_vara.cpp
+++ b/examples/CXX/get_vara.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: get_vara.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: get_vara.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example is the read counterpart of example put_vara.cpp. It shows how to
@@ -66,10 +66,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 static void
 usage(char *argv0)
 {
@@ -100,7 +96,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -176,6 +172,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/hints.cpp b/examples/CXX/hints.cpp
index 608947d..7896152 100644
--- a/examples/CXX/hints.cpp
+++ b/examples/CXX/hints.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: hints.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: hints.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example sets two PnetCDF hints:
@@ -41,10 +41,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NZ 5
 #define NY 5
 #define NX 5
@@ -138,7 +134,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -198,6 +194,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/nonblocking_write.cpp b/examples/CXX/nonblocking_write.cpp
index 1626a09..0a21b5c 100644
--- a/examples/CXX/nonblocking_write.cpp
+++ b/examples/CXX/nonblocking_write.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: nonblocking_write.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: nonblocking_write.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*    This example is similar to collective_write.c but using nonblocking APIs.
  *    It creates a netcdf file in CD-5 format and writes a number of
@@ -45,10 +45,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NDIMS    3
 #define NUM_VARS 10
 
@@ -115,7 +111,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -212,11 +208,7 @@ int main(int argc, char **argv)
         nc.Buffer_detach();
 
         nc.Inq_put_size(&put_size);
-#ifdef MPI_OFFSET
         MPI_Allreduce(MPI_IN_PLACE, &put_size, 1, MPI_OFFSET, MPI_SUM, MPI_COMM_WORLD);
-#else
-        MPI_Allreduce(MPI_IN_PLACE, &put_size, 1, MPI_LONG_LONG, MPI_SUM, MPI_COMM_WORLD);
-#endif
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
@@ -227,11 +219,7 @@ int main(int argc, char **argv)
     write_size = bufsize * NUM_VARS * sizeof(int);
     for (i=0; i<NUM_VARS; i++) free(buf[i]);
 
-#ifdef MPI_OFFSET
     MPI_Reduce(&write_size,   &sum_write_size,   1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
-#else
-    MPI_Reduce(&write_size,   &sum_write_size,   1, MPI_LONG_LONG, MPI_SUM, 0, MPI_COMM_WORLD);
-#endif
     MPI_Reduce(&write_timing, &max_write_timing, 1, MPI_DOUBLE, MPI_MAX, 0, MPI_COMM_WORLD);
 
     if (rank == 0 && verbose) {
diff --git a/examples/CXX/put_vara.cpp b/examples/CXX/put_vara.cpp
index 43b9151..e73a62c 100644
--- a/examples/CXX/put_vara.cpp
+++ b/examples/CXX/put_vara.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: put_vara.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: put_vara.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use NcmpiVar::putVar_all() to write a 2D
@@ -67,10 +67,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 10
 #define NX 4
 
@@ -105,7 +101,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -166,6 +162,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/put_varn_float.cpp b/examples/CXX/put_varn_float.cpp
index d98161e..46daffe 100644
--- a/examples/CXX/put_varn_float.cpp
+++ b/examples/CXX/put_varn_float.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: put_varn_float.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: put_varn_float.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use a single call of NcmpiVar::putVarn_all()
@@ -46,10 +46,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 4
 #define NX 10
 #define NDIMS 2
@@ -85,7 +81,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -212,6 +208,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/put_varn_int.cpp b/examples/CXX/put_varn_int.cpp
index d3d4c8e..5ab58da 100644
--- a/examples/CXX/put_varn_int.cpp
+++ b/examples/CXX/put_varn_int.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: put_varn_int.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: put_varn_int.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use a single call of NcmpiVar::putVarn_all() to
@@ -54,10 +54,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 4
 #define NX 10
 #define NDIMS 2
@@ -93,7 +89,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -213,6 +209,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     /* check if there is any PnetCDF internal malloc residue */
diff --git a/examples/CXX/transpose.cpp b/examples/CXX/transpose.cpp
index e498fb0..bb4ec78 100644
--- a/examples/CXX/transpose.cpp
+++ b/examples/CXX/transpose.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: transpose.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: transpose.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*
  *    This example shows how to use varm API to write six 3D integer array
@@ -42,10 +42,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NDIMS 3
 
 #define HANDLE_ERROR {                                \
@@ -89,7 +85,7 @@ int main(int argc, char **argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -222,6 +218,7 @@ int main(int argc, char **argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     free(buf);
diff --git a/examples/CXX/vard_int.cpp b/examples/CXX/vard_int.cpp
index 71453e7..6199829 100644
--- a/examples/CXX/vard_int.cpp
+++ b/examples/CXX/vard_int.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: vard_int.cpp 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: vard_int.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use the vard API ncmpi_put_vard() and
@@ -55,10 +55,6 @@ using namespace std;
 using namespace PnetCDF;
 using namespace PnetCDF::exceptions;
 
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
-
 #define NY 2
 #define NX 3
 
@@ -96,7 +92,7 @@ int main(int argc, char** argv)
             case 'h':
             default:  if (rank==0) usage(argv[0]);
                       MPI_Finalize();
-                      return 0;
+                      return 1;
         }
     argc -= optind;
     argv += optind;
@@ -175,6 +171,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     try {
@@ -192,6 +189,7 @@ int main(int argc, char** argv)
     }
     catch(NcmpiException& e) {
        cout << e.what() << " error code=" << e.errorCode() << " Error!\n";
+       return 1;
     }
 
     MPI_Type_free(&rec_filetype);
diff --git a/examples/F77/Makefile.am b/examples/F77/Makefile.am
new file mode 100644
index 0000000..92f6397
--- /dev/null
+++ b/examples/F77/Makefile.am
@@ -0,0 +1,91 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .f .F90
+
+AM_DEFAULT_SOURCE_EXT = .f
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+
+if SIZEOF_MPI_AINT_IS_4
+   AM_FFLAGS += $(FC_DEFINE)SIZEOF_MPI_AINT_IS_4
+endif
+
+check_PROGRAMS = nonblocking_write \
+                 column_wise \
+                 block_cyclic \
+                 flexible_api \
+                 get_info \
+                 hints \
+                 put_vara \
+                 put_varn_real \
+                 put_varn_int \
+                 transpose \
+                 i_varn_real \
+                 bput_varn_int8 \
+                 fill_mode \
+                 vard_int
+
+EXTRA_DIST = utils.F90
+
+utils.o: $(srcdir)/utils.F90
+	$(FC) $(FC_DEFS) -c -o $@ $(FCFLAGS) $<
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+TESTMPIRUN3  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/3/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+
+ptest ptest4: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: F77 parallel run on 4 processes --------------- $$i"; \
+        else \
+           echo "FAILED: F77 parallel run on 4 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptest8: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN8) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: F77 parallel run on 8 processes --------------- $$i"; \
+        else \
+           echo "FAILED: F77 parallel run on 8 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptest3: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN3) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: F77 parallel run on 3 processes --------------- $$i"; \
+        else \
+           echo "FAILED: F77 parallel run on 3 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptests: ptest3 ptest4 ptest8
+ptest2 ptest6 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
+
diff --git a/examples/F77/Makefile.in b/examples/F77/Makefile.in
index 59d29c4..298d589 100644
--- a/examples/F77/Makefile.in
+++ b/examples/F77/Makefile.in
@@ -1,138 +1,842 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2698 2016-12-11 20:02:52Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at SIZEOF_MPI_AINT_IS_4_TRUE@am__append_1 = $(FC_DEFINE)SIZEOF_MPI_AINT_IS_4
+check_PROGRAMS = nonblocking_write$(EXEEXT) column_wise$(EXEEXT) \
+	block_cyclic$(EXEEXT) flexible_api$(EXEEXT) get_info$(EXEEXT) \
+	hints$(EXEEXT) put_vara$(EXEEXT) put_varn_real$(EXEEXT) \
+	put_varn_int$(EXEEXT) transpose$(EXEEXT) i_varn_real$(EXEEXT) \
+	bput_varn_int8$(EXEEXT) fill_mode$(EXEEXT) vard_int$(EXEEXT)
+subdir = examples/F77
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+block_cyclic_SOURCES = block_cyclic.f
+block_cyclic_OBJECTS = block_cyclic.$(OBJEXT)
+block_cyclic_LDADD = $(LDADD)
+block_cyclic_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+bput_varn_int8_SOURCES = bput_varn_int8.f
+bput_varn_int8_OBJECTS = bput_varn_int8.$(OBJEXT)
+bput_varn_int8_LDADD = $(LDADD)
+bput_varn_int8_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+column_wise_SOURCES = column_wise.f
+column_wise_OBJECTS = column_wise.$(OBJEXT)
+column_wise_LDADD = $(LDADD)
+column_wise_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+fill_mode_SOURCES = fill_mode.f
+fill_mode_OBJECTS = fill_mode.$(OBJEXT)
+fill_mode_LDADD = $(LDADD)
+fill_mode_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+flexible_api_SOURCES = flexible_api.f
+flexible_api_OBJECTS = flexible_api.$(OBJEXT)
+flexible_api_LDADD = $(LDADD)
+flexible_api_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+get_info_SOURCES = get_info.f
+get_info_OBJECTS = get_info.$(OBJEXT)
+get_info_LDADD = $(LDADD)
+get_info_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+hints_SOURCES = hints.f
+hints_OBJECTS = hints.$(OBJEXT)
+hints_LDADD = $(LDADD)
+hints_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+i_varn_real_SOURCES = i_varn_real.f
+i_varn_real_OBJECTS = i_varn_real.$(OBJEXT)
+i_varn_real_LDADD = $(LDADD)
+i_varn_real_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+nonblocking_write_SOURCES = nonblocking_write.f
+nonblocking_write_OBJECTS = nonblocking_write.$(OBJEXT)
+nonblocking_write_LDADD = $(LDADD)
+nonblocking_write_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la utils.o
+put_vara_SOURCES = put_vara.f
+put_vara_OBJECTS = put_vara.$(OBJEXT)
+put_vara_LDADD = $(LDADD)
+put_vara_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+put_varn_int_SOURCES = put_varn_int.f
+put_varn_int_OBJECTS = put_varn_int.$(OBJEXT)
+put_varn_int_LDADD = $(LDADD)
+put_varn_int_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+put_varn_real_SOURCES = put_varn_real.f
+put_varn_real_OBJECTS = put_varn_real.$(OBJEXT)
+put_varn_real_LDADD = $(LDADD)
+put_varn_real_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+transpose_SOURCES = transpose.f
+transpose_OBJECTS = transpose.$(OBJEXT)
+transpose_LDADD = $(LDADD)
+transpose_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+vard_int_SOURCES = vard_int.f
+vard_int_OBJECTS = vard_int.$(OBJEXT)
+vard_int_LDADD = $(LDADD)
+vard_int_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS)
+LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS)
+AM_V_F77 = $(am__v_F77_ at AM_V@)
+am__v_F77_ = $(am__v_F77_ at AM_DEFAULT_V@)
+am__v_F77_0 = @echo "  F77     " $@;
+am__v_F77_1 = 
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_F77LD = $(am__v_F77LD_ at AM_V@)
+am__v_F77LD_ = $(am__v_F77LD_ at AM_DEFAULT_V@)
+am__v_F77LD_0 = @echo "  F77LD   " $@;
+am__v_F77LD_1 = 
+SOURCES = block_cyclic.f bput_varn_int8.f column_wise.f fill_mode.f \
+	flexible_api.f get_info.f hints.f i_varn_real.f \
+	nonblocking_write.f put_vara.f put_varn_int.f put_varn_real.f \
+	transpose.f vard_int.f
+DIST_SOURCES = block_cyclic.f bput_varn_int8.f column_wise.f \
+	fill_mode.f flexible_api.f get_info.f hints.f i_varn_real.f \
+	nonblocking_write.f put_vara.f put_varn_int.f put_varn_real.f \
+	transpose.f vard_int.f
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .f .F90
+AM_DEFAULT_SOURCE_EXT = .f
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77 $(am__append_1)
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+EXTRA_DIST = utils.F90
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTMPIRUN3 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/3/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .f .F90 .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/F77/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/F77/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+block_cyclic$(EXEEXT): $(block_cyclic_OBJECTS) $(block_cyclic_DEPENDENCIES) $(EXTRA_block_cyclic_DEPENDENCIES) 
+	@rm -f block_cyclic$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(block_cyclic_OBJECTS) $(block_cyclic_LDADD) $(LIBS)
+
+bput_varn_int8$(EXEEXT): $(bput_varn_int8_OBJECTS) $(bput_varn_int8_DEPENDENCIES) $(EXTRA_bput_varn_int8_DEPENDENCIES) 
+	@rm -f bput_varn_int8$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(bput_varn_int8_OBJECTS) $(bput_varn_int8_LDADD) $(LIBS)
+
+column_wise$(EXEEXT): $(column_wise_OBJECTS) $(column_wise_DEPENDENCIES) $(EXTRA_column_wise_DEPENDENCIES) 
+	@rm -f column_wise$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(column_wise_OBJECTS) $(column_wise_LDADD) $(LIBS)
+
+fill_mode$(EXEEXT): $(fill_mode_OBJECTS) $(fill_mode_DEPENDENCIES) $(EXTRA_fill_mode_DEPENDENCIES) 
+	@rm -f fill_mode$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(fill_mode_OBJECTS) $(fill_mode_LDADD) $(LIBS)
+
+flexible_api$(EXEEXT): $(flexible_api_OBJECTS) $(flexible_api_DEPENDENCIES) $(EXTRA_flexible_api_DEPENDENCIES) 
+	@rm -f flexible_api$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(flexible_api_OBJECTS) $(flexible_api_LDADD) $(LIBS)
+
+get_info$(EXEEXT): $(get_info_OBJECTS) $(get_info_DEPENDENCIES) $(EXTRA_get_info_DEPENDENCIES) 
+	@rm -f get_info$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(get_info_OBJECTS) $(get_info_LDADD) $(LIBS)
+
+hints$(EXEEXT): $(hints_OBJECTS) $(hints_DEPENDENCIES) $(EXTRA_hints_DEPENDENCIES) 
+	@rm -f hints$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(hints_OBJECTS) $(hints_LDADD) $(LIBS)
+
+i_varn_real$(EXEEXT): $(i_varn_real_OBJECTS) $(i_varn_real_DEPENDENCIES) $(EXTRA_i_varn_real_DEPENDENCIES) 
+	@rm -f i_varn_real$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(i_varn_real_OBJECTS) $(i_varn_real_LDADD) $(LIBS)
+
+nonblocking_write$(EXEEXT): $(nonblocking_write_OBJECTS) $(nonblocking_write_DEPENDENCIES) $(EXTRA_nonblocking_write_DEPENDENCIES) 
+	@rm -f nonblocking_write$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(nonblocking_write_OBJECTS) $(nonblocking_write_LDADD) $(LIBS)
+
+put_vara$(EXEEXT): $(put_vara_OBJECTS) $(put_vara_DEPENDENCIES) $(EXTRA_put_vara_DEPENDENCIES) 
+	@rm -f put_vara$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(put_vara_OBJECTS) $(put_vara_LDADD) $(LIBS)
+
+put_varn_int$(EXEEXT): $(put_varn_int_OBJECTS) $(put_varn_int_DEPENDENCIES) $(EXTRA_put_varn_int_DEPENDENCIES) 
+	@rm -f put_varn_int$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(put_varn_int_OBJECTS) $(put_varn_int_LDADD) $(LIBS)
+
+put_varn_real$(EXEEXT): $(put_varn_real_OBJECTS) $(put_varn_real_DEPENDENCIES) $(EXTRA_put_varn_real_DEPENDENCIES) 
+	@rm -f put_varn_real$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(put_varn_real_OBJECTS) $(put_varn_real_LDADD) $(LIBS)
+
+transpose$(EXEEXT): $(transpose_OBJECTS) $(transpose_DEPENDENCIES) $(EXTRA_transpose_DEPENDENCIES) 
+	@rm -f transpose$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(transpose_OBJECTS) $(transpose_LDADD) $(LIBS)
+
+vard_int$(EXEEXT): $(vard_int_OBJECTS) $(vard_int_DEPENDENCIES) $(EXTRA_vard_int_DEPENDENCIES) 
+	@rm -f vard_int$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(vard_int_OBJECTS) $(vard_int_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+.f.o:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ $<
+
+.f.obj:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.f.lo:
+	$(AM_V_F77)$(LTF77COMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+install-dvi-am:
 
-include ../../macros.make
+install-exec-am:
 
-# note the order of -L list matters
-INCLUDES  = -I../../src/lib -I../../src/libf
-ifeq (@SIZEOF_MPI_AINT_IS_4@, yes)
-FPPFLAGS += $(FC_DEFINE)SIZEOF_MPI_AINT_IS_4
-endif
-FLDFLAGS := -L../../src/lib $(FLDFLAGS) $(LDFLAGS)
-LIBS     := -lpnetcdf $(LIBS)
+install-html: install-html-am
 
-F77_SRCS  = nonblocking_write.f \
-            column_wise.f \
-            block_cyclic.f \
-            flexible_api.f \
-            get_info.f \
-            hints.f \
-            put_vara.f \
-            put_varn_real.f \
-            put_varn_int.f \
-            transpose.f \
-            i_varn_real.f \
-            bput_varn_int8.f \
-            fill_mode.f
+install-html-am:
 
-F77F_SRCS = vard_int.F
+install-info: install-info-am
 
-PROGS     = $(F77_SRCS:.f=)   $(F77F_SRCS:.F=)
-OBJS      = $(F77_SRCS:.f=.o) $(F77F_SRCS:.F=.o)
+install-info-am:
 
-UTIL_SRCS  = utils.F90
-UTIL_OBJS  = $(UTIL_SRCS:.F90=.o)
+install-man:
 
-GARBAGE      = $(PROGS) *.nc
+install-pdf: install-pdf-am
 
-PACKING_LIST = $(F77_SRCS) $(F77F_SRCS) $(UTIL_SRCS) depend Makefile.in
+install-pdf-am:
 
-all: $(PROGS)
+install-ps: install-ps-am
 
-install:
+install-ps-am:
 
-uninstall:
+installcheck-am:
 
-nonblocking_write: nonblocking_write.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-get_info: get_info.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+mostlyclean: mostlyclean-am
 
-column_wise: column_wise.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-block_cyclic: block_cyclic.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+pdf: pdf-am
 
-put_vara: put_vara.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+pdf-am:
 
-hints: hints.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+ps: ps-am
 
-flexible_api: flexible_api.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+ps-am:
 
-put_varn_int: put_varn_int.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+tests: tests-am
 
-put_varn_real: put_varn_real.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+tests-am: tests-local
 
-transpose: transpose.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+uninstall-am:
 
-vard_int: vard_int.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+.MAKE: check-am install-am install-strip
 
-i_varn_real: i_varn_real.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
 
-bput_varn_int8: bput_varn_int8.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-fill_mode: fill_mode.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(FLDFLAGS) $(LIBS)
 
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_8  = $(subst NP,8,$(TEST_MPIRUN))
-TEST_MPIRUN_3  = $(subst NP,3,$(TEST_MPIRUN))
+utils.o: $(srcdir)/utils.F90
+	$(FC) $(FC_DEFS) -c -o $@ $(FCFLAGS) $<
 
-ptest4: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_4) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest ptest4: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: F77 parallel run on 4 processes --------------- $$i"; \
         else \
            echo "FAILED: F77 parallel run on 4 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest8: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_8) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest8: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN8) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: F77 parallel run on 8 processes --------------- $$i"; \
         else \
            echo "FAILED: F77 parallel run on 8 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest3: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_3) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest3: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN3) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: F77 parallel run on 3 processes --------------- $$i"; \
         else \
            echo "FAILED: F77 parallel run on 3 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest: ptest4
 ptests: ptest3 ptest4 ptest8
 ptest2 ptest6 ptest10:
 
-include $(srcdir)/depend
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/F77/block_cyclic.f b/examples/F77/block_cyclic.f
index 66e7ed1..cc0c7f6 100644
--- a/examples/F77/block_cyclic.f
+++ b/examples/F77/block_cyclic.f
@@ -2,7 +2,7 @@
 !  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: block_cyclic.f 2522 2016-10-06 00:45:08Z wkliao $
+! $Id: block_cyclic.f 3341 2017-08-25 22:29:08Z wkliao $
 
 
 ! This example, generalized from column_wise.f, makes a number of nonblocking
@@ -184,6 +184,7 @@
              if (sts(i) .NE. NF_NOERR) then
                  print*, "Error: nonblocking write fails on request",
      +                   i, ' ', nfmpi_strerror(sts(i))
+                 stop 2
              endif
           enddo
 
@@ -255,6 +256,7 @@
              if (sts(i) .NE. NF_NOERR) then
                  print*, "Error: nonblocking write fails on request",
      +                   i, ' ', nfmpi_strerror(sts(i))
+                 stop 2
              endif
           enddo
 
@@ -268,6 +270,7 @@
                       print*, 'Read contents mismatch at buf i=', i,
      +                        ' j=',j,' =', buf(i,j),' (should be ',
      +                        rank+10, ')\n'
+                      stop 2
                   endif
              enddo
           enddo
diff --git a/examples/F77/column_wise.f b/examples/F77/column_wise.f
index 0bc3533..29f174d 100644
--- a/examples/F77/column_wise.f
+++ b/examples/F77/column_wise.f
@@ -2,7 +2,7 @@
 !  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: column_wise.f 2476 2016-09-06 01:05:33Z wkliao $
+! $Id: column_wise.f 3341 2017-08-25 22:29:08Z wkliao $
 
 ! This example makes a number of nonblocking API calls, each writes a single
 ! row of a 2D integer array. Each process writes NY rows and any two
@@ -180,6 +180,7 @@
              if (sts(i) .NE. NF_NOERR) then
                  print*, "Error: nonblocking write fails on request",
      +                   i, ' ', nfmpi_strerror(sts(i))
+                 stop 2
              endif
           enddo
 
diff --git a/examples/F77/depend b/examples/F77/depend
deleted file mode 100644
index 63b2521..0000000
--- a/examples/F77/depend
+++ /dev/null
@@ -1,14 +0,0 @@
-block_cyclic.o: block_cyclic.f
-column_wise.o: column_wise.f
-flexible_api.o: flexible_api.f
-get_info.o: get_info.f
-hints.o: hints.f
-nonblocking_write.o: nonblocking_write.f
-put_vara.o: put_vara.f
-put_varn_real.o: put_varn_real.f
-put_varn_int.o: put_varn_int.f
-transpose.o: transpose.f
-vard_int.o: vard_int.F
-i_varn_real.o: i_varn_real.f
-bput_varn_int8.o: bput_varn_int8.f
-fill_mode.o: fill_mode.f
diff --git a/examples/F77/fill_mode.f b/examples/F77/fill_mode.f
index 531fe5f..543af5f 100644
--- a/examples/F77/fill_mode.f
+++ b/examples/F77/fill_mode.f
@@ -2,7 +2,7 @@
 !   Copyright (C) 2015, Northwestern University
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: fill_mode.f 2476 2016-09-06 01:05:33Z wkliao $
+! $Id: fill_mode.f 3341 2017-08-25 22:29:08Z wkliao $
 
 !
 ! This example shows how to use
@@ -179,11 +179,15 @@
           call check(err, 'In nfmpi_put_vara_int_all: ')
 
           err = nfmpi_inq_var_fill(ncid, fix_varid, no_fill, fill_value)
-          if (no_fill .NE. 0)
-     +        print*,"Error: expecting no_fill to be 0"
-          if (fill_value .NE. NF_FILL_INT)
-     +        print*,"Error: expecting no_fill to be ",NF_FILL_INT,
+          if (no_fill .NE. 0) then
+              print*,"Error: expecting no_fill to be 0"
+              stop 2
+          endif
+          if (fill_value .NE. NF_FILL_INT) then
+              print*,"Error: expecting no_fill to be ",NF_FILL_INT,
      +               " but got ", fill_value
+              stop 2
+          endif
 
           ! fill the 1st record of the record variable
           starts(2) = 1
@@ -204,6 +208,7 @@
           ! write to the 2nd record
           err = nfmpi_put_vara_int_all(ncid, rec_varid, starts, counts,
      +                                 buf)
+          call check(err, 'In nfmpi_put_vara_int_all: ')
 
           ! close the file
           err = nfmpi_close(ncid)
diff --git a/examples/F77/flexible_api.f b/examples/F77/flexible_api.f
index cf24180..ddea5fa 100644
--- a/examples/F77/flexible_api.f
+++ b/examples/F77/flexible_api.f
@@ -2,7 +2,7 @@
 !   Copyright (C) 2013, Northwestern University
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: flexible_api.f 2476 2016-09-06 01:05:33Z wkliao $
+! $Id: flexible_api.f 3422 2017-09-25 05:42:52Z wkliao $
 
 !
 ! This example shows how to use PnetCDF flexible API, nfmpi_put_vara_all()
@@ -11,7 +11,7 @@
 !    global_nx == 5 and
 !    global_ny == (4 * number of MPI processes).
 ! The data partitioning pattern is a column-wise partitioning across all
-! proceses. Each process writes a subarray of size nx * ny.
+! processes. Each process writes a subarray of size nx * ny.
 ! The local buffer has a ghost cell of length 3 surrounding the 2D array
 !    integer buf(nx+2*ghost_len, ny+2*ghost_len)
 ! Note the description above follows the Fortran array index order.
diff --git a/examples/F77/utils.F90 b/examples/F77/utils.F90
index a8318ab..7c36da6 100644
--- a/examples/F77/utils.F90
+++ b/examples/F77/utils.F90
@@ -4,12 +4,12 @@
 !
 !     This is part of the PnetCDF package.
 !
-!     $Id: utils.F90 2346 2016-03-09 01:12:57Z wkliao $
+!     $Id: utils.F90 3422 2017-09-25 05:42:52Z wkliao $
 
-    ! This function gets the executable name and output file name from the
-    ! command line.
-    integer function get_args(max_argc, cmd, filename, verbose, len)
-#ifdef NAGf90Fortran
+! This function gets the executable name and output file name from the
+! command line.
+        integer function get_args(max_argc, cmd, filename, verbose, len)
+#ifdef NAGFortran
         USE F90_UNIX_ENV, only : iargc, getarg
         implicit none
 #else
@@ -21,11 +21,21 @@
         logical verbose
 
         ! local variables
-        integer argc
+        integer argc, i
         character(len=16) quiet_mode, str
+        character(len=256) full_cmd
 
         get_args = 1
-        call getarg(0, cmd)
+        call getarg(0, full_cmd)
+
+        ! remove basename from executable name
+        i = INDEX(full_cmd, "/", .TRUE.)
+        if (i .EQ. 0) then
+            cmd(:) = full_cmd(:)
+        else
+            cmd(:) = full_cmd(i+1:)
+        endif
+
         argc = IARGC()
         if (argc .GT. max_argc) then
             if (max_argc .EQ. 3) &
@@ -50,4 +60,4 @@
                 read (str,'(I10)') len
             endif
         endif
-    end function get_args
+        end function get_args
diff --git a/examples/F77/vard_int.F b/examples/F77/vard_int.f
similarity index 92%
rename from examples/F77/vard_int.F
rename to examples/F77/vard_int.f
index 890f695..a299e36 100644
--- a/examples/F77/vard_int.F
+++ b/examples/F77/vard_int.f
@@ -2,7 +2,7 @@
 !   Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: vard_int.F 2476 2016-09-06 01:05:33Z wkliao $
+! $Id: vard_int.f 3341 2017-08-25 22:29:08Z wkliao $
 
 !
 ! This example shows how to use the vard API nfmpi_put_vard() and
@@ -69,11 +69,9 @@
           integer array_of_sizes(2), array_of_subsizes(2)
           integer array_of_starts(2), blocklengths(2)
           integer*8 malloc_size, sum_size, recsize, two
-#ifdef SIZEOF_MPI_AINT_IS_4
+          integer aint_size
           integer disps(2)
-#else
-          integer*8 disps(2)
-#endif
+          integer*8 disps8(2)
           logical verbose
 
           call MPI_Init(err)
@@ -139,10 +137,19 @@
           call check(err, 'In nfmpi_inq_recsize: ')
           blocklengths(1) = INT(count(1))
           blocklengths(2) = INT(count(1))
-          disps(1) = start(1)*4
-          disps(2) = recsize + start(1)*4
-          call MPI_Type_create_hindexed(2, blocklengths, disps,
-     +                                  MPI_INTEGER, rec_filetype, err)
+
+          call MPI_Type_size(MPI_AINT, aint_size, err)
+          if (aint_size .EQ. 4) then
+              disps(1) = start(1)*4
+              disps(2) = recsize + start(1)*4
+              call MPI_Type_create_hindexed(2, blocklengths, disps,
+     +                             MPI_INTEGER, rec_filetype, err)
+          else
+              disps8(1) = start(1)*4
+              disps8(2) = recsize + start(1)*4
+              call MPI_Type_create_hindexed(2, blocklengths, disps8,
+     +                             MPI_INTEGER, rec_filetype, err)
+          endif
           call MPI_Type_commit(rec_filetype, err)
 
           ! create a file type for the fixed-size variable
diff --git a/examples/F90/Makefile.am b/examples/F90/Makefile.am
new file mode 100644
index 0000000..004994d
--- /dev/null
+++ b/examples/F90/Makefile.am
@@ -0,0 +1,86 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+
+SUFFIXES = .o .f .F90 .f90
+
+AM_DEFAULT_SOURCE_EXT = .f90
+AM_FCFLAGS = ${FC_MODINC}$(top_builddir)/src/binding/f90
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+
+check_PROGRAMS = nonblocking_write \
+                 column_wise \
+                 block_cyclic \
+                 flexible_api \
+                 get_info \
+                 hints \
+                 put_var \
+                 put_varn_real \
+                 put_varn_int \
+                 transpose \
+                 fill_mode \
+                 vard_int
+
+EXTRA_DIST = utils.F90
+
+utils.o: utils.F90
+	$(FC) $(FC_DEFS) -c -o $@ $(FCFLAGS) $<
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+TESTMPIRUN3  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/3/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+
+ptest ptest4: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: F90 parallel run on 4 processes --------------- $$i"; \
+        else \
+           echo "FAILED: F90 parallel run on 4 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptest8: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN8) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: F90 parallel run on 8 processes --------------- $$i"; \
+        else \
+           echo "FAILED: F90 parallel run on 8 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptest3: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN3) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS: F90 parallel run on 3 processes --------------- $$i"; \
+        else \
+           echo "FAILED: F90 parallel run on 3 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptests: ptest3 ptest4 ptest8
+ptest2 ptest6 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
+
diff --git a/examples/F90/Makefile.in b/examples/F90/Makefile.in
index b4a0b38..ebd9af5 100644
--- a/examples/F90/Makefile.in
+++ b/examples/F90/Makefile.in
@@ -1,126 +1,823 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2698 2016-12-11 20:02:52Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = nonblocking_write$(EXEEXT) column_wise$(EXEEXT) \
+	block_cyclic$(EXEEXT) flexible_api$(EXEEXT) get_info$(EXEEXT) \
+	hints$(EXEEXT) put_var$(EXEEXT) put_varn_real$(EXEEXT) \
+	put_varn_int$(EXEEXT) transpose$(EXEEXT) fill_mode$(EXEEXT) \
+	vard_int$(EXEEXT)
+subdir = examples/F90
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+block_cyclic_SOURCES = block_cyclic.f90
+block_cyclic_OBJECTS = block_cyclic.$(OBJEXT)
+block_cyclic_LDADD = $(LDADD)
+block_cyclic_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+column_wise_SOURCES = column_wise.f90
+column_wise_OBJECTS = column_wise.$(OBJEXT)
+column_wise_LDADD = $(LDADD)
+column_wise_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+fill_mode_SOURCES = fill_mode.f90
+fill_mode_OBJECTS = fill_mode.$(OBJEXT)
+fill_mode_LDADD = $(LDADD)
+fill_mode_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+flexible_api_SOURCES = flexible_api.f90
+flexible_api_OBJECTS = flexible_api.$(OBJEXT)
+flexible_api_LDADD = $(LDADD)
+flexible_api_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+get_info_SOURCES = get_info.f90
+get_info_OBJECTS = get_info.$(OBJEXT)
+get_info_LDADD = $(LDADD)
+get_info_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+hints_SOURCES = hints.f90
+hints_OBJECTS = hints.$(OBJEXT)
+hints_LDADD = $(LDADD)
+hints_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+nonblocking_write_SOURCES = nonblocking_write.f90
+nonblocking_write_OBJECTS = nonblocking_write.$(OBJEXT)
+nonblocking_write_LDADD = $(LDADD)
+nonblocking_write_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la utils.o
+put_var_SOURCES = put_var.f90
+put_var_OBJECTS = put_var.$(OBJEXT)
+put_var_LDADD = $(LDADD)
+put_var_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+put_varn_int_SOURCES = put_varn_int.f90
+put_varn_int_OBJECTS = put_varn_int.$(OBJEXT)
+put_varn_int_LDADD = $(LDADD)
+put_varn_int_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+put_varn_real_SOURCES = put_varn_real.f90
+put_varn_real_OBJECTS = put_varn_real.$(OBJEXT)
+put_varn_real_LDADD = $(LDADD)
+put_varn_real_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+transpose_SOURCES = transpose.f90
+transpose_OBJECTS = transpose.$(OBJEXT)
+transpose_LDADD = $(LDADD)
+transpose_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	utils.o
+vard_int_SOURCES = vard_int.f90
+vard_int_OBJECTS = vard_int.$(OBJEXT)
+vard_int_LDADD = $(LDADD)
+vard_int_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+AM_V_FC = $(am__v_FC_ at AM_V@)
+am__v_FC_ = $(am__v_FC_ at AM_DEFAULT_V@)
+am__v_FC_0 = @echo "  FC      " $@;
+am__v_FC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+SOURCES = block_cyclic.f90 column_wise.f90 fill_mode.f90 \
+	flexible_api.f90 get_info.f90 hints.f90 nonblocking_write.f90 \
+	put_var.f90 put_varn_int.f90 put_varn_real.f90 transpose.f90 \
+	vard_int.f90
+DIST_SOURCES = block_cyclic.f90 column_wise.f90 fill_mode.f90 \
+	flexible_api.f90 get_info.f90 hints.f90 nonblocking_write.f90 \
+	put_var.f90 put_varn_int.f90 put_varn_real.f90 transpose.f90 \
+	vard_int.f90
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .f .F90 .f90
+AM_DEFAULT_SOURCE_EXT = .f90
+AM_FCFLAGS = ${FC_MODINC}$(top_builddir)/src/binding/f90
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la utils.o
+EXTRA_DIST = utils.F90
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTMPIRUN3 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/3/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .f .F90 .f90 .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/F90/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/F90/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+block_cyclic$(EXEEXT): $(block_cyclic_OBJECTS) $(block_cyclic_DEPENDENCIES) $(EXTRA_block_cyclic_DEPENDENCIES) 
+	@rm -f block_cyclic$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(block_cyclic_OBJECTS) $(block_cyclic_LDADD) $(LIBS)
+
+column_wise$(EXEEXT): $(column_wise_OBJECTS) $(column_wise_DEPENDENCIES) $(EXTRA_column_wise_DEPENDENCIES) 
+	@rm -f column_wise$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(column_wise_OBJECTS) $(column_wise_LDADD) $(LIBS)
+
+fill_mode$(EXEEXT): $(fill_mode_OBJECTS) $(fill_mode_DEPENDENCIES) $(EXTRA_fill_mode_DEPENDENCIES) 
+	@rm -f fill_mode$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(fill_mode_OBJECTS) $(fill_mode_LDADD) $(LIBS)
+
+flexible_api$(EXEEXT): $(flexible_api_OBJECTS) $(flexible_api_DEPENDENCIES) $(EXTRA_flexible_api_DEPENDENCIES) 
+	@rm -f flexible_api$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(flexible_api_OBJECTS) $(flexible_api_LDADD) $(LIBS)
+
+get_info$(EXEEXT): $(get_info_OBJECTS) $(get_info_DEPENDENCIES) $(EXTRA_get_info_DEPENDENCIES) 
+	@rm -f get_info$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(get_info_OBJECTS) $(get_info_LDADD) $(LIBS)
+
+hints$(EXEEXT): $(hints_OBJECTS) $(hints_DEPENDENCIES) $(EXTRA_hints_DEPENDENCIES) 
+	@rm -f hints$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(hints_OBJECTS) $(hints_LDADD) $(LIBS)
+
+nonblocking_write$(EXEEXT): $(nonblocking_write_OBJECTS) $(nonblocking_write_DEPENDENCIES) $(EXTRA_nonblocking_write_DEPENDENCIES) 
+	@rm -f nonblocking_write$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(nonblocking_write_OBJECTS) $(nonblocking_write_LDADD) $(LIBS)
+
+put_var$(EXEEXT): $(put_var_OBJECTS) $(put_var_DEPENDENCIES) $(EXTRA_put_var_DEPENDENCIES) 
+	@rm -f put_var$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(put_var_OBJECTS) $(put_var_LDADD) $(LIBS)
+
+put_varn_int$(EXEEXT): $(put_varn_int_OBJECTS) $(put_varn_int_DEPENDENCIES) $(EXTRA_put_varn_int_DEPENDENCIES) 
+	@rm -f put_varn_int$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(put_varn_int_OBJECTS) $(put_varn_int_LDADD) $(LIBS)
+
+put_varn_real$(EXEEXT): $(put_varn_real_OBJECTS) $(put_varn_real_DEPENDENCIES) $(EXTRA_put_varn_real_DEPENDENCIES) 
+	@rm -f put_varn_real$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(put_varn_real_OBJECTS) $(put_varn_real_LDADD) $(LIBS)
+
+transpose$(EXEEXT): $(transpose_OBJECTS) $(transpose_DEPENDENCIES) $(EXTRA_transpose_DEPENDENCIES) 
+	@rm -f transpose$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(transpose_OBJECTS) $(transpose_LDADD) $(LIBS)
+
+vard_int$(EXEEXT): $(vard_int_OBJECTS) $(vard_int_DEPENDENCIES) $(EXTRA_vard_int_DEPENDENCIES) 
+	@rm -f vard_int$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(vard_int_OBJECTS) $(vard_int_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+.f90.o:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+	$(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+install-html-am:
 
-include ../../macros.make
+install-info: install-info-am
 
-# note the order of -L list matters
-INCLUDES    = @FC_MODINC at ../../src/libf90
-F90LDFLAGS := -L../../src/lib $(F90LDFLAGS) $(LDFLAGS)
-LIBS       := -lpnetcdf $(LIBS)
+install-info-am:
 
-F90_SRCS  = nonblocking_write.f90 \
-            column_wise.f90 \
-            block_cyclic.f90 \
-            flexible_api.f90 \
-            get_info.f90 \
-            hints.f90 \
-            put_var.f90 \
-            put_varn_real.f90 \
-            put_varn_int.f90 \
-            transpose.f90 \
-            vard_int.f90 \
-            fill_mode.f90
+install-man:
 
-PROGS     = $(F90_SRCS:.f90=)
-OBJS      = $(F90_SRCS:.f90=.o)
+install-pdf: install-pdf-am
 
-UTIL_SRCS  = utils.F90
-UTIL_OBJS  = $(UTIL_SRCS:.F90=.o)
+install-pdf-am:
 
-GARBAGE      = $(PROGS) *.nc
+install-ps: install-ps-am
 
-PACKING_LIST = $(F90_SRCS) $(UTIL_SRCS) depend Makefile.in
+install-ps-am:
 
-all: $(PROGS)
+installcheck-am:
 
-install:
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-uninstall:
+mostlyclean: mostlyclean-am
 
-nonblocking_write: nonblocking_write.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-get_info: get_info.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+pdf: pdf-am
 
-column_wise: column_wise.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+pdf-am:
 
-block_cyclic: block_cyclic.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+ps: ps-am
 
-put_var: put_var.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+ps-am:
 
-hints: hints.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+tests: tests-am
 
-flexible_api: flexible_api.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+tests-am: tests-local
 
-put_varn_int: put_varn_int.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+uninstall-am:
 
-put_varn_real: put_varn_real.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+.MAKE: check-am install-am install-strip
 
-transpose: transpose.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
 
-vard_int: vard_int.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-fill_mode: fill_mode.o $(UTIL_OBJS) $(LIBRARY)
-	$(LINK.F90) $< $(UTIL_OBJS) $(F90LDFLAGS) $(LIBS)
 
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_8  = $(subst NP,8,$(TEST_MPIRUN))
-TEST_MPIRUN_3  = $(subst NP,3,$(TEST_MPIRUN))
+utils.o: utils.F90
+	$(FC) $(FC_DEFS) -c -o $@ $(FCFLAGS) $<
 
-ptest4: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_4) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest ptest4: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: F90 parallel run on 4 processes --------------- $$i"; \
         else \
            echo "FAILED: F90 parallel run on 4 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest8: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_8) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest8: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN8) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: F90 parallel run on 8 processes --------------- $$i"; \
         else \
            echo "FAILED: F90 parallel run on 8 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest3: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_3) ./$$i -q $(TEST_OUTDIR)/testfile.nc ; \
+ptest3: $(check_PROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN3) ./$$i -q $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS: F90 parallel run on 3 processes --------------- $$i"; \
         else \
            echo "FAILED: F90 parallel run on 3 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest: ptest4
 ptests: ptest3 ptest4 ptest8
 ptest2 ptest6 ptest10:
 
-include $(srcdir)/depend
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/F90/block_cyclic.f90 b/examples/F90/block_cyclic.f90
index e3a8cb3..9e5414a 100644
--- a/examples/F90/block_cyclic.f90
+++ b/examples/F90/block_cyclic.f90
@@ -2,7 +2,7 @@
 !  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: block_cyclic.f90 2476 2016-09-06 01:05:33Z wkliao $
+! $Id: block_cyclic.f90 3341 2017-08-25 22:29:08Z wkliao $
 
 
 ! This example, generalized from column_wise.f, makes a number of nonblocking
@@ -181,6 +181,7 @@
              if (sts(i) .NE. NF90_NOERR) then
                  print*, "Error: nonblocking write fails on request", &
                          i, ' ', nf90mpi_strerror(sts(i))
+                 stop 2
              endif
           enddo
 
@@ -248,6 +249,7 @@
              if (sts(i) .NE. NF90_NOERR) then
                  print*, "Error: nonblocking write fails on request", &
                          i, ' ', nf90mpi_strerror(sts(i))
+                 stop 2
              endif
           enddo
 
@@ -261,6 +263,7 @@
                       print*, 'Read contents mismatch at buf i=', i, &
                               ' j=',j,' =', buf(i,j),' (should be ', &
                               rank+10, ')\n'
+                      stop 2
                   endif
              enddo
           enddo
diff --git a/examples/F90/column_wise.f90 b/examples/F90/column_wise.f90
index 0f89367..4fa76d8 100644
--- a/examples/F90/column_wise.f90
+++ b/examples/F90/column_wise.f90
@@ -2,7 +2,7 @@
 !  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: column_wise.f90 2476 2016-09-06 01:05:33Z wkliao $
+! $Id: column_wise.f90 3341 2017-08-25 22:29:08Z wkliao $
 
 ! This example makes a number of nonblocking API calls, each writes a single
 ! row of a 2D integer array. Each process writes NY rows and any two
@@ -171,6 +171,7 @@
              if (sts(i) .NE. NF90_NOERR) then
                  print*, "Error: nonblocking write fails on request", &
                          i, ' ', nf90mpi_strerror(sts(i))
+                 stop 2
              endif
           enddo
 
diff --git a/examples/F90/depend b/examples/F90/depend
deleted file mode 100644
index 3954e90..0000000
--- a/examples/F90/depend
+++ /dev/null
@@ -1,12 +0,0 @@
-block_cyclic.o: block_cyclic.f90
-column_wise.o: column_wise.f90
-flexible_api.o: flexible_api.f90
-get_info.o: get_info.f90
-hints.o: hints.f90
-nonblocking_write.o: nonblocking_write.f90
-put_var.o: put_var.f90
-put_varn_real.o: put_varn_real.f90
-put_varn_int.o: put_varn_int.f90
-transpose.o: transpose.f90
-vard_int.o: vard_int.f90
-fill_mode.o: fill_mode.f90
diff --git a/examples/F90/fill_mode.f90 b/examples/F90/fill_mode.f90
index c401d6c..78ebe82 100644
--- a/examples/F90/fill_mode.f90
+++ b/examples/F90/fill_mode.f90
@@ -2,7 +2,7 @@
 !   Copyright (C) 2015, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: fill_mode.f90 2476 2016-09-06 01:05:33Z wkliao $
+! $Id: fill_mode.f90 3341 2017-08-25 22:29:08Z wkliao $
 
 ! This example shows how to use
 ! 1. nf90mpi_set_fill() to enable fill mode
@@ -172,11 +172,15 @@
           call check(err, 'In nf90mpi_put_var_all: ')
 
           err = nf90mpi_inq_var_fill(ncid, fix_varid, no_fill, fill_value)
-          if (no_fill .NE. 0) &
+          if (no_fill .NE. 0) then
               print*,"Error: expecting no_fill to be 0"
-          if (fill_value .NE. NF90_FILL_INT) &
+              stop 2
+          endif
+          if (fill_value .NE. NF90_FILL_INT) then
               print*,"Error: expecting no_fill to be ",NF90_FILL_INT, &
                      " but got ", fill_value
+              stop 2
+          endif
 
           ! fill the 1st record of the record variable
           starts(2) = 1
diff --git a/examples/F90/utils.F90 b/examples/F90/utils.F90
index 9b6775c..8678c2f 100644
--- a/examples/F90/utils.F90
+++ b/examples/F90/utils.F90
@@ -4,12 +4,12 @@
 !
 !     This is part of the PnetCDF package.
 !
-!     $Id: utils.F90 2345 2016-03-08 17:18:49Z wkliao $
+!     $Id: utils.F90 3341 2017-08-25 22:29:08Z wkliao $
 
     ! This function gets the executable name and output file name from the
     ! command line.
     integer function get_args(max_argc, cmd, filename, verbose, len)
-#ifdef NAGf90Fortran
+#ifdef NAGFortran
         USE F90_UNIX_ENV, only : iargc, getarg
         implicit none
 #else
diff --git a/examples/F90/vard_int.f90 b/examples/F90/vard_int.f90
index 8438df8..7667991 100644
--- a/examples/F90/vard_int.f90
+++ b/examples/F90/vard_int.f90
@@ -2,7 +2,7 @@
 !   Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: vard_int.f90 2476 2016-09-06 01:05:33Z wkliao $
+! $Id: vard_int.f90 3341 2017-08-25 22:29:08Z wkliao $
 
 !
 ! This example shows how to use the vard API nf90mpi_put_vard() and
@@ -167,6 +167,7 @@
           if (len .NE. 2) then
               print*, 'Error: number of records should be 2 but got ', &
                        len
+              stop 2
           endif
 
           ! write the fixed-size variable
diff --git a/examples/Makefile.am b/examples/Makefile.am
new file mode 100644
index 0000000..a29fe92
--- /dev/null
+++ b/examples/Makefile.am
@@ -0,0 +1,64 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3357 2017-09-10 18:19:37Z wkliao $
+#
+# @configure_input@
+
+SUBDIRS = C tutorial
+DIST_SUBDIRS = C tutorial CXX F77 F90
+
+if HAS_MPICXX
+SUBDIRS += CXX
+endif
+
+if HAS_FORTRAN
+SUBDIRS += F77
+if HAVE_MPI_MOD
+SUBDIRS += F90
+endif
+endif
+
+EXTRA_DIST = README
+
+# below is the alternative when AM_EXTRA_RECURSIVE_TARGETS is not defined
+# TESTS_DIRS = $(SUBDIRS:%=tests-%)
+# tests: $(TESTS_DIRS)
+# $(TESTS_DIRS): 
+# 	$(MAKE) $(MFLAGS) -C $(@:tests-%=%) tests
+
+if BUILD_COVERAGE
+   PTEST_SUBDIRS =
+else
+   PTEST_SUBDIRS = $(SUBDIRS)
+endif
+
+ptest:
+	(echo "=============================================")  && \
+	(echo "    Parallel testing on 4 MPI processes")  && \
+	(echo "=============================================")  && \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest4 $$* ; \
+	done ) ;
+
+ptests:
+	for i in 3 4 8 ; do \
+	(echo "=============================================")  && \
+	(echo "    Parallel testing on $$i MPI processes")  && \
+	(echo "=============================================")  && \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest$$i $$* ; \
+	done ) ; \
+	done ;
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
+
+.PHONY: ptest ptests
+
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 1f07cbd..5cb4c5e 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -1,74 +1,756 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2318 2016-02-04 00:18:26Z wkliao $
+# $Id: Makefile.am 3357 2017-09-10 18:19:37Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at HAS_MPICXX_TRUE@am__append_1 = CXX
+ at HAS_FORTRAN_TRUE@am__append_2 = F77
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__append_3 = F90
+subdir = examples
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = C tutorial $(am__append_1) $(am__append_2) $(am__append_3)
+DIST_SUBDIRS = C tutorial CXX F77 F90
+EXTRA_DIST = README
+ at BUILD_COVERAGE_FALSE@PTEST_SUBDIRS = $(SUBDIRS)
+
+# below is the alternative when AM_EXTRA_RECURSIVE_TARGETS is not defined
+# TESTS_DIRS = $(SUBDIRS:%=tests-%)
+# tests: $(TESTS_DIRS)
+# $(TESTS_DIRS): 
+# 	$(MAKE) $(MFLAGS) -C $(@:tests-%=%) tests
+ at BUILD_COVERAGE_TRUE@PTEST_SUBDIRS = 
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+	distclean-tags
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+dvi: dvi-recursive
 
-include ../macros.make
+dvi-am:
 
-GARBAGE =
+html: html-recursive
 
-SUBDIRS = C tutorial
+html-am:
 
-ifeq (@has_mpicxx@, yes)
-SUBDIRS += CXX
-endif
+info: info-recursive
 
-ifeq (@has_fortran@, yes)
-SUBDIRS += F77
-ifeq (@mpi_mod@, yes)
-SUBDIRS += F90
-endif
-endif
+info-am:
 
-PACKING_LIST = Makefile.in README
+install-data-am:
 
-PACKING_SUBDIRS = C tutorial F77 F90 CXX
+install-dvi: install-dvi-recursive
 
-all: $(SUBDIRS)
-$(SUBDIRS):
-	$(MAKE) $(MFLAGS) -C $@
+install-dvi-am:
 
-ptest: all
-ifeq (@enable_coverage@, yes)
-	echo "Parallel test is disabled because coverage analysis was enabled"
-else
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+tests: tests-recursive
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-generic distclean-libtool \
+	distclean-local distclean-tags distdir dvi dvi-am html html-am \
+	info info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ptest:
 	(echo "=============================================")  && \
 	(echo "    Parallel testing on 4 MPI processes")  && \
 	(echo "=============================================")  && \
-	( for d in $(SUBDIRS) ; do \
-		$(MAKE) $(MFLAGS) -C $$d ptest4 ; \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest4 $$* ; \
 	done ) ;
-endif
 
-ptests: all
-ifeq (@enable_coverage@, yes)
-	echo "Parallel test is disabled because coverage analysis was enabled"
-else
+ptests:
 	for i in 3 4 8 ; do \
 	(echo "=============================================")  && \
 	(echo "    Parallel testing on $$i MPI processes")  && \
 	(echo "=============================================")  && \
-	( for d in $(SUBDIRS) ; do \
-	$(MAKE) $(MFLAGS) -C $$d ptest$$i ; \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest$$i $$* ; \
 	done ) ; \
 	done ;
-endif
-
-INSTALLDIRS = $(SUBDIRS:%=install-%)
-install: all $(INSTALLDIRS)
-$(INSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:install-%=%) install
 
-UNINSTALLDIRS = $(SUBDIRS:%=uninstall-%)
-uninstall: $(UNINSTALLDIRS)
-$(UNINSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:uninstall-%=%) uninstall
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
 
-include $(srcdir)/../rules.make
+.PHONY: ptest ptests
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/tutorial/Makefile.am b/examples/tutorial/Makefile.am
new file mode 100644
index 0000000..a273158
--- /dev/null
+++ b/examples/tutorial/Makefile.am
@@ -0,0 +1,71 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c .f .f90 .F90
+
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_builddir)/src/include
+
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77
+AM_FCFLAGS = $(FC_MODINC)$(top_builddir)/src/binding/f90
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la
+
+check_PROGRAMS = pnetcdf-write-from-master \
+                 pnetcdf-read-from-master \
+                 pnetcdf-write-nfiles \
+                 pnetcdf-read-nfiles \
+                 pnetcdf-write-standard \
+                 pnetcdf-read-standard \
+                 pnetcdf-write-flexible \
+                 pnetcdf-read-flexible \
+                 pnetcdf-write-nb \
+                 pnetcdf-read-nb \
+                 pnetcdf-write-buffered \
+                 pnetcdf-permute
+
+if HAS_FORTRAN
+check_PROGRAMS += pnetcdf-write-bufferedf77
+pnetcdf_write_bufferedf77_SOURCES = pnetcdf-write-bufferedf77.f
+pnetcdf_write_bufferedf77_LDADD = $(LDADD) ../F77/utils.o
+if HAVE_MPI_MOD
+check_PROGRAMS += pnetcdf-write-bufferedf
+pnetcdf_write_bufferedf_SOURCES = pnetcdf-write-bufferedf.f90
+pnetcdf_write_bufferedf_LDADD = $(LDADD) ../F77/utils.o
+endif
+endif
+
+../F77/utils.o:
+	set -e; cd ../F77 && $(MAKE) $(MFLAGS) utils.o
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+
+ptest ptest4: $(check_PROGRAMS)
+	@for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+        if [ $$? = 0 ] ; then \
+           echo "PASS:     parallel run on 4 processes --------------- $$i"; \
+        else \
+           echo "FAILED:     parallel run on 4 processes ------------- $$i"; \
+           exit 1; \
+        fi ; } ; done ; } ; done
+
+ptests: ptest4
+ptest2 ptest3 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
+
diff --git a/examples/tutorial/Makefile.in b/examples/tutorial/Makefile.in
index 1b9b7ad..c5e1fa7 100644
--- a/examples/tutorial/Makefile.in
+++ b/examples/tutorial/Makefile.in
@@ -1,117 +1,925 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2742 2016-12-28 16:22:17Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = pnetcdf-write-from-master$(EXEEXT) \
+	pnetcdf-read-from-master$(EXEEXT) \
+	pnetcdf-write-nfiles$(EXEEXT) pnetcdf-read-nfiles$(EXEEXT) \
+	pnetcdf-write-standard$(EXEEXT) pnetcdf-read-standard$(EXEEXT) \
+	pnetcdf-write-flexible$(EXEEXT) pnetcdf-read-flexible$(EXEEXT) \
+	pnetcdf-write-nb$(EXEEXT) pnetcdf-read-nb$(EXEEXT) \
+	pnetcdf-write-buffered$(EXEEXT) pnetcdf-permute$(EXEEXT) \
+	$(am__EXEEXT_1) $(am__EXEEXT_2)
+ at HAS_FORTRAN_TRUE@am__append_1 = pnetcdf-write-bufferedf77
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__append_2 = pnetcdf-write-bufferedf
+subdir = examples/tutorial
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at HAS_FORTRAN_TRUE@am__EXEEXT_1 = pnetcdf-write-bufferedf77$(EXEEXT)
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__EXEEXT_2 = pnetcdf-write-bufferedf$(EXEEXT)
+pnetcdf_permute_SOURCES = pnetcdf-permute.c
+pnetcdf_permute_OBJECTS = pnetcdf-permute.$(OBJEXT)
+pnetcdf_permute_LDADD = $(LDADD)
+pnetcdf_permute_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+pnetcdf_read_flexible_SOURCES = pnetcdf-read-flexible.c
+pnetcdf_read_flexible_OBJECTS = pnetcdf-read-flexible.$(OBJEXT)
+pnetcdf_read_flexible_LDADD = $(LDADD)
+pnetcdf_read_flexible_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_read_from_master_SOURCES = pnetcdf-read-from-master.c
+pnetcdf_read_from_master_OBJECTS = pnetcdf-read-from-master.$(OBJEXT)
+pnetcdf_read_from_master_LDADD = $(LDADD)
+pnetcdf_read_from_master_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_read_nb_SOURCES = pnetcdf-read-nb.c
+pnetcdf_read_nb_OBJECTS = pnetcdf-read-nb.$(OBJEXT)
+pnetcdf_read_nb_LDADD = $(LDADD)
+pnetcdf_read_nb_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_read_nfiles_SOURCES = pnetcdf-read-nfiles.c
+pnetcdf_read_nfiles_OBJECTS = pnetcdf-read-nfiles.$(OBJEXT)
+pnetcdf_read_nfiles_LDADD = $(LDADD)
+pnetcdf_read_nfiles_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_read_standard_SOURCES = pnetcdf-read-standard.c
+pnetcdf_read_standard_OBJECTS = pnetcdf-read-standard.$(OBJEXT)
+pnetcdf_read_standard_LDADD = $(LDADD)
+pnetcdf_read_standard_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_write_buffered_SOURCES = pnetcdf-write-buffered.c
+pnetcdf_write_buffered_OBJECTS = pnetcdf-write-buffered.$(OBJEXT)
+pnetcdf_write_buffered_LDADD = $(LDADD)
+pnetcdf_write_buffered_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+am__pnetcdf_write_bufferedf_SOURCES_DIST =  \
+	pnetcdf-write-bufferedf.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am_pnetcdf_write_bufferedf_OBJECTS = pnetcdf-write-bufferedf.$(OBJEXT)
+pnetcdf_write_bufferedf_OBJECTS =  \
+	$(am_pnetcdf_write_bufferedf_OBJECTS)
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at pnetcdf_write_bufferedf_DEPENDENCIES =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	$(LDADD) ../F77/utils.o
+am__pnetcdf_write_bufferedf77_SOURCES_DIST =  \
+	pnetcdf-write-bufferedf77.f
+ at HAS_FORTRAN_TRUE@am_pnetcdf_write_bufferedf77_OBJECTS =  \
+ at HAS_FORTRAN_TRUE@	pnetcdf-write-bufferedf77.$(OBJEXT)
+pnetcdf_write_bufferedf77_OBJECTS =  \
+	$(am_pnetcdf_write_bufferedf77_OBJECTS)
+ at HAS_FORTRAN_TRUE@pnetcdf_write_bufferedf77_DEPENDENCIES = $(LDADD) \
+ at HAS_FORTRAN_TRUE@	../F77/utils.o
+pnetcdf_write_flexible_SOURCES = pnetcdf-write-flexible.c
+pnetcdf_write_flexible_OBJECTS = pnetcdf-write-flexible.$(OBJEXT)
+pnetcdf_write_flexible_LDADD = $(LDADD)
+pnetcdf_write_flexible_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_write_from_master_SOURCES = pnetcdf-write-from-master.c
+pnetcdf_write_from_master_OBJECTS =  \
+	pnetcdf-write-from-master.$(OBJEXT)
+pnetcdf_write_from_master_LDADD = $(LDADD)
+pnetcdf_write_from_master_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_write_nb_SOURCES = pnetcdf-write-nb.c
+pnetcdf_write_nb_OBJECTS = pnetcdf-write-nb.$(OBJEXT)
+pnetcdf_write_nb_LDADD = $(LDADD)
+pnetcdf_write_nb_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_write_nfiles_SOURCES = pnetcdf-write-nfiles.c
+pnetcdf_write_nfiles_OBJECTS = pnetcdf-write-nfiles.$(OBJEXT)
+pnetcdf_write_nfiles_LDADD = $(LDADD)
+pnetcdf_write_nfiles_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+pnetcdf_write_standard_SOURCES = pnetcdf-write-standard.c
+pnetcdf_write_standard_OBJECTS = pnetcdf-write-standard.$(OBJEXT)
+pnetcdf_write_standard_LDADD = $(LDADD)
+pnetcdf_write_standard_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS)
+LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS)
+AM_V_F77 = $(am__v_F77_ at AM_V@)
+am__v_F77_ = $(am__v_F77_ at AM_DEFAULT_V@)
+am__v_F77_0 = @echo "  F77     " $@;
+am__v_F77_1 = 
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_F77LD = $(am__v_F77LD_ at AM_V@)
+am__v_F77LD_ = $(am__v_F77LD_ at AM_DEFAULT_V@)
+am__v_F77LD_0 = @echo "  F77LD   " $@;
+am__v_F77LD_1 = 
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+AM_V_FC = $(am__v_FC_ at AM_V@)
+am__v_FC_ = $(am__v_FC_ at AM_DEFAULT_V@)
+am__v_FC_0 = @echo "  FC      " $@;
+am__v_FC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+SOURCES = pnetcdf-permute.c pnetcdf-read-flexible.c \
+	pnetcdf-read-from-master.c pnetcdf-read-nb.c \
+	pnetcdf-read-nfiles.c pnetcdf-read-standard.c \
+	pnetcdf-write-buffered.c $(pnetcdf_write_bufferedf_SOURCES) \
+	$(pnetcdf_write_bufferedf77_SOURCES) pnetcdf-write-flexible.c \
+	pnetcdf-write-from-master.c pnetcdf-write-nb.c \
+	pnetcdf-write-nfiles.c pnetcdf-write-standard.c
+DIST_SOURCES = pnetcdf-permute.c pnetcdf-read-flexible.c \
+	pnetcdf-read-from-master.c pnetcdf-read-nb.c \
+	pnetcdf-read-nfiles.c pnetcdf-read-standard.c \
+	pnetcdf-write-buffered.c \
+	$(am__pnetcdf_write_bufferedf_SOURCES_DIST) \
+	$(am__pnetcdf_write_bufferedf77_SOURCES_DIST) \
+	pnetcdf-write-flexible.c pnetcdf-write-from-master.c \
+	pnetcdf-write-nb.c pnetcdf-write-nfiles.c \
+	pnetcdf-write-standard.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c .f .f90 .F90
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_builddir)/src/include
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77
+AM_FCFLAGS = $(FC_MODINC)$(top_builddir)/src/binding/f90
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la
+ at HAS_FORTRAN_TRUE@pnetcdf_write_bufferedf77_SOURCES = pnetcdf-write-bufferedf77.f
+ at HAS_FORTRAN_TRUE@pnetcdf_write_bufferedf77_LDADD = $(LDADD) ../F77/utils.o
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at pnetcdf_write_bufferedf_SOURCES = pnetcdf-write-bufferedf.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at pnetcdf_write_bufferedf_LDADD = $(LDADD) ../F77/utils.o
+
+# parallel runs only
+# TESTS = $(check_PROGRAMS)
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .f .f90 .F90 .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/tutorial/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu examples/tutorial/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+pnetcdf-permute$(EXEEXT): $(pnetcdf_permute_OBJECTS) $(pnetcdf_permute_DEPENDENCIES) $(EXTRA_pnetcdf_permute_DEPENDENCIES) 
+	@rm -f pnetcdf-permute$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_permute_OBJECTS) $(pnetcdf_permute_LDADD) $(LIBS)
+
+pnetcdf-read-flexible$(EXEEXT): $(pnetcdf_read_flexible_OBJECTS) $(pnetcdf_read_flexible_DEPENDENCIES) $(EXTRA_pnetcdf_read_flexible_DEPENDENCIES) 
+	@rm -f pnetcdf-read-flexible$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_read_flexible_OBJECTS) $(pnetcdf_read_flexible_LDADD) $(LIBS)
+
+pnetcdf-read-from-master$(EXEEXT): $(pnetcdf_read_from_master_OBJECTS) $(pnetcdf_read_from_master_DEPENDENCIES) $(EXTRA_pnetcdf_read_from_master_DEPENDENCIES) 
+	@rm -f pnetcdf-read-from-master$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_read_from_master_OBJECTS) $(pnetcdf_read_from_master_LDADD) $(LIBS)
+
+pnetcdf-read-nb$(EXEEXT): $(pnetcdf_read_nb_OBJECTS) $(pnetcdf_read_nb_DEPENDENCIES) $(EXTRA_pnetcdf_read_nb_DEPENDENCIES) 
+	@rm -f pnetcdf-read-nb$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_read_nb_OBJECTS) $(pnetcdf_read_nb_LDADD) $(LIBS)
+
+pnetcdf-read-nfiles$(EXEEXT): $(pnetcdf_read_nfiles_OBJECTS) $(pnetcdf_read_nfiles_DEPENDENCIES) $(EXTRA_pnetcdf_read_nfiles_DEPENDENCIES) 
+	@rm -f pnetcdf-read-nfiles$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_read_nfiles_OBJECTS) $(pnetcdf_read_nfiles_LDADD) $(LIBS)
+
+pnetcdf-read-standard$(EXEEXT): $(pnetcdf_read_standard_OBJECTS) $(pnetcdf_read_standard_DEPENDENCIES) $(EXTRA_pnetcdf_read_standard_DEPENDENCIES) 
+	@rm -f pnetcdf-read-standard$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_read_standard_OBJECTS) $(pnetcdf_read_standard_LDADD) $(LIBS)
+
+pnetcdf-write-buffered$(EXEEXT): $(pnetcdf_write_buffered_OBJECTS) $(pnetcdf_write_buffered_DEPENDENCIES) $(EXTRA_pnetcdf_write_buffered_DEPENDENCIES) 
+	@rm -f pnetcdf-write-buffered$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_write_buffered_OBJECTS) $(pnetcdf_write_buffered_LDADD) $(LIBS)
+
+pnetcdf-write-bufferedf$(EXEEXT): $(pnetcdf_write_bufferedf_OBJECTS) $(pnetcdf_write_bufferedf_DEPENDENCIES) $(EXTRA_pnetcdf_write_bufferedf_DEPENDENCIES) 
+	@rm -f pnetcdf-write-bufferedf$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(pnetcdf_write_bufferedf_OBJECTS) $(pnetcdf_write_bufferedf_LDADD) $(LIBS)
+
+pnetcdf-write-bufferedf77$(EXEEXT): $(pnetcdf_write_bufferedf77_OBJECTS) $(pnetcdf_write_bufferedf77_DEPENDENCIES) $(EXTRA_pnetcdf_write_bufferedf77_DEPENDENCIES) 
+	@rm -f pnetcdf-write-bufferedf77$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(pnetcdf_write_bufferedf77_OBJECTS) $(pnetcdf_write_bufferedf77_LDADD) $(LIBS)
+
+pnetcdf-write-flexible$(EXEEXT): $(pnetcdf_write_flexible_OBJECTS) $(pnetcdf_write_flexible_DEPENDENCIES) $(EXTRA_pnetcdf_write_flexible_DEPENDENCIES) 
+	@rm -f pnetcdf-write-flexible$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_write_flexible_OBJECTS) $(pnetcdf_write_flexible_LDADD) $(LIBS)
+
+pnetcdf-write-from-master$(EXEEXT): $(pnetcdf_write_from_master_OBJECTS) $(pnetcdf_write_from_master_DEPENDENCIES) $(EXTRA_pnetcdf_write_from_master_DEPENDENCIES) 
+	@rm -f pnetcdf-write-from-master$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_write_from_master_OBJECTS) $(pnetcdf_write_from_master_LDADD) $(LIBS)
+
+pnetcdf-write-nb$(EXEEXT): $(pnetcdf_write_nb_OBJECTS) $(pnetcdf_write_nb_DEPENDENCIES) $(EXTRA_pnetcdf_write_nb_DEPENDENCIES) 
+	@rm -f pnetcdf-write-nb$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_write_nb_OBJECTS) $(pnetcdf_write_nb_LDADD) $(LIBS)
+
+pnetcdf-write-nfiles$(EXEEXT): $(pnetcdf_write_nfiles_OBJECTS) $(pnetcdf_write_nfiles_DEPENDENCIES) $(EXTRA_pnetcdf_write_nfiles_DEPENDENCIES) 
+	@rm -f pnetcdf-write-nfiles$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_write_nfiles_OBJECTS) $(pnetcdf_write_nfiles_LDADD) $(LIBS)
+
+pnetcdf-write-standard$(EXEEXT): $(pnetcdf_write_standard_OBJECTS) $(pnetcdf_write_standard_DEPENDENCIES) $(EXTRA_pnetcdf_write_standard_DEPENDENCIES) 
+	@rm -f pnetcdf-write-standard$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnetcdf_write_standard_OBJECTS) $(pnetcdf_write_standard_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-permute.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-read-flexible.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-read-from-master.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-read-nb.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-read-nfiles.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-read-standard.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-write-buffered.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-write-flexible.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-write-from-master.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-write-nb.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-write-nfiles.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf-write-standard.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.f.o:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ $<
+
+.f.obj:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.f.lo:
+	$(AM_V_F77)$(LTF77COMPILE) -c -o $@ $<
+
+.f90.o:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+	$(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
 
-include ../../macros.make
+install-info: install-info-am
 
-# note the order of -L list matters
-INCLUDES    = -I../../src/lib
-FPPFLAGS   += -I../../src/libf @FC_MODINC at ../../src/libf90
-LDFLAGS    := -L../../src/lib $(LDFLAGS)
-FLDFLAGS   += $(LDFLAGS)
-F90LDFLAGS += $(LDFLAGS)
-LIBS       := -lpnetcdf $(LIBS)
+install-info-am:
 
-C_SRCS = pnetcdf-write-from-master.c \
-         pnetcdf-read-from-master.c \
-         pnetcdf-write-nfiles.c \
-         pnetcdf-read-nfiles.c \
-         pnetcdf-write-standard.c \
-         pnetcdf-read-standard.c \
-         pnetcdf-write-flexible.c \
-         pnetcdf-read-flexible.c \
-         pnetcdf-write-nb.c \
-         pnetcdf-read-nb.c \
-         pnetcdf-write-buffered.c \
-         pnetcdf-permute.c
+install-man:
 
-F77_SRCS = pnetcdf-write-bufferedf77.f
+install-pdf: install-pdf-am
 
-F90_SRCS = pnetcdf-write-bufferedf.f90
+install-pdf-am:
 
-PROGS  = $(C_SRCS:.c=)
-OBJS   = $(C_SRCS:.c=.o)
-ifeq (@has_fortran@, yes)
-PROGS += $(F77_SRCS:.f=)
-OBJS  += $(F77_SRCS:.f=.o)
-ifeq (@mpi_mod@, yes)
-PROGS += $(F90_SRCS:.f90=)
-OBJS  += $(F90_SRCS:.f90=.o)
-endif
-endif
+install-ps: install-ps-am
 
-GARBAGE      = $(PROGS) *.nc
-PACKING_LIST = $(C_SRCS) $(F77_SRCS) $(F90_SRCS) Makefile.in depend
+install-ps-am:
 
-all: $(PROGS)
+installcheck-am:
 
-pnetcdf-write-from-master: pnetcdf-write-from-master.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-pnetcdf-read-from-master: pnetcdf-read-from-master.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mostlyclean: mostlyclean-am
 
-pnetcdf-write-nfiles: pnetcdf-write-nfiles.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-pnetcdf-read-nfiles: pnetcdf-read-nfiles.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+pdf: pdf-am
 
-pnetcdf-write-standard: pnetcdf-write-standard.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+pdf-am:
 
-pnetcdf-read-standard: pnetcdf-read-standard.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+ps: ps-am
 
-pnetcdf-write-flexible: pnetcdf-write-flexible.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+ps-am:
 
-pnetcdf-read-flexible: pnetcdf-read-flexible.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tests: tests-am
 
-pnetcdf-write-nb: pnetcdf-write-nb.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tests-am: tests-local
 
-pnetcdf-read-nb: pnetcdf-read-nb.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+uninstall-am:
 
-pnetcdf-write-buffered: pnetcdf-write-buffered.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+.MAKE: check-am install-am install-strip
 
-pnetcdf-write-bufferedf: pnetcdf-write-bufferedf.o $(LIBRARY)
-	$(LINK.F90) $< $(F90LDFLAGS) $(LIBS)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
 
-pnetcdf-write-bufferedf77: pnetcdf-write-bufferedf77.o $(LIBRARY)
-	$(LINK.F90) $< $(FLDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-pnetcdf-permute: pnetcdf-permute.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
 
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
+../F77/utils.o:
+	set -e; cd ../F77 && $(MAKE) $(MFLAGS) utils.o
 
-ptest4: $(PROGS)
-	@for i in $(PROGS); do { \
-        $(TEST_MPIRUN_4) ./$$i $(TEST_OUTDIR)/testfile.nc ; \
+ptest ptest4: $(check_PROGRAMS)
+	@for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	for i in $(check_PROGRAMS); do { \
+        $(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
         if [ $$? = 0 ] ; then \
            echo "PASS:     parallel run on 4 processes --------------- $$i"; \
         else \
            echo "FAILED:     parallel run on 4 processes ------------- $$i"; \
            exit 1; \
-        fi ; } ; done
+        fi ; } ; done ; } ; done
 
-ptest: ptest4
 ptests: ptest4
 ptest2 ptest3 ptest6 ptest8 ptest10:
 
-include $(srcdir)/depend
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest3 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/tutorial/depend b/examples/tutorial/depend
deleted file mode 100644
index 609c3bf..0000000
--- a/examples/tutorial/depend
+++ /dev/null
@@ -1,14 +0,0 @@
-pnetcdf-permute.o: pnetcdf-permute.c
-pnetcdf-read-flexible.o: pnetcdf-read-flexible.c
-pnetcdf-read-from-master.o: pnetcdf-read-from-master.c
-pnetcdf-read-nb.o: pnetcdf-read-nb.c
-pnetcdf-read-nfiles.o: pnetcdf-read-nfiles.c
-pnetcdf-read-standard.o: pnetcdf-read-standard.c
-pnetcdf-write-bufferedf77.o: pnetcdf-write-bufferedf77.f
-pnetcdf-write-bufferedf.o: pnetcdf-write-bufferedf.f90
-pnetcdf-write-buffered.o: pnetcdf-write-buffered.c
-pnetcdf-write-flexible.o: pnetcdf-write-flexible.c
-pnetcdf-write-from-master.o: pnetcdf-write-from-master.c
-pnetcdf-write-nb.o: pnetcdf-write-nb.c
-pnetcdf-write-nfiles.o: pnetcdf-write-nfiles.c
-pnetcdf-write-standard.o: pnetcdf-write-standard.c
diff --git a/examples/tutorial/pnetcdf-permute.c b/examples/tutorial/pnetcdf-permute.c
index 98d3cc5..05932bc 100644
--- a/examples/tutorial/pnetcdf-permute.c
+++ b/examples/tutorial/pnetcdf-permute.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-permute.c 2245 2015-12-20 18:39:52Z wkliao $ */
+/* $Id: pnetcdf-permute.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * knowing nothing about the file, read in the variables. 
@@ -15,10 +15,11 @@
  * Note this program demonstrates transposition for one process only
  */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
 
 #include <assert.h>
 
@@ -31,6 +32,7 @@ static void handle_error(int status, int lineno)
 int main(int argc, char **argv) {
 
 #define NDIMS 3
+    char filename[256];
     int i, j, k, rank, nprocs, ret;
     int ncfile, ndims=NDIMS;
     MPI_Offset dim_sizes[NDIMS];
@@ -45,14 +47,16 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
-    ret = ncmpi_create(MPI_COMM_WORLD, argv[1], 
-	    NC_CLOBBER|NC_64BIT_OFFSET, MPI_INFO_NULL, &ncfile);
+    ret = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_OFFSET,
+                       MPI_INFO_NULL, &ncfile);
     if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
     dim_sizes[0] = 4;
diff --git a/examples/tutorial/pnetcdf-read-flexible.c b/examples/tutorial/pnetcdf-read-flexible.c
index 7c9979a..ac737a2 100644
--- a/examples/tutorial/pnetcdf-read-flexible.c
+++ b/examples/tutorial/pnetcdf-read-flexible.c
@@ -4,17 +4,18 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-read-flexible.c 2369 2016-03-22 21:56:02Z wkliao $ */
+/* $Id: pnetcdf-read-flexible.c 2900 2017-02-27 00:10:49Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * knowing nothing about the file, read in the variables. 
  *
  * This example demonstrates the flexible interface */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
 
 static void handle_error(int status, int lineno)
 {
@@ -29,8 +30,8 @@ int main(int argc, char **argv) {
     int var_ndims, var_natts;;
     MPI_Offset *dim_sizes, var_size;
     MPI_Offset *start, *count;
-    char varname[NC_MAX_NAME+1];
-    int dimids[NC_MAX_VAR_DIMS];
+    char filename[256], varname[NC_MAX_NAME+1];
+    int *dimids=NULL;
     nc_type type;
     int *data=NULL;
 
@@ -39,13 +40,15 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
-    ret = ncmpi_open(MPI_COMM_WORLD, argv[1], NC_NOWRITE, MPI_INFO_NULL,
+    ret = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
                      &ncfile);
     if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
@@ -71,7 +74,13 @@ int main(int argc, char **argv) {
         if (ret != NC_NOERR) handle_error(ret, __LINE__);
     }
 
-    for(i=0; i<nvars; i++) { 
+    for(i=0; i<nvars; i++) {
+        /* obtain the number of dimensions of variable i, so we can allocate
+         * the dimids array */
+        ret = ncmpi_inq_varndims(ncfile, i, &var_ndims);
+        if (ret != NC_NOERR) handle_error(ret, __LINE__);
+        dimids = (int*) malloc(var_ndims * sizeof(int));
+
         /* much less coordination in this case compared to rank 0 doing all
          * the i/o: everyone already has the necessary information */
         ret = ncmpi_inq_var(ncfile, i, varname, &type, &var_ndims, dimids,
@@ -113,6 +122,7 @@ int main(int argc, char **argv) {
 
         free(start);
         free(count);
+        free(dimids);
         if (data != NULL) free(data);
     }
 
diff --git a/examples/tutorial/pnetcdf-read-from-master.c b/examples/tutorial/pnetcdf-read-from-master.c
index 3c01090..da12fcf 100644
--- a/examples/tutorial/pnetcdf-read-from-master.c
+++ b/examples/tutorial/pnetcdf-read-from-master.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-read-from-master.c 2670 2016-12-03 17:25:10Z wkliao $ */
+/* $Id: pnetcdf-read-from-master.c 2900 2017-02-27 00:10:49Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * text attribute on dataset
@@ -36,14 +36,11 @@
     }
 */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
-
-#ifndef MPI_OFFSET
-#define MPI_OFFSET MPI_LONG_LONG_INT
-#endif
 
 #define MPI_ERR(err) { \
     if (err != MPI_SUCCESS) { \
@@ -65,8 +62,8 @@ int main(int argc, char **argv) {
 
     int i, j=0, rank, nprocs, err;
     int ncfile, ndims, nvars, ngatts, unlimited, var_ndims, var_natts;;
-    int dimids[NC_MAX_VAR_DIMS];
-    char varname[NC_MAX_NAME+1];
+    int *dimids=NULL;
+    char filename[256], varname[NC_MAX_NAME+1];
     MPI_Offset *dim_sizes=NULL, var_size;
     nc_type type;
     int *data=NULL;
@@ -76,14 +73,16 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
     if (rank == 0) {
-        err = ncmpi_open(MPI_COMM_SELF, argv[1],
+        err = ncmpi_open(MPI_COMM_SELF, filename,
                          NC_NOWRITE, MPI_INFO_NULL, &ncfile);
         if (err != NC_NOERR) handle_error(err, __LINE__);
 
@@ -113,10 +112,16 @@ int main(int argc, char **argv) {
     err = MPI_Bcast(&nvars, 1, MPI_INT, 0, MPI_COMM_WORLD);
     MPI_ERR(err)
 
-    for(i=0; i<nvars; i++) { 
+    for(i=0; i<nvars; i++) {
         /* rank 0 will find out the size of each variable, read it, and
          * broadcast it to the rest of the processors */
         if (rank == 0) {
+            /* obtain the number of dimensions of variable i, so we can
+             * allocate the dimids array */
+            err = ncmpi_inq_varndims(ncfile, i, &var_ndims);
+            if (err != NC_NOERR) handle_error(err, __LINE__);
+            dimids = (int*) malloc(var_ndims * sizeof(int));
+
             err = ncmpi_inq_var(ncfile, i, varname, &type, &var_ndims, dimids,
                     &var_natts);
             if (err != NC_NOERR) handle_error(err, __LINE__);
@@ -124,6 +129,7 @@ int main(int argc, char **argv) {
             for (j=0, var_size=1; j<var_ndims; j++)  {
                 var_size *= dim_sizes[dimids[j]];
             }
+            free(dimids);
         }
         /* oddity: there's no predefined MPI_Offset type */
         err = MPI_Bcast(&var_size, 1, MPI_OFFSET, 0, MPI_COMM_WORLD);
@@ -158,7 +164,6 @@ int main(int argc, char **argv) {
 
         /* Here, every process can do computation on the local buffer, data,
            or copy the contents to somewhere else */
-
         free(data);
     }
 
diff --git a/examples/tutorial/pnetcdf-read-nb.c b/examples/tutorial/pnetcdf-read-nb.c
index d29d82a..07479f5 100644
--- a/examples/tutorial/pnetcdf-read-nb.c
+++ b/examples/tutorial/pnetcdf-read-nb.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-read-nb.c 2245 2015-12-20 18:39:52Z wkliao $ */
+/* $Id: pnetcdf-read-nb.c 2900 2017-02-27 00:10:49Z wkliao $ */
 
 /* simple demonstration of pnetcdf:
  * knowing nothing about the file, read in the variables. 
@@ -13,6 +13,7 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
 
@@ -27,8 +28,8 @@ int main(int argc, char **argv) {
     int i, j, rank, nprocs, ret;
     int ncfile, ndims, nvars, ngatts, unlimited, var_ndims, var_natts;;
     MPI_Offset *dim_sizes, var_size, *start, *count;
-    int *requests, *statuses, dimids[NC_MAX_VAR_DIMS], **data; 
-    char varname[NC_MAX_NAME+1];
+    int *requests, *statuses, *dimids=NULL, **data; 
+    char filename[256], varname[NC_MAX_NAME+1];
     nc_type type;
 
     MPI_Init(&argc, &argv);
@@ -36,13 +37,15 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
-    ret = ncmpi_open(MPI_COMM_WORLD, argv[1], NC_NOWRITE, MPI_INFO_NULL,
+    ret = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
                      &ncfile);
     if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
@@ -73,7 +76,13 @@ int main(int argc, char **argv) {
 
     data = (int**) calloc(nvars, sizeof(int*));
 
-    for(i=0; i<nvars; i++) { 
+    for(i=0; i<nvars; i++) {
+        /* obtain the number of dimensions of variable i, so we can allocate
+         * the dimids array */
+        ret = ncmpi_inq_varndims(ncfile, i, &var_ndims);
+        if (ret != NC_NOERR) handle_error(ret, __LINE__);
+        dimids = (int*) malloc(var_ndims * sizeof(int));
+
         /* much less coordination in this case compared to rank 0 doing all
          * the i/o: everyone already has the necessary information */
         ret = ncmpi_inq_var(ncfile, i, varname, &type, &var_ndims, dimids,
@@ -118,6 +127,7 @@ int main(int argc, char **argv) {
 
         free(start);
         free(count);
+        free(dimids);
     }
 
     ret = ncmpi_wait_all(ncfile, nvars, requests, statuses);
diff --git a/examples/tutorial/pnetcdf-read-nfiles.c b/examples/tutorial/pnetcdf-read-nfiles.c
index 3df81dd..c1798fd 100644
--- a/examples/tutorial/pnetcdf-read-nfiles.c
+++ b/examples/tutorial/pnetcdf-read-nfiles.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-read-nfiles.c 2369 2016-03-22 21:56:02Z wkliao $ */
+/* $Id: pnetcdf-read-nfiles.c 2900 2017-02-27 00:10:49Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * text attribute on dataset
@@ -16,10 +16,11 @@
  * the contents of the netCDF files.
  */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
 
 static void handle_error(int status, int lineno)
 {
@@ -37,8 +38,9 @@ int main(int argc, char **argv) {
     MPI_Offset *dim_sizes, var_size;
     MPI_Offset *count;
     char filename[DSET_NAME_LEN];
+    char basename[256];
     char varname[NC_MAX_NAME+1];
-    int dimids[NC_MAX_VAR_DIMS];
+    int *dimids=NULL;
     nc_type type;
     int *data=NULL;
 
@@ -47,11 +49,13 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
-        if (rank == 0) printf("Usage: %s filename\n", argv[0]);
+    if (argc > 2) {
+        if (rank == 0) printf("Usage: %s file_base_name\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(basename, 256, "%s", argv[1]);
+    else          strcpy(basename, "testfile");
 
     /* the most significant challenge with the "one file per processor"
      * approach is the challenge in reading back on a different number of
@@ -60,7 +64,7 @@ int main(int argc, char **argv) {
      * Stitching together the many smaller files into a form usable by other
      * programs poses a challenge */
 
-    ret = snprintf(filename, DSET_NAME_LEN, "%s.%d-%d.nc", argv[1], rank, nprocs);
+    ret = snprintf(filename, DSET_NAME_LEN, "%s.%d-%d.nc", basename, rank, nprocs);
     if (ret >= DSET_NAME_LEN) {
         fprintf(stderr, "name too long \n");
         exit(-1);
@@ -90,7 +94,13 @@ int main(int argc, char **argv) {
         if (ret != NC_NOERR) handle_error(ret, __LINE__);
     }
 
-    for (i=0; i<nvars; i++) { 
+    for (i=0; i<nvars; i++) {
+        /* obtain the number of dimensions of variable i, so we can allocate
+         * the dimids array */
+        ret = ncmpi_inq_varndims(ncfile, i, &var_ndims);
+        if (ret != NC_NOERR) handle_error(ret, __LINE__);
+        dimids = (int*) malloc(var_ndims * sizeof(int));
+
         /* much less coordination in this case compared to rank 0 doing all
          * the i/o: everyone already has the necessary information */
         ret = ncmpi_inq_var(ncfile, i, varname, &type, &var_ndims, dimids,
@@ -123,6 +133,7 @@ int main(int argc, char **argv) {
         }
 
         free(count);
+        free(dimids);
         if (data != NULL) free(data);
     }
 
diff --git a/examples/tutorial/pnetcdf-read-standard.c b/examples/tutorial/pnetcdf-read-standard.c
index 691b267..3b83675 100644
--- a/examples/tutorial/pnetcdf-read-standard.c
+++ b/examples/tutorial/pnetcdf-read-standard.c
@@ -4,17 +4,18 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-read-standard.c 2369 2016-03-22 21:56:02Z wkliao $ */
+/* $Id: pnetcdf-read-standard.c 2900 2017-02-27 00:10:49Z wkliao $ */
 
 /* simple demonstration of pnetcdf:
  * knowing nothing about the file, read in the variables. 
  *
  * This example demonstrates the standard read interface */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
 
 static void handle_error(int status, int lineno)
 {
@@ -29,8 +30,8 @@ int main(int argc, char **argv) {
     int var_ndims, var_natts;;
     MPI_Offset *dim_sizes, var_size;
     MPI_Offset *start, *count;
-    char varname[NC_MAX_NAME+1];
-    int dimids[NC_MAX_VAR_DIMS];
+    char filename[256], varname[NC_MAX_NAME+1];
+    int *dimids=NULL;
     nc_type type;
     int *data=NULL;
 
@@ -39,13 +40,15 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
-    ret = ncmpi_open(MPI_COMM_WORLD, argv[1], NC_NOWRITE, MPI_INFO_NULL,
+    ret = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
                      &ncfile);
     if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
@@ -71,7 +74,11 @@ int main(int argc, char **argv) {
         if (ret != NC_NOERR) handle_error(ret, __LINE__);
     }
 
-    for(i=0; i<nvars; i++) { 
+    for(i=0; i<nvars; i++) {
+        ret = ncmpi_inq_varndims(ncfile, i, &var_ndims);
+        if (ret != NC_NOERR) handle_error(ret, __LINE__);
+        dimids = (int*) malloc(var_ndims * sizeof(int));
+
         /* much less coordination in this case compared to rank 0 doing all
          * the i/o: everyone already has the necessary information */
         ret = ncmpi_inq_var(ncfile, i, varname, &type, &var_ndims, dimids,
@@ -112,6 +119,7 @@ int main(int argc, char **argv) {
 
         free(start);
         free(count);
+        free(dimids);
         if (data != NULL) free(data);
     }
 
diff --git a/examples/tutorial/pnetcdf-write-buffered.c b/examples/tutorial/pnetcdf-write-buffered.c
index cdc0b87..9a445ce 100644
--- a/examples/tutorial/pnetcdf-write-buffered.c
+++ b/examples/tutorial/pnetcdf-write-buffered.c
@@ -4,10 +4,11 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-write-buffered.c 1153 2013-02-03 17:45:55Z wkliao $ */
+/* $Id: pnetcdf-write-buffered.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#include <stdlib.h>
 #include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
 #include <string.h>
 #include <pnetcdf.h>
 
@@ -19,6 +20,7 @@ int main(int argc, char **argv) {
     int i, j, ncid, dimid[2], varid, err, rank, nprocs, cmode;
     int req[2], status[2]; 
     float  var[4][6];
+    char filename[256];
     MPI_Offset start[2], count[2], stride[2], imap[2];
     MPI_Offset bufsize;
 
@@ -26,14 +28,16 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
     cmode = NC_CLOBBER | NC_64BIT_DATA;
-    if (NC_NOERR != (err = ncmpi_create(MPI_COMM_WORLD, argv[1],
+    if (NC_NOERR != (err = ncmpi_create(MPI_COMM_WORLD, filename,
                                         cmode, MPI_INFO_NULL, &ncid)))
        ERR(err);
 
diff --git a/examples/tutorial/pnetcdf-write-bufferedf.f90 b/examples/tutorial/pnetcdf-write-bufferedf.f90
index 8540ecb..65a7af8 100644
--- a/examples/tutorial/pnetcdf-write-bufferedf.f90
+++ b/examples/tutorial/pnetcdf-write-bufferedf.f90
@@ -2,15 +2,29 @@
 !   Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: pnetcdf-write-bufferedf.f90 2245 2015-12-20 18:39:52Z wkliao $
+! $Id: pnetcdf-write-bufferedf.f90 3341 2017-08-25 22:29:08Z wkliao $
+
+      subroutine check(err, message)
+          use mpi
+          use pnetcdf
+          implicit none
+          integer err
+          character(len=*) message
+
+          ! It is a good idea to check returned value for possible error
+          if (err .NE. NF90_NOERR) then
+              write(6,*) trim(message), trim(nf90mpi_strerror(err))
+              call MPI_Abort(MPI_COMM_WORLD, -1, err)
+          end if
+      end subroutine check
 
       program main
-
       use mpi
       use pnetcdf
       implicit none
 
       integer i, j, ncid, varid, cmode, err, rank, nprocs
+      integer ierr, get_args, dummy
       integer dimid(2), req(2), status(2)
       integer(kind=MPI_OFFSET_KIND) start(2)
       integer(kind=MPI_OFFSET_KIND) count(2)
@@ -19,35 +33,40 @@
       integer(kind=MPI_OFFSET_KIND) bufsize
       integer(kind=MPI_OFFSET_KIND) put_size
       real  var(6,4)
-      character(len=256) filename
+      character(len=256) filename, cmd
+      logical verbose
 
       call MPI_INIT(err)
       call MPI_COMM_RANK(MPI_COMM_WORLD, rank, err)
       call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, err)
 
-      filename = "testfile.nc"
+      ! take filename from command-line argument if there is any
+      if (rank .EQ. 0) then
+          filename = "testfile.nc"
+          ierr = get_args(2, cmd, filename, verbose, dummy)
+      endif
+      call MPI_Bcast(ierr, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, err)
+      if (ierr .EQ. 0) goto 999
+
+      call MPI_Bcast(filename, 256, MPI_CHARACTER, 0, MPI_COMM_WORLD, err)
+
       cmode = IOR(NF90_CLOBBER, NF90_64BIT_DATA)
       err = nf90mpi_create(MPI_COMM_WORLD, filename, cmode, &
                          MPI_INFO_NULL, ncid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_create ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_create ')
 
       ! define a variable of a (4*nprocs) x 6 integer array in the nc file
       err = nf90mpi_def_dim(ncid, 'X', 4_MPI_OFFSET_KIND*nprocs, dimid(1))
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_def_dim ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_def_dim ')
 
       err = nf90mpi_def_dim(ncid, 'Y', 6_MPI_OFFSET_KIND, dimid(2))
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_def_dim ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_def_dim ')
 
       err = nf90mpi_def_var(ncid, 'var', NF90_INT64, dimid, varid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_def_var ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_def_var ')
 
       err = nf90mpi_enddef(ncid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_enddef ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_enddef ')
 
       ! set the contents of the local write buffer var, a 4 x 6 real array
       ! for example, for rank == 2, var(4,6) =
@@ -66,8 +85,7 @@
       ! bufsize must be max of data type converted before and after
       bufsize = 4*6*8
       err = nf90mpi_buffer_attach(ncid, bufsize)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_buffer_attach ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_buffer_attach ')
 
       ! write var to the NC variable in the matrix transposed way
       count(1)  = 2
@@ -84,32 +102,29 @@
       start(2)  = 1
       err = nf90mpi_bput_var(ncid, varid, var(1:,1:), req(1), &
                              start, count, stride, imap)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_bput_varm_real ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_bput_var ')
 
       ! write to the 2nd two columns of the variable in transposed way
       start(1)  = 3 + rank*4
       start(2)  = 1
       err = nf90mpi_bput_var(ncid, varid, var(1:,3:), req(2), &
                              start, count, stride, imap)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_bput_varm_real ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_bput_var ')
 
       err = nf90mpi_wait_all(ncid, 2, req, status)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_wait_all ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_wait_all ')
 
       ! check each bput status
       do i = 1, 2
           if (status(i) .ne. NF90_NOERR) then
               print*,'Error at bput status ', &
                      nf90mpi_strerror(status(i))
+              stop 2
           endif
       enddo
 
       err = nf90mpi_buffer_detach(ncid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_buffer_detach ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_buffer_detach ')
 
       ! The output from command "ncmpidump test.nc" is shown below if run
       ! this example on 4 processes.
@@ -134,14 +149,12 @@
       ! note that the display of ncmpidump is in C array dimensional order
 
       err = nf90mpi_inq_put_size(ncid, put_size)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_inq_put_size ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_inq_put_size ')
       ! print*,'pnetcdf reports total put size by this proc =', put_size
 
       err = nf90mpi_close(ncid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_close ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_close ')
 
-      CALL MPI_Finalize(err)
+ 999  CALL MPI_Finalize(err)
       end program
 
diff --git a/examples/tutorial/pnetcdf-write-bufferedf77.f b/examples/tutorial/pnetcdf-write-bufferedf77.f
index 6b12b0e..ff9d3cd 100644
--- a/examples/tutorial/pnetcdf-write-bufferedf77.f
+++ b/examples/tutorial/pnetcdf-write-bufferedf77.f
@@ -2,54 +2,70 @@
 !   Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: pnetcdf-write-bufferedf77.f 2245 2015-12-20 18:39:52Z wkliao $
+! $Id: pnetcdf-write-bufferedf77.f 3341 2017-08-25 22:29:08Z wkliao $
+
+      subroutine check(err, message)
+          implicit none
+          include "mpif.h"
+          include "pnetcdf.inc"
+          integer err
+          character message*(*)
+
+          ! It is a good idea to check returned value for possible error
+          if (err .NE. NF_NOERR) then
+              write(6,*) message//' '//nfmpi_strerror(err)
+              call MPI_Abort(MPI_COMM_WORLD, -1, err)
+          endif
+      end ! subroutine check
 
       program main
-
       implicit none
       include "mpif.h"
       include "pnetcdf.inc"
 
       integer i, j, ncid, varid, cmode, err, rank, nprocs
+      integer ierr, dummy, get_args
       integer dimid(2), req(2), status(2)
-      integer*8 start(2)
-      integer*8 count(2)
-      integer*8 stride(2)
-      integer*8 imap(2)
-      integer*8 bufsize
-      integer*8 put_size, dim_size
+      integer*8 start(2), count(2), stride(2), imap(2)
+      integer*8 bufsize, put_size, dim_size
       real  var(6,4)
-      character*256 filename
+      character*256 filename, cmd
+      logical verbose
 
       call MPI_INIT(err)
       call MPI_COMM_RANK(MPI_COMM_WORLD, rank, err)
       call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, err)
 
-      filename = "testfile.nc"
+      ! take filename from command-line argument if there is any
+      if (rank .EQ. 0) then
+          filename = "testfile.nc"
+          ierr = get_args(2, cmd, filename, verbose, dummy)
+      endif
+      call MPI_Bcast(ierr, 1, MPI_INTEGER, 0, MPI_COMM_WORLD, err)
+      if (ierr .EQ. 0) goto 999
+
+      call MPI_Bcast(filename, 256, MPI_CHARACTER, 0, MPI_COMM_WORLD,
+     +               err)
+
       cmode = IOR(NF_CLOBBER, NF_64BIT_DATA)
       err = nfmpi_create(MPI_COMM_WORLD, filename, cmode,
      +                   MPI_INFO_NULL, ncid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_create ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_create ')
 
       ! define a variable of a (4*nprocs) x 6 integer array in the nc file
       dim_size = 4
       err = nfmpi_def_dim(ncid, 'X', dim_size*nprocs, dimid(1))
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_def_dim ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_def_dim ')
 
       dim_size = 6
       err = nfmpi_def_dim(ncid, 'Y', dim_size, dimid(2))
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_def_dim ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_def_dim ')
 
       err = nfmpi_def_var(ncid, 'var', NF_INT64, 2, dimid, varid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_def_var ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_def_var ')
 
       err = nfmpi_enddef(ncid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_enddef ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_enddef ')
 
       ! set the contents of the local write buffer var, a 4 x 6 real array
       ! for example, for rank == 2, var(4,6) =
@@ -68,8 +84,7 @@
       ! bufsize must be max of data type converted before and after
       bufsize = 4*6*8
       err = nfmpi_buffer_attach(ncid, bufsize)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_buffer_attach ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_buffer_attach ')
 
       ! write var to the NC variable in the matrix transposed way
       count(1)  = 2
@@ -87,20 +102,17 @@
       start(2)  = 1
       err = nfmpi_bput_varm_real(ncid, varid, start, count, stride,
      +                           imap, var(1,1), req(1))
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_bput_varm_real ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_bput_varm_real ')
 
       ! write to the 2nd two columns of the variable in transposed way
       start(1)  = 3 + rank*4
       start(2)  = 1
       err = nfmpi_bput_varm_real(ncid, varid, start, count, stride,
      +                           imap, var(1,3), req(2))
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_bput_varm_real ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_bput_varm_real ')
 
       err = nfmpi_wait_all(ncid, 2, req, status)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_wait_all ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_wait_all ')
 
       ! check each bput status
       do i = 1, 2
@@ -110,8 +122,7 @@
       enddo
 
       err = nfmpi_buffer_detach(ncid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_buffer_detach ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_buffer_detach ')
 
       ! The output from command "ncmpidump test.nc" is shown below if run
       ! this example on 4 processes.
@@ -136,14 +147,12 @@
       ! note that the display of ncmpidump is in C array dimensional order
 
       err = nfmpi_inq_put_size(ncid, put_size)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_inq_put_size ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_inq_put_size ')
       ! print*,'pnetcdf reports total put size by this proc =', put_size
 
       err = nfmpi_close(ncid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_close ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_close ')
 
-      CALL MPI_Finalize(err)
+ 999  CALL MPI_Finalize(err)
       end ! program
 
diff --git a/examples/tutorial/pnetcdf-write-flexible.c b/examples/tutorial/pnetcdf-write-flexible.c
index 23bf02d..2f6f894 100644
--- a/examples/tutorial/pnetcdf-write-flexible.c
+++ b/examples/tutorial/pnetcdf-write-flexible.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-write-flexible.c 1123 2013-01-26 17:35:03Z wkliao $ */
+/* $Id: pnetcdf-write-flexible.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * text attribute on dataset
@@ -36,10 +36,11 @@
     }
 */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
 
 static void handle_error(int status, int lineno)
 {
@@ -51,7 +52,7 @@ int main(int argc, char **argv) {
 
     int ret, ncfile, nprocs, rank, dimid, varid1, varid2, ndims=1;
     MPI_Offset start, count=1;
-    char buf[13] = "Hello World\n";
+    char filename[256], buf[13] = "Hello World\n";
     int data;
 
     MPI_Init(&argc, &argv);
@@ -59,13 +60,15 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
-    ret = ncmpi_create(MPI_COMM_WORLD, argv[1],
+    ret = ncmpi_create(MPI_COMM_WORLD, filename,
                        NC_CLOBBER|NC_64BIT_OFFSET, MPI_INFO_NULL, &ncfile);
     if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
diff --git a/examples/tutorial/pnetcdf-write-from-master.c b/examples/tutorial/pnetcdf-write-from-master.c
index 5f840e1..2a00d6c 100644
--- a/examples/tutorial/pnetcdf-write-from-master.c
+++ b/examples/tutorial/pnetcdf-write-from-master.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-write-from-master.c 2640 2016-11-18 21:08:08Z wkliao $ */
+/* $Id: pnetcdf-write-from-master.c 3382 2017-09-17 02:49:07Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * text attribute on dataset
@@ -36,10 +36,11 @@
     }
 */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
 
 static void handle_error(int status, int lineno)
 {
@@ -49,8 +50,7 @@ static void handle_error(int status, int lineno)
 
 int main(int argc, char **argv) {
     int ret, ncid=0, nprocs, rank, dimid, varid1=0, varid2=0, ndims=1;
-    MPI_Offset start, count=1;
-    char buf[13] = "Hello World\n";
+    char filename[256], buf[13] = "Hello World\n";
     int *data=NULL;
 
     MPI_Init(&argc, &argv);
@@ -58,14 +58,16 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
     if (rank == 0) {
-        ret = ncmpi_create(MPI_COMM_SELF, argv[1],
+        ret = ncmpi_create(MPI_COMM_SELF, filename,
                            NC_CLOBBER|NC_64BIT_OFFSET, MPI_INFO_NULL, &ncid);
         if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
@@ -99,11 +101,12 @@ int main(int argc, char **argv) {
          * happens from a single processor.  This approach can be ok if the
          * amount of data is quite small, but almost always the underlying
          * MPI-IO library can do a better job */
-        start=0, count=nprocs;
-        ret = ncmpi_put_vara_int_all(ncid, varid1, &start, &count, data);
+        MPI_Offset start[1], count[1];
+        start[0]=0, count[0]=nprocs;
+        ret = ncmpi_put_vara_int_all(ncid, varid1, start, count, data);
         if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
-        ret = ncmpi_put_vara_int_all(ncid, varid2, &start, &count, data);
+        ret = ncmpi_put_vara_int_all(ncid, varid2, start, count, data);
         if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
         ret = ncmpi_close(ncid);
diff --git a/examples/tutorial/pnetcdf-write-nb.c b/examples/tutorial/pnetcdf-write-nb.c
index 39be571..559b51a 100644
--- a/examples/tutorial/pnetcdf-write-nb.c
+++ b/examples/tutorial/pnetcdf-write-nb.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-write-nb.c 2717 2016-12-18 01:20:47Z wkliao $ */
+/* $Id: pnetcdf-write-nb.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * text attribute on dataset
@@ -62,17 +62,17 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
     MPI_Info_create(&info);
     MPI_Info_set(info, "nc_var_align_size", "1");
 
-    snprintf(filename, 256, "%s", argv[1]);
-
     ret = ncmpi_create(MPI_COMM_WORLD, filename,
                        NC_CLOBBER|NC_64BIT_OFFSET, info, &ncfile);
     if (ret != NC_NOERR) handle_error(ret, __LINE__);
diff --git a/examples/tutorial/pnetcdf-write-nfiles.c b/examples/tutorial/pnetcdf-write-nfiles.c
index 14e0119..e9cc1fd 100644
--- a/examples/tutorial/pnetcdf-write-nfiles.c
+++ b/examples/tutorial/pnetcdf-write-nfiles.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-write-nfiles.c 2458 2016-08-12 01:16:28Z robl $ */
+/* $Id: pnetcdf-write-nfiles.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * text attribute on dataset
@@ -24,10 +24,11 @@ There will be 4 files created.
 The contents of files are shown at the bottom of this files.
 */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
 
 
 static void handle_error(int status, int lineno)
@@ -43,23 +44,25 @@ int main(int argc, char **argv) {
     int ret, ncfile, nprocs, rank, dimid, varid1, varid2, ndims=1;
     char buf[13] = "Hello World\n";
     int data;
-    char filename[DSET_NAME_LEN];
+    char filename[DSET_NAME_LEN], basename[256];
 
     MPI_Init(&argc, &argv);
 
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(basename, 256, "%s", argv[1]);
+    else          strcpy(basename, "testfile");
 
     /* Many applications find "one file per process" easy, but there are
      * several deficiencies with that approach:
      * - here we need to construct a unique file name for each processor */
-    ret = snprintf(filename, DSET_NAME_LEN, "%s.%d-%d.nc", argv[1], rank, nprocs);
+    ret = snprintf(filename, DSET_NAME_LEN, "%s.%d-%d.nc", basename, rank, nprocs);
     if (ret >= DSET_NAME_LEN) {
         fprintf(stderr, "name too long \n");
         exit(-1);
diff --git a/examples/tutorial/pnetcdf-write-standard.c b/examples/tutorial/pnetcdf-write-standard.c
index cfeaca4..a854abf 100644
--- a/examples/tutorial/pnetcdf-write-standard.c
+++ b/examples/tutorial/pnetcdf-write-standard.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: pnetcdf-write-standard.c 1123 2013-01-26 17:35:03Z wkliao $ */
+/* $Id: pnetcdf-write-standard.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* simple demonstration of pnetcdf 
  * text attribute on dataset
@@ -36,10 +36,11 @@
     }
 */
 
+#include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <mpi.h>
 #include <pnetcdf.h>
-#include <stdio.h>
 
 static void handle_error(int status, int lineno)
 {
@@ -51,7 +52,7 @@ int main(int argc, char **argv) {
 
     int ret, ncfile, nprocs, rank, dimid, varid1, varid2, ndims=1;
     MPI_Offset start, count=1;
-    char buf[13] = "Hello World\n";
+    char filename[256], buf[13] = "Hello World\n";
     int data;
 
     MPI_Init(&argc, &argv);
@@ -59,13 +60,15 @@ int main(int argc, char **argv) {
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    if (argc != 2) {
+    if (argc > 2) {
         if (rank == 0) printf("Usage: %s filename\n", argv[0]);
         MPI_Finalize();
         exit(-1);
     }
+    if (argc > 1) snprintf(filename, 256, "%s", argv[1]);
+    else          strcpy(filename, "testfile.nc");
 
-    ret = ncmpi_create(MPI_COMM_WORLD, argv[1],
+    ret = ncmpi_create(MPI_COMM_WORLD, filename,
                        NC_CLOBBER|NC_64BIT_OFFSET, MPI_INFO_NULL, &ncfile);
     if (ret != NC_NOERR) handle_error(ret, __LINE__);
 
diff --git a/m4/aclocal_coverage.m4 b/m4/aclocal_coverage.m4
new file mode 100644
index 0000000..66f0b9d
--- /dev/null
+++ b/m4/aclocal_coverage.m4
@@ -0,0 +1,90 @@
+
+dnl Macro to add --enable-coverage option (disabled by default) and add
+dnl appropriate compiler flags to permit usage of gcov if that option is
+dnl enabled.  If WRAPPER_xFLAGS variables are set then the flags will also be
+dnl added to those variables.
+dnl
+dnl Sets "pac_cv_use_coverage=yes" and AC_DEFINEs USE_COVERAGE if coverage was
+dnl successfully enabled.  Also creates an AM_CONDITIONAL with the name
+dnl "BUILD_COVERAGE" that is true iff pac_cv_use_coverage=yes.
+dnl
+dnl Usage: PAC_CONFIG_SUBDIR_ARGS
+dnl
+dnl Assumes that all of the compiler macros have already been invoked
+dnl (AC_PROG_CC and friends).
+AC_DEFUN([PAC_ENABLE_COVERAGE],[
+
+AC_ARG_VAR([GCOV],[name/path for the gcov utility])
+AC_CHECK_PROGS([GCOV],[gcov])
+
+AC_ARG_ENABLE([coverage],
+              [AC_HELP_STRING([--enable-coverage],
+                              [Turn on coverage analysis using gcc and gcov])],
+              [],[enable_coverage=no])
+
+if test "$enable_coverage" = "yes" ; then
+    if test "$ac_cv_prog_gcc" = "yes" ; then
+        CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage"
+        LIBS="$LIBS -lgcov"
+        if test "x${WRAPPER_CFLAGS}" = "x" ; then
+            WRAPPER_CFLAGS="$WRAPPER_CFLAGS -fprofile-arcs -ftest-coverage"
+        fi
+    else
+        AC_MSG_WARN([--enable-coverage only supported for GCC])
+    fi
+    if test "$enable_cxx" = "yes" ; then
+        if test "$ac_cv_cxx_compiler_gnu" = "yes" ; then
+            CXXFLAGS="$CXXFLAGS -fprofile-arcs -ftest-coverage"
+            LIBS="$LIBS -lgcov"
+            if test "x${WRAPPER_CXXFLAGS}" = "x" ; then
+                WRAPPER_CXXFLAGS="$WRAPPER_CXXFLAGS -fprofile-arcs -ftest-coverage"
+            fi
+        else
+            AC_MSG_WARN([--enable-coverage only supported for GCC])
+        fi
+    fi
+    # Add similar options for g77 so that the Fortran tests will also
+    # 
+    if test "$enable_f77" = yes ; then
+        if test "$ac_cv_f77_compiler_gnu" = "yes" ; then
+             FFLAGS="$FFLAGS -fprofile-arcs -ftest-coverage"
+             LIBS="$LIBS -lgcov"
+             if test "x${WRAPPER_FFLAGS}" = "x" ; then
+                 WRAPPER_FFLAGS="$WRAPPER_FFLAGS -fprofile-arcs -ftest-coverage"
+             fi
+        else
+            AC_MSG_WARN([--enable-coverage only supported for G77/GFORTRAN])
+        fi
+    fi
+    if test "$enable_fc" = yes ; then
+        if test "$ac_cv_fc_compiler_gnu" = "yes" ; then
+             FCFLAGS="$FCFLAGS -fprofile-arcs -ftest-coverage"
+             LIBS="$LIBS -lgcov"
+             if test "x${WRAPPER_FCFLAGS}" = "x" ; then
+                 WRAPPER_FCFLAGS="$WRAPPER_FCFLAGS -fprofile-arcs -ftest-coverage"
+             fi
+        else
+            AC_MSG_WARN([--enable-coverage only supported for GFORTRAN])
+        fi
+    fi
+    # On some platforms (e.g., Mac Darwin), we must also *link* 
+    # with the -fprofile-args -ftest-coverage option.
+    AC_MSG_CHECKING([whether compilation with coverage analysis enabled works])
+    AC_LINK_IFELSE([AC_LANG_SOURCE([int main(int argc, char **argv){return 1;}])],
+                   [AC_MSG_RESULT([yes])],
+                   [AC_MSG_RESULT([no])
+                    AC_MSG_ERROR([Unable to link programs when coverage analysis enabled])])
+    
+    # Test for the routines that we need to use to ensure that the
+    # data files are (usually) written out
+    # FIXME: Some versions of Linux provide usleep, but it rounds times
+    # up to the next second (!)
+    AC_CHECK_FUNCS([usleep])
+
+    # NOTE: using a "pac_cv_" prefix but not caching because of xFLAGS "side effects"
+    pac_cv_use_coverage=yes
+    AC_DEFINE([USE_COVERAGE],[1],[Define if performing coverage tests])
+fi
+AM_CONDITIONAL([BUILD_COVERAGE],[test "X$pac_cv_use_coverage" = "Xyes"])
+])
+
diff --git a/scripts/foreach.m4 b/m4/foreach.m4
similarity index 100%
rename from scripts/foreach.m4
rename to m4/foreach.m4
diff --git a/m4/libtool.m4 b/m4/libtool.m4
new file mode 100644
index 0000000..b193bf6
--- /dev/null
+++ b/m4/libtool.m4
@@ -0,0 +1,8476 @@
+# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
+#
+#   Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
+#   Written by Gordon Matzigkeit, 1996
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+m4_define([_LT_COPYING], [dnl
+# Copyright (C) 2014 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program or library that is built
+# using GNU Libtool, you may include this file under the  same
+# distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+])
+
+# serial 58 LT_INIT
+
+
+# LT_PREREQ(VERSION)
+# ------------------
+# Complain and exit if this libtool version is less that VERSION.
+m4_defun([LT_PREREQ],
+[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
+       [m4_default([$3],
+		   [m4_fatal([Libtool version $1 or higher is required],
+		             63)])],
+       [$2])])
+
+
+# _LT_CHECK_BUILDDIR
+# ------------------
+# Complain if the absolute build directory name contains unusual characters
+m4_defun([_LT_CHECK_BUILDDIR],
+[case `pwd` in
+  *\ * | *\	*)
+    AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
+esac
+])
+
+
+# LT_INIT([OPTIONS])
+# ------------------
+AC_DEFUN([LT_INIT],
+[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK
+AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+AC_BEFORE([$0], [LT_LANG])dnl
+AC_BEFORE([$0], [LT_OUTPUT])dnl
+AC_BEFORE([$0], [LTDL_INIT])dnl
+m4_require([_LT_CHECK_BUILDDIR])dnl
+
+dnl Autoconf doesn't catch unexpanded LT_ macros by default:
+m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
+m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
+dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
+dnl unless we require an AC_DEFUNed macro:
+AC_REQUIRE([LTOPTIONS_VERSION])dnl
+AC_REQUIRE([LTSUGAR_VERSION])dnl
+AC_REQUIRE([LTVERSION_VERSION])dnl
+AC_REQUIRE([LTOBSOLETE_VERSION])dnl
+m4_require([_LT_PROG_LTMAIN])dnl
+
+_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}])
+
+dnl Parse OPTIONS
+_LT_SET_OPTIONS([$0], [$1])
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS=$ltmain
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+_LT_SETUP
+
+# Only expand once:
+m4_define([LT_INIT])
+])# LT_INIT
+
+# Old names:
+AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
+AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
+dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
+
+
+# _LT_PREPARE_CC_BASENAME
+# -----------------------
+m4_defun([_LT_PREPARE_CC_BASENAME], [
+# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
+func_cc_basename ()
+{
+    for cc_temp in @S|@*""; do
+      case $cc_temp in
+        compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
+        distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
+        \-*) ;;
+        mpicc | mpicxx | mpif77 | mpif90 | *[[\\/]]mpicc | *[[\\/]]mpicxx | *[[\\/]]mpif77 | *[[\\/]]mpif90 )
+           # MPICH compilers
+           #   eval "$cc_temp -show" < /dev/null >& conftest.ver
+           #   func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           #   ${RM} -f conftest.ver
+           func_cc_basename_result=`$cc_temp -show | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        mpifccpx | mpiFCCpx | mpifrtpx | *[[\\/]]mpifccpx | *[[\\/]]mpiFCCpx | *[[\\/]]mpifrtpx )
+           # Fujitsu compilers: fccpx, FCCpx, frtpx
+           func_cc_basename_result=`$cc_temp -showme | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        cc | CC | ftn | *[[\\/]]cc | *[[\\/]]CC | *[[\\/]]ftn )
+           # For Cray PrgEnv-intel, cc is a wrapper of icc
+           # For Cray PrgEnv-gnu, cc is a wrapper of gcc
+           # func_cc_basename_result=`$cc_temp --version |& head -n 1 | cut -d' ' -f1 | xargs basename`
+           eval "$cc_temp --version" < /dev/null >& conftest.ver
+           func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           ${RM} -f conftest.ver
+           if test "x${func_cc_basename_result}" = xicc ||
+              test "x${func_cc_basename_result}" = xicpc ||
+              test "x${func_cc_basename_result}" = xifort ||
+              test "x${func_cc_basename_result}" = xgcc ||
+              test "x${func_cc_basename_result}" = xg++ ||
+              test "x${func_cc_basename_result}" = xgfortran ||
+              test "x${func_cc_basename_result}" = xGNU ; then
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+              return
+           fi
+           # For Cray PrgEnv-cray, cc is a wrapper of Cray CC
+           # Cray cc -V sends the output to stderr.
+           # func_cc_basename_result=`$cc_temp -V |& head -n 1 | cut -d' ' -f1 | xargs basename`
+           eval "$cc_temp -V" < /dev/null >& conftest.ver
+           func_cc_basename_result=`head -n1 conftest.ver |cut -d' ' -f1`
+           ${RM} -f conftest.ver
+           if test "x${func_cc_basename_result}" = xCray ; then
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+              return
+           fi
+           return
+           ;;
+        mpixlc | mpixlcxx | mpixlf77 | mpixlf90 | *[[\\/]]mpixlc | *[[\\/]]mpixlcxx | *[[\\/]]mpixlf77 | *[[\\/]]mpixlf90 )
+           func_cc_basename_result=`$cc_temp -show | cut -d' ' -f1 | xargs basename`
+           # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+           return
+           ;;
+        *) break;;
+      esac
+    done
+    func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"`
+    # echo "cc_temp=$cc_temp func_cc_basename_result=$func_cc_basename_result"
+}
+])# _LT_PREPARE_CC_BASENAME
+
+
+# _LT_CC_BASENAME(CC)
+# -------------------
+# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME,
+# but that macro is also expanded into generated libtool script, which
+# arranges for $SED and $ECHO to be set by different means.
+m4_defun([_LT_CC_BASENAME],
+[m4_require([_LT_PREPARE_CC_BASENAME])dnl
+AC_REQUIRE([_LT_DECL_SED])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+func_cc_basename $1
+cc_basename=$func_cc_basename_result
+])
+
+
+# _LT_FILEUTILS_DEFAULTS
+# ----------------------
+# It is okay to use these file commands and assume they have been set
+# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'.
+m4_defun([_LT_FILEUTILS_DEFAULTS],
+[: ${CP="cp -f"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+])# _LT_FILEUTILS_DEFAULTS
+
+
+# _LT_SETUP
+# ---------
+m4_defun([_LT_SETUP],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl
+
+_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl
+dnl
+_LT_DECL([], [host_alias], [0], [The host system])dnl
+_LT_DECL([], [host], [0])dnl
+_LT_DECL([], [host_os], [0])dnl
+dnl
+_LT_DECL([], [build_alias], [0], [The build system])dnl
+_LT_DECL([], [build], [0])dnl
+_LT_DECL([], [build_os], [0])dnl
+dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+test -z "$LN_S" && LN_S="ln -s"
+_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
+dnl
+AC_REQUIRE([LT_CMD_MAX_LEN])dnl
+_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
+_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
+dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
+m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_CHECK_MAGIC_METHOD])dnl
+m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
+m4_require([_LT_CMD_OLD_ARCHIVE])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_WITH_SYSROOT])dnl
+m4_require([_LT_CMD_TRUNCATE])dnl
+
+_LT_CONFIG_LIBTOOL_INIT([
+# See if we are running on zsh, and set the options that allow our
+# commands through without removal of \ escapes INIT.
+if test -n "\${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+])
+if test -n "${ZSH_VERSION+set}"; then
+   setopt NO_GLOB_SUBST
+fi
+
+_LT_CHECK_OBJDIR
+
+m4_require([_LT_TAG_COMPILER])dnl
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test set != "${COLLECT_NAMES+set}"; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Global variables:
+ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+old_CC=$CC
+old_CFLAGS=$CFLAGS
+
+# Set sane defaults for various variables
+test -z "$CC" && CC=cc
+test -z "$LTCC" && LTCC=$CC
+test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
+test -z "$LD" && LD=ld
+test -z "$ac_objext" && ac_objext=o
+
+_LT_CC_BASENAME([$compiler])
+
+# Only perform the check for file, if the check method requires it
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    _LT_PATH_MAGIC
+  fi
+  ;;
+esac
+
+# Use C for the default configuration in the libtool script
+LT_SUPPORTED_TAG([CC])
+_LT_LANG_C_CONFIG
+_LT_LANG_DEFAULT_CONFIG
+_LT_CONFIG_COMMANDS
+])# _LT_SETUP
+
+
+# _LT_PREPARE_SED_QUOTE_VARS
+# --------------------------
+# Define a few sed substitution that help us do robust quoting.
+m4_defun([_LT_PREPARE_SED_QUOTE_VARS],
+[# Backslashify metacharacters that are still active within
+# double-quoted strings.
+sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([["`\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Sed substitution to delay expansion of an escaped single quote.
+delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
+
+# Sed substitution to avoid accidental globbing in evaled expressions
+no_glob_subst='s/\*/\\\*/g'
+])
+
+# _LT_PROG_LTMAIN
+# ---------------
+# Note that this code is called both from 'configure', and 'config.status'
+# now that we use AC_CONFIG_COMMANDS to generate libtool.  Notably,
+# 'config.status' has no value for ac_aux_dir unless we are using Automake,
+# so we pass a copy along to make sure it has a sensible value anyway.
+m4_defun([_LT_PROG_LTMAIN],
+[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
+_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
+ltmain=$ac_aux_dir/ltmain.sh
+])# _LT_PROG_LTMAIN
+
+
+## ------------------------------------- ##
+## Accumulate code for creating libtool. ##
+## ------------------------------------- ##
+
+# So that we can recreate a full libtool script including additional
+# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
+# in macros and then make a single call at the end using the 'libtool'
+# label.
+
+
+# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
+# ----------------------------------------
+# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL_INIT],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_INIT])
+
+
+# _LT_CONFIG_LIBTOOL([COMMANDS])
+# ------------------------------
+# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
+m4_define([_LT_CONFIG_LIBTOOL],
+[m4_ifval([$1],
+          [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
+                     [$1
+])])])
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
+
+
+# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
+# -----------------------------------------------------
+m4_defun([_LT_CONFIG_SAVE_COMMANDS],
+[_LT_CONFIG_LIBTOOL([$1])
+_LT_CONFIG_LIBTOOL_INIT([$2])
+])
+
+
+# _LT_FORMAT_COMMENT([COMMENT])
+# -----------------------------
+# Add leading comment marks to the start of each line, and a trailing
+# full-stop to the whole comment if one is not present already.
+m4_define([_LT_FORMAT_COMMENT],
+[m4_ifval([$1], [
+m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
+              [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
+)])
+
+
+
+## ------------------------ ##
+## FIXME: Eliminate VARNAME ##
+## ------------------------ ##
+
+
+# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
+# -------------------------------------------------------------------
+# CONFIGNAME is the name given to the value in the libtool script.
+# VARNAME is the (base) name used in the configure script.
+# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
+# VARNAME.  Any other value will be used directly.
+m4_define([_LT_DECL],
+[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
+    [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
+	[m4_ifval([$1], [$1], [$2])])
+    lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
+    m4_ifval([$4],
+	[lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
+    lt_dict_add_subkey([lt_decl_dict], [$2],
+	[tagged?], [m4_ifval([$5], [yes], [no])])])
+])
+
+
+# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
+# --------------------------------------------------------
+m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
+
+
+# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_tag_varnames],
+[_lt_decl_filter([tagged?], [yes], $@)])
+
+
+# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
+# ---------------------------------------------------------
+m4_define([_lt_decl_filter],
+[m4_case([$#],
+  [0], [m4_fatal([$0: too few arguments: $#])],
+  [1], [m4_fatal([$0: too few arguments: $#: $1])],
+  [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
+  [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
+  [lt_dict_filter([lt_decl_dict], $@)])[]dnl
+])
+
+
+# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
+# --------------------------------------------------
+m4_define([lt_decl_quote_varnames],
+[_lt_decl_filter([value], [1], $@)])
+
+
+# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_dquote_varnames],
+[_lt_decl_filter([value], [2], $@)])
+
+
+# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
+# ---------------------------------------------------
+m4_define([lt_decl_varnames_tagged],
+[m4_assert([$# <= 2])dnl
+_$0(m4_quote(m4_default([$1], [[, ]])),
+    m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
+    m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
+m4_define([_lt_decl_varnames_tagged],
+[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
+
+
+# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
+# ------------------------------------------------
+m4_define([lt_decl_all_varnames],
+[_$0(m4_quote(m4_default([$1], [[, ]])),
+     m4_if([$2], [],
+	   m4_quote(lt_decl_varnames),
+	m4_quote(m4_shift($@))))[]dnl
+])
+m4_define([_lt_decl_all_varnames],
+[lt_join($@, lt_decl_varnames_tagged([$1],
+			lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
+])
+
+
+# _LT_CONFIG_STATUS_DECLARE([VARNAME])
+# ------------------------------------
+# Quote a variable value, and forward it to 'config.status' so that its
+# declaration there will have the same value as in 'configure'.  VARNAME
+# must have a single quote delimited value for this to work.
+m4_define([_LT_CONFIG_STATUS_DECLARE],
+[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`'])
+
+
+# _LT_CONFIG_STATUS_DECLARATIONS
+# ------------------------------
+# We delimit libtool config variables with single quotes, so when
+# we write them to config.status, we have to be sure to quote all
+# embedded single quotes properly.  In configure, this macro expands
+# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
+#
+#    <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`'
+m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
+    [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAGS
+# ----------------
+# Output comment and list of tags supported by the script
+m4_defun([_LT_LIBTOOL_TAGS],
+[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
+available_tags='_LT_TAGS'dnl
+])
+
+
+# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
+# -----------------------------------
+# Extract the dictionary values for VARNAME (optionally with TAG) and
+# expand to a commented shell variable setting:
+#
+#    # Some comment about what VAR is for.
+#    visible_name=$lt_internal_name
+m4_define([_LT_LIBTOOL_DECLARE],
+[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
+					   [description])))[]dnl
+m4_pushdef([_libtool_name],
+    m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
+m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
+    [0], [_libtool_name=[$]$1],
+    [1], [_libtool_name=$lt_[]$1],
+    [2], [_libtool_name=$lt_[]$1],
+    [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
+m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
+])
+
+
+# _LT_LIBTOOL_CONFIG_VARS
+# -----------------------
+# Produce commented declarations of non-tagged libtool config variables
+# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool'
+# script.  Tagged libtool config variables (even for the LIBTOOL CONFIG
+# section) are produced by _LT_LIBTOOL_TAG_VARS.
+m4_defun([_LT_LIBTOOL_CONFIG_VARS],
+[m4_foreach([_lt_var],
+    m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
+
+
+# _LT_LIBTOOL_TAG_VARS(TAG)
+# -------------------------
+m4_define([_LT_LIBTOOL_TAG_VARS],
+[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
+    [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
+
+
+# _LT_TAGVAR(VARNAME, [TAGNAME])
+# ------------------------------
+m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
+
+
+# _LT_CONFIG_COMMANDS
+# -------------------
+# Send accumulated output to $CONFIG_STATUS.  Thanks to the lists of
+# variables for single and double quote escaping we saved from calls
+# to _LT_DECL, we can put quote escaped variables declarations
+# into 'config.status', and then the shell code to quote escape them in
+# for loops in 'config.status'.  Finally, any additional code accumulated
+# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
+m4_defun([_LT_CONFIG_COMMANDS],
+[AC_PROVIDE_IFELSE([LT_OUTPUT],
+	dnl If the libtool generation code has been placed in $CONFIG_LT,
+	dnl instead of duplicating it all over again into config.status,
+	dnl then we will have config.status run $CONFIG_LT later, so it
+	dnl needs to know what name is stored there:
+        [AC_CONFIG_COMMANDS([libtool],
+            [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
+    dnl If the libtool generation code is destined for config.status,
+    dnl expand the accumulated commands and init code now:
+    [AC_CONFIG_COMMANDS([libtool],
+        [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
+])#_LT_CONFIG_COMMANDS
+
+
+# Initialize.
+m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
+[
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+sed_quote_subst='$sed_quote_subst'
+double_quote_subst='$double_quote_subst'
+delay_variable_subst='$delay_variable_subst'
+_LT_CONFIG_STATUS_DECLARATIONS
+LTCC='$LTCC'
+LTCFLAGS='$LTCFLAGS'
+compiler='$compiler_DEFAULT'
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$[]1
+_LTECHO_EOF'
+}
+
+# Quote evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_quote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+# Double-quote double-evaled strings.
+for var in lt_decl_all_varnames([[ \
+]], lt_decl_dquote_varnames); do
+    case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in
+    *[[\\\\\\\`\\"\\\$]]*)
+      eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes
+      ;;
+    *)
+      eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
+      ;;
+    esac
+done
+
+_LT_OUTPUT_LIBTOOL_INIT
+])
+
+# _LT_GENERATED_FILE_INIT(FILE, [COMMENT])
+# ------------------------------------
+# Generate a child script FILE with all initialization necessary to
+# reuse the environment learned by the parent script, and make the
+# file executable.  If COMMENT is supplied, it is inserted after the
+# '#!' sequence but before initialization text begins.  After this
+# macro, additional text can be appended to FILE to form the body of
+# the child script.  The macro ends with non-zero status if the
+# file could not be fully written (such as if the disk is full).
+m4_ifdef([AS_INIT_GENERATED],
+[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])],
+[m4_defun([_LT_GENERATED_FILE_INIT],
+[m4_require([AS_PREPARE])]dnl
+[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl
+[lt_write_fail=0
+cat >$1 <<_ASEOF || lt_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+$2
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$1 <<\_ASEOF || lt_write_fail=1
+AS_SHELL_SANITIZE
+_AS_PREPARE
+exec AS_MESSAGE_FD>&1
+_ASEOF
+test 0 = "$lt_write_fail" && chmod +x $1[]dnl
+m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT
+
+# LT_OUTPUT
+# ---------
+# This macro allows early generation of the libtool script (before
+# AC_OUTPUT is called), incase it is used in configure for compilation
+# tests.
+AC_DEFUN([LT_OUTPUT],
+[: ${CONFIG_LT=./config.lt}
+AC_MSG_NOTICE([creating $CONFIG_LT])
+_LT_GENERATED_FILE_INIT(["$CONFIG_LT"],
+[# Run this file to recreate a libtool stub with the current configuration.])
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+lt_cl_silent=false
+exec AS_MESSAGE_LOG_FD>>config.log
+{
+  echo
+  AS_BOX([Running $as_me.])
+} >&AS_MESSAGE_LOG_FD
+
+lt_cl_help="\
+'$as_me' creates a local libtool stub from the current configuration,
+for use in further configure time tests before the real libtool is
+generated.
+
+Usage: $[0] [[OPTIONS]]
+
+  -h, --help      print this help, then exit
+  -V, --version   print version number, then exit
+  -q, --quiet     do not print progress messages
+  -d, --debug     don't remove temporary files
+
+Report bugs to <bug-libtool at gnu.org>."
+
+lt_cl_version="\
+m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
+m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
+configured by $[0], generated by m4_PACKAGE_STRING.
+
+Copyright (C) 2011 Free Software Foundation, Inc.
+This config.lt script is free software; the Free Software Foundation
+gives unlimited permision to copy, distribute and modify it."
+
+while test 0 != $[#]
+do
+  case $[1] in
+    --version | --v* | -V )
+      echo "$lt_cl_version"; exit 0 ;;
+    --help | --h* | -h )
+      echo "$lt_cl_help"; exit 0 ;;
+    --debug | --d* | -d )
+      debug=: ;;
+    --quiet | --q* | --silent | --s* | -q )
+      lt_cl_silent=: ;;
+
+    -*) AC_MSG_ERROR([unrecognized option: $[1]
+Try '$[0] --help' for more information.]) ;;
+
+    *) AC_MSG_ERROR([unrecognized argument: $[1]
+Try '$[0] --help' for more information.]) ;;
+  esac
+  shift
+done
+
+if $lt_cl_silent; then
+  exec AS_MESSAGE_FD>/dev/null
+fi
+_LTEOF
+
+cat >>"$CONFIG_LT" <<_LTEOF
+_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
+_LTEOF
+
+cat >>"$CONFIG_LT" <<\_LTEOF
+AC_MSG_NOTICE([creating $ofile])
+_LT_OUTPUT_LIBTOOL_COMMANDS
+AS_EXIT(0)
+_LTEOF
+chmod +x "$CONFIG_LT"
+
+# configure is writing to config.log, but config.lt does its own redirection,
+# appending to config.log, which fails on DOS, as config.log is still kept
+# open by configure.  Here we exec the FD to /dev/null, effectively closing
+# config.log, so it can be properly (re)opened and appended to by config.lt.
+lt_cl_success=:
+test yes = "$silent" &&
+  lt_config_lt_args="$lt_config_lt_args --quiet"
+exec AS_MESSAGE_LOG_FD>/dev/null
+$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
+exec AS_MESSAGE_LOG_FD>>config.log
+$lt_cl_success || AS_EXIT(1)
+])# LT_OUTPUT
+
+
+# _LT_CONFIG(TAG)
+# ---------------
+# If TAG is the built-in tag, create an initial libtool script with a
+# default configuration from the untagged config vars.  Otherwise add code
+# to config.status for appending the configuration named by TAG from the
+# matching tagged config vars.
+m4_defun([_LT_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_CONFIG_SAVE_COMMANDS([
+  m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
+  m4_if(_LT_TAG, [C], [
+    # See if we are running on zsh, and set the options that allow our
+    # commands through without removal of \ escapes.
+    if test -n "${ZSH_VERSION+set}"; then
+      setopt NO_GLOB_SUBST
+    fi
+
+    cfgfile=${ofile}T
+    trap "$RM -f \"$cfgfile\"; exit 1" 1 2 15
+    $RM -f "$cfgfile"
+
+    cat <<_LT_EOF >> "$cfgfile"
+#! $SHELL
+# Generated automatically by $as_me ($PACKAGE) $VERSION
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit, 1996
+
+_LT_COPYING
+_LT_LIBTOOL_TAGS
+
+# Configured defaults for sys_lib_dlsearch_path munging.
+: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"}
+
+# ### BEGIN LIBTOOL CONFIG
+_LT_LIBTOOL_CONFIG_VARS
+_LT_LIBTOOL_TAG_VARS
+# ### END LIBTOOL CONFIG
+
+_LT_EOF
+
+    cat <<'_LT_EOF' >> "$cfgfile"
+
+# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_PREPARE_MUNGE_PATH_LIST
+_LT_PREPARE_CC_BASENAME
+
+# ### END FUNCTIONS SHARED WITH CONFIGURE
+
+_LT_EOF
+
+  case $host_os in
+  aix3*)
+    cat <<\_LT_EOF >> "$cfgfile"
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test set != "${COLLECT_NAMES+set}"; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+_LT_EOF
+    ;;
+  esac
+
+  _LT_PROG_LTMAIN
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "$cfgfile" \
+     || (rm -f "$cfgfile"; exit 1)
+
+   mv -f "$cfgfile" "$ofile" ||
+    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
+  chmod +x "$ofile"
+],
+[cat <<_LT_EOF >> "$ofile"
+
+dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
+dnl in a comment (ie after a #).
+# ### BEGIN LIBTOOL TAG CONFIG: $1
+_LT_LIBTOOL_TAG_VARS(_LT_TAG)
+# ### END LIBTOOL TAG CONFIG: $1
+_LT_EOF
+])dnl /m4_if
+],
+[m4_if([$1], [], [
+    PACKAGE='$PACKAGE'
+    VERSION='$VERSION'
+    RM='$RM'
+    ofile='$ofile'], [])
+])dnl /_LT_CONFIG_SAVE_COMMANDS
+])# _LT_CONFIG
+
+
+# LT_SUPPORTED_TAG(TAG)
+# ---------------------
+# Trace this macro to discover what tags are supported by the libtool
+# --tag option, using:
+#    autoconf --trace 'LT_SUPPORTED_TAG:$1'
+AC_DEFUN([LT_SUPPORTED_TAG], [])
+
+
+# C support is built-in for now
+m4_define([_LT_LANG_C_enabled], [])
+m4_define([_LT_TAGS], [])
+
+
+# LT_LANG(LANG)
+# -------------
+# Enable libtool support for the given language if not already enabled.
+AC_DEFUN([LT_LANG],
+[AC_BEFORE([$0], [LT_OUTPUT])dnl
+m4_case([$1],
+  [C],			[_LT_LANG(C)],
+  [C++],		[_LT_LANG(CXX)],
+  [Go],			[_LT_LANG(GO)],
+  [Java],		[_LT_LANG(GCJ)],
+  [Fortran 77],		[_LT_LANG(F77)],
+  [Fortran],		[_LT_LANG(FC)],
+  [Windows Resource],	[_LT_LANG(RC)],
+  [m4_ifdef([_LT_LANG_]$1[_CONFIG],
+    [_LT_LANG($1)],
+    [m4_fatal([$0: unsupported language: "$1"])])])dnl
+])# LT_LANG
+
+
+# _LT_LANG(LANGNAME)
+# ------------------
+m4_defun([_LT_LANG],
+[m4_ifdef([_LT_LANG_]$1[_enabled], [],
+  [LT_SUPPORTED_TAG([$1])dnl
+  m4_append([_LT_TAGS], [$1 ])dnl
+  m4_define([_LT_LANG_]$1[_enabled], [])dnl
+  _LT_LANG_$1_CONFIG($1)])dnl
+])# _LT_LANG
+
+
+m4_ifndef([AC_PROG_GO], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_GO.  When it is available in    #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+m4_defun([AC_PROG_GO],
+[AC_LANG_PUSH(Go)dnl
+AC_ARG_VAR([GOC],     [Go compiler command])dnl
+AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl
+_AC_ARG_VAR_LDFLAGS()dnl
+AC_CHECK_TOOL(GOC, gccgo)
+if test -z "$GOC"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo])
+  fi
+fi
+if test -z "$GOC"; then
+  AC_CHECK_PROG(GOC, gccgo, gccgo, false)
+fi
+])#m4_defun
+])#m4_ifndef
+
+
+# _LT_LANG_DEFAULT_CONFIG
+# -----------------------
+m4_defun([_LT_LANG_DEFAULT_CONFIG],
+[AC_PROVIDE_IFELSE([AC_PROG_CXX],
+  [LT_LANG(CXX)],
+  [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_F77],
+  [LT_LANG(F77)],
+  [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
+
+AC_PROVIDE_IFELSE([AC_PROG_FC],
+  [LT_LANG(FC)],
+  [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
+
+dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
+dnl pulling things in needlessly.
+AC_PROVIDE_IFELSE([AC_PROG_GCJ],
+  [LT_LANG(GCJ)],
+  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
+    [LT_LANG(GCJ)],
+    [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
+      [LT_LANG(GCJ)],
+      [m4_ifdef([AC_PROG_GCJ],
+	[m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([A][M_PROG_GCJ],
+	[m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
+       m4_ifdef([LT_PROG_GCJ],
+	[m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
+
+AC_PROVIDE_IFELSE([AC_PROG_GO],
+  [LT_LANG(GO)],
+  [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])])
+
+AC_PROVIDE_IFELSE([LT_PROG_RC],
+  [LT_LANG(RC)],
+  [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
+])# _LT_LANG_DEFAULT_CONFIG
+
+# Obsolete macros:
+AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
+AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
+AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
+AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
+AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
+dnl AC_DEFUN([AC_LIBTOOL_F77], [])
+dnl AC_DEFUN([AC_LIBTOOL_FC], [])
+dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
+dnl AC_DEFUN([AC_LIBTOOL_RC], [])
+
+
+# _LT_TAG_COMPILER
+# ----------------
+m4_defun([_LT_TAG_COMPILER],
+[AC_REQUIRE([AC_PROG_CC])dnl
+
+_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
+_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
+_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
+_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
+
+# If no C compiler was specified, use CC.
+LTCC=${LTCC-"$CC"}
+
+# If no C compiler flags were specified, use CFLAGS.
+LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
+
+# Allow CC to be a program name with arguments.
+compiler=$CC
+])# _LT_TAG_COMPILER
+
+
+# _LT_COMPILER_BOILERPLATE
+# ------------------------
+# Check for compiler boilerplate output or warnings with
+# the simple compiler test code.
+m4_defun([_LT_COMPILER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_compile_test_code" >conftest.$ac_ext
+eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_compiler_boilerplate=`cat conftest.err`
+$RM -f conftest*
+])# _LT_COMPILER_BOILERPLATE
+
+
+# _LT_LINKER_BOILERPLATE
+# ----------------------
+# Check for linker boilerplate output or warnings with
+# the simple link test code.
+m4_defun([_LT_LINKER_BOILERPLATE],
+[m4_require([_LT_DECL_SED])dnl
+ac_outfile=conftest.$ac_objext
+echo "$lt_simple_link_test_code" >conftest.$ac_ext
+eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
+_lt_linker_boilerplate=`cat conftest.err`
+$RM -r conftest*
+])# _LT_LINKER_BOILERPLATE
+
+# _LT_REQUIRED_DARWIN_CHECKS
+# -------------------------
+m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
+  case $host_os in
+    rhapsody* | darwin*)
+    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
+    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
+    AC_CHECK_TOOL([LIPO], [lipo], [:])
+    AC_CHECK_TOOL([OTOOL], [otool], [:])
+    AC_CHECK_TOOL([OTOOL64], [otool64], [:])
+    _LT_DECL([], [DSYMUTIL], [1],
+      [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
+    _LT_DECL([], [NMEDIT], [1],
+      [Tool to change global to local symbols on Mac OS X])
+    _LT_DECL([], [LIPO], [1],
+      [Tool to manipulate fat objects and archives on Mac OS X])
+    _LT_DECL([], [OTOOL], [1],
+      [ldd/readelf like tool for Mach-O binaries on Mac OS X])
+    _LT_DECL([], [OTOOL64], [1],
+      [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
+
+    AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
+      [lt_cv_apple_cc_single_mod=no
+      if test -z "$LT_MULTI_MODULE"; then
+	# By default we will add the -single_module flag. You can override
+	# by either setting the environment variable LT_MULTI_MODULE
+	# non-empty at configure time, or by adding -multi_module to the
+	# link flags.
+	rm -rf libconftest.dylib*
+	echo "int foo(void){return 1;}" > conftest.c
+	echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
+	$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
+	  -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
+        _lt_result=$?
+	# If there is a non-empty error log, and "single_module"
+	# appears in it, assume the flag caused a linker warning
+        if test -s conftest.err && $GREP single_module conftest.err; then
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	# Otherwise, if the output was created with a 0 exit code from
+	# the compiler, it worked.
+	elif test -f libconftest.dylib && test 0 = "$_lt_result"; then
+	  lt_cv_apple_cc_single_mod=yes
+	else
+	  cat conftest.err >&AS_MESSAGE_LOG_FD
+	fi
+	rm -rf libconftest.dylib*
+	rm -f conftest.*
+      fi])
+
+    AC_CACHE_CHECK([for -exported_symbols_list linker flag],
+      [lt_cv_ld_exported_symbols_list],
+      [lt_cv_ld_exported_symbols_list=no
+      save_LDFLAGS=$LDFLAGS
+      echo "_main" > conftest.sym
+      LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
+      AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+	[lt_cv_ld_exported_symbols_list=yes],
+	[lt_cv_ld_exported_symbols_list=no])
+	LDFLAGS=$save_LDFLAGS
+    ])
+
+    AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load],
+      [lt_cv_ld_force_load=no
+      cat > conftest.c << _LT_EOF
+int forced_loaded() { return 2;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
+      $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
+      cat > conftest.c << _LT_EOF
+int main() { return 0;}
+_LT_EOF
+      echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD
+      $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err
+      _lt_result=$?
+      if test -s conftest.err && $GREP force_load conftest.err; then
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then
+	lt_cv_ld_force_load=yes
+      else
+	cat conftest.err >&AS_MESSAGE_LOG_FD
+      fi
+        rm -f conftest.err libconftest.a conftest conftest.c
+        rm -rf conftest.dSYM
+    ])
+    case $host_os in
+    rhapsody* | darwin1.[[012]])
+      _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
+    darwin1.*)
+      _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+	10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+	10.[[012]][[,.]]*)
+	  _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+	10.*)
+	  _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+      esac
+    ;;
+  esac
+    if test yes = "$lt_cv_apple_cc_single_mod"; then
+      _lt_dar_single_mod='$single_module'
+    fi
+    if test yes = "$lt_cv_ld_exported_symbols_list"; then
+      _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym'
+    else
+      _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib'
+    fi
+    if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then
+      _lt_dsymutil='~$DSYMUTIL $lib || :'
+    else
+      _lt_dsymutil=
+    fi
+    ;;
+  esac
+])
+
+
+# _LT_DARWIN_LINKER_FEATURES([TAG])
+# ---------------------------------
+# Checks for linker and compiler features on darwin
+m4_defun([_LT_DARWIN_LINKER_FEATURES],
+[
+  m4_require([_LT_REQUIRED_DARWIN_CHECKS])
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_automatic, $1)=yes
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  if test yes = "$lt_cv_ld_force_load"; then
+    _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`'
+    m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes],
+                  [FC],  [_LT_TAGVAR(compiler_needs_object, $1)=yes])
+  else
+    _LT_TAGVAR(whole_archive_flag_spec, $1)=''
+  fi
+  _LT_TAGVAR(link_all_deplibs, $1)=yes
+  _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined
+  case $cc_basename in
+     ifort*|nagfor*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        _lt_dar_can_shared=yes
+      ;;
+     *) _lt_dar_can_shared=$GCC ;;
+  esac
+  if test yes = "$_lt_dar_can_shared"; then
+    output_verbose_link_cmd=func_echo_all
+    _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
+    _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+    m4_if([$1], [CXX],
+[   if test yes != "$lt_cv_apple_cc_single_mod"; then
+      _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs $nostdlib_flag -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs $nostdlib_flag -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+    fi
+],[])
+  else
+  _LT_TAGVAR(ld_shlibs, $1)=no
+  fi
+])
+
+# _LT_SYS_MODULE_PATH_AIX([TAGNAME])
+# ----------------------------------
+# Links a minimal program and checks the executable
+# for the system default hardcoded library path. In most cases,
+# this is /usr/lib:/lib, but when the MPI compilers are used
+# the location of the communication and MPI libs are included too.
+# If we don't find anything, use the default library path according
+# to the aix ld manual.
+# Store the results from the different compilers for each TAGNAME.
+# Allow to override them for all tags through lt_cv_aix_libpath.
+m4_defun([_LT_SYS_MODULE_PATH_AIX],
+[m4_require([_LT_DECL_SED])dnl
+if test set = "${lt_cv_aix_libpath+set}"; then
+  aix_libpath=$lt_cv_aix_libpath
+else
+  AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])],
+  [AC_LINK_IFELSE([AC_LANG_PROGRAM],[
+  lt_aix_libpath_sed='[
+      /Import File Strings/,/^$/ {
+	  /^0/ {
+	      s/^0  *\([^ ]*\) *$/\1/
+	      p
+	  }
+      }]'
+  _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  # Check for a 64-bit object if we didn't find anything.
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
+  fi],[])
+  if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then
+    _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib
+  fi
+  ])
+  aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])
+fi
+])# _LT_SYS_MODULE_PATH_AIX
+
+
+# _LT_SHELL_INIT(ARG)
+# -------------------
+m4_define([_LT_SHELL_INIT],
+[m4_divert_text([M4SH-INIT], [$1
+])])# _LT_SHELL_INIT
+
+
+
+# _LT_PROG_ECHO_BACKSLASH
+# -----------------------
+# Find how we can fake an echo command that does not interpret backslash.
+# In particular, with Autoconf 2.60 or later we add some code to the start
+# of the generated configure script that will find a shell with a builtin
+# printf (that we can use as an echo command).
+m4_defun([_LT_PROG_ECHO_BACKSLASH],
+[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+
+AC_MSG_CHECKING([how to print strings])
+# Test print first, because it will be a builtin if present.
+if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
+   test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='print -r --'
+elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then
+  ECHO='printf %s\n'
+else
+  # Use this function as a fallback that always works.
+  func_fallback_echo ()
+  {
+    eval 'cat <<_LTECHO_EOF
+$[]1
+_LTECHO_EOF'
+  }
+  ECHO='func_fallback_echo'
+fi
+
+# func_echo_all arg...
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+case $ECHO in
+  printf*) AC_MSG_RESULT([printf]) ;;
+  print*) AC_MSG_RESULT([print -r]) ;;
+  *) AC_MSG_RESULT([cat]) ;;
+esac
+
+m4_ifdef([_AS_DETECT_SUGGESTED],
+[_AS_DETECT_SUGGESTED([
+  test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || (
+    ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
+    ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
+    PATH=/empty FPATH=/empty; export PATH FPATH
+    test "X`printf %s $ECHO`" = "X$ECHO" \
+      || test "X`print -r -- $ECHO`" = "X$ECHO" )])])
+
+_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
+_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
+])# _LT_PROG_ECHO_BACKSLASH
+
+
+# _LT_WITH_SYSROOT
+# ----------------
+AC_DEFUN([_LT_WITH_SYSROOT],
+[AC_MSG_CHECKING([for sysroot])
+AC_ARG_WITH([sysroot],
+[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
+  [Search for dependent libraries within DIR (or the compiler's sysroot
+   if not specified).])],
+[], [with_sysroot=no])
+
+dnl lt_sysroot will always be passed unquoted.  We quote it here
+dnl in case the user passed a directory name.
+lt_sysroot=
+case $with_sysroot in #(
+ yes)
+   if test yes = "$GCC"; then
+     lt_sysroot=`$CC --print-sysroot 2>/dev/null`
+   fi
+   ;; #(
+ /*)
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+   ;; #(
+ no|'')
+   ;; #(
+ *)
+   AC_MSG_RESULT([$with_sysroot])
+   AC_MSG_ERROR([The sysroot must be an absolute path.])
+   ;;
+esac
+
+ AC_MSG_RESULT([${lt_sysroot:-no}])
+_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl
+[dependent libraries, and where our libraries should be installed.])])
+
+# _LT_ENABLE_LOCK
+# ---------------
+m4_defun([_LT_ENABLE_LOCK],
+[AC_ARG_ENABLE([libtool-lock],
+  [AS_HELP_STRING([--disable-libtool-lock],
+    [avoid locking (might break parallel builds)])])
+test no = "$enable_libtool_lock" || enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+ia64-*-hpux*)
+  # Find out what ABI is being produced by ac_compile, and set mode
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+      *ELF-32*)
+	HPUX_IA64_MODE=32
+	;;
+      *ELF-64*)
+	HPUX_IA64_MODE=64
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+*-*-irix6*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    if test yes = "$lt_cv_prog_gnu_ld"; then
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -melf32bsmip"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -melf32bmipn32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -melf64bmip"
+	;;
+      esac
+    else
+      case `/usr/bin/file conftest.$ac_objext` in
+	*32-bit*)
+	  LD="${LD-ld} -32"
+	  ;;
+	*N32*)
+	  LD="${LD-ld} -n32"
+	  ;;
+	*64-bit*)
+	  LD="${LD-ld} -64"
+	  ;;
+      esac
+    fi
+  fi
+  rm -rf conftest*
+  ;;
+
+mips64*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    emul=elf
+    case `/usr/bin/file conftest.$ac_objext` in
+      *32-bit*)
+	emul="${emul}32"
+	;;
+      *64-bit*)
+	emul="${emul}64"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *MSB*)
+	emul="${emul}btsmip"
+	;;
+      *LSB*)
+	emul="${emul}ltsmip"
+	;;
+    esac
+    case `/usr/bin/file conftest.$ac_objext` in
+      *N32*)
+	emul="${emul}n32"
+	;;
+    esac
+    LD="${LD-ld} -m $emul"
+  fi
+  rm -rf conftest*
+  ;;
+
+x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.  Note that the listed cases only cover the
+  # situations where additional linker options are needed (such as when
+  # doing 32-bit compilation for a host where ld defaults to 64-bit, or
+  # vice versa); the common cases where no linker options are needed do
+  # not appear in the list.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+      *32-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_i386_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    case `/usr/bin/file conftest.o` in
+	      *x86-64*)
+		LD="${LD-ld} -m elf32_x86_64"
+		;;
+	      *)
+		LD="${LD-ld} -m elf_i386"
+		;;
+	    esac
+	    ;;
+	  powerpc64le-*linux*)
+	    LD="${LD-ld} -m elf32lppclinux"
+	    ;;
+	  powerpc64-*linux*)
+	    LD="${LD-ld} -m elf32ppclinux"
+	    ;;
+	  s390x-*linux*)
+	    LD="${LD-ld} -m elf_s390"
+	    ;;
+	  sparc64-*linux*)
+	    LD="${LD-ld} -m elf32_sparc"
+	    ;;
+	esac
+	;;
+      *64-bit*)
+	case $host in
+	  x86_64-*kfreebsd*-gnu)
+	    LD="${LD-ld} -m elf_x86_64_fbsd"
+	    ;;
+	  x86_64-*linux*)
+	    LD="${LD-ld} -m elf_x86_64"
+	    ;;
+	  powerpcle-*linux*)
+	    LD="${LD-ld} -m elf64lppc"
+	    ;;
+	  powerpc-*linux*)
+	    LD="${LD-ld} -m elf64ppc"
+	    ;;
+	  s390*-*linux*|s390*-*tpf*)
+	    LD="${LD-ld} -m elf64_s390"
+	    ;;
+	  sparc*-*linux*)
+	    LD="${LD-ld} -m elf64_sparc"
+	    ;;
+	esac
+	;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS=$CFLAGS
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_PUSH(C)
+     AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_POP])
+  if test yes != "$lt_cv_cc_needs_belf"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS=$SAVE_CFLAGS
+  fi
+  ;;
+*-*solaris*)
+  # Find out what ABI is being produced by ac_compile, and set linker
+  # options accordingly.
+  echo 'int i;' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.o` in
+    *64-bit*)
+      case $lt_cv_prog_gnu_ld in
+      yes*)
+        case $host in
+        i?86-*-solaris*|x86_64-*-solaris*)
+          LD="${LD-ld} -m elf_x86_64"
+          ;;
+        sparc*-*-solaris*)
+          LD="${LD-ld} -m elf64_sparc"
+          ;;
+        esac
+        # GNU ld 2.21 introduced _sol2 emulations.  Use them if available.
+        if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then
+          LD=${LD-ld}_sol2
+        fi
+        ;;
+      *)
+	if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
+	  LD="${LD-ld} -64"
+	fi
+	;;
+      esac
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+esac
+
+need_locks=$enable_libtool_lock
+])# _LT_ENABLE_LOCK
+
+
+# _LT_PROG_AR
+# -----------
+m4_defun([_LT_PROG_AR],
+[AC_CHECK_TOOLS(AR, [ar], false)
+: ${AR=ar}
+: ${AR_FLAGS=cru}
+_LT_DECL([], [AR], [1], [The archiver])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
+  [lt_cv_ar_at_file=no
+   AC_COMPILE_IFELSE([AC_LANG_PROGRAM],
+     [echo conftest.$ac_objext > conftest.lst
+      lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD'
+      AC_TRY_EVAL([lt_ar_try])
+      if test 0 -eq "$ac_status"; then
+	# Ensure the archiver fails upon bogus file names.
+	rm -f conftest.$ac_objext libconftest.a
+	AC_TRY_EVAL([lt_ar_try])
+	if test 0 -ne "$ac_status"; then
+          lt_cv_ar_at_file=@
+        fi
+      fi
+      rm -f conftest.* libconftest.a
+     ])
+  ])
+
+if test no = "$lt_cv_ar_at_file"; then
+  archiver_list_spec=
+else
+  archiver_list_spec=$lt_cv_ar_at_file
+fi
+_LT_DECL([], [archiver_list_spec], [1],
+  [How to feed a file listing to the archiver])
+])# _LT_PROG_AR
+
+
+# _LT_CMD_OLD_ARCHIVE
+# -------------------
+m4_defun([_LT_CMD_OLD_ARCHIVE],
+[_LT_PROG_AR
+
+AC_CHECK_TOOL(STRIP, strip, :)
+test -z "$STRIP" && STRIP=:
+_LT_DECL([], [STRIP], [1], [A symbol stripping program])
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+test -z "$RANLIB" && RANLIB=:
+_LT_DECL([], [RANLIB], [1],
+    [Commands used to install an old-style archive])
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  bitrig* | openbsd*)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib"
+    ;;
+  *)
+    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib"
+fi
+
+case $host_os in
+  darwin*)
+    lock_old_archive_extraction=yes ;;
+  *)
+    lock_old_archive_extraction=no ;;
+esac
+_LT_DECL([], [old_postinstall_cmds], [2])
+_LT_DECL([], [old_postuninstall_cmds], [2])
+_LT_TAGDECL([], [old_archive_cmds], [2],
+    [Commands used to build an old-style archive])
+_LT_DECL([], [lock_old_archive_extraction], [0],
+    [Whether to use a lock for old archive extraction])
+])# _LT_CMD_OLD_ARCHIVE
+
+
+# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------------------
+# Check whether the given compiler option works
+AC_DEFUN([_LT_COMPILER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+   lt_compiler_flag="$3"  ## exclude from sc_useless_quotes_in_assignment
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   # The option is referenced via a variable to avoid confusing sed.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>conftest.err)
+   ac_status=$?
+   cat conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s "$ac_outfile"; then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings other than the usual output.
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp
+     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
+       $2=yes
+     fi
+   fi
+   $RM conftest*
+])
+
+if test yes = "[$]$2"; then
+    m4_if([$5], , :, [$5])
+else
+    m4_if([$6], , :, [$6])
+fi
+])# _LT_COMPILER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
+
+
+# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
+#                  [ACTION-SUCCESS], [ACTION-FAILURE])
+# ----------------------------------------------------
+# Check whether the given linker option works
+AC_DEFUN([_LT_LINKER_OPTION],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_SED])dnl
+AC_CACHE_CHECK([$1], [$2],
+  [$2=no
+   save_LDFLAGS=$LDFLAGS
+   LDFLAGS="$LDFLAGS $3"
+   echo "$lt_simple_link_test_code" > conftest.$ac_ext
+   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
+     # The linker can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     if test -s conftest.err; then
+       # Append any errors to the config.log.
+       cat conftest.err 1>&AS_MESSAGE_LOG_FD
+       $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp
+       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
+       if diff conftest.exp conftest.er2 >/dev/null; then
+         $2=yes
+       fi
+     else
+       $2=yes
+     fi
+   fi
+   $RM -r conftest*
+   LDFLAGS=$save_LDFLAGS
+])
+
+if test yes = "[$]$2"; then
+    m4_if([$4], , :, [$4])
+else
+    m4_if([$5], , :, [$5])
+fi
+])# _LT_LINKER_OPTION
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
+
+
+# LT_CMD_MAX_LEN
+#---------------
+AC_DEFUN([LT_CMD_MAX_LEN],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# find the maximum length of command line arguments
+AC_MSG_CHECKING([the maximum length of command line arguments])
+AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
+  i=0
+  teststring=ABCD
+
+  case $build_os in
+  msdosdjgpp*)
+    # On DJGPP, this test can blow up pretty badly due to problems in libc
+    # (any single argument exceeding 2000 bytes causes a buffer overrun
+    # during glob expansion).  Even if it were fixed, the result of this
+    # check would be larger than it should be.
+    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
+    ;;
+
+  gnu*)
+    # Under GNU Hurd, this test is not required because there is
+    # no limit to the length of command line arguments.
+    # Libtool will interpret -1 as no limit whatsoever
+    lt_cv_sys_max_cmd_len=-1;
+    ;;
+
+  cygwin* | mingw* | cegcc*)
+    # On Win9x/ME, this test blows up -- it succeeds, but takes
+    # about 5 minutes as the teststring grows exponentially.
+    # Worse, since 9x/ME are not pre-emptively multitasking,
+    # you end up with a "frozen" computer, even though with patience
+    # the test eventually succeeds (with a max line length of 256k).
+    # Instead, let's just punt: use the minimum linelength reported by
+    # all of the supported platforms: 8192 (on NT/2K/XP).
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  mint*)
+    # On MiNT this can take a long time and run out of memory.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  amigaos*)
+    # On AmigaOS with pdksh, this test takes hours, literally.
+    # So we just punt and use a minimum line length of 8192.
+    lt_cv_sys_max_cmd_len=8192;
+    ;;
+
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+    # This has been around since 386BSD, at least.  Likely further.
+    if test -x /sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
+    elif test -x /usr/sbin/sysctl; then
+      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
+    else
+      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
+    fi
+    # And add a safety zone
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    ;;
+
+  interix*)
+    # We know the value 262144 and hardcode it with a safety zone (like BSD)
+    lt_cv_sys_max_cmd_len=196608
+    ;;
+
+  os2*)
+    # The test takes a long time on OS/2.
+    lt_cv_sys_max_cmd_len=8192
+    ;;
+
+  osf*)
+    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
+    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
+    # nice to cause kernel panics so lets avoid the loop below.
+    # First set a reasonable default.
+    lt_cv_sys_max_cmd_len=16384
+    #
+    if test -x /sbin/sysconfig; then
+      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
+        *1*) lt_cv_sys_max_cmd_len=-1 ;;
+      esac
+    fi
+    ;;
+  sco3.2v5*)
+    lt_cv_sys_max_cmd_len=102400
+    ;;
+  sysv5* | sco5v6* | sysv4.2uw2*)
+    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
+    if test -n "$kargmax"; then
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[	 ]]//'`
+    else
+      lt_cv_sys_max_cmd_len=32768
+    fi
+    ;;
+  *)
+    lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
+    if test -n "$lt_cv_sys_max_cmd_len" && \
+       test undefined != "$lt_cv_sys_max_cmd_len"; then
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
+    else
+      # Make teststring a little bigger before we do anything with it.
+      # a 1K string should be a reasonable start.
+      for i in 1 2 3 4 5 6 7 8; do
+        teststring=$teststring$teststring
+      done
+      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
+      # If test is not a shell built-in, we'll probably end up computing a
+      # maximum length that is only half of the actual maximum length, but
+      # we can't tell.
+      while { test X`env echo "$teststring$teststring" 2>/dev/null` \
+	         = "X$teststring$teststring"; } >/dev/null 2>&1 &&
+	      test 17 != "$i" # 1/2 MB should be enough
+      do
+        i=`expr $i + 1`
+        teststring=$teststring$teststring
+      done
+      # Only check the string length outside the loop.
+      lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
+      teststring=
+      # Add a significant safety factor because C++ compilers can tack on
+      # massive amounts of additional arguments before passing them to the
+      # linker.  It appears as though 1/2 is a usable value.
+      lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
+    fi
+    ;;
+  esac
+])
+if test -n "$lt_cv_sys_max_cmd_len"; then
+  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
+else
+  AC_MSG_RESULT(none)
+fi
+max_cmd_len=$lt_cv_sys_max_cmd_len
+_LT_DECL([], [max_cmd_len], [0],
+    [What is the maximum length of a command?])
+])# LT_CMD_MAX_LEN
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
+
+
+# _LT_HEADER_DLFCN
+# ----------------
+m4_defun([_LT_HEADER_DLFCN],
+[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
+])# _LT_HEADER_DLFCN
+
+
+# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                      ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ----------------------------------------------------------------
+m4_defun([_LT_TRY_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes = "$cross_compiling"; then :
+  [$4]
+else
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<_LT_EOF
+[#line $LINENO "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+/* When -fvisibility=hidden is used, assume the code has been annotated
+   correspondingly for the symbols needed.  */
+#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3))
+int fnord () __attribute__((visibility("default")));
+#endif
+
+int fnord () { return 42; }
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else
+        {
+	  if (dlsym( self,"_fnord"))  status = $lt_dlneed_uscore;
+          else puts (dlerror ());
+	}
+      /* dlclose (self); */
+    }
+  else
+    puts (dlerror ());
+
+  return status;
+}]
+_LT_EOF
+  if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then
+    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_dlunknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_TRY_DLOPEN_SELF
+
+
+# LT_SYS_DLOPEN_SELF
+# ------------------
+AC_DEFUN([LT_SYS_DLOPEN_SELF],
+[m4_require([_LT_HEADER_DLFCN])dnl
+if test yes != "$enable_dlopen"; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen=load_add_on
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  mingw* | pw32* | cegcc*)
+    lt_cv_dlopen=LoadLibrary
+    lt_cv_dlopen_libs=
+    ;;
+
+  cygwin*)
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    ;;
+
+  darwin*)
+    # if libdl is installed we need to link against it
+    AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[
+    lt_cv_dlopen=dyld
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ])
+    ;;
+
+  tpf*)
+    # Don't try to run any link tests for TPF.  We know it's impossible
+    # because TPF is a cross-compiler, and we know how we open DSOs.
+    lt_cv_dlopen=dlopen
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=no
+    ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+	  [lt_cv_dlopen=shl_load],
+      [AC_CHECK_LIB([dld], [shl_load],
+	    [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen=dlopen],
+	  [AC_CHECK_LIB([dl], [dlopen],
+		[lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],
+	    [AC_CHECK_LIB([svld], [dlopen],
+		  [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld],
+	      [AC_CHECK_LIB([dld], [dld_link],
+		    [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test no = "$lt_cv_dlopen"; then
+    enable_dlopen=no
+  else
+    enable_dlopen=yes
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS=$CPPFLAGS
+    test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS=$LDFLAGS
+    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS=$LIBS
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test yes = "$lt_cv_dlopen_self"; then
+      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+	  lt_cv_dlopen_self_static, [dnl
+	  _LT_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS=$save_CPPFLAGS
+    LDFLAGS=$save_LDFLAGS
+    LIBS=$save_LIBS
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+_LT_DECL([dlopen_support], [enable_dlopen], [0],
+	 [Whether dlopen is supported])
+_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
+	 [Whether dlopen of programs is supported])
+_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
+	 [Whether dlopen of statically linked programs is supported])
+])# LT_SYS_DLOPEN_SELF
+
+# Old name:
+AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
+
+
+# _LT_COMPILER_C_O([TAGNAME])
+# ---------------------------
+# Check to see if options -c and -o are simultaneously supported by compiler.
+# This macro does not hard code the compiler like AC_PROG_CC_C_O.
+m4_defun([_LT_COMPILER_C_O],
+[m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
+   $RM -r conftest 2>/dev/null
+   mkdir conftest
+   cd conftest
+   mkdir out
+   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+   lt_compiler_flag="-o out/conftest2.$ac_objext"
+   # Insert the option either (1) after the last *FLAGS variable, or
+   # (2) before a word containing "conftest.", or (3) at the end.
+   # Note that $ac_compile itself does not contain backslashes and begins
+   # with a dollar sign (not a hyphen), so the echo should work correctly.
+   lt_compile=`echo "$ac_compile" | $SED \
+   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
+   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
+   -e 's:$: $lt_compiler_flag:'`
+   (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
+   (eval "$lt_compile" 2>out/conftest.err)
+   ac_status=$?
+   cat out/conftest.err >&AS_MESSAGE_LOG_FD
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   if (exit $ac_status) && test -s out/conftest2.$ac_objext
+   then
+     # The compiler can only warn and ignore the option if not recognized
+     # So say no if there are warnings
+     $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp
+     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
+     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
+       _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+     fi
+   fi
+   chmod u+w . 2>&AS_MESSAGE_LOG_FD
+   $RM conftest*
+   # SGI C++ compiler will create directory out/ii_files/ for
+   # template instantiation
+   test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
+   $RM out/* && rmdir out
+   cd ..
+   $RM -r conftest
+   $RM -f conftest*
+])
+_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
+	[Does compiler simultaneously support -c and -o options?])
+])# _LT_COMPILER_C_O
+
+
+# _LT_COMPILER_FILE_LOCKS([TAGNAME])
+# ----------------------------------
+# Check to see if we can do hard links to lock some files if needed
+m4_defun([_LT_COMPILER_FILE_LOCKS],
+[m4_require([_LT_ENABLE_LOCK])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+_LT_COMPILER_C_O([$1])
+
+hard_links=nottested
+if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $RM conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test no = "$hard_links"; then
+    AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
+])# _LT_COMPILER_FILE_LOCKS
+
+
+# _LT_CHECK_OBJDIR
+# ----------------
+m4_defun([_LT_CHECK_OBJDIR],
+[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
+[rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  lt_cv_objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  lt_cv_objdir=_libs
+fi
+rmdir .libs 2>/dev/null])
+objdir=$lt_cv_objdir
+_LT_DECL([], [objdir], [0],
+         [The name of the directory that contains temporary libtool files])dnl
+m4_pattern_allow([LT_OBJDIR])dnl
+AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/",
+  [Define to the sub-directory where libtool stores uninstalled libraries.])
+])# _LT_CHECK_OBJDIR
+
+
+# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
+# --------------------------------------
+# Check hardcoding attributes.
+m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
+[AC_MSG_CHECKING([how to hardcode library paths into programs])
+_LT_TAGVAR(hardcode_action, $1)=
+if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
+   test -n "$_LT_TAGVAR(runpath_var, $1)" ||
+   test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then
+
+  # We can hardcode non-existent directories.
+  if test no != "$_LT_TAGVAR(hardcode_direct, $1)" &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" &&
+     test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then
+    # Linking always hardcodes the temporary library directory.
+    _LT_TAGVAR(hardcode_action, $1)=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    _LT_TAGVAR(hardcode_action, $1)=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  _LT_TAGVAR(hardcode_action, $1)=unsupported
+fi
+AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
+
+if test relink = "$_LT_TAGVAR(hardcode_action, $1)" ||
+   test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test yes = "$shlibpath_overrides_runpath" ||
+     test no = "$enable_shared"; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+_LT_TAGDECL([], [hardcode_action], [0],
+    [How to hardcode a shared library path into an executable])
+])# _LT_LINKER_HARDCODE_LIBPATH
+
+
+# _LT_CMD_STRIPLIB
+# ----------------
+m4_defun([_LT_CMD_STRIPLIB],
+[m4_require([_LT_DECL_EGREP])
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
+      striplib="$STRIP -x"
+      old_striplib="$STRIP -S"
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
+fi
+_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
+_LT_DECL([], [striplib], [1])
+])# _LT_CMD_STRIPLIB
+
+
+# _LT_PREPARE_MUNGE_PATH_LIST
+# ---------------------------
+# Make sure func_munge_path_list() is defined correctly.
+m4_defun([_LT_PREPARE_MUNGE_PATH_LIST],
+[[# func_munge_path_list VARIABLE PATH
+# -----------------------------------
+# VARIABLE is name of variable containing _space_ separated list of
+# directories to be munged by the contents of PATH, which is string
+# having a format:
+# "DIR[:DIR]:"
+#       string "DIR[ DIR]" will be prepended to VARIABLE
+# ":DIR[:DIR]"
+#       string "DIR[ DIR]" will be appended to VARIABLE
+# "DIRP[:DIRP]::[DIRA:]DIRA"
+#       string "DIRP[ DIRP]" will be prepended to VARIABLE and string
+#       "DIRA[ DIRA]" will be appended to VARIABLE
+# "DIR[:DIR]"
+#       VARIABLE will be replaced by "DIR[ DIR]"
+func_munge_path_list ()
+{
+    case x at S|@2 in
+    x)
+        ;;
+    *:)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\"
+        ;;
+    x:*)
+        eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    *::*)
+        eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\"
+        eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\"
+        ;;
+    *)
+        eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\"
+        ;;
+    esac
+}
+]])# _LT_PREPARE_PATH_LIST
+
+
+# _LT_SYS_DYNAMIC_LINKER([TAG])
+# -----------------------------
+# PORTME Fill in your ld.so characteristics
+m4_defun([_LT_SYS_DYNAMIC_LINKER],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_OBJDUMP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CHECK_SHELL_FEATURES])dnl
+m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl
+AC_MSG_CHECKING([dynamic linker characteristics])
+m4_if([$1],
+	[], [
+if test yes = "$GCC"; then
+  case $host_os in
+    darwin*) lt_awk_arg='/^libraries:/,/LR/' ;;
+    *) lt_awk_arg='/^libraries:/' ;;
+  esac
+  case $host_os in
+    mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;;
+    *) lt_sed_strip_eq='s|=/|/|g' ;;
+  esac
+  case $cc_basename in
+    fccpx* | FCCpx* ) lt_search_path_spec=`$CC --showme:libdirs` ;;
+    *) lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` ;;
+  esac
+  case $lt_search_path_spec in
+  *\;*)
+    # if the path contains ";" then we assume it to be the separator
+    # otherwise default to the standard path separator (i.e. ":") - it is
+    # assumed that no part of a normal pathname contains ";" but that should
+    # okay in the real world where ";" in dirpaths is itself problematic.
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'`
+    ;;
+  *)
+    lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"`
+    ;;
+  esac
+  # Ok, now we have the path, separated by spaces, we can step through it
+  # and add multilib dir if necessary...
+  lt_tmp_lt_search_path_spec=
+  lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
+  # ...but if some path component already ends with the multilib dir we assume
+  # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer).
+  case "$lt_multi_os_dir; $lt_search_path_spec " in
+  "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*)
+    lt_multi_os_dir=
+    ;;
+  esac
+  for lt_sys_path in $lt_search_path_spec; do
+    if test -d "$lt_sys_path$lt_multi_os_dir"; then
+      lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir"
+    elif test -n "$lt_multi_os_dir"; then
+      test -d "$lt_sys_path" && \
+	lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
+    fi
+  done
+  lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk '
+BEGIN {RS = " "; FS = "/|\n";} {
+  lt_foo = "";
+  lt_count = 0;
+  for (lt_i = NF; lt_i > 0; lt_i--) {
+    if ($lt_i != "" && $lt_i != ".") {
+      if ($lt_i == "..") {
+        lt_count++;
+      } else {
+        if (lt_count == 0) {
+          lt_foo = "/" $lt_i lt_foo;
+        } else {
+          lt_count--;
+        }
+      }
+    }
+  }
+  if (lt_foo != "") { lt_freq[[lt_foo]]++; }
+  if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
+}'`
+  # AWK program above erroneously prepends '/' to C:/dos/paths
+  # for these hosts.
+  case $host_os in
+    mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\
+      $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;;
+  esac
+  sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP`
+else
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+fi])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+shrext_cmds=.so
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+need_lib_prefix=unknown
+hardcode_into_libs=no
+
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+need_version=unknown
+
+AC_ARG_VAR([LT_SYS_LIBRARY_PATH],
+[User-defined run-time library search path.])
+
+case $host_os in
+aix3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX 3 has no versioning support, so we append a major version to the name.
+  soname_spec='$libname$release$shared_ext$major'
+  ;;
+
+aix[[4-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  hardcode_into_libs=yes
+  if test ia64 = "$host_cpu"; then
+    # AIX 5 supports IA64
+    library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line '#! .'.  This would cause the generated library to
+    # depend on '.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	   echo ' yes '
+	   echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then
+	:
+      else
+	can_build_shared=no
+      fi
+      ;;
+    esac
+    # Using Import Files as archive members, it is possible to support
+    # filename-based versioning of shared library archives on AIX. While
+    # this would work for both with and without runtime linking, it will
+    # prevent static linking of such archives. So we do filename-based
+    # shared library versioning with .so extension only, which is used
+    # when both runtime linking and shared linking is enabled.
+    # Unfortunately, runtime linking may impact performance, so we do
+    # not want this to be the default eventually. Also, we use the
+    # versioned .so libs for executables only if there is the -brtl
+    # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only.
+    # To allow for filename-based versioning support, we need to create
+    # libNAME.so.V as an archive file, containing:
+    # *) an Import File, referring to the versioned filename of the
+    #    archive as well as the shared archive member, telling the
+    #    bitwidth (32 or 64) of that shared object, and providing the
+    #    list of exported symbols of that shared object, eventually
+    #    decorated with the 'weak' keyword
+    # *) the shared object with the F_LOADONLY flag set, to really avoid
+    #    it being seen by the linker.
+    # At run time we better use the real file rather than another symlink,
+    # but for link time we create the symlink libNAME.so -> libNAME.so.V
+
+    case $with_aix_soname,$aix_use_runtimelinking in
+    # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct
+    # soname into executable. Probably we can add versioning support to
+    # collect2, so additional links can be useful in future.
+    aix,yes) # traditional libtool
+      dynamic_linker='AIX unversionable lib.so'
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      ;;
+    aix,no) # traditional AIX only
+      dynamic_linker='AIX lib.a[(]lib.so.V[)]'
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      ;;
+    svr4,*) # full svr4 only
+      dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,yes) # both, prefer svr4
+      dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]"
+      library_names_spec='$libname$release$shared_ext$major $libname$shared_ext'
+      # unpreferred sharedlib libNAME.a needs extra handling
+      postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"'
+      postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"'
+      # We do not specify a path in Import Files, so LIBPATH fires.
+      shlibpath_overrides_runpath=yes
+      ;;
+    *,no) # both, prefer aix
+      dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]"
+      library_names_spec='$libname$release.a $libname.a'
+      soname_spec='$libname$release$shared_ext$major'
+      # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling
+      postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)'
+      postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"'
+      ;;
+    esac
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  case $host_cpu in
+  powerpc)
+    # Since July 2007 AmigaOS4 officially supports .so libraries.
+    # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    ;;
+  m68k)
+    library_names_spec='$libname.ixlibrary $libname.a'
+    # Create ${libname}_ixlibrary.a entries in /sys/libs.
+    finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
+    ;;
+  esac
+  ;;
+
+beos*)
+  library_names_spec='$libname$shared_ext'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi[[45]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32* | cegcc*)
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+
+  case $GCC,$cc_basename in
+  yes,*)
+    # gcc
+    library_names_spec='$libname.dll.a'
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname~
+      chmod a+x \$dldir/$dlname~
+      if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+        eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+      fi'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+
+    case $host_os in
+    cygwin*)
+      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+m4_if([$1], [],[
+      sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
+      ;;
+    mingw* | cegcc*)
+      # MinGW DLLs use traditional 'lib' prefix
+      soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+      ;;
+    pw32*)
+      # pw32 DLLs use 'pw' prefix rather than 'lib'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+      ;;
+    esac
+    dynamic_linker='Win32 ld.exe'
+    ;;
+
+  *,cl*)
+    # Native MSVC
+    libname_spec='$name'
+    soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+    library_names_spec='$libname.dll.lib'
+
+    case $build_os in
+    mingw*)
+      sys_lib_search_path_spec=
+      lt_save_ifs=$IFS
+      IFS=';'
+      for lt_path in $LIB
+      do
+        IFS=$lt_save_ifs
+        # Let DOS variable expansion print the short 8.3 style file name.
+        lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"`
+        sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path"
+      done
+      IFS=$lt_save_ifs
+      # Convert to MSYS style.
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      ;;
+    cygwin*)
+      # Convert to unix form, then to dos form, then back to unix form
+      # but this time dos style (no spaces!) so that the unix form looks
+      # like /cygdrive/c/PROGRA~1:/cygdr...
+      sys_lib_search_path_spec=`cygpath --path --unix "$LIB"`
+      sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null`
+      sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      ;;
+    *)
+      sys_lib_search_path_spec=$LIB
+      if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
+        # It is most probably a Windows format PATH.
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
+      else
+        sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
+      fi
+      # FIXME: find the short name or the path components, as spaces are
+      # common. (e.g. "Program Files" -> "PROGRA~1")
+      ;;
+    esac
+
+    # DLL is installed to $(libdir)/../bin by postinstall_cmds
+    postinstall_cmds='base_file=`basename \$file`~
+      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog $dir/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $RM \$dlpath'
+    shlibpath_overrides_runpath=yes
+    dynamic_linker='Win32 link.exe'
+    ;;
+
+  *)
+    # Assume MSVC wrapper
+    library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
+    dynamic_linker='Win32 ld.exe'
+    ;;
+  esac
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$major$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$major$shared_ext'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
+m4_if([$1], [],[
+  sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
+  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
+  ;;
+
+dgux*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+freebsd* | dragonfly*)
+  # DragonFly does not have aout.  When/if they implement a new
+  # versioning mechanism, adjust this.
+  if test -x /usr/bin/objformat; then
+    objformat=`/usr/bin/objformat`
+  else
+    case $host_os in
+    freebsd[[23]].*) objformat=aout ;;
+    *) objformat=elf ;;
+    esac
+  fi
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+      soname_spec='$libname$release$shared_ext$major'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2.*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
+  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  *) # from 4.6 on, and DragonFly
+    shlibpath_overrides_runpath=yes
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+haiku*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  dynamic_linker="$host_os runtime_loader"
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib'
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  case $host_cpu in
+  ia64*)
+    shrext_cmds='.so'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.so"
+    shlibpath_var=LD_LIBRARY_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    if test 32 = "$HPUX_IA64_MODE"; then
+      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux32
+    else
+      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
+      sys_lib_dlsearch_path_spec=/usr/lib/hpux64
+    fi
+    ;;
+  hppa*64*)
+    shrext_cmds='.sl'
+    hardcode_into_libs=yes
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
+    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
+    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+    ;;
+  *)
+    shrext_cmds='.sl'
+    dynamic_linker="$host_os dld.sl"
+    shlibpath_var=SHLIB_PATH
+    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    ;;
+  esac
+  # HP-UX runs *really* slowly unless shared libraries are mode 555, ...
+  postinstall_cmds='chmod 555 $lib'
+  # or fails outright, so override atomically:
+  install_override_mode=555
+  ;;
+
+interix[[3-9]]*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $host_os in
+    nonstopux*) version_type=nonstopux ;;
+    *)
+	if test yes = "$lt_cv_prog_gnu_ld"; then
+		version_type=linux # correct to gnu/linux during the next big refactor
+	else
+		version_type=irix
+	fi ;;
+  esac
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext'
+  case $host_os in
+  irix5* | nonstopux*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
+      libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
+      libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
+      libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff"
+  sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff"
+  hardcode_into_libs=yes
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux*oldld* | linux*aout* | linux*coff*)
+  dynamic_linker=no
+  ;;
+
+linux*android*)
+  version_type=none # Android doesn't support versioned libraries.
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext'
+  soname_spec='$libname$release$shared_ext'
+  finish_cmds=
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  dynamic_linker='Android linker'
+  # Don't embed -rpath directories since the linker doesn't support them.
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+
+  # Some binutils ld are patched to set DT_RUNPATH
+  AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath],
+    [lt_cv_shlibpath_overrides_runpath=no
+    save_LDFLAGS=$LDFLAGS
+    save_libdir=$libdir
+    eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
+	 LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
+    AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+      [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
+	 [lt_cv_shlibpath_overrides_runpath=yes])])
+    LDFLAGS=$save_LDFLAGS
+    libdir=$save_libdir
+    ])
+  shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath
+
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # Ideally, we could use ldconfig to report *all* directores which are
+  # searched for libraries, however this is still not possible.  Aside from not
+  # being certain /sbin/ldconfig is available, command
+  # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64,
+  # even though it is searched at run-time.  Try to do the best guess by
+  # appending ld.so.conf contents (and includes) to the search path.
+  if test -f /etc/ld.so.conf; then
+    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[	 ]*hwcap[	 ]/d;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '`
+    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
+  fi
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+    soname_spec='$libname$release$shared_ext$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+*nto* | *qnx*)
+  version_type=qnx
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  dynamic_linker='ldqnx.so'
+  ;;
+
+openbsd* | bitrig*)
+  version_type=sunos
+  sys_lib_dlsearch_path_spec=/usr/lib
+  need_lib_prefix=no
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    need_version=no
+  else
+    need_version=yes
+  fi
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+os2*)
+  libname_spec='$name'
+  version_type=windows
+  shrext_cmds=.dll
+  need_version=no
+  need_lib_prefix=no
+  # OS/2 can only load a DLL with a base name of 8 characters or less.
+  soname_spec='`test -n "$os2dllname" && libname="$os2dllname";
+    v=$($ECHO $release$versuffix | tr -d .-);
+    n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _);
+    $ECHO $n$v`$shared_ext'
+  library_names_spec='${libname}_dll.$libext'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=BEGINLIBPATH
+  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  postinstall_cmds='base_file=`basename \$file`~
+    dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~
+    dldir=$destdir/`dirname \$dlpath`~
+    test -d \$dldir || mkdir -p \$dldir~
+    $install_prog $dir/$dlname \$dldir/$dlname~
+    chmod a+x \$dldir/$dlname~
+    if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
+      eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
+    fi'
+  postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~
+    dlpath=$dir/\$dldll~
+    $RM \$dlpath'
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='$libname$release$shared_ext$major'
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
+  ;;
+
+rdos*)
+  dynamic_linker=no
+  ;;
+
+solaris*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test yes = "$with_gnu_ld"; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.3*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      need_lib_prefix=no
+      runpath_var=LD_RUN_PATH
+      ;;
+    siemens)
+      need_lib_prefix=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec; then
+    version_type=linux # correct to gnu/linux during the next big refactor
+    library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext'
+    soname_spec='$libname$shared_ext.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  version_type=sco
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  if test yes = "$with_gnu_ld"; then
+    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
+  else
+    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
+    case $host_os in
+      sco3.2v5*)
+        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
+	;;
+    esac
+  fi
+  sys_lib_dlsearch_path_spec='/usr/lib'
+  ;;
+
+tpf*)
+  # TPF is a cross-target only.  Preferred cross-host = GNU/Linux.
+  version_type=linux # correct to gnu/linux during the next big refactor
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  hardcode_into_libs=yes
+  ;;
+
+uts4*)
+  version_type=linux # correct to gnu/linux during the next big refactor
+  library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext'
+  soname_spec='$libname$release$shared_ext$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test no = "$dynamic_linker" && can_build_shared=no
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test yes = "$GCC"; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then
+  sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec
+fi
+
+if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then
+  sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec
+fi
+
+# remember unaugmented sys_lib_dlsearch_path content for libtool script decls...
+configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec
+
+# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code
+func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH"
+
+# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool
+configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH
+
+_LT_DECL([], [variables_saved_for_relink], [1],
+    [Variables whose values should be saved in libtool wrapper scripts and
+    restored at link time])
+_LT_DECL([], [need_lib_prefix], [0],
+    [Do we need the "lib" prefix for modules?])
+_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
+_LT_DECL([], [version_type], [0], [Library versioning type])
+_LT_DECL([], [runpath_var], [0],  [Shared library runtime path variable])
+_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
+_LT_DECL([], [shlibpath_overrides_runpath], [0],
+    [Is shlibpath searched before the hard-coded library search path?])
+_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
+_LT_DECL([], [library_names_spec], [1],
+    [[List of archive names.  First name is the real one, the rest are links.
+    The last name is the one that the linker finds with -lNAME]])
+_LT_DECL([], [soname_spec], [1],
+    [[The coded name of the library, if different from the real name]])
+_LT_DECL([], [install_override_mode], [1],
+    [Permission mode override for installation of shared libraries])
+_LT_DECL([], [postinstall_cmds], [2],
+    [Command to use after installation of a shared archive])
+_LT_DECL([], [postuninstall_cmds], [2],
+    [Command to use after uninstallation of a shared archive])
+_LT_DECL([], [finish_cmds], [2],
+    [Commands used to finish a libtool library installation in a directory])
+_LT_DECL([], [finish_eval], [1],
+    [[As "finish_cmds", except a single script fragment to be evaled but
+    not shown]])
+_LT_DECL([], [hardcode_into_libs], [0],
+    [Whether we should hardcode library paths into libraries])
+_LT_DECL([], [sys_lib_search_path_spec], [2],
+    [Compile-time system search path for libraries])
+_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2],
+    [Detected run-time system search path for libraries])
+_LT_DECL([], [configure_time_lt_sys_library_path], [2],
+    [Explicit LT_SYS_LIBRARY_PATH set during ./configure time])
+])# _LT_SYS_DYNAMIC_LINKER
+
+
+# _LT_PATH_TOOL_PREFIX(TOOL)
+# --------------------------
+# find a file program that can recognize shared library
+AC_DEFUN([_LT_PATH_TOOL_PREFIX],
+[m4_require([_LT_DECL_EGREP])dnl
+AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+[[\\/*] |  ?:[\\/]*])
+  lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
+  ;;
+*)
+  lt_save_MAGIC_CMD=$MAGIC_CMD
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="m4_if([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$1"; then
+      lt_cv_path_MAGIC_CMD=$ac_dir/"$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
+	  MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    $EGREP "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<_LT_EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+_LT_EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS=$lt_save_ifs
+  MAGIC_CMD=$lt_save_MAGIC_CMD
+  ;;
+esac])
+MAGIC_CMD=$lt_cv_path_MAGIC_CMD
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+_LT_DECL([], [MAGIC_CMD], [0],
+	 [Used to examine libraries when file_magic_cmd begins with "file"])dnl
+])# _LT_PATH_TOOL_PREFIX
+
+# Old name:
+AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
+
+
+# _LT_PATH_MAGIC
+# --------------
+# find a file program that can recognize a shared library
+m4_defun([_LT_PATH_MAGIC],
+[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])# _LT_PATH_MAGIC
+
+
+# LT_PATH_LD
+# ----------
+# find the pathname to the GNU or non-GNU linker
+AC_DEFUN([LT_PATH_LD],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PROG_ECHO_BACKSLASH])dnl
+
+AC_ARG_WITH([gnu-ld],
+    [AS_HELP_STRING([--with-gnu-ld],
+	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
+    [test no = "$withval" || with_gnu_ld=yes],
+    [with_gnu_ld=no])dnl
+
+_LT_CC_BASENAME($CC)
+
+ac_prog=ld
+
+# special care for Fujitsu compilers
+if test "$cc_basename" = fccpx || test "$cc_basename" = FCCpx ; then
+   if test yes = "$with_gnu_ld" || test "$host_os" = linux-gnu ; then
+      ac_prog=`($CC -Xg -print-prog-name=ld) 2>&5`
+      test -z "$LD" && LD=$ac_prog
+      with_gnu_ld=yes
+   fi
+fi
+
+if test "$ac_prog" = ld && test yes = "$GCC" ; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by $CC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return, which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | ?:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the pathname of ld
+      ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
+      while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD=$ac_prog
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test yes = "$with_gnu_ld"; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    IFS=$lt_save_ifs
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD=$ac_dir/$ac_prog
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some variants of GNU ld only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
+      *GNU* | *'with BFD'*)
+	test no != "$with_gnu_ld" && break
+	;;
+      *)
+	test yes != "$with_gnu_ld" && break
+	;;
+      esac
+    fi
+  done
+  IFS=$lt_save_ifs
+else
+  lt_cv_path_LD=$LD # Let the user override the test with a path.
+fi])
+LD=$lt_cv_path_LD
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+_LT_PATH_LD_GNU
+AC_SUBST([LD])
+
+_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
+])# LT_PATH_LD
+
+# Old names:
+AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
+AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_LD], [])
+dnl AC_DEFUN([AC_PROG_LD], [])
+
+
+# _LT_PATH_LD_GNU
+#- --------------
+m4_defun([_LT_PATH_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU lds only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  lt_cv_prog_gnu_ld=yes
+  ;;
+*)
+  lt_cv_prog_gnu_ld=no
+  ;;
+esac])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])# _LT_PATH_LD_GNU
+
+
+# _LT_CMD_RELOAD
+# --------------
+# find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+m4_defun([_LT_CMD_RELOAD],
+[AC_CACHE_CHECK([for $LD option to reload object files],
+  lt_cv_ld_reload_flag,
+  [lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+case $reload_flag in
+"" | " "*) ;;
+*) reload_flag=" $reload_flag" ;;
+esac
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    if test yes != "$GCC"; then
+      reload_cmds=false
+    fi
+    ;;
+  darwin*)
+    if test yes = "$GCC"; then
+      reload_cmds='$LTCC $LTCFLAGS $nostdlib_flag -nostdlib $wl-r -o $output$reload_objs'
+    else
+      reload_cmds='$LD$reload_flag -o $output$reload_objs'
+    fi
+    ;;
+esac
+_LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl
+_LT_TAGDECL([], [reload_cmds], [2])dnl
+])# _LT_CMD_RELOAD
+
+
+# _LT_PATH_DD
+# -----------
+# find a working dd
+m4_defun([_LT_PATH_DD],
+[AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+: ${lt_DD:=$DD}
+AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd],
+[if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=:
+fi])
+rm -f conftest.i conftest2.i conftest.out])
+])# _LT_PATH_DD
+
+
+# _LT_CMD_TRUNCATE
+# ----------------
+# find command to truncate a binary pipe
+m4_defun([_LT_CMD_TRUNCATE],
+[m4_require([_LT_PATH_DD])
+AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin],
+[printf 0123456789abcdef0123456789abcdef >conftest.i
+cat conftest.i conftest.i >conftest2.i
+lt_cv_truncate_bin=
+if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
+  cmp -s conftest.i conftest.out \
+  && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1"
+fi
+rm -f conftest.i conftest2.i conftest.out
+test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"])
+_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1],
+  [Command to truncate a binary pipe])
+])# _LT_CMD_TRUNCATE
+
+
+# _LT_CHECK_MAGIC_METHOD
+# ----------------------
+# how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_MAGIC_METHOD],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+AC_CACHE_CHECK([how to recognize dependent libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# 'unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# that responds to the $file_magic_cmd with a given extended regex.
+# If you have 'file' or equivalent on your system and you're not sure
+# whether 'pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix[[4-9]]*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi[[45]]*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin*)
+  # func_win32_libid is a shell function defined in ltmain.sh
+  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+  lt_cv_file_magic_cmd='func_win32_libid'
+  ;;
+
+mingw* | pw32*)
+  # Base MSYS/MinGW do not provide the 'file' command needed by
+  # func_win32_libid shell function, so use a weaker test based on 'objdump',
+  # unless we find 'file', for example because we are cross-compiling.
+  if ( file / ) >/dev/null 2>&1; then
+    lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
+    lt_cv_file_magic_cmd='func_win32_libid'
+  else
+    # Keep this pattern in sync with the one in func_win32_libid.
+    lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)'
+    lt_cv_file_magic_cmd='$OBJDUMP -f'
+  fi
+  ;;
+
+cegcc*)
+  # use the weaker test based on 'objdump'. See mingw*.
+  lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+freebsd* | dragonfly*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+haiku*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20* | hpux11*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  case $host_cpu in
+  ia64*)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
+    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
+    ;;
+  hppa*64*)
+    [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]']
+    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
+    ;;
+  *)
+    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library'
+    lt_cv_file_magic_test_file=/usr/lib/libc.sl
+    ;;
+  esac
+  ;;
+
+interix[[3-9]]*)
+  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
+  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
+  ;;
+
+irix5* | irix6* | nonstopux*)
+  case $LD in
+  *-32|*"-32 ") libmagic=32-bit;;
+  *-n32|*"-n32 ") libmagic=N32;;
+  *-64|*"-64 ") libmagic=64-bit;;
+  *) libmagic=never-match;;
+  esac
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be glibc/ELF.
+linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+*nto* | *qnx*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+openbsd* | bitrig*)
+  if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+rdos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.3*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  siemens)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  pc)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  esac
+  ;;
+
+tpf*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+os2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+esac
+])
+
+file_magic_glob=
+want_nocaseglob=no
+if test "$build" = "$host"; then
+  case $host_os in
+  mingw* | pw32*)
+    if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then
+      want_nocaseglob=yes
+    else
+      file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"`
+    fi
+    ;;
+  esac
+fi
+
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+_LT_DECL([], [deplibs_check_method], [1],
+    [Method to check whether dependent libraries are shared objects])
+_LT_DECL([], [file_magic_cmd], [1],
+    [Command to use when deplibs_check_method = "file_magic"])
+_LT_DECL([], [file_magic_glob], [1],
+    [How to find potential files when deplibs_check_method = "file_magic"])
+_LT_DECL([], [want_nocaseglob], [1],
+    [Find potential files using nocaseglob when deplibs_check_method = "file_magic"])
+])# _LT_CHECK_MAGIC_METHOD
+
+
+# LT_PATH_NM
+# ----------
+# find the pathname to a BSD- or MS-compatible name lister
+AC_DEFUN([LT_PATH_NM],
+[AC_REQUIRE([AC_PROG_CC])dnl
+AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM=$NM
+else
+  lt_nm_to_check=${ac_tool_prefix}nm
+  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
+    lt_nm_to_check="$lt_nm_to_check nm"
+  fi
+  for lt_tmp_nm in $lt_nm_to_check; do
+    lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
+      IFS=$lt_save_ifs
+      test -z "$ac_dir" && ac_dir=.
+      tmp_nm=$ac_dir/$lt_tmp_nm
+      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then
+	# Check to see if the nm accepts a BSD-compat flag.
+	# Adding the 'sed 1q' prevents false positives on HP-UX, which says:
+	#   nm: unknown option "B" ignored
+	# Tru64's nm complains that /dev/null is an invalid object file
+	# MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty
+	case $build_os in
+	mingw*) lt_bad_file=conftest.nm/nofile ;;
+	*) lt_bad_file=/dev/null ;;
+	esac
+	case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+	*$lt_bad_file* | *'Invalid file or object type'*)
+	  lt_cv_path_NM="$tmp_nm -B"
+	  break 2
+	  ;;
+	*)
+	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+	  */dev/null*)
+	    lt_cv_path_NM="$tmp_nm -p"
+	    break 2
+	    ;;
+	  *)
+	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	    continue # so that we can try to find one that supports BSD flags
+	    ;;
+	  esac
+	  ;;
+	esac
+      fi
+    done
+    IFS=$lt_save_ifs
+  done
+  : ${lt_cv_path_NM=no}
+fi])
+if test no != "$lt_cv_path_NM"; then
+  NM=$lt_cv_path_NM
+else
+  # Didn't find any BSD compatible name lister, look for dumpbin.
+  if test -n "$DUMPBIN"; then :
+    # Let the user override the test.
+  else
+    AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+    *COFF*)
+      DUMPBIN="$DUMPBIN -symbols -headers"
+      ;;
+    *)
+      DUMPBIN=:
+      ;;
+    esac
+  fi
+  AC_SUBST([DUMPBIN])
+  if test : != "$DUMPBIN"; then
+    NM=$DUMPBIN
+  fi
+fi
+test -z "$NM" && NM=nm
+AC_SUBST([NM])
+_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
+
+AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
+  [lt_cv_nm_interface="BSD nm"
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$ac_compile" 2>conftest.err)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
+  (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD)
+  cat conftest.out >&AS_MESSAGE_LOG_FD
+  if $GREP 'External.*some_variable' conftest.out > /dev/null; then
+    lt_cv_nm_interface="MS dumpbin"
+  fi
+  rm -f conftest*])
+])# LT_PATH_NM
+
+# Old names:
+AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
+AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_PROG_NM], [])
+dnl AC_DEFUN([AC_PROG_NM], [])
+
+# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+# --------------------------------
+# how to determine the name of the shared library
+# associated with a specific link library.
+#  -- PORTME fill in with the dynamic library characteristics
+m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB],
+[m4_require([_LT_DECL_EGREP])
+m4_require([_LT_DECL_OBJDUMP])
+m4_require([_LT_DECL_DLLTOOL])
+AC_CACHE_CHECK([how to associate runtime and link libraries],
+lt_cv_sharedlib_from_linklib_cmd,
+[lt_cv_sharedlib_from_linklib_cmd='unknown'
+
+case $host_os in
+cygwin* | mingw* | pw32* | cegcc*)
+  # two different shell functions defined in ltmain.sh;
+  # decide which one to use based on capabilities of $DLLTOOL
+  case `$DLLTOOL --help 2>&1` in
+  *--identify-strict*)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib
+    ;;
+  *)
+    lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback
+    ;;
+  esac
+  ;;
+*)
+  # fallback: assume linklib IS sharedlib
+  lt_cv_sharedlib_from_linklib_cmd=$ECHO
+  ;;
+esac
+])
+sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
+test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
+
+_LT_DECL([], [sharedlib_from_linklib_cmd], [1],
+    [Command to associate shared and link libraries])
+])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB
+
+
+# _LT_PATH_MANIFEST_TOOL
+# ----------------------
+# locate the manifest tool
+m4_defun([_LT_PATH_MANIFEST_TOOL],
+[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :)
+test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
+AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool],
+  [lt_cv_path_mainfest_tool=no
+  echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD
+  $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
+  cat conftest.err >&AS_MESSAGE_LOG_FD
+  if $GREP 'Manifest Tool' conftest.out > /dev/null; then
+    lt_cv_path_mainfest_tool=yes
+  fi
+  rm -f conftest*])
+if test yes != "$lt_cv_path_mainfest_tool"; then
+  MANIFEST_TOOL=:
+fi
+_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl
+])# _LT_PATH_MANIFEST_TOOL
+
+
+# _LT_DLL_DEF_P([FILE])
+# ---------------------
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with func_dll_def_p in the libtool script
+AC_DEFUN([_LT_DLL_DEF_P],
+[dnl
+  test DEF = "`$SED -n dnl
+    -e '\''s/^[[	 ]]*//'\'' dnl Strip leading whitespace
+    -e '\''/^\(;.*\)*$/d'\'' dnl      Delete empty lines and comments
+    -e '\''s/^\(EXPORTS\|LIBRARY\)\([[	 ]].*\)*$/DEF/p'\'' dnl
+    -e q dnl                          Only consider the first "real" line
+    $1`" dnl
+])# _LT_DLL_DEF_P
+
+
+# LT_LIB_M
+# --------
+# check for math library
+AC_DEFUN([LT_LIB_M],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*)
+  # These system don't have libm, or don't need it
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw)
+  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, cos, LIBM=-lm)
+  ;;
+esac
+AC_SUBST([LIBM])
+])# LT_LIB_M
+
+# Old name:
+AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_CHECK_LIBM], [])
+
+
+# _LT_COMPILER_NO_RTTI([TAGNAME])
+# -------------------------------
+m4_defun([_LT_COMPILER_NO_RTTI],
+[m4_require([_LT_TAG_COMPILER])dnl
+
+_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+
+if test yes = "$GCC"; then
+  case $cc_basename in
+  nvcc*)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;;
+  esac
+
+  _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
+    lt_cv_prog_compiler_rtti_exceptions,
+    [-fno-rtti -fno-exceptions], [],
+    [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
+fi
+_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
+	[Compiler flag to turn off builtin functions])
+])# _LT_COMPILER_NO_RTTI
+
+
+# _LT_CMD_GLOBAL_SYMBOLS
+# ----------------------
+m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+AC_REQUIRE([LT_PATH_LD])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output from $compiler object])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
+[
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32* | cegcc*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*)
+  if test ia64 = "$host_cpu"; then
+    symcode='[[ABCDEGRST]]'
+  fi
+  ;;
+irix* | nonstopux*)
+  symcode='[[BCDEGRST]]'
+  ;;
+osf*)
+  symcode='[[BCDEGQRST]]'
+  ;;
+solaris*)
+  symcode='[[BDRT]]'
+  ;;
+sco3.2v5*)
+  symcode='[[DT]]'
+  ;;
+sysv4.2uw2*)
+  symcode='[[DT]]'
+  ;;
+sysv5* | sco5v6* | unixware* | OpenUNIX*)
+  symcode='[[ABDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+case `$NM -V 2>&1` in
+*GNU* | *'with BFD'*)
+  symcode='[[ABCDGIRSTW]]' ;;
+esac
+
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  # Gets list of data symbols to import.
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+  # Adjust the below global symbol transforms to fixup imported variables.
+  lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
+  lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
+  lt_c_name_lib_hook="\
+  -e 's/^I .* \(lib.*\)$/  {\"\1\", (void *) 0},/p'\
+  -e 's/^I .* \(.*\)$/  {\"lib\1\", (void *) 0},/p'"
+else
+  # Disable hooks by default.
+  lt_cv_sys_global_symbol_to_import=
+  lt_cdecl_hook=
+  lt_c_name_hook=
+  lt_c_name_lib_hook=
+fi
+
+# Transform an extracted symbol line into a proper C declaration.
+# Some systems (esp. on ia64) link data and code symbols differently,
+# so use this general approach.
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+$lt_cdecl_hook\
+" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+$lt_c_name_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
+
+# Transform an extracted symbol line into symbol name with lib prefix and
+# symbol address.
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+$lt_c_name_lib_hook\
+" -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
+" -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
+" -e 's/^$symcode$symcode* .* \(.*\)$/  {\"lib\1\", (void *) \&\1},/p'"
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $build_os in
+mingw*)
+  opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# Try without a prefix underscore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
+  symxfrm="\\1 $ac_symprfx\\2 \\2"
+
+  # Write the raw and C identifiers.
+  if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+    # Fake it for dumpbin and say T for any non-static function,
+    # D for any global variable and I for any imported variable.
+    # Also find C++ and __fastcall symbols from MSVC++,
+    # which start with @ or ?.
+    lt_cv_sys_global_symbol_pipe="$AWK ['"\
+"     {last_section=section; section=\$ 3};"\
+"     /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\
+"     /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
+"     /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\
+"     /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\
+"     /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\
+"     \$ 0!~/External *\|/{next};"\
+"     / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
+"     {if(hide[section]) next};"\
+"     {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\
+"     {split(\$ 0,a,/\||\r/); split(a[2],s)};"\
+"     s[1]~/^[@?]/{print f,s[1],s[1]; next};"\
+"     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
+"     ' prfx=^$ac_symprfx]"
+  else
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[	 ]]\($symcode$symcode*\)[[	 ]][[	 ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+  fi
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+
+  rm -f conftest*
+  cat > conftest.$ac_ext <<_LT_EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(void);
+void nm_test_func(void){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+_LT_EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
+	if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<_LT_EOF > conftest.$ac_ext
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT@&t at _DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT@&t at _DLSYM_CONST
+#else
+# define LT@&t at _DLSYM_CONST const
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+_LT_EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
+
+	  cat <<_LT_EOF >> conftest.$ac_ext
+
+/* The mapping between symbol names and symbols.  */
+LT@&t at _DLSYM_CONST struct {
+  const char *name;
+  void       *address;
+}
+lt__PROGRAM__LTX_preloaded_symbols[[]] =
+{
+  { "@PROGRAM@", (void *) 0 },
+_LT_EOF
+	  $SED "s/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
+	  cat <<\_LT_EOF >> conftest.$ac_ext
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt__PROGRAM__LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+_LT_EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  lt_globsym_save_LIBS=$LIBS
+	  lt_globsym_save_CFLAGS=$CFLAGS
+	  LIBS=conftstm.$ac_objext
+	  CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then
+	    pipe_works=yes
+	  fi
+	  LIBS=$lt_globsym_save_LIBS
+	  CFLAGS=$lt_globsym_save_CFLAGS
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
+    fi
+  else
+    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
+    cat conftest.$ac_ext >&5
+  fi
+  rm -rf conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test yes = "$pipe_works"; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  lt_cv_sys_global_symbol_to_cdecl=
+fi
+if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+
+# Response file support.
+if test "$lt_cv_nm_interface" = "MS dumpbin"; then
+  nm_file_list_spec='@'
+elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then
+  nm_file_list_spec='@'
+fi
+
+_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
+    [Take the output of nm and produce a listing of raw symbols and C names])
+_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
+    [Transform the output of nm in a proper C declaration])
+_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1],
+    [Transform the output of nm into a list of symbols to manually relocate])
+_LT_DECL([global_symbol_to_c_name_address],
+    [lt_cv_sys_global_symbol_to_c_name_address], [1],
+    [Transform the output of nm in a C name address pair])
+_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
+    [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
+    [Transform the output of nm in a C name address pair when lib prefix is needed])
+_LT_DECL([nm_interface], [lt_cv_nm_interface], [1],
+    [The name lister interface])
+_LT_DECL([], [nm_file_list_spec], [1],
+    [Specify filename containing input files for $NM])
+]) # _LT_CMD_GLOBAL_SYMBOLS
+
+
+# _LT_COMPILER_PIC([TAGNAME])
+# ---------------------------
+m4_defun([_LT_COMPILER_PIC],
+[m4_require([_LT_TAG_COMPILER])dnl
+_LT_TAGVAR(lt_prog_compiler_wl, $1)=
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+_LT_TAGVAR(lt_prog_compiler_static, $1)=
+
+m4_if([$1], [CXX], [
+  # C++ specific cases for pic, static, wl, etc.
+  if test yes = "$GXX"; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+    aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    mingw* | cygwin* | os2* | pw32* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+	;;
+      esac
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+    *djgpp*)
+      # DJGPP does not support shared libraries at all
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+      ;;
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+    *qnx* | *nto*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+    *)
+      if test "$cc_basename" = FCCpx ; then  # Fujitsu C++
+	 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xg -KPIC'
+         _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+         _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      fi
+      ;;
+    esac
+  else
+    case $host_os in
+      aix[[4-9]]*)
+	# All AIX code is PIC.
+	if test ia64 = "$host_cpu"; then
+	  # AIX 5 now supports IA64 processor
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	else
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+	fi
+	;;
+      chorus*)
+	case $cc_basename in
+	cxch68*)
+	  # Green Hills C++ Compiler
+	  # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
+	  ;;
+	esac
+	;;
+      mingw* | cygwin* | os2* | pw32* | cegcc*)
+	# This hack is so that the source file can tell whether it is being
+	# built for inclusion in a dll (and should export symbols for example).
+	m4_if([$1], [GCJ], [],
+	  [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+	;;
+      dgux*)
+	case $cc_basename in
+	  ec++*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  ghcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      freebsd* | dragonfly*)
+	# FreeBSD uses GNU C++
+	;;
+      hpux9* | hpux10* | hpux11*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+	    if test ia64 != "$host_cpu"; then
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	    fi
+	    ;;
+	  aCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+	    case $host_cpu in
+	    hppa*64*|ia64*)
+	      # +Z the default
+	      ;;
+	    *)
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	      ;;
+	    esac
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      interix*)
+	# This is c89, which is MS Visual C++ (no shared libs)
+	# Anyone wants to do a port?
+	;;
+      irix5* | irix6* | nonstopux*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    # CC pic flag -KPIC is the default.
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+	case $cc_basename in
+	  KCC*)
+	    # KAI C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    ;;
+	  ecpc* )
+	    # old Intel C++ for x86_64, which still supported -KPIC.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  icpc* )
+	    # Intel C++, used to be incompatible with GCC.
+	    # ICC 10 doesn't accept -KPIC any more.
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	    ;;
+	  pgCC* | pgcpp*)
+	    # Portland Group C++ compiler
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  cxx*)
+	    # Compaq C++
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*)
+	    # IBM XL 8.0, 9.0 on PPC and BlueGene
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	    ;;
+	  FCCpx* )
+	    # Fujitsu C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xg -KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+      lynxos*)
+	;;
+      m88k*)
+	;;
+      mvs*)
+	case $cc_basename in
+	  cxx*)
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      netbsd*)
+	;;
+      *qnx* | *nto*)
+        # QNX uses GNU C++, but need to define -shared option too, otherwise
+        # it will coredump.
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+        ;;
+      osf3* | osf4* | osf5*)
+	case $cc_basename in
+	  KCC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
+	    ;;
+	  RCC*)
+	    # Rational C++ 2.4.1
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  cxx*)
+	    # Digital/Compaq C++
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    # Make sure the PIC flag is empty.  It appears that all Alpha
+	    # Linux and Compaq Tru64 Unix objects are PIC.
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      psos*)
+	;;
+      solaris*)
+	case $cc_basename in
+	  CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	    ;;
+	  gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sunos4*)
+	case $cc_basename in
+	  CC*)
+	    # Sun C++ 4.x
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	  lcc*)
+	    # Lucid
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+	case $cc_basename in
+	  CC*)
+	    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	    ;;
+	esac
+	;;
+      tandem*)
+	case $cc_basename in
+	  NCC*)
+	    # NonStop-UX NCC 3.20
+	    _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	    ;;
+	  *)
+	    ;;
+	esac
+	;;
+      vxworks*)
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+	;;
+    esac
+  fi
+],
+[
+  if test yes = "$GCC"; then
+    _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+    _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+
+    case $host_os in
+      aix*)
+      # All AIX code is PIC.
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+        ;;
+      m68k)
+            # FIXME: we need at least 68020 code to build shared libraries, but
+            # adding the '-m68020' flag to GCC prevents building anything better,
+            # like '-m68040'.
+            _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
+        ;;
+      esac
+      ;;
+
+    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      # Although the cygwin gcc ignores -fPIC, still need this for old-style
+      # (--disable-auto-import) libraries
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      ;;
+
+    haiku*)
+      # PIC is the default for Haiku.
+      # The "-static" flag exists, but is broken.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)=
+      ;;
+
+    hpux*)
+      # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
+      # PA HP-UX.  On IA64 HP-UX, PIC is the default but the pic flag
+      # sets the default TLS model and affects inlining.
+      case $host_cpu in
+      hppa*64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	;;
+      esac
+      ;;
+
+    interix[[3-9]]*)
+      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
+      # Instead, we relocate shared libraries at runtime.
+      ;;
+
+    msdosdjgpp*)
+      # Just because we use GCC doesn't mean we suddenly get shared libraries
+      # on systems that don't support them.
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      enable_shared=no
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
+      fi
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+      ;;
+    esac
+
+    case $cc_basename in
+    nvcc*) # Cuda Compiler Driver 2.2
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker '
+      if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)"
+      fi
+      ;;
+    fccpx*) # Fujitsu Compiler
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xg -KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+    esac
+  else
+    # PORTME Check for flag to pass linker flags through the system compiler.
+    case $host_os in
+    aix*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      if test ia64 = "$host_cpu"; then
+	# AIX 5 now supports IA64 processor
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      else
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
+      fi
+      ;;
+
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
+      case $cc_basename in
+      nagfor*)
+        # NAG Fortran compiler
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+        _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      esac
+      ;;
+
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      m4_if([$1], [GCJ], [],
+	[_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
+      case $host_os in
+      os2*)
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static'
+	;;
+      esac
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
+      # not for PA HP-UX.
+      case $host_cpu in
+      hppa*64*|ia64*)
+	# +Z the default
+	;;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
+	;;
+      esac
+      # Is there a better lt_prog_compiler_static that works with the bundled CC?
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive'
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # PIC (with -KPIC) is the default.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+      case $cc_basename in
+      # old Intel for x86_64, which still supported -KPIC.
+      ecc*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # icc used to be incompatible with GCC.
+      # ICC 10 doesn't accept -KPIC any more.
+      icc* | ifort*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+        ;;
+      # Lahey Fortran 8.1.
+      lf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
+	;;
+      frtpx* )
+	# Fujitsu compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Kstatic_fjlib'
+	;;
+      fccpx* | FCCpx* )
+	# Fujitsu compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Xg -KPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      nagfor*)
+	# NAG Fortran compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	;;
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	;;
+      pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+        # Portland Group compilers (*not* the Pentium gcc compiler,
+	# which looks to be a dead project)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+        ;;
+      ccc*)
+        _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+        # All Alpha code is PIC.
+        _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+        ;;
+      xl* | bgxl* | bgf* | mpixl*)
+	# IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
+	;;
+      *)
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
+	  # Sun Fortran 8.3 passes all unrecognized flags to the linker
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
+	  ;;
+	*Sun\ F* | *Sun*Fortran*)
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+	  ;;
+	*Sun\ C*)
+	  # Sun C 5.9
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  ;;
+        *Intel*\ [[CF]]*Compiler*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
+	  ;;
+	*Portland\ Group*)
+	  _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+	  _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+	  _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+	  ;;
+	esac
+	;;
+      esac
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *nto* | *qnx*)
+      # QNX uses GNU C++, but need to define -shared option too, otherwise
+      # it will coredump.
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      # All OSF/1 code is PIC.
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    rdos*)
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      case $cc_basename in
+      f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
+      *)
+	_LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
+	_LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      fi
+      ;;
+
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    unicos*)
+      _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
+      _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
+      ;;
+
+    *)
+      _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
+      ;;
+    esac
+  fi
+])
+case $host_os in
+  # For platforms that do not support PIC, -DPIC is meaningless:
+  *djgpp*)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)=
+    ;;
+  *)
+    _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
+    ;;
+esac
+
+AC_CACHE_CHECK([for $compiler option to produce PIC],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)],
+  [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
+_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)
+
+#
+# Check to make sure the PIC flag actually works.
+#
+if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
+  _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
+    [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
+    [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t at m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
+    [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
+     "" | " "*) ;;
+     *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
+     esac],
+    [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
+     _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
+fi
+_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
+	[Additional compiler flags for building library objects])
+
+_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
+	[How to pass a linker flag through the compiler])
+#
+# Check to make sure the static flag actually works.
+#
+wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
+_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
+  _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
+  $lt_tmp_static_flag,
+  [],
+  [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
+_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
+	[Compiler flag to prevent dynamic linking])
+])# _LT_COMPILER_PIC
+
+
+# _LT_LINKER_SHLIBS([TAGNAME])
+# ----------------------------
+# See if the linker supports building shared libraries.
+m4_defun([_LT_LINKER_SHLIBS],
+[AC_REQUIRE([LT_PATH_LD])dnl
+AC_REQUIRE([LT_PATH_NM])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_DECL_SED])dnl
+m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
+m4_require([_LT_TAG_COMPILER])dnl
+AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+m4_if([$1], [CXX], [
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  case $host_os in
+  aix[[4-9]]*)
+    # If we're using GNU nm, then we don't want the "-C" option.
+    # -C means demangle to GNU nm, but means don't demangle to AIX nm.
+    # Without the "-l" option, or with the "-B" option, AIX nm treats
+    # weak defined symbols like other global defined symbols, whereas
+    # GNU nm marks them as "W".
+    # While the 'weak' keyword is ignored in the Export File, we need
+    # it in the Import File for the 'aix-soname' feature, so we have
+    # to replace the "-B" option with "-P" for AIX nm.
+    if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+    else
+      _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+    fi
+    ;;
+  pw32*)
+    _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds
+    ;;
+  cygwin* | mingw* | cegcc*)
+    case $cc_basename in
+    cl*)
+      _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+      ;;
+    *)
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+      ;;
+    esac
+    ;;
+  *)
+    _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+    ;;
+  esac
+], [
+  runpath_var=
+  _LT_TAGVAR(allow_undefined_flag, $1)=
+  _LT_TAGVAR(always_export_symbols, $1)=no
+  _LT_TAGVAR(archive_cmds, $1)=
+  _LT_TAGVAR(archive_expsym_cmds, $1)=
+  _LT_TAGVAR(compiler_needs_object, $1)=no
+  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+  _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+  _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
+  _LT_TAGVAR(hardcode_automatic, $1)=no
+  _LT_TAGVAR(hardcode_direct, $1)=no
+  _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+  _LT_TAGVAR(hardcode_minus_L, $1)=no
+  _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+  _LT_TAGVAR(inherit_rpath, $1)=no
+  _LT_TAGVAR(link_all_deplibs, $1)=unknown
+  _LT_TAGVAR(module_cmds, $1)=
+  _LT_TAGVAR(module_expsym_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_new_cmds, $1)=
+  _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
+  _LT_TAGVAR(thread_safe_flag_spec, $1)=
+  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+  # include_expsyms should be a list of space-separated symbols to be *always*
+  # included in the symbol list
+  _LT_TAGVAR(include_expsyms, $1)=
+  # exclude_expsyms can be an extended regexp of symbols to exclude
+  # it will be wrapped by ' (' and ')$', so one must not match beginning or
+  # end of line.  Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc',
+  # as well as any symbol that contains 'd'.
+  _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
+  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+  # platforms (ab)use it in PIC code, but their linkers get confused if
+  # the symbol is explicitly referenced.  Since portable code cannot
+  # rely on this symbol name, it's probably fine to never include it in
+  # preloaded symbol tables.
+  # Exclude shared library initialization/finalization symbols.
+dnl Note also adjust exclude_expsyms for C++ above.
+  extract_expsyms_cmds=
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test yes != "$GCC"; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd* | bitrig*)
+    with_gnu_ld=no
+    ;;
+  esac
+
+  _LT_TAGVAR(ld_shlibs, $1)=yes
+
+  # On some targets, GNU ld is compatible enough with the native linker
+  # that we're better off using the native interface for both.
+  lt_use_gnu_ld_interface=no
+  if test yes = "$with_gnu_ld"; then
+    case $host_os in
+      aix*)
+	# The AIX port of GNU ld has always aspired to compatibility
+	# with the native linker.  However, as the warning in the GNU ld
+	# block says, versions before 2.19.5* couldn't really create working
+	# shared libraries, regardless of the interface used.
+	case `$LD -v 2>&1` in
+	  *\ \(GNU\ Binutils\)\ 2.19.5*) ;;
+	  *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;;
+	  *\ \(GNU\ Binutils\)\ [[3-9]]*) ;;
+	  *)
+	    lt_use_gnu_ld_interface=yes
+	    ;;
+	esac
+	;;
+      *)
+	lt_use_gnu_ld_interface=yes
+	;;
+    esac
+  fi
+
+  if test yes = "$lt_use_gnu_ld_interface"; then
+    # If archive_cmds runs LD, not CC, wlarc should be empty
+    wlarc='$wl'
+
+    # Set some defaults for GNU ld with shared library support. These
+    # are reset later if shared libraries are not supported. Putting them
+    # here allows them to be overridden if necessary.
+    runpath_var=LD_RUN_PATH
+    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+    # ancient GNU ld didn't support --whole-archive et. al.
+    if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+    else
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+    supports_anon_versioning=no
+    case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+      *GNU\ gold*) supports_anon_versioning=yes ;;
+      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
+      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
+      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
+      *\ 2.11.*) ;; # other 2.11 versions
+      *) supports_anon_versioning=yes ;;
+    esac
+
+    # See if GNU ld supports shared libraries.
+    case $host_os in
+    aix[[3-9]]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test ia64 != "$host_cpu"; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.19, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to install binutils
+*** 2.20 or above, or modify your PATH so that a non-GNU linker is found.
+*** You will then need to restart the configuration process.
+
+_LT_EOF
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    beos*)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	# support --undefined.  This deserves some investigation.  FIXME
+	_LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+      # as there is no search path for DLLs.
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=no
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
+      _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname']
+
+      if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	# If the export-symbols file already is a .def file, use it as
+	# is; otherwise, prepend EXPORTS...
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+          cp $export_symbols $output_objdir/$soname.def;
+        else
+          echo EXPORTS > $output_objdir/$soname.def;
+          cat $export_symbols >> $output_objdir/$soname.def;
+        fi~
+        $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    haiku*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      shrext_cmds=.dll
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    interix[[3-9]]*)
+      _LT_TAGVAR(hardcode_direct, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+      # Instead, shared libraries are loaded at an image base (0x10000000 by
+      # default) and relocated if they conflict, which is a slow very memory
+      # consuming and fragmenting process.  To avoid this, we pick a random,
+      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      ;;
+
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      tmp_diet=no
+      if test linux-dietlibc = "$host_os"; then
+	case $cc_basename in
+	  diet\ *) tmp_diet=yes;;	# linux-dietlibc with static linking (!diet-dyn)
+	esac
+      fi
+      if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
+	 && test no = "$tmp_diet"
+      then
+	tmp_addflag=' $pic_flag'
+	tmp_sharedflag='-shared'
+	case $cc_basename,$host_cpu in
+        pgcc*)				# Portland Group C compiler
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag'
+	  ;;
+	pgf77* | pgf90* | pgf95* | pgfortran*)
+					# Portland Group f77 and f90 compilers
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  tmp_addflag=' $pic_flag -Mnomain' ;;
+	ecc*,ia64* | icc*,ia64*)	# Intel C compiler on ia64
+	  tmp_addflag=' -i_dynamic' ;;
+	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
+	  tmp_addflag=' -i_dynamic -nofor_main' ;;
+	ifc* | ifort*)			# Intel Fortran compiler
+	  tmp_addflag=' -nofor_main' ;;
+	lf95*)				# Lahey Fortran 8.1
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)=
+	  tmp_sharedflag='--shared' ;;
+        nagfor*)                        # NAGFOR 5.3
+          tmp_sharedflag='-Wl,-shared' ;;
+	xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
+	  tmp_sharedflag='-qmkshrobj'
+	  tmp_addflag= ;;
+	nvcc*)	# Cuda Compiler Driver 2.2
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  ;;
+	esac
+	case `$CC -V 2>&1 | sed 5q` in
+	*Sun\ C*)			# Sun C 5.9
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	  _LT_TAGVAR(compiler_needs_object, $1)=yes
+	  tmp_sharedflag='-G' ;;
+	*Sun\ F*)			# Sun Fortran 8.3
+	  tmp_sharedflag='-G' ;;
+	esac
+	_LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+
+        if test yes = "$supports_anon_versioning"; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            echo "local: *; };" >> $output_objdir/$libname.ver~
+            $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+        fi
+
+	case $cc_basename in
+	tcc*)
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
+	  ;;
+	xlf* | bgf* | bgxlf* | mpixlf*)
+	  # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
+	  if test yes = "$supports_anon_versioning"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              echo "local: *; };" >> $output_objdir/$libname.ver~
+              $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
+	  fi
+	  ;;
+	esac
+      else
+        _LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+	wlarc=
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      fi
+      ;;
+
+    solaris*)
+      if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+      elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	cat <<_LT_EOF 1>&2
+
+*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot
+*** reliably create shared libraries on SCO systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+_LT_EOF
+	;;
+	*)
+	  # For security reasons, it is highly recommended that you always
+	  # use absolute paths for naming shared libraries, and exclude the
+	  # DT_RUNPATH tag from executables and libraries.  But doing so
+	  # requires that you compile everything twice, which is a pain.
+	  if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	;;
+      esac
+      ;;
+
+    sunos4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      wlarc=
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+    esac
+
+    if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then
+      runpath_var=
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=
+      _LT_TAGVAR(whole_archive_flag_spec, $1)=
+    fi
+  else
+    # PORTME fill in a description of your system's linker (not GNU ld)
+    case $host_os in
+    aix3*)
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then
+	# Neither direct hardcoding nor static linking is supported with a
+	# broken collect2.
+	_LT_TAGVAR(hardcode_direct, $1)=unsupported
+      fi
+      ;;
+
+    aix[[4-9]]*)
+      if test ia64 = "$host_cpu"; then
+	# On IA64, the linker does run time linking by default, so we don't
+	# have to do anything special.
+	aix_use_runtimelinking=no
+	exp_sym_flag='-Bexport'
+	no_entry_flag=
+      else
+	# If we're using GNU nm, then we don't want the "-C" option.
+	# -C means demangle to GNU nm, but means don't demangle to AIX nm.
+	# Without the "-l" option, or with the "-B" option, AIX nm treats
+	# weak defined symbols like other global defined symbols, whereas
+	# GNU nm marks them as "W".
+	# While the 'weak' keyword is ignored in the Export File, we need
+	# it in the Import File for the 'aix-soname' feature, so we have
+	# to replace the "-B" option with "-P" for AIX nm.
+	if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
+	  _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
+	else
+	  _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+	fi
+	aix_use_runtimelinking=no
+
+	# Test if we are trying to use run time linking or normal
+	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
+	# have runtime linking enabled, and use it for executables.
+	# For shared libraries, we enable/disable runtime linking
+	# depending on the kind of the shared library created -
+	# when "with_aix_soname,aix_use_runtimelinking" is:
+	# "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "aix,yes"  lib.so          shared, rtl:yes, for executables
+	#            lib.a           static archive
+	# "both,no"  lib.so.V(shr.o) shared, rtl:yes
+	#            lib.a(lib.so.V) shared, rtl:no,  for executables
+	# "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a(lib.so.V) shared, rtl:no
+	# "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+	#            lib.a           static archive
+	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	  for ld_flag in $LDFLAGS; do
+	  if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	  done
+	  if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	    # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	    # so we don't have lib.a shared libs to link our executables.
+	    # We have to force runtime linking in this case.
+	    aix_use_runtimelinking=yes
+	    LDFLAGS="$LDFLAGS -Wl,-brtl"
+	  fi
+	  ;;
+	esac
+
+	exp_sym_flag='-bexport'
+	no_entry_flag='-bnoentry'
+      fi
+
+      # When large executables or shared objects are built, AIX ld can
+      # have problems creating the table of contents.  If linking a library
+      # or program results in "error TOC overflow" add -mminimal-toc to
+      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+      _LT_TAGVAR(archive_cmds, $1)=''
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+      case $with_aix_soname,$aix_use_runtimelinking in
+      aix,*) ;; # traditional, no import file
+      svr4,* | *,yes) # use import file
+	# The Import File defines what to hardcode.
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+	;;
+      esac
+
+      if test yes = "$GCC"; then
+	case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	# We only want to do this on AIX 4.2 and lower, the check
+	# below for broken collect2 doesn't work under 4.3+
+	  collect2name=`$CC -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	   strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	  # We have reworked collect2
+	  :
+	  else
+	  # We have old collect2
+	  _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+	  ;;
+	esac
+	shared_flag='-shared'
+	if test yes = "$aix_use_runtimelinking"; then
+	  shared_flag="$shared_flag "'$wl-G'
+	fi
+	# Need to ensure runtime linking is disabled for the traditional
+	# shared library, or the linker may eventually find shared libraries
+	# /with/ Import File - we do not want to mix them.
+	shared_flag_aix='-shared'
+	shared_flag_svr4='-shared $wl-G'
+      else
+	# not using gcc
+	if test ia64 = "$host_cpu"; then
+	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	# chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+	else
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag='$wl-G'
+	  else
+	    shared_flag='$wl-bM:SRE'
+	  fi
+	  shared_flag_aix='$wl-bM:SRE'
+	  shared_flag_svr4='$wl-G'
+	fi
+      fi
+
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+      # It seems that -bexpall does not export symbols beginning with
+      # underscore (_), so it is better to generate a list of symbols to export.
+      _LT_TAGVAR(always_export_symbols, $1)=yes
+      if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+	# Warning - without using the other runtime loading flags (-brtl),
+	# -berok will link without error, but may produce a broken library.
+	_LT_TAGVAR(allow_undefined_flag, $1)='-berok'
+        # Determine the default libpath from the value encoded in an
+        # empty executable.
+        _LT_SYS_MODULE_PATH_AIX([$1])
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+      else
+	if test ia64 = "$host_cpu"; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+	  _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+	else
+	 # Determine the default libpath from the value encoded in an
+	 # empty executable.
+	 _LT_SYS_MODULE_PATH_AIX([$1])
+	 _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+	  # Warning - without using the other run time loading flags,
+	  # -berok will link without error, but may produce a broken library.
+	  _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+	  if test yes = "$with_gnu_ld"; then
+	    # We only use this code for GNU lds that support --whole-archive.
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+	  else
+	    # Exported symbols can be pulled into shared objects from archives
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	  fi
+	  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	  # -brtl affects multiple linker settings, -berok does not and is overridden later
+	  compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+	  if test svr4 != "$with_aix_soname"; then
+	    # This is similar to how AIX traditionally builds its shared libraries.
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	  fi
+	  if test aix != "$with_aix_soname"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 3 [...]
+	  else
+	    # used by -dlpreopen to get the symbols
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	  fi
+	  _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+	fi
+      fi
+      ;;
+
+    amigaos*)
+      case $host_cpu in
+      powerpc)
+            # see comment about AmigaOS4 .so support
+            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+            _LT_TAGVAR(archive_expsym_cmds, $1)=''
+        ;;
+      m68k)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+            _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes
+        ;;
+      esac
+      ;;
+
+    bsdi[[45]]*)
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
+      ;;
+
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      case $cc_basename in
+      cl*)
+	# Native MSVC
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	_LT_TAGVAR(always_export_symbols, $1)=yes
+	_LT_TAGVAR(file_list_spec, $1)='@'
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	_LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+            cp "$export_symbols" "$output_objdir/$soname.def";
+            echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+          else
+            $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+          fi~
+          $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+          linknames='
+	# The linker will not automatically build a static lib if we build a DLL.
+	# _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
+	_LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
+	# Don't use ranlib
+	_LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	_LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+          lt_tool_outputfile="@TOOL_OUTPUT@"~
+          case $lt_outputfile in
+            *.exe|*.EXE) ;;
+            *)
+              lt_outputfile=$lt_outputfile.exe
+              lt_tool_outputfile=$lt_tool_outputfile.exe
+              ;;
+          esac~
+          if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+            $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+            $RM "$lt_outputfile.manifest";
+          fi'
+	;;
+      *)
+	# Assume MSVC wrapper
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	# Tell ltmain to make .lib files, not .a files.
+	libext=lib
+	# Tell ltmain to make .dll files, not .so files.
+	shrext_cmds=.dll
+	# FIXME: Setting linknames here is a bad hack.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames='
+	# The linker will automatically build a .lib file if we build a DLL.
+	_LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	# FIXME: Should let the user specify the lib program.
+	_LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+      esac
+      ;;
+
+    darwin* | rhapsody*)
+      _LT_DARWIN_LINKER_FEATURES($1)
+      ;;
+
+    dgux*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+    # support.  Future versions do this automatically, but an explicit c++rt0.o
+    # does not break anything, and helps significantly (at the cost of a little
+    # extra space).
+    freebsd2.2*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+    freebsd2.*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+    freebsd* | dragonfly*)
+      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    hpux9*)
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+      ;;
+
+    hpux10*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      if test no = "$with_gnu_ld"; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+	# hardcode_minus_L: Not really in the search PATH,
+	# but as the default location of the library.
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+      fi
+      ;;
+
+    hpux11*)
+      if test yes,no = "$GCC,$with_gnu_ld"; then
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	esac
+      else
+	case $host_cpu in
+	hppa*64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	ia64*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	m4_if($1, [], [
+	  # Older versions of the 11.00 compiler do not understand -b yet
+	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
+	  _LT_LINKER_OPTION([if $CC understands -b],
+	    _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b],
+	    [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'],
+	    [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])],
+	  [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'])
+	  ;;
+	esac
+      fi
+      if test no = "$with_gnu_ld"; then
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	case $host_cpu in
+	hppa*64*|ia64*)
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  ;;
+	*)
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+
+	  # hardcode_minus_L: Not really in the search PATH,
+	  # but as the default location of the library.
+	  _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	  ;;
+	esac
+      fi
+      ;;
+
+    irix5* | irix6* | nonstopux*)
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	# Try to use the -exported_symbol ld option, if it does not
+	# work, assume that -exports_file does not work either and
+	# implicitly export all symbols.
+	# This should be the same for all languages, so no per-tag cache variable.
+	AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol],
+	  [lt_cv_irix_exported_symbol],
+	  [save_LDFLAGS=$LDFLAGS
+	   LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
+	   AC_LINK_IFELSE(
+	     [AC_LANG_SOURCE(
+	        [AC_LANG_CASE([C], [[int foo (void) { return 0; }]],
+			      [C++], [[int foo (void) { return 0; }]],
+			      [Fortran 77], [[
+      subroutine foo
+      end]],
+			      [Fortran], [[
+      subroutine foo
+      end]])])],
+	      [lt_cv_irix_exported_symbol=yes],
+	      [lt_cv_irix_exported_symbol=no])
+           LDFLAGS=$save_LDFLAGS])
+	if test yes = "$lt_cv_irix_exported_symbol"; then
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
+	fi
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(inherit_rpath, $1)=yes
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    linux*)
+      case $cc_basename in
+      tcc*)
+	# Fabrice Bellard et al's Tiny C Compiler
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	;;
+      esac
+      ;;
+
+    netbsd*)
+      if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    newsos6)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *nto* | *qnx*)
+      ;;
+
+    openbsd* | bitrig*)
+      if test -f /usr/libexec/ld.so; then
+	_LT_TAGVAR(hardcode_direct, $1)=yes
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+	else
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	fi
+      else
+	_LT_TAGVAR(ld_shlibs, $1)=no
+      fi
+      ;;
+
+    os2*)
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+      shrext_cmds=.dll
+      _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	$ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	$ECHO EXPORTS >> $output_objdir/$libname.def~
+	prefix_cmds="$SED"~
+	if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	  prefix_cmds="$prefix_cmds -e 1d";
+	fi~
+	prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	$CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	emximp -o $lib $output_objdir/$libname.def'
+      _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+      _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+      ;;
+
+    osf3*)
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    osf4* | osf5*)	# as osf3* with the addition of -msym flag
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+      else
+	_LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
+          $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp'
+
+	# Both c and cxx compiler support -rpath directly
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+      fi
+      _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+      ;;
+
+    solaris*)
+      _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
+      if test yes = "$GCC"; then
+	wlarc='$wl'
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+          $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+      else
+	case `$CC -V 2>&1` in
+	*"Compilers 5.0"*)
+	  wlarc=''
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
+	  ;;
+	*)
+	  wlarc='$wl'
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+            $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
+	  ;;
+	esac
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      case $host_os in
+      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+      *)
+	# The compiler driver will combine and reorder linker options,
+	# but understands '-z linker_flag'.  GCC discards it without '$wl',
+	# but is careful enough not to reorder.
+	# Supported since Solaris 2.6 (maybe 2.5.1?)
+	if test yes = "$GCC"; then
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+	else
+	  _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	fi
+	;;
+      esac
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      ;;
+
+    sunos4*)
+      if test sequent = "$host_vendor"; then
+	# Use $CC to link under sequent, because it throws in some extra .o
+	# files that make .init and .fini sections work.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+      fi
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_direct, $1)=yes
+      _LT_TAGVAR(hardcode_minus_L, $1)=yes
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4)
+      case $host_vendor in
+	sni)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
+	;;
+	siemens)
+	  ## LD is ld it makes a PLAMLIB
+	  ## CC just makes a GrossModule.
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
+	  _LT_TAGVAR(hardcode_direct, $1)=no
+        ;;
+	motorola)
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	  _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
+	;;
+      esac
+      runpath_var='LD_RUN_PATH'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    sysv4.3*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	_LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	runpath_var=LD_RUN_PATH
+	hardcode_runpath_var=yes
+	_LT_TAGVAR(ld_shlibs, $1)=yes
+      fi
+      ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    sysv5* | sco3.2v5* | sco5v6*)
+      # Note: We CANNOT use -z defs as we might desire, because we do not
+      # link with -lc, and that would cause any symbols used from libc to
+      # always be unresolved, which means just about no library would
+      # ever link correctly.  If we're not using GNU ld we use -z text
+      # though, which does catch some bad symbols but isn't as heavy-handed
+      # as -z defs.
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+      _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+      _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+      _LT_TAGVAR(link_all_deplibs, $1)=yes
+      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+      runpath_var='LD_RUN_PATH'
+
+      if test yes = "$GCC"; then
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      else
+	_LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+      fi
+      ;;
+
+    uts4*)
+      _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      ;;
+
+    *)
+      _LT_TAGVAR(ld_shlibs, $1)=no
+      ;;
+    esac
+
+    if test sni = "$host_vendor"; then
+      case $host in
+      sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym'
+	;;
+      esac
+    fi
+  fi
+])
+AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
+
+_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
+_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
+_LT_DECL([], [extract_expsyms_cmds], [2],
+    [The commands to extract the exported symbol list from a shared archive])
+
+#
+# Do we need to explicitly link libc?
+#
+case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
+x|xyes)
+  # Assume -lc should be added
+  _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+
+  if test yes,yes = "$GCC,$enable_shared"; then
+    case $_LT_TAGVAR(archive_cmds, $1) in
+    *'~'*)
+      # FIXME: we may have to deal with multi-command sequences.
+      ;;
+    '$CC '*)
+      # Test whether the compiler implicitly links with -lc since on some
+      # systems, -lgcc has to come before -lc. If gcc already passes -lc
+      # to ld, don't add -lc before -lgcc.
+      AC_CACHE_CHECK([whether -lc should be explicitly linked in],
+	[lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1),
+	[$RM -f conftest*
+	echo "$lt_simple_compile_test_code" > conftest.$ac_ext
+
+	if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
+	  soname=conftest
+	  lib=conftest
+	  libobjs=conftest.$ac_objext
+	  deplibs=
+	  wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
+	  pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
+	  compiler_flags=-v
+	  linker_flags=-v
+	  verstring=
+	  output_objdir=.
+	  libname=conftest
+	  lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
+	  _LT_TAGVAR(allow_undefined_flag, $1)=
+	  if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
+	  then
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	  else
+	    lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	  fi
+	  _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
+	else
+	  cat conftest.err 1>&5
+	fi
+	$RM -f conftest*
+	])
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)
+      ;;
+    esac
+  fi
+  ;;
+esac
+
+_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
+    [Whether or not to add -lc for building shared libraries])
+_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
+    [enable_shared_with_static_runtimes], [0],
+    [Whether or not to disallow shared libs when runtime libs are static])
+_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
+    [Compiler flag to allow reflexive dlopens])
+_LT_TAGDECL([], [whole_archive_flag_spec], [1],
+    [Compiler flag to generate shared objects directly from archives])
+_LT_TAGDECL([], [compiler_needs_object], [1],
+    [Whether the compiler copes with passing no objects directly])
+_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
+    [Create an old-style archive from a shared archive])
+_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
+    [Create a temporary old-style archive to link instead of a shared archive])
+_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
+_LT_TAGDECL([], [archive_expsym_cmds], [2])
+_LT_TAGDECL([], [module_cmds], [2],
+    [Commands used to build a loadable module if different from building
+    a shared archive.])
+_LT_TAGDECL([], [module_expsym_cmds], [2])
+_LT_TAGDECL([], [with_gnu_ld], [1],
+    [Whether we are building with GNU ld or not])
+_LT_TAGDECL([], [allow_undefined_flag], [1],
+    [Flag that allows shared libraries with undefined symbols to be built])
+_LT_TAGDECL([], [no_undefined_flag], [1],
+    [Flag that enforces no undefined symbols])
+_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
+    [Flag to hardcode $libdir into a binary during linking.
+    This must work even if $libdir does not exist])
+_LT_TAGDECL([], [hardcode_libdir_separator], [1],
+    [Whether we need a single "-rpath" flag with a separated argument])
+_LT_TAGDECL([], [hardcode_direct], [0],
+    [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+    DIR into the resulting binary])
+_LT_TAGDECL([], [hardcode_direct_absolute], [0],
+    [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes
+    DIR into the resulting binary and the resulting library dependency is
+    "absolute", i.e impossible to change by setting $shlibpath_var if the
+    library is relocated])
+_LT_TAGDECL([], [hardcode_minus_L], [0],
+    [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
+    [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
+    into the resulting binary])
+_LT_TAGDECL([], [hardcode_automatic], [0],
+    [Set to "yes" if building a shared library automatically hardcodes DIR
+    into the library and all subsequent libraries and executables linked
+    against it])
+_LT_TAGDECL([], [inherit_rpath], [0],
+    [Set to yes if linker adds runtime paths of dependent libraries
+    to runtime path list])
+_LT_TAGDECL([], [link_all_deplibs], [0],
+    [Whether libtool must link a program against all its dependency libraries])
+_LT_TAGDECL([], [always_export_symbols], [0],
+    [Set to "yes" if exported symbols are required])
+_LT_TAGDECL([], [export_symbols_cmds], [2],
+    [The commands to list exported symbols])
+_LT_TAGDECL([], [exclude_expsyms], [1],
+    [Symbols that should not be listed in the preloaded symbols])
+_LT_TAGDECL([], [include_expsyms], [1],
+    [Symbols that must always be exported])
+_LT_TAGDECL([], [prelink_cmds], [2],
+    [Commands necessary for linking programs (against libraries) with templates])
+_LT_TAGDECL([], [postlink_cmds], [2],
+    [Commands necessary for finishing linking programs])
+_LT_TAGDECL([], [file_list_spec], [1],
+    [Specify filename containing input files])
+dnl FIXME: Not yet implemented
+dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
+dnl    [Compiler flag to generate thread safe objects])
+])# _LT_LINKER_SHLIBS
+
+
+# _LT_LANG_C_CONFIG([TAG])
+# ------------------------
+# Ensure that the configuration variables for a C compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_C_CONFIG],
+[m4_require([_LT_DECL_EGREP])dnl
+lt_save_CC=$CC
+AC_LANG_PUSH(C)
+
+# Source file extension for C test sources.
+ac_ext=c
+
+# Object file extension for compiled C test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="int some_variable = 0;"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='int main(){return(0);}'
+
+_LT_TAG_COMPILER
+# Save the default compiler, since it gets overwritten when the other
+# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
+compiler_DEFAULT=$CC
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_SYS_DYNAMIC_LINKER($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+  LT_SYS_DLOPEN_SELF
+  _LT_CMD_STRIPLIB
+
+  # Report what library types will actually be built
+  AC_MSG_CHECKING([if libtool supports shared libraries])
+  AC_MSG_RESULT([$can_build_shared])
+
+  AC_MSG_CHECKING([whether to build shared libraries])
+  test no = "$can_build_shared" && enable_shared=no
+
+  # On AIX, shared libraries and static libraries use the same namespace, and
+  # are all built from PIC.
+  case $host_os in
+  aix3*)
+    test yes = "$enable_shared" && enable_static=no
+    if test -n "$RANLIB"; then
+      archive_cmds="$archive_cmds~\$RANLIB \$lib"
+      postinstall_cmds='$RANLIB $lib'
+    fi
+    ;;
+
+  aix[[4-9]]*)
+    if test ia64 != "$host_cpu"; then
+      case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+      yes,aix,yes) ;;			# shared object as lib.so file only
+      yes,svr4,*) ;;			# shared object as lib.so archive member only
+      yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+      esac
+    fi
+    ;;
+  esac
+  AC_MSG_RESULT([$enable_shared])
+
+  AC_MSG_CHECKING([whether to build static libraries])
+  # Make sure either enable_shared or enable_static is yes.
+  test yes = "$enable_shared" || enable_static=yes
+  AC_MSG_RESULT([$enable_static])
+
+  _LT_CONFIG($1)
+fi
+AC_LANG_POP
+CC=$lt_save_CC
+])# _LT_LANG_C_CONFIG
+
+
+# _LT_LANG_CXX_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a C++ compiler are suitably
+# defined.  These variables are subsequently used by _LT_CONFIG to write
+# the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_CXX_CONFIG],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+m4_require([_LT_DECL_EGREP])dnl
+m4_require([_LT_PATH_MANIFEST_TOOL])dnl
+if test -n "$CXX" && ( test no != "$CXX" &&
+    ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) ||
+    (test g++ != "$CXX"))); then
+  AC_PROG_CXXCPP
+else
+  _lt_caught_CXX_error=yes
+fi
+
+AC_LANG_PUSH(C++)
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(compiler_needs_object, $1)=no
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for C++ test sources.
+ac_ext=cpp
+
+# Object file extension for compiled C++ test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the CXX compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_caught_CXX_error"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="int some_variable = 0;"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_CFLAGS=$CFLAGS
+  lt_save_LD=$LD
+  lt_save_GCC=$GCC
+  GCC=$GXX
+  lt_save_with_gnu_ld=$with_gnu_ld
+  lt_save_path_LD=$lt_cv_path_LD
+  if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
+    lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
+  else
+    $as_unset lt_cv_prog_gnu_ld
+  fi
+  if test -n "${lt_cv_path_LDCXX+set}"; then
+    lt_cv_path_LD=$lt_cv_path_LDCXX
+  else
+    $as_unset lt_cv_path_LD
+  fi
+  test -z "${LDCXX+set}" || LD=$LDCXX
+  CC=${CXX-"c++"}
+  CFLAGS=$CXXFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    # We don't want -fno-exception when compiling C++ code, so set the
+    # no_builtin_flag separately
+    if test yes = "$GXX"; then
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
+    else
+      _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
+    fi
+
+    if test yes = "$GXX"; then
+      # Set up default GNU C++ configuration
+
+      LT_PATH_LD
+
+      # Check if GNU C++ uses GNU ld as the underlying linker, since the
+      # archiving commands below assume that GNU ld is being used.
+      if test yes = "$with_gnu_ld"; then
+        _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+        _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+        # If archive_cmds runs LD, not CC, wlarc should be empty
+        # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
+        #     investigate it a little bit more. (MM)
+        wlarc='$wl'
+
+        # ancient GNU ld didn't support --whole-archive et. al.
+        if test "$cc_basename" == FCCpx ; then
+           ac_prog=`($CC -Xg -print-prog-name=ld) 2>&5`
+        else
+           ac_prog=`($CC -print-prog-name=ld) 2>&5`
+        fi
+        if eval "$ac_prog --help 2>&1" |
+	  $GREP 'no-whole-archive' > /dev/null; then
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+        else
+          _LT_TAGVAR(whole_archive_flag_spec, $1)=
+        fi
+      else
+        with_gnu_ld=no
+        wlarc=
+
+        # A generic and very simple default shared library creation
+        # command for GNU C++ for the case where it uses the native
+        # linker, instead of GNU ld.  If possible, this setting should
+        # overridden to take advantage of the native linker features on
+        # the platform it is being used on.
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+      fi
+
+      # Commands to make compiler produce verbose output that lists
+      # what "hidden" libraries, object files and flags are used when
+      # linking a shared library.
+      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+    else
+      GXX=no
+      with_gnu_ld=no
+      wlarc=
+    fi
+
+    # PORTME: fill in a description of your system's C++ link characteristics
+    AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
+    _LT_TAGVAR(ld_shlibs, $1)=yes
+    case $host_os in
+      aix3*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+      aix[[4-9]]*)
+        if test ia64 = "$host_cpu"; then
+          # On IA64, the linker does run time linking by default, so we don't
+          # have to do anything special.
+          aix_use_runtimelinking=no
+          exp_sym_flag='-Bexport'
+          no_entry_flag=
+        else
+          aix_use_runtimelinking=no
+
+          # Test if we are trying to use run time linking or normal
+          # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+          # have runtime linking enabled, and use it for executables.
+          # For shared libraries, we enable/disable runtime linking
+          # depending on the kind of the shared library created -
+          # when "with_aix_soname,aix_use_runtimelinking" is:
+          # "aix,no"   lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "aix,yes"  lib.so          shared, rtl:yes, for executables
+          #            lib.a           static archive
+          # "both,no"  lib.so.V(shr.o) shared, rtl:yes
+          #            lib.a(lib.so.V) shared, rtl:no,  for executables
+          # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a(lib.so.V) shared, rtl:no
+          # "svr4,*"   lib.so.V(shr.o) shared, rtl:yes, for executables
+          #            lib.a           static archive
+          case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
+	    for ld_flag in $LDFLAGS; do
+	      case $ld_flag in
+	      *-brtl*)
+	        aix_use_runtimelinking=yes
+	        break
+	        ;;
+	      esac
+	    done
+	    if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then
+	      # With aix-soname=svr4, we create the lib.so.V shared archives only,
+	      # so we don't have lib.a shared libs to link our executables.
+	      # We have to force runtime linking in this case.
+	      aix_use_runtimelinking=yes
+	      LDFLAGS="$LDFLAGS -Wl,-brtl"
+	    fi
+	    ;;
+          esac
+
+          exp_sym_flag='-bexport'
+          no_entry_flag='-bnoentry'
+        fi
+
+        # When large executables or shared objects are built, AIX ld can
+        # have problems creating the table of contents.  If linking a library
+        # or program results in "error TOC overflow" add -mminimal-toc to
+        # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+        # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+        _LT_TAGVAR(archive_cmds, $1)=''
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        _LT_TAGVAR(file_list_spec, $1)='$wl-f,'
+        case $with_aix_soname,$aix_use_runtimelinking in
+        aix,*) ;;	# no import file
+        svr4,* | *,yes) # use import file
+          # The Import File defines what to hardcode.
+          _LT_TAGVAR(hardcode_direct, $1)=no
+          _LT_TAGVAR(hardcode_direct_absolute, $1)=no
+          ;;
+        esac
+
+        if test yes = "$GXX"; then
+          case $host_os in aix4.[[012]]|aix4.[[012]].*)
+          # We only want to do this on AIX 4.2 and lower, the check
+          # below for broken collect2 doesn't work under 4.3+
+	  collect2name=`$CC -print-prog-name=collect2`
+	  if test -f "$collect2name" &&
+	     strings "$collect2name" | $GREP resolve_lib_name >/dev/null
+	  then
+	    # We have reworked collect2
+	    :
+	  else
+	    # We have old collect2
+	    _LT_TAGVAR(hardcode_direct, $1)=unsupported
+	    # It fails to find uninstalled libraries when the uninstalled
+	    # path is not listed in the libpath.  Setting hardcode_minus_L
+	    # to unsupported forces relinking
+	    _LT_TAGVAR(hardcode_minus_L, $1)=yes
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=
+	  fi
+          esac
+          shared_flag='-shared'
+	  if test yes = "$aix_use_runtimelinking"; then
+	    shared_flag=$shared_flag' $wl-G'
+	  fi
+	  # Need to ensure runtime linking is disabled for the traditional
+	  # shared library, or the linker may eventually find shared libraries
+	  # /with/ Import File - we do not want to mix them.
+	  shared_flag_aix='-shared'
+	  shared_flag_svr4='-shared $wl-G'
+        else
+          # not using gcc
+          if test ia64 = "$host_cpu"; then
+	  # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
+	  # chokes on -Wl,-G. The following line is correct:
+	  shared_flag='-G'
+          else
+	    if test yes = "$aix_use_runtimelinking"; then
+	      shared_flag='$wl-G'
+	    else
+	      shared_flag='$wl-bM:SRE'
+	    fi
+	    shared_flag_aix='$wl-bM:SRE'
+	    shared_flag_svr4='$wl-G'
+          fi
+        fi
+
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall'
+        # It seems that -bexpall does not export symbols beginning with
+        # underscore (_), so it is better to generate a list of symbols to
+	# export.
+        _LT_TAGVAR(always_export_symbols, $1)=yes
+	if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then
+          # Warning - without using the other runtime loading flags (-brtl),
+          # -berok will link without error, but may produce a broken library.
+          # The "-G" linker flag allows undefined symbols.
+          _LT_TAGVAR(no_undefined_flag, $1)='-bernotok'
+          # Determine the default libpath from the value encoded in an empty
+          # executable.
+          _LT_SYS_MODULE_PATH_AIX([$1])
+          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+
+          _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag
+        else
+          if test ia64 = "$host_cpu"; then
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib'
+	    _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols"
+          else
+	    # Determine the default libpath from the value encoded in an
+	    # empty executable.
+	    _LT_SYS_MODULE_PATH_AIX([$1])
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath"
+	    # Warning - without using the other run time loading flags,
+	    # -berok will link without error, but may produce a broken library.
+	    _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok'
+	    _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok'
+	    if test yes = "$with_gnu_ld"; then
+	      # We only use this code for GNU lds that support --whole-archive.
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+	    else
+	      # Exported symbols can be pulled into shared objects from archives
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
+	    fi
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d'
+	    # -brtl affects multiple linker settings, -berok does not and is overridden later
+	    compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`'
+	    if test svr4 != "$with_aix_soname"; then
+	      # This is similar to how AIX traditionally builds its shared
+	      # libraries. Need -bnortl late, we may have -brtl in LDFLAGS.
+	      _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname'
+	    fi
+	    if test aix != "$with_aix_soname"; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# [...]
+	    else
+	      # used by -dlpreopen to get the symbols
+	      _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV  $output_objdir/$realname.d/$soname $output_objdir'
+	    fi
+	    _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d'
+          fi
+        fi
+        ;;
+
+      beos*)
+	if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+	  # support --undefined.  This deserves some investigation.  FIXME
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      chorus*)
+        case $cc_basename in
+          *)
+	  # FIXME: insert proper C++ library support
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	  ;;
+        esac
+        ;;
+
+      cygwin* | mingw* | pw32* | cegcc*)
+	case $GXX,$cc_basename in
+	,cl* | no,cl*)
+	  # Native MSVC
+	  # hardcode_libdir_flag_spec is actually meaningless, as there is
+	  # no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=yes
+	  _LT_TAGVAR(file_list_spec, $1)='@'
+	  # Tell ltmain to make .lib files, not .a files.
+	  libext=lib
+	  # Tell ltmain to make .dll files, not .so files.
+	  shrext_cmds=.dll
+	  # FIXME: Setting linknames here is a bad hack.
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames='
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp "$export_symbols" "$output_objdir/$soname.def";
+              echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp";
+            else
+              $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp;
+            fi~
+            $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~
+            linknames='
+	  # The linker will not automatically build a static lib if we build a DLL.
+	  # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	  # Don't use ranlib
+	  _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib'
+	  _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~
+            lt_tool_outputfile="@TOOL_OUTPUT@"~
+            case $lt_outputfile in
+              *.exe|*.EXE) ;;
+              *)
+                lt_outputfile=$lt_outputfile.exe
+                lt_tool_outputfile=$lt_tool_outputfile.exe
+                ;;
+            esac~
+            func_to_tool_file "$lt_outputfile"~
+            if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then
+              $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1;
+              $RM "$lt_outputfile.manifest";
+            fi'
+	  ;;
+	*)
+	  # g++
+	  # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
+	  # as there is no search path for DLLs.
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	  _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols'
+	  _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	  _LT_TAGVAR(always_export_symbols, $1)=no
+	  _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+
+	  if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	    # If the export-symbols file already is a .def file, use it as
+	    # is; otherwise, prepend EXPORTS...
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then
+              cp $export_symbols $output_objdir/$soname.def;
+            else
+              echo EXPORTS > $output_objdir/$soname.def;
+              cat $export_symbols >> $output_objdir/$soname.def;
+            fi~
+            $CC -shared $nostdlib_flag -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
+	  else
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	  fi
+	  ;;
+	esac
+	;;
+      darwin* | rhapsody*)
+        _LT_DARWIN_LINKER_FEATURES($1)
+	;;
+
+      os2*)
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
+	_LT_TAGVAR(hardcode_minus_L, $1)=yes
+	_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
+	shrext_cmds=.dll
+	_LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	  $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	  $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	  $ECHO EXPORTS >> $output_objdir/$libname.def~
+	  emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~
+	  $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	  emximp -o $lib $output_objdir/$libname.def'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~
+	  $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~
+	  $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~
+	  $ECHO EXPORTS >> $output_objdir/$libname.def~
+	  prefix_cmds="$SED"~
+	  if test EXPORTS = "`$SED 1q $export_symbols`"; then
+	    prefix_cmds="$prefix_cmds -e 1d";
+	  fi~
+	  prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~
+	  cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~
+	  $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~
+	  emximp -o $lib $output_objdir/$libname.def'
+	_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
+	_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+	;;
+
+      dgux*)
+        case $cc_basename in
+          ec++*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          ghcx*)
+	    # Green Hills C++ Compiler
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      freebsd2.*)
+        # C++ shared libraries reported to be fairly broken before
+	# switch to ELF
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      freebsd-elf*)
+        _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+        ;;
+
+      freebsd* | dragonfly*)
+        # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
+        # conventions
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+        ;;
+
+      haiku*)
+        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+        _LT_TAGVAR(link_all_deplibs, $1)=yes
+        ;;
+
+      hpux9*)
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+        _LT_TAGVAR(hardcode_direct, $1)=yes
+        _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+				             # but as the default
+				             # location of the library.
+
+        case $cc_basename in
+          CC*)
+            # FIXME: insert proper C++ library support
+            _LT_TAGVAR(ld_shlibs, $1)=no
+            ;;
+          aCC*)
+            _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            # Commands to make compiler produce verbose output that lists
+            # what "hidden" libraries, object files and flags are used when
+            # linking a shared library.
+            #
+            # There doesn't appear to be a way to prevent this compiler from
+            # explicitly linking system object files so we need to strip them
+            # from the output so that they don't get included in the library
+            # dependencies.
+            output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+            ;;
+          *)
+            if test yes = "$GXX"; then
+              _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $nostdlib_flag -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib'
+            else
+              # FIXME: insert proper C++ library support
+              _LT_TAGVAR(ld_shlibs, $1)=no
+            fi
+            ;;
+        esac
+        ;;
+
+      hpux10*|hpux11*)
+        if test no = "$with_gnu_ld"; then
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir'
+	  _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+          case $host_cpu in
+            hppa*64*|ia64*)
+              ;;
+            *)
+	      _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+              ;;
+          esac
+        fi
+        case $host_cpu in
+          hppa*64*|ia64*)
+            _LT_TAGVAR(hardcode_direct, $1)=no
+            _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+            ;;
+          *)
+            _LT_TAGVAR(hardcode_direct, $1)=yes
+            _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+            _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
+					         # but as the default
+					         # location of the library.
+            ;;
+        esac
+
+        case $cc_basename in
+          CC*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          aCC*)
+	    case $host_cpu in
+	      hppa*64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      ia64*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	      *)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	        ;;
+	    esac
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+          *)
+	    if test yes = "$GXX"; then
+	      if test no = "$with_gnu_ld"; then
+	        case $host_cpu in
+	          hppa*64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $nostdlib_flag -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          ia64*)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $nostdlib_flag -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	          *)
+	            _LT_TAGVAR(archive_cmds, $1)='$CC -shared $nostdlib_flag -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	            ;;
+	        esac
+	      fi
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      interix[[3-9]]*)
+	_LT_TAGVAR(hardcode_direct, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+	# Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
+	# Instead, shared libraries are loaded at an image base (0x10000000 by
+	# default) and relocated if they conflict, which is a slow very memory
+	# consuming and fragmenting process.  To avoid this, we pick a random,
+	# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
+	# time.  Moving up from 0x10000000 also allows more sbrk(2) space.
+	_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	_LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+	;;
+      irix5* | irix6*)
+        case $cc_basename in
+          CC*)
+	    # SGI C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -ar", where "CC" is the IRIX C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    if test yes = "$GXX"; then
+	      if test no = "$with_gnu_ld"; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+	      else
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib'
+	      fi
+	    fi
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+	    ;;
+        esac
+        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+        _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+        _LT_TAGVAR(inherit_rpath, $1)=yes
+        ;;
+
+      linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib'
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -Bstatic", where "CC" is the KAI C++ compiler.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
+	    ;;
+	  icpc* | ecpc* )
+	    # Intel C++
+	    with_gnu_ld=yes
+	    # version 8.0 and above of icpc choke on multiply defined symbols
+	    # if we add $predep_objects and $postdep_objects, however 7.1 and
+	    # earlier do not add the objects themselves.
+	    case `$CC -V 2>&1` in
+	      *"Version 7."*)
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	      *)  # Version 8.0 or newer
+	        tmp_idyn=
+	        case $host_cpu in
+		  ia64*) tmp_idyn=' -i_dynamic';;
+		esac
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+		_LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+		;;
+	    esac
+	    _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive'
+	    ;;
+          pgCC* | pgcpp*)
+            # Portland Group C++ compiler
+	    case `$CC -V` in
+	    *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*)
+	      _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+               rm -rf $tpldir~
+               $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+               compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+	      _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+                $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+                $RANLIB $oldlib'
+	      _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+                rm -rf $tpldir~
+                $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+                $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	      ;;
+	    *) # Version 6 and above use weak symbols
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib'
+	      ;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+            ;;
+	  cxx*)
+	    # Compaq C++
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname  -o $lib $wl-retain-symbols-file $wl$export_symbols'
+
+	    runpath_var=LD_RUN_PATH
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed'
+	    ;;
+	  xl* | mpixl* | bgxl*)
+	    # IBM XL 8.0 on PPC, with GNU ld
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
+	    if test yes = "$supports_anon_versioning"; then
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                echo "local: *; };" >> $output_objdir/$libname.ver~
+                $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
+	    fi
+	    ;;
+	  *)
+	    case `$CC -V 2>&1 | sed 5q` in
+	    *Sun\ C*)
+	      # Sun C++ 5.9
+	      _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	      _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	      _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols'
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	      _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
+	      _LT_TAGVAR(compiler_needs_object, $1)=yes
+
+	      # Not sure whether something based on
+	      # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
+	      # would be better.
+	      output_verbose_link_cmd='func_echo_all'
+
+	      # Archives containing C++ object files must be created using
+	      # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	      # necessary to make sure instantiated templates are included
+	      # in the archive.
+	      _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	      ;;
+	    esac
+	    ;;
+	esac
+	;;
+
+      lynxos*)
+        # FIXME: insert proper C++ library support
+	_LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      m88k*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+	;;
+
+      mvs*)
+        case $cc_basename in
+          cxx*)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	  *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+	esac
+	;;
+
+      netbsd*)
+        if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
+	  _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
+	  wlarc=
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	fi
+	# Workaround some broken pre-1.5 toolchains
+	output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
+	;;
+
+      *nto* | *qnx*)
+        _LT_TAGVAR(ld_shlibs, $1)=yes
+	;;
+
+      openbsd* | bitrig*)
+	if test -f /usr/libexec/ld.so; then
+	  _LT_TAGVAR(hardcode_direct, $1)=yes
+	  _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	  _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
+	  _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib'
+	    _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E'
+	    _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive'
+	  fi
+	  output_verbose_link_cmd=func_echo_all
+	else
+	  _LT_TAGVAR(ld_shlibs, $1)=no
+	fi
+	;;
+
+      osf3* | osf4* | osf5*)
+        case $cc_basename in
+          KCC*)
+	    # Kuck and Associates, Inc. (KAI) C++ Compiler
+
+	    # KCC will only create a shared library if the output file
+	    # ends with ".so" (or ".sl" for HP-UX), so rename the library
+	    # to its proper name (with version) after linking.
+	    _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir'
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Archives containing C++ object files must be created using
+	    # the KAI C++ compiler.
+	    case $host in
+	      osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
+	      *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
+	    esac
+	    ;;
+          RCC*)
+	    # Rational C++ 2.4.1
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          cxx*)
+	    case $host in
+	      osf3*)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+		;;
+	      *)
+	        _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
+                  echo "-hidden">> $lib.exp~
+                  $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp  `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~
+                  $RM $lib.exp'
+	        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
+		;;
+	    esac
+
+	    _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	    # Commands to make compiler produce verbose output that lists
+	    # what "hidden" libraries, object files and flags are used when
+	    # linking a shared library.
+	    #
+	    # There doesn't appear to be a way to prevent this compiler from
+	    # explicitly linking system object files so we need to strip them
+	    # from the output so that they don't get included in the library
+	    # dependencies.
+	    output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"'
+	    ;;
+	  *)
+	    if test yes,no = "$GXX,$with_gnu_ld"; then
+	      _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*'
+	      case $host in
+	        osf3*)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $nostdlib_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+		  ;;
+	        *)
+	          _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $nostdlib_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib'
+		  ;;
+	      esac
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
+	      _LT_TAGVAR(hardcode_libdir_separator, $1)=:
+
+	      # Commands to make compiler produce verbose output that lists
+	      # what "hidden" libraries, object files and flags are used when
+	      # linking a shared library.
+	      output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+
+	    else
+	      # FIXME: insert proper C++ library support
+	      _LT_TAGVAR(ld_shlibs, $1)=no
+	    fi
+	    ;;
+        esac
+        ;;
+
+      psos*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      sunos4*)
+        case $cc_basename in
+          CC*)
+	    # Sun C++ 4.x
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          lcc*)
+	    # Lucid
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      solaris*)
+        case $cc_basename in
+          CC* | sunCC*)
+	    # Sun C++ 4.2, 5.x and Centerline C++
+            _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
+	    _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+              $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	    _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
+	    _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	    case $host_os in
+	      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+	      *)
+		# The compiler driver will combine and reorder linker options,
+		# but understands '-z linker_flag'.
+	        # Supported since Solaris 2.6 (maybe 2.5.1?)
+		_LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
+	        ;;
+	    esac
+	    _LT_TAGVAR(link_all_deplibs, $1)=yes
+
+	    output_verbose_link_cmd='func_echo_all'
+
+	    # Archives containing C++ object files must be created using
+	    # "CC -xar", where "CC" is the Sun C++ compiler.  This is
+	    # necessary to make sure instantiated templates are included
+	    # in the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
+	    ;;
+          gcx*)
+	    # Green Hills C++ Compiler
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+
+	    # The C++ compiler must be used to create the archive.
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
+	    ;;
+          *)
+	    # GNU C++ compiler with Solaris linker
+	    if test yes,no = "$GXX,$with_gnu_ld"; then
+	      _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs'
+	      if $CC --version | $GREP -v '^2\.7' > /dev/null; then
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -shared $pic_flag $nostdlib_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      else
+	        # g++ 2.7 appears to require '-G' NOT '-shared' on this
+	        # platform.
+	        _LT_TAGVAR(archive_cmds, $1)='$CC -G $nostdlib_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib'
+	        _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
+                  $CC -G $nostdlib_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
+
+	        # Commands to make compiler produce verbose output that lists
+	        # what "hidden" libraries, object files and flags are used when
+	        # linking a shared library.
+	        output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"'
+	      fi
+
+	      _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir'
+	      case $host_os in
+		solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+		*)
+		  _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract'
+		  ;;
+	      esac
+	    fi
+	    ;;
+        esac
+        ;;
+
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
+      _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+      _LT_TAGVAR(archive_cmds_need_lc, $1)=no
+      _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+      runpath_var='LD_RUN_PATH'
+
+      case $cc_basename in
+        CC*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+	*)
+	  _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	  ;;
+      esac
+      ;;
+
+      sysv5* | sco3.2v5* | sco5v6*)
+	# Note: We CANNOT use -z defs as we might desire, because we do not
+	# link with -lc, and that would cause any symbols used from libc to
+	# always be unresolved, which means just about no library would
+	# ever link correctly.  If we're not using GNU ld we use -z text
+	# though, which does catch some bad symbols but isn't as heavy-handed
+	# as -z defs.
+	_LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text'
+	_LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs'
+	_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+	_LT_TAGVAR(hardcode_shlibpath_var, $1)=no
+	_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir'
+	_LT_TAGVAR(hardcode_libdir_separator, $1)=':'
+	_LT_TAGVAR(link_all_deplibs, $1)=yes
+	_LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport'
+	runpath_var='LD_RUN_PATH'
+
+	case $cc_basename in
+          CC*)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~
+              '"$_LT_TAGVAR(old_archive_cmds, $1)"
+	    _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~
+              '"$_LT_TAGVAR(reload_cmds, $1)"
+	    ;;
+	  *)
+	    _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
+	    ;;
+	esac
+      ;;
+
+      tandem*)
+        case $cc_basename in
+          NCC*)
+	    # NonStop-UX NCC 3.20
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+          *)
+	    # FIXME: insert proper C++ library support
+	    _LT_TAGVAR(ld_shlibs, $1)=no
+	    ;;
+        esac
+        ;;
+
+      vxworks*)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+
+      *)
+        # FIXME: insert proper C++ library support
+        _LT_TAGVAR(ld_shlibs, $1)=no
+        ;;
+    esac
+
+    AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
+    test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no
+
+    _LT_TAGVAR(GCC, $1)=$GXX
+    _LT_TAGVAR(LD, $1)=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+  LDCXX=$LD
+  LD=$lt_save_LD
+  GCC=$lt_save_GCC
+  with_gnu_ld=$lt_save_with_gnu_ld
+  lt_cv_path_LDCXX=$lt_cv_path_LD
+  lt_cv_path_LD=$lt_save_path_LD
+  lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
+  lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
+fi # test yes != "$_lt_caught_CXX_error"
+
+AC_LANG_POP
+])# _LT_LANG_CXX_CONFIG
+
+
+# _LT_FUNC_STRIPNAME_CNF
+# ----------------------
+# func_stripname_cnf prefix suffix name
+# strip PREFIX and SUFFIX off of NAME.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+#
+# This function is identical to the (non-XSI) version of func_stripname,
+# except this one can be used by m4 code that may be executed by configure,
+# rather than the libtool script.
+m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl
+AC_REQUIRE([_LT_DECL_SED])
+AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])
+func_stripname_cnf ()
+{
+  case @S|@2 in
+  .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;;
+  *)  func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;;
+  esac
+} # func_stripname_cnf
+])# _LT_FUNC_STRIPNAME_CNF
+
+
+# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
+# ---------------------------------
+# Figure out "hidden" library dependencies from verbose
+# compiler output when linking a shared library.
+# Parse the compiler output and extract the necessary
+# objects, libraries and library flags.
+m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
+[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
+AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl
+# Dependencies to place before and after the object being linked:
+_LT_TAGVAR(predep_objects, $1)=
+_LT_TAGVAR(postdep_objects, $1)=
+_LT_TAGVAR(predeps, $1)=
+_LT_TAGVAR(postdeps, $1)=
+_LT_TAGVAR(compiler_lib_search_path, $1)=
+
+dnl we can't use the lt_simple_compile_test_code here,
+dnl because it contains code intended for an executable,
+dnl not a library.  It's possible we should let each
+dnl tag define a new lt_????_link_test_code variable,
+dnl but it's only used here...
+m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
+int a;
+void foo (void) { a = 0; }
+_LT_EOF
+], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
+class Foo
+{
+public:
+  Foo (void) { a = 0; }
+private:
+  int a;
+};
+_LT_EOF
+], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer*4 a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
+      subroutine foo
+      implicit none
+      integer a
+      a=0
+      return
+      end
+_LT_EOF
+], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
+public class foo {
+  private int a;
+  public void bar (void) {
+    a = 0;
+  }
+};
+_LT_EOF
+], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF
+package foo
+func foo() {
+}
+_LT_EOF
+])
+
+_lt_libdeps_save_CFLAGS=$CFLAGS
+case "$CC $CFLAGS " in #(
+*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;;
+*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;;
+*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;;
+esac
+
+dnl Parse the compiler output and extract the necessary
+dnl objects, libraries and library flags.
+if AC_TRY_EVAL(ac_compile); then
+  # Parse the compiler output and extract the necessary
+  # objects, libraries and library flags.
+
+  # Sentinel used to keep track of whether or not we are before
+  # the conftest object file.
+  pre_test_object_deps_done=no
+
+  for p in `eval "$output_verbose_link_cmd"`; do
+    case $prev$p in
+
+    -L* | -R* | -l*)
+       # Some compilers place space between "-{L,R}" and the path.
+       # Remove the space.
+       if test x-L = "$p" ||
+          test x-R = "$p"; then
+	 prev=$p
+	 continue
+       fi
+
+       # Expand the sysroot to ease extracting the directories later.
+       if test -z "$prev"; then
+         case $p in
+         -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;;
+         -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;;
+         -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;;
+         esac
+       fi
+       case $p in
+       =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;;
+       esac
+       if test no = "$pre_test_object_deps_done"; then
+	 case $prev in
+	 -L | -R)
+	   # Internal compiler library paths should come after those
+	   # provided the user.  The postdeps already come after the
+	   # user supplied libs so there is no need to process them.
+	   if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
+	     _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p
+	   else
+	     _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p"
+	   fi
+	   ;;
+	 # The "-l" case would never come before the object being
+	 # linked, so don't bother handling this case.
+	 esac
+       elif test "x$p" != x ; then # skip if $p is empty
+	 if test -z "$_LT_TAGVAR(postdeps, $1)"; then
+	   _LT_TAGVAR(postdeps, $1)=$prev$p
+	 else
+	   _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p"
+	 fi
+       fi
+       prev=
+       ;;
+
+    *.lto.$objext) ;; # Ignore GCC LTO objects
+    *.$objext)
+       # This assumes that the test object file only shows up
+       # once in the compiler output.
+       if test "$p" = "conftest.$objext"; then
+	 pre_test_object_deps_done=yes
+	 continue
+       fi
+
+       if test no = "$pre_test_object_deps_done"; then
+	 if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
+	   _LT_TAGVAR(predep_objects, $1)=$p
+	 else
+	   _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
+	 fi
+       else
+	 if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
+	   _LT_TAGVAR(postdep_objects, $1)=$p
+	 else
+	   _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
+	 fi
+       fi
+       ;;
+
+    *) ;; # Ignore the rest.
+
+    esac
+  done
+
+  # Clean up.
+  rm -f a.out a.exe
+else
+  echo "libtool.m4: error: problem compiling $1 test program"
+fi
+
+$RM -f confest.$objext
+CFLAGS=$_lt_libdeps_save_CFLAGS
+
+# PORTME: override above test on systems where it is broken
+m4_if([$1], [CXX],
+[case $host_os in
+interix[[3-9]]*)
+  # Interix 3.5 installs completely hosed .la files for C++, so rather than
+  # hack all around it, let's just trust "g++" to DTRT.
+  _LT_TAGVAR(predep_objects,$1)=
+  _LT_TAGVAR(postdep_objects,$1)=
+  _LT_TAGVAR(postdeps,$1)=
+  ;;
+esac
+])
+
+case " $_LT_TAGVAR(postdeps, $1) " in
+*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
+esac
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
+if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
+ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'`
+fi
+_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
+    [The directories searched by this compiler when creating a shared library])
+_LT_TAGDECL([], [predep_objects], [1],
+    [Dependencies to place before and after the objects being linked to
+    create a shared library])
+_LT_TAGDECL([], [postdep_objects], [1])
+_LT_TAGDECL([], [predeps], [1])
+_LT_TAGDECL([], [postdeps], [1])
+_LT_TAGDECL([], [compiler_lib_search_path], [1],
+    [The library search path used internally by the compiler when linking
+    a shared library])
+
+ac_nostdlib_flag=
+if test "$cc_basename" == FCCpx || test "$cc_basename" == fccpx || test "$cc_basename" == frtpx ; then
+   ac_nostdlib_flag=-Xg
+fi
+_LT_TAGVAR(nostdlib_flag, $1)=$ac_nostdlib_flag
+_LT_TAGDECL([], [nostdlib_flag], [1])
+])# _LT_SYS_HIDDEN_LIBDEPS
+
+
+# _LT_LANG_F77_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for a Fortran 77 compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_F77_CONFIG],
+[AC_LANG_PUSH(Fortran 77)
+if test -z "$F77" || test no = "$F77"; then
+  _lt_disable_F77=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for f77 test sources.
+ac_ext=f
+
+# Object file extension for compiled f77 test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the F77 compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_F77"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${F77-"f77"}
+  CFLAGS=$FFLAGS
+  compiler=$CC
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+  GCC=$G77
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test no = "$can_build_shared" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test yes = "$enable_shared" && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test ia64 != "$host_cpu"; then
+	  case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+	  yes,aix,yes) ;;		# shared object as lib.so file only
+	  yes,svr4,*) ;;		# shared object as lib.so archive member only
+	  yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+	  esac
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test yes = "$enable_shared" || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)=$G77
+    _LT_TAGVAR(LD, $1)=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_F77"
+
+AC_LANG_POP
+])# _LT_LANG_F77_CONFIG
+
+
+# _LT_LANG_FC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for a Fortran compiler are
+# suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_FC_CONFIG],
+[AC_LANG_PUSH(Fortran)
+
+if test -z "$FC" || test no = "$FC"; then
+  _lt_disable_FC=yes
+fi
+
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+_LT_TAGVAR(allow_undefined_flag, $1)=
+_LT_TAGVAR(always_export_symbols, $1)=no
+_LT_TAGVAR(archive_expsym_cmds, $1)=
+_LT_TAGVAR(export_dynamic_flag_spec, $1)=
+_LT_TAGVAR(hardcode_direct, $1)=no
+_LT_TAGVAR(hardcode_direct_absolute, $1)=no
+_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
+_LT_TAGVAR(hardcode_libdir_separator, $1)=
+_LT_TAGVAR(hardcode_minus_L, $1)=no
+_LT_TAGVAR(hardcode_automatic, $1)=no
+_LT_TAGVAR(inherit_rpath, $1)=no
+_LT_TAGVAR(module_cmds, $1)=
+_LT_TAGVAR(module_expsym_cmds, $1)=
+_LT_TAGVAR(link_all_deplibs, $1)=unknown
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+_LT_TAGVAR(no_undefined_flag, $1)=
+_LT_TAGVAR(whole_archive_flag_spec, $1)=
+_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
+
+# Source file extension for fc test sources.
+ac_ext=${ac_fc_srcext-f}
+
+# Object file extension for compiled fc test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# No sense in running all these tests if we already determined that
+# the FC compiler isn't working.  Some variables (like enable_shared)
+# are currently assumed to apply to all compilers on this platform,
+# and will be corrupted by setting them based on a non-working compiler.
+if test yes != "$_lt_disable_FC"; then
+  # Code to be used in simple compile tests
+  lt_simple_compile_test_code="\
+      subroutine t
+      return
+      end
+"
+
+  # Code to be used in simple link tests
+  lt_simple_link_test_code="\
+      program t
+      end
+"
+
+  # ltmain only uses $CC for tagged configurations so make sure $CC is set.
+  _LT_TAG_COMPILER
+
+  # save warnings/boilerplate of simple test code
+  _LT_COMPILER_BOILERPLATE
+  _LT_LINKER_BOILERPLATE
+
+  # Allow CC to be a program name with arguments.
+  lt_save_CC=$CC
+  lt_save_GCC=$GCC
+  lt_save_CFLAGS=$CFLAGS
+  CC=${FC-"f95"}
+  CFLAGS=$FCFLAGS
+  compiler=$CC
+  GCC=$ac_cv_fc_compiler_gnu
+
+  _LT_TAGVAR(compiler, $1)=$CC
+  _LT_CC_BASENAME([$compiler])
+
+  if test -n "$compiler"; then
+    AC_MSG_CHECKING([if libtool supports shared libraries])
+    AC_MSG_RESULT([$can_build_shared])
+
+    AC_MSG_CHECKING([whether to build shared libraries])
+    test no = "$can_build_shared" && enable_shared=no
+
+    # On AIX, shared libraries and static libraries use the same namespace, and
+    # are all built from PIC.
+    case $host_os in
+      aix3*)
+        test yes = "$enable_shared" && enable_static=no
+        if test -n "$RANLIB"; then
+          archive_cmds="$archive_cmds~\$RANLIB \$lib"
+          postinstall_cmds='$RANLIB $lib'
+        fi
+        ;;
+      aix[[4-9]]*)
+	if test ia64 != "$host_cpu"; then
+	  case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in
+	  yes,aix,yes) ;;		# shared object as lib.so file only
+	  yes,svr4,*) ;;		# shared object as lib.so archive member only
+	  yes,*) enable_static=no ;;	# shared object in lib.a archive as well
+	  esac
+	fi
+        ;;
+    esac
+    AC_MSG_RESULT([$enable_shared])
+
+    AC_MSG_CHECKING([whether to build static libraries])
+    # Make sure either enable_shared or enable_static is yes.
+    test yes = "$enable_shared" || enable_static=yes
+    AC_MSG_RESULT([$enable_static])
+
+    _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu
+    _LT_TAGVAR(LD, $1)=$LD
+
+    ## CAVEAT EMPTOR:
+    ## There is no encapsulation within the following macros, do not change
+    ## the running order or otherwise move them around unless you know exactly
+    ## what you are doing...
+    _LT_SYS_HIDDEN_LIBDEPS($1)
+    _LT_COMPILER_PIC($1)
+    _LT_COMPILER_C_O($1)
+    _LT_COMPILER_FILE_LOCKS($1)
+    _LT_LINKER_SHLIBS($1)
+    _LT_SYS_DYNAMIC_LINKER($1)
+    _LT_LINKER_HARDCODE_LIBPATH($1)
+
+    _LT_CONFIG($1)
+  fi # test -n "$compiler"
+
+  GCC=$lt_save_GCC
+  CC=$lt_save_CC
+  CFLAGS=$lt_save_CFLAGS
+fi # test yes != "$_lt_disable_FC"
+
+AC_LANG_POP
+])# _LT_LANG_FC_CONFIG
+
+
+# _LT_LANG_GCJ_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Java Compiler compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GCJ_CONFIG],
+[AC_REQUIRE([LT_PROG_GCJ])dnl
+AC_LANG_SAVE
+
+# Source file extension for Java test sources.
+ac_ext=java
+
+# Object file extension for compiled Java test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="class foo {}"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GCJ-"gcj"}
+CFLAGS=$GCJFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# GCJ did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GCJ_CONFIG
+
+
+# _LT_LANG_GO_CONFIG([TAG])
+# --------------------------
+# Ensure that the configuration variables for the GNU Go compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_GO_CONFIG],
+[AC_REQUIRE([LT_PROG_GO])dnl
+AC_LANG_SAVE
+
+# Source file extension for Go test sources.
+ac_ext=go
+
+# Object file extension for compiled Go test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code="package main; func main() { }"
+
+# Code to be used in simple link tests
+lt_simple_link_test_code='package main; func main() { }'
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=yes
+CC=${GOC-"gccgo"}
+CFLAGS=$GOFLAGS
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_TAGVAR(LD, $1)=$LD
+_LT_CC_BASENAME([$compiler])
+
+# Go did not exist at the time GCC didn't implicitly link libc in.
+_LT_TAGVAR(archive_cmds_need_lc, $1)=no
+
+_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
+_LT_TAGVAR(reload_flag, $1)=$reload_flag
+_LT_TAGVAR(reload_cmds, $1)=$reload_cmds
+
+## CAVEAT EMPTOR:
+## There is no encapsulation within the following macros, do not change
+## the running order or otherwise move them around unless you know exactly
+## what you are doing...
+if test -n "$compiler"; then
+  _LT_COMPILER_NO_RTTI($1)
+  _LT_COMPILER_PIC($1)
+  _LT_COMPILER_C_O($1)
+  _LT_COMPILER_FILE_LOCKS($1)
+  _LT_LINKER_SHLIBS($1)
+  _LT_LINKER_HARDCODE_LIBPATH($1)
+
+  _LT_CONFIG($1)
+fi
+
+AC_LANG_RESTORE
+
+GCC=$lt_save_GCC
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_GO_CONFIG
+
+
+# _LT_LANG_RC_CONFIG([TAG])
+# -------------------------
+# Ensure that the configuration variables for the Windows resource compiler
+# are suitably defined.  These variables are subsequently used by _LT_CONFIG
+# to write the compiler configuration to 'libtool'.
+m4_defun([_LT_LANG_RC_CONFIG],
+[AC_REQUIRE([LT_PROG_RC])dnl
+AC_LANG_SAVE
+
+# Source file extension for RC test sources.
+ac_ext=rc
+
+# Object file extension for compiled RC test sources.
+objext=o
+_LT_TAGVAR(objext, $1)=$objext
+
+# Code to be used in simple compile tests
+lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
+
+# Code to be used in simple link tests
+lt_simple_link_test_code=$lt_simple_compile_test_code
+
+# ltmain only uses $CC for tagged configurations so make sure $CC is set.
+_LT_TAG_COMPILER
+
+# save warnings/boilerplate of simple test code
+_LT_COMPILER_BOILERPLATE
+_LT_LINKER_BOILERPLATE
+
+# Allow CC to be a program name with arguments.
+lt_save_CC=$CC
+lt_save_CFLAGS=$CFLAGS
+lt_save_GCC=$GCC
+GCC=
+CC=${RC-"windres"}
+CFLAGS=
+compiler=$CC
+_LT_TAGVAR(compiler, $1)=$CC
+_LT_CC_BASENAME([$compiler])
+_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
+
+if test -n "$compiler"; then
+  :
+  _LT_CONFIG($1)
+fi
+
+GCC=$lt_save_GCC
+AC_LANG_RESTORE
+CC=$lt_save_CC
+CFLAGS=$lt_save_CFLAGS
+])# _LT_LANG_RC_CONFIG
+
+
+# LT_PROG_GCJ
+# -----------
+AC_DEFUN([LT_PROG_GCJ],
+[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
+  [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
+    [AC_CHECK_TOOL(GCJ, gcj,)
+      test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2"
+      AC_SUBST(GCJFLAGS)])])[]dnl
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
+
+
+# LT_PROG_GO
+# ----------
+AC_DEFUN([LT_PROG_GO],
+[AC_CHECK_TOOL(GOC, gccgo,)
+])
+
+
+# LT_PROG_RC
+# ----------
+AC_DEFUN([LT_PROG_RC],
+[AC_CHECK_TOOL(RC, windres,)
+])
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_RC], [])
+
+
+# _LT_DECL_EGREP
+# --------------
+# If we don't have a new enough Autoconf to choose the best grep
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_EGREP],
+[AC_REQUIRE([AC_PROG_EGREP])dnl
+AC_REQUIRE([AC_PROG_FGREP])dnl
+test -z "$GREP" && GREP=grep
+_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
+_LT_DECL([], [EGREP], [1], [An ERE matcher])
+_LT_DECL([], [FGREP], [1], [A literal string matcher])
+dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
+AC_SUBST([GREP])
+])
+
+
+# _LT_DECL_OBJDUMP
+# --------------
+# If we don't have a new enough Autoconf to choose the best objdump
+# available, choose the one first in the user's PATH.
+m4_defun([_LT_DECL_OBJDUMP],
+[AC_CHECK_TOOL(OBJDUMP, objdump, false)
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
+AC_SUBST([OBJDUMP])
+])
+
+# _LT_DECL_DLLTOOL
+# ----------------
+# Ensure DLLTOOL variable is set.
+m4_defun([_LT_DECL_DLLTOOL],
+[AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])
+AC_SUBST([DLLTOOL])
+])
+
+# _LT_DECL_SED
+# ------------
+# Check for a fully-functional sed program, that truncates
+# as few characters as possible.  Prefer GNU sed if found.
+m4_defun([_LT_DECL_SED],
+[AC_PROG_SED
+test -z "$SED" && SED=sed
+Xsed="$SED -e 1s/^X//"
+_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
+_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
+    [Sed that helps us avoid accidentally triggering echo(1) options like -n])
+])# _LT_DECL_SED
+
+m4_ifndef([AC_PROG_SED], [
+############################################################
+# NOTE: This macro has been submitted for inclusion into   #
+#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
+#  a released version of Autoconf we should remove this    #
+#  macro and use it instead.                               #
+############################################################
+
+m4_defun([AC_PROG_SED],
+[AC_MSG_CHECKING([for a sed that does not truncate output])
+AC_CACHE_VAL(lt_cv_path_SED,
+[# Loop through the user's path and test for sed and gsed.
+# Then use that list of sed's as ones to test for truncation.
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for lt_ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
+        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
+      fi
+    done
+  done
+done
+IFS=$as_save_IFS
+lt_ac_max=0
+lt_ac_count=0
+# Add /usr/xpg4/bin/sed as it is typically found on Solaris
+# along with /bin/sed that truncates output.
+for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
+  test ! -f "$lt_ac_sed" && continue
+  cat /dev/null > conftest.in
+  lt_ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
+  # Check for GNU sed and select it if it is found.
+  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
+    lt_cv_path_SED=$lt_ac_sed
+    break
+  fi
+  while true; do
+    cat conftest.in conftest.in >conftest.tmp
+    mv conftest.tmp conftest.in
+    cp conftest.in conftest.nl
+    echo >>conftest.nl
+    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
+    cmp -s conftest.out conftest.nl || break
+    # 10000 chars as input seems more than enough
+    test 10 -lt "$lt_ac_count" && break
+    lt_ac_count=`expr $lt_ac_count + 1`
+    if test "$lt_ac_count" -gt "$lt_ac_max"; then
+      lt_ac_max=$lt_ac_count
+      lt_cv_path_SED=$lt_ac_sed
+    fi
+  done
+done
+])
+SED=$lt_cv_path_SED
+AC_SUBST([SED])
+AC_MSG_RESULT([$SED])
+])#AC_PROG_SED
+])#m4_ifndef
+
+# Old name:
+AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([LT_AC_PROG_SED], [])
+
+
+# _LT_CHECK_SHELL_FEATURES
+# ------------------------
+# Find out whether the shell is Bourne or XSI compatible,
+# or has some other useful features.
+m4_defun([_LT_CHECK_SHELL_FEATURES],
+[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  lt_unset=unset
+else
+  lt_unset=false
+fi
+_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
+
+# test EBCDIC or ASCII
+case `echo X|tr X '\101'` in
+ A) # ASCII based system
+    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
+  lt_SP2NL='tr \040 \012'
+  lt_NL2SP='tr \015\012 \040\040'
+  ;;
+ *) # EBCDIC based system
+  lt_SP2NL='tr \100 \n'
+  lt_NL2SP='tr \r\n \100\100'
+  ;;
+esac
+_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
+_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
+])# _LT_CHECK_SHELL_FEATURES
+
+
+# _LT_PATH_CONVERSION_FUNCTIONS
+# -----------------------------
+# Determine what file name conversion functions should be used by
+# func_to_host_file (and, implicitly, by func_to_host_path).  These are needed
+# for certain cross-compile configurations and native mingw.
+m4_defun([_LT_PATH_CONVERSION_FUNCTIONS],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_MSG_CHECKING([how to convert $build file names to $host format])
+AC_CACHE_VAL(lt_cv_to_host_file_cmd,
+[case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32
+        ;;
+    esac
+    ;;
+  *-*-cygwin* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin
+        ;;
+      *-*-cygwin* )
+        lt_cv_to_host_file_cmd=func_convert_file_noop
+        ;;
+      * ) # otherwise, assume *nix
+        lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin
+        ;;
+    esac
+    ;;
+  * ) # unhandled hosts (and "normal" native builds)
+    lt_cv_to_host_file_cmd=func_convert_file_noop
+    ;;
+esac
+])
+to_host_file_cmd=$lt_cv_to_host_file_cmd
+AC_MSG_RESULT([$lt_cv_to_host_file_cmd])
+_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd],
+         [0], [convert $build file names to $host format])dnl
+
+AC_MSG_CHECKING([how to convert $build file names to toolchain format])
+AC_CACHE_VAL(lt_cv_to_tool_file_cmd,
+[#assume ordinary cross tools, or native build.
+lt_cv_to_tool_file_cmd=func_convert_file_noop
+case $host in
+  *-*-mingw* )
+    case $build in
+      *-*-mingw* ) # actually msys
+        lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32
+        ;;
+    esac
+    ;;
+esac
+])
+to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+AC_MSG_RESULT([$lt_cv_to_tool_file_cmd])
+_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd],
+         [0], [convert $build files to toolchain format])dnl
+])# _LT_PATH_CONVERSION_FUNCTIONS
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
new file mode 100644
index 0000000..94b0829
--- /dev/null
+++ b/m4/ltoptions.m4
@@ -0,0 +1,437 @@
+# Helper functions for option handling.                    -*- Autoconf -*-
+#
+#   Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
+#   Foundation, Inc.
+#   Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 8 ltoptions.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
+
+
+# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
+# ------------------------------------------
+m4_define([_LT_MANGLE_OPTION],
+[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
+
+
+# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
+# ---------------------------------------
+# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
+# matching handler defined, dispatch to it.  Other OPTION-NAMEs are
+# saved as a flag.
+m4_define([_LT_SET_OPTION],
+[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
+m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
+        _LT_MANGLE_DEFUN([$1], [$2]),
+    [m4_warning([Unknown $1 option '$2'])])[]dnl
+])
+
+
+# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
+# ------------------------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+m4_define([_LT_IF_OPTION],
+[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
+
+
+# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
+# -------------------------------------------------------
+# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
+# are set.
+m4_define([_LT_UNLESS_OPTIONS],
+[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+	    [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
+		      [m4_define([$0_found])])])[]dnl
+m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
+])[]dnl
+])
+
+
+# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
+# ----------------------------------------
+# OPTION-LIST is a space-separated list of Libtool options associated
+# with MACRO-NAME.  If any OPTION has a matching handler declared with
+# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
+# the unknown option and exit.
+m4_defun([_LT_SET_OPTIONS],
+[# Set options
+m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
+    [_LT_SET_OPTION([$1], _LT_Option)])
+
+m4_if([$1],[LT_INIT],[
+  dnl
+  dnl Simply set some default values (i.e off) if boolean options were not
+  dnl specified:
+  _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
+  ])
+  _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
+  ])
+  dnl
+  dnl If no reference was made to various pairs of opposing options, then
+  dnl we run the default mode handler for the pair.  For example, if neither
+  dnl 'shared' nor 'disable-shared' was passed, we enable building of shared
+  dnl archives by default:
+  _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
+  _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
+  _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
+		   [_LT_ENABLE_FAST_INSTALL])
+  _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4],
+		   [_LT_WITH_AIX_SONAME([aix])])
+  ])
+])# _LT_SET_OPTIONS
+
+
+## --------------------------------- ##
+## Macros to handle LT_INIT options. ##
+## --------------------------------- ##
+
+# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
+# -----------------------------------------
+m4_define([_LT_MANGLE_DEFUN],
+[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
+
+
+# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
+# -----------------------------------------------
+m4_define([LT_OPTION_DEFINE],
+[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
+])# LT_OPTION_DEFINE
+
+
+# dlopen
+# ------
+LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
+])
+
+AU_DEFUN([AC_LIBTOOL_DLOPEN],
+[_LT_SET_OPTION([LT_INIT], [dlopen])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'dlopen' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
+
+
+# win32-dll
+# ---------
+# Declare package support for building win32 dll's.
+LT_OPTION_DEFINE([LT_INIT], [win32-dll],
+[enable_win32_dll=yes
+
+case $host in
+*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+  ;;
+esac
+
+test -z "$AS" && AS=as
+_LT_DECL([], [AS],      [1], [Assembler program])dnl
+
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl
+
+test -z "$OBJDUMP" && OBJDUMP=objdump
+_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl
+])# win32-dll
+
+AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+_LT_SET_OPTION([LT_INIT], [win32-dll])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'win32-dll' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
+
+
+# _LT_ENABLE_SHARED([DEFAULT])
+# ----------------------------
+# implement the --enable-shared flag, and supports the 'shared' and
+# 'disable-shared' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_SHARED],
+[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([shared],
+    [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
+	[build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_shared=yes ;;
+    no) enable_shared=no ;;
+    *)
+      enable_shared=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_shared=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac],
+    [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
+
+    _LT_DECL([build_libtool_libs], [enable_shared], [0],
+	[Whether or not to build shared libraries])
+])# _LT_ENABLE_SHARED
+
+LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
+])
+
+AC_DEFUN([AC_DISABLE_SHARED],
+[_LT_SET_OPTION([LT_INIT], [disable-shared])
+])
+
+AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
+AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_SHARED], [])
+dnl AC_DEFUN([AM_DISABLE_SHARED], [])
+
+
+
+# _LT_ENABLE_STATIC([DEFAULT])
+# ----------------------------
+# implement the --enable-static flag, and support the 'static' and
+# 'disable-static' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_STATIC],
+[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([static],
+    [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
+	[build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_static=yes ;;
+    no) enable_static=no ;;
+    *)
+     enable_static=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_static=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac],
+    [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
+
+    _LT_DECL([build_old_libs], [enable_static], [0],
+	[Whether or not to build static libraries])
+])# _LT_ENABLE_STATIC
+
+LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
+
+# Old names:
+AC_DEFUN([AC_ENABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
+])
+
+AC_DEFUN([AC_DISABLE_STATIC],
+[_LT_SET_OPTION([LT_INIT], [disable-static])
+])
+
+AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
+AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AM_ENABLE_STATIC], [])
+dnl AC_DEFUN([AM_DISABLE_STATIC], [])
+
+
+
+# _LT_ENABLE_FAST_INSTALL([DEFAULT])
+# ----------------------------------
+# implement the --enable-fast-install flag, and support the 'fast-install'
+# and 'disable-fast-install' LT_INIT options.
+# DEFAULT is either 'yes' or 'no'.  If omitted, it defaults to 'yes'.
+m4_define([_LT_ENABLE_FAST_INSTALL],
+[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
+AC_ARG_ENABLE([fast-install],
+    [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
+    [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
+    [p=${PACKAGE-default}
+    case $enableval in
+    yes) enable_fast_install=yes ;;
+    no) enable_fast_install=no ;;
+    *)
+      enable_fast_install=no
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for pkg in $enableval; do
+	IFS=$lt_save_ifs
+	if test "X$pkg" = "X$p"; then
+	  enable_fast_install=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac],
+    [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
+
+_LT_DECL([fast_install], [enable_fast_install], [0],
+	 [Whether or not to optimize for fast installation])dnl
+])# _LT_ENABLE_FAST_INSTALL
+
+LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
+LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
+
+# Old names:
+AU_DEFUN([AC_ENABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'fast-install' option into LT_INIT's first parameter.])
+])
+
+AU_DEFUN([AC_DISABLE_FAST_INSTALL],
+[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you put
+the 'disable-fast-install' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
+dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
+
+
+# _LT_WITH_AIX_SONAME([DEFAULT])
+# ----------------------------------
+# implement the --with-aix-soname flag, and support the `aix-soname=aix'
+# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT
+# is either `aix', `both' or `svr4'.  If omitted, it defaults to `aix'.
+m4_define([_LT_WITH_AIX_SONAME],
+[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl
+shared_archive_member_spec=
+case $host,$enable_shared in
+power*-*-aix[[5-9]]*,yes)
+  AC_MSG_CHECKING([which variant of shared library versioning to provide])
+  AC_ARG_WITH([aix-soname],
+    [AS_HELP_STRING([--with-aix-soname=aix|svr4|both],
+      [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])],
+    [case $withval in
+    aix|svr4|both)
+      ;;
+    *)
+      AC_MSG_ERROR([Unknown argument to --with-aix-soname])
+      ;;
+    esac
+    lt_cv_with_aix_soname=$with_aix_soname],
+    [AC_CACHE_VAL([lt_cv_with_aix_soname],
+      [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT)
+    with_aix_soname=$lt_cv_with_aix_soname])
+  AC_MSG_RESULT([$with_aix_soname])
+  if test aix != "$with_aix_soname"; then
+    # For the AIX way of multilib, we name the shared archive member
+    # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
+    # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File.
+    # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag,
+    # the AIX toolchain works better with OBJECT_MODE set (default 32).
+    if test 64 = "${OBJECT_MODE-32}"; then
+      shared_archive_member_spec=shr_64
+    else
+      shared_archive_member_spec=shr
+    fi
+  fi
+  ;;
+*)
+  with_aix_soname=aix
+  ;;
+esac
+
+_LT_DECL([], [shared_archive_member_spec], [0],
+    [Shared archive member basename, for filename based shared library versioning on AIX])dnl
+])# _LT_WITH_AIX_SONAME
+
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])])
+LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])])
+
+
+# _LT_WITH_PIC([MODE])
+# --------------------
+# implement the --with-pic flag, and support the 'pic-only' and 'no-pic'
+# LT_INIT options.
+# MODE is either 'yes' or 'no'.  If omitted, it defaults to 'both'.
+m4_define([_LT_WITH_PIC],
+[AC_ARG_WITH([pic],
+    [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@],
+	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
+    [lt_p=${PACKAGE-default}
+    case $withval in
+    yes|no) pic_mode=$withval ;;
+    *)
+      pic_mode=default
+      # Look at the argument we got.  We use all the common list separators.
+      lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR,
+      for lt_pkg in $withval; do
+	IFS=$lt_save_ifs
+	if test "X$lt_pkg" = "X$lt_p"; then
+	  pic_mode=yes
+	fi
+      done
+      IFS=$lt_save_ifs
+      ;;
+    esac],
+    [pic_mode=m4_default([$1], [default])])
+
+_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
+])# _LT_WITH_PIC
+
+LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
+LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
+
+# Old name:
+AU_DEFUN([AC_LIBTOOL_PICMODE],
+[_LT_SET_OPTION([LT_INIT], [pic-only])
+AC_DIAGNOSE([obsolete],
+[$0: Remove this warning and the call to _LT_SET_OPTION when you
+put the 'pic-only' option into LT_INIT's first parameter.])
+])
+
+dnl aclocal-1.4 backwards compatibility:
+dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
+
+## ----------------- ##
+## LTDL_INIT Options ##
+## ----------------- ##
+
+m4_define([_LTDL_MODE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
+		 [m4_define([_LTDL_MODE], [nonrecursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [recursive],
+		 [m4_define([_LTDL_MODE], [recursive])])
+LT_OPTION_DEFINE([LTDL_INIT], [subproject],
+		 [m4_define([_LTDL_MODE], [subproject])])
+
+m4_define([_LTDL_TYPE], [])
+LT_OPTION_DEFINE([LTDL_INIT], [installable],
+		 [m4_define([_LTDL_TYPE], [installable])])
+LT_OPTION_DEFINE([LTDL_INIT], [convenience],
+		 [m4_define([_LTDL_TYPE], [convenience])])
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
new file mode 100644
index 0000000..48bc934
--- /dev/null
+++ b/m4/ltsugar.m4
@@ -0,0 +1,124 @@
+# ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
+#
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
+# Foundation, Inc.
+# Written by Gary V. Vaughan, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 6 ltsugar.m4
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
+
+
+# lt_join(SEP, ARG1, [ARG2...])
+# -----------------------------
+# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
+# associated separator.
+# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
+# versions in m4sugar had bugs.
+m4_define([lt_join],
+[m4_if([$#], [1], [],
+       [$#], [2], [[$2]],
+       [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
+m4_define([_lt_join],
+[m4_if([$#$2], [2], [],
+       [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
+
+
+# lt_car(LIST)
+# lt_cdr(LIST)
+# ------------
+# Manipulate m4 lists.
+# These macros are necessary as long as will still need to support
+# Autoconf-2.59, which quotes differently.
+m4_define([lt_car], [[$1]])
+m4_define([lt_cdr],
+[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
+       [$#], 1, [],
+       [m4_dquote(m4_shift($@))])])
+m4_define([lt_unquote], $1)
+
+
+# lt_append(MACRO-NAME, STRING, [SEPARATOR])
+# ------------------------------------------
+# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'.
+# Note that neither SEPARATOR nor STRING are expanded; they are appended
+# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
+# No SEPARATOR is output if MACRO-NAME was previously undefined (different
+# than defined and empty).
+#
+# This macro is needed until we can rely on Autoconf 2.62, since earlier
+# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
+m4_define([lt_append],
+[m4_define([$1],
+	   m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
+
+
+
+# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
+# ----------------------------------------------------------
+# Produce a SEP delimited list of all paired combinations of elements of
+# PREFIX-LIST with SUFFIX1 through SUFFIXn.  Each element of the list
+# has the form PREFIXmINFIXSUFFIXn.
+# Needed until we can rely on m4_combine added in Autoconf 2.62.
+m4_define([lt_combine],
+[m4_if(m4_eval([$# > 3]), [1],
+       [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
+[[m4_foreach([_Lt_prefix], [$2],
+	     [m4_foreach([_Lt_suffix],
+		]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
+	[_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
+
+
+# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
+# -----------------------------------------------------------------------
+# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
+# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
+m4_define([lt_if_append_uniq],
+[m4_ifdef([$1],
+	  [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
+		 [lt_append([$1], [$2], [$3])$4],
+		 [$5])],
+	  [lt_append([$1], [$2], [$3])$4])])
+
+
+# lt_dict_add(DICT, KEY, VALUE)
+# -----------------------------
+m4_define([lt_dict_add],
+[m4_define([$1($2)], [$3])])
+
+
+# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
+# --------------------------------------------
+m4_define([lt_dict_add_subkey],
+[m4_define([$1($2:$3)], [$4])])
+
+
+# lt_dict_fetch(DICT, KEY, [SUBKEY])
+# ----------------------------------
+m4_define([lt_dict_fetch],
+[m4_ifval([$3],
+	m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
+    m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
+
+
+# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
+# -----------------------------------------------------------------
+m4_define([lt_if_dict_fetch],
+[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
+	[$5],
+    [$6])])
+
+
+# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
+# --------------------------------------------------------------
+m4_define([lt_dict_filter],
+[m4_if([$5], [], [],
+  [lt_join(m4_quote(m4_default([$4], [[, ]])),
+           lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
+		      [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
+])
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
new file mode 100644
index 0000000..fa04b52
--- /dev/null
+++ b/m4/ltversion.m4
@@ -0,0 +1,23 @@
+# ltversion.m4 -- version numbers			-*- Autoconf -*-
+#
+#   Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
+#   Written by Scott James Remnant, 2004
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# @configure_input@
+
+# serial 4179 ltversion.m4
+# This file is part of GNU Libtool
+
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
+
+AC_DEFUN([LTVERSION_VERSION],
+[macro_version='2.4.6'
+macro_revision='2.4.6'
+_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
+_LT_DECL(, macro_revision, 0)
+])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
new file mode 100644
index 0000000..c6b26f8
--- /dev/null
+++ b/m4/lt~obsolete.m4
@@ -0,0 +1,99 @@
+# lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
+#
+#   Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
+#   Foundation, Inc.
+#   Written by Scott James Remnant, 2004.
+#
+# This file is free software; the Free Software Foundation gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+
+# serial 5 lt~obsolete.m4
+
+# These exist entirely to fool aclocal when bootstrapping libtool.
+#
+# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN),
+# which have later been changed to m4_define as they aren't part of the
+# exported API, or moved to Autoconf or Automake where they belong.
+#
+# The trouble is, aclocal is a bit thick.  It'll see the old AC_DEFUN
+# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
+# using a macro with the same name in our local m4/libtool.m4 it'll
+# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
+# and doesn't know about Autoconf macros at all.)
+#
+# So we provide this file, which has a silly filename so it's always
+# included after everything else.  This provides aclocal with the
+# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
+# because those macros already exist, or will be overwritten later.
+# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
+#
+# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
+# Yes, that means every name once taken will need to remain here until
+# we give up compatibility with versions before 1.7, at which point
+# we need to keep only those names which we still refer to.
+
+# This is to help aclocal find these macros, as it can't see m4_define.
+AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
+
+m4_ifndef([AC_LIBTOOL_LINKER_OPTION],	[AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
+m4_ifndef([AC_PROG_EGREP],		[AC_DEFUN([AC_PROG_EGREP])])
+m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_AC_SHELL_INIT],		[AC_DEFUN([_LT_AC_SHELL_INIT])])
+m4_ifndef([_LT_AC_SYS_LIBPATH_AIX],	[AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
+m4_ifndef([_LT_PROG_LTMAIN],		[AC_DEFUN([_LT_PROG_LTMAIN])])
+m4_ifndef([_LT_AC_TAGVAR],		[AC_DEFUN([_LT_AC_TAGVAR])])
+m4_ifndef([AC_LTDL_ENABLE_INSTALL],	[AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
+m4_ifndef([AC_LTDL_PREOPEN],		[AC_DEFUN([AC_LTDL_PREOPEN])])
+m4_ifndef([_LT_AC_SYS_COMPILER],	[AC_DEFUN([_LT_AC_SYS_COMPILER])])
+m4_ifndef([_LT_AC_LOCK],		[AC_DEFUN([_LT_AC_LOCK])])
+m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE],	[AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
+m4_ifndef([_LT_AC_TRY_DLOPEN_SELF],	[AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
+m4_ifndef([AC_LIBTOOL_PROG_CC_C_O],	[AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
+m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
+m4_ifndef([AC_LIBTOOL_OBJDIR],		[AC_DEFUN([AC_LIBTOOL_OBJDIR])])
+m4_ifndef([AC_LTDL_OBJDIR],		[AC_DEFUN([AC_LTDL_OBJDIR])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
+m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP],	[AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
+m4_ifndef([AC_PATH_MAGIC],		[AC_DEFUN([AC_PATH_MAGIC])])
+m4_ifndef([AC_PROG_LD_GNU],		[AC_DEFUN([AC_PROG_LD_GNU])])
+m4_ifndef([AC_PROG_LD_RELOAD_FLAG],	[AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
+m4_ifndef([AC_DEPLIBS_CHECK_METHOD],	[AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
+m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
+m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
+m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS],	[AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
+m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP],	[AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
+m4_ifndef([LT_AC_PROG_EGREP],		[AC_DEFUN([LT_AC_PROG_EGREP])])
+m4_ifndef([LT_AC_PROG_SED],		[AC_DEFUN([LT_AC_PROG_SED])])
+m4_ifndef([_LT_CC_BASENAME],		[AC_DEFUN([_LT_CC_BASENAME])])
+m4_ifndef([_LT_COMPILER_BOILERPLATE],	[AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
+m4_ifndef([_LT_LINKER_BOILERPLATE],	[AC_DEFUN([_LT_LINKER_BOILERPLATE])])
+m4_ifndef([_AC_PROG_LIBTOOL],		[AC_DEFUN([_AC_PROG_LIBTOOL])])
+m4_ifndef([AC_LIBTOOL_SETUP],		[AC_DEFUN([AC_LIBTOOL_SETUP])])
+m4_ifndef([_LT_AC_CHECK_DLFCN],		[AC_DEFUN([_LT_AC_CHECK_DLFCN])])
+m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER],	[AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
+m4_ifndef([_LT_AC_TAGCONFIG],		[AC_DEFUN([_LT_AC_TAGCONFIG])])
+m4_ifndef([AC_DISABLE_FAST_INSTALL],	[AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
+m4_ifndef([_LT_AC_LANG_CXX],		[AC_DEFUN([_LT_AC_LANG_CXX])])
+m4_ifndef([_LT_AC_LANG_F77],		[AC_DEFUN([_LT_AC_LANG_F77])])
+m4_ifndef([_LT_AC_LANG_GCJ],		[AC_DEFUN([_LT_AC_LANG_GCJ])])
+m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
+m4_ifndef([_LT_AC_LANG_C_CONFIG],	[AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
+m4_ifndef([_LT_AC_LANG_CXX_CONFIG],	[AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
+m4_ifndef([_LT_AC_LANG_F77_CONFIG],	[AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
+m4_ifndef([_LT_AC_LANG_GCJ_CONFIG],	[AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
+m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG],	[AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
+m4_ifndef([_LT_AC_LANG_RC_CONFIG],	[AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
+m4_ifndef([AC_LIBTOOL_CONFIG],		[AC_DEFUN([AC_LIBTOOL_CONFIG])])
+m4_ifndef([_LT_AC_FILE_LTDLL_C],	[AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS],	[AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])])
+m4_ifndef([_LT_AC_PROG_CXXCPP],		[AC_DEFUN([_LT_AC_PROG_CXXCPP])])
+m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS],	[AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])])
+m4_ifndef([_LT_PROG_ECHO_BACKSLASH],	[AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])])
+m4_ifndef([_LT_PROG_F77],		[AC_DEFUN([_LT_PROG_F77])])
+m4_ifndef([_LT_PROG_FC],		[AC_DEFUN([_LT_PROG_FC])])
+m4_ifndef([_LT_PROG_CXX],		[AC_DEFUN([_LT_PROG_CXX])])
diff --git a/scripts/utils.m4 b/m4/utils.m4
similarity index 57%
rename from scripts/utils.m4
rename to m4/utils.m4
index ea94bb8..3ef65eb 100644
--- a/scripts/utils.m4
+++ b/m4/utils.m4
@@ -4,20 +4,53 @@ dnl
 dnl
 define(`_CAT', `$1$2')dnl  concatenate two strings
 dnl
+dnl
+define(`NULL_CHAR', changequote([,])[changequote([,])'\0'changequote(`,')]changequote(`,'))
+dnl
+dnl dnl dnl
+dnl
+define(`NC2ITYPE', `ifelse(`$1', `text',      `char',
+                           `$1', `schar',     `schar',
+                           `$1', `uchar',     `uchar',
+                           `$1', `short',     `short',
+                           `$1', `ushort',    `ushort',
+                           `$1', `int',       `int',
+                           `$1', `uint',      `uint',
+                           `$1', `long',      `long',
+                           `$1', `float',     `float',
+                           `$1', `double',    `double',
+                           `$1', `longlong',  `long long',
+                           `$1', `ulonglong', `unsigned long long')')dnl
+dnl
 dnl dnl dnl
 dnl
-define(`FUNC2ITYPE', `ifelse(`$1', `text',      `char',
-                             `$1', `schar',     `schar',
-                             `$1', `uchar',     `uchar',
-                             `$1', `short',     `short',
-                             `$1', `ushort',    `ushort',
-                             `$1', `int',       `int',
-                             `$1', `uint',      `uint',
-                             `$1', `long',      `long',
-                             `$1', `float',     `float',
-                             `$1', `double',    `double',
-                             `$1', `longlong',  `long long',
-                             `$1', `ulonglong', `unsigned long long')')dnl
+define(`SIZEOFITYPE', `ifelse(`$1', `text',      `SIZEOF_CHAR',
+                              `$1', `schar',     `SIZEOF_SIGNED_CHAR',
+                              `$1', `uchar',     `SIZEOF_UNSIGNED_CHAR',
+                              `$1', `short',     `SIZEOF_SHORT',
+                              `$1', `ushort',    `SIZEOF_UNSIGNED_SHORT',
+                              `$1', `int',       `SIZEOF_INT',
+                              `$1', `uint',      `SIZEOF_UNSIGNED_INT',
+                              `$1', `long',      `SIZEOF_LONG',
+                              `$1', `float',     `SIZEOF_FLOAT',
+                              `$1', `double',    `SIZEOF_DOUBLE',
+                              `$1', `longlong',  `SIZEOF_LONG_LONG',
+                              `$1', `ulonglong', `SIZEOF_UNSIGNED_LONG_LONG')')dnl
+dnl
+dnl size of external NC data type is defined in CDF format specifications
+dnl
+define(`SIZEOFXTYPE', `ifelse(`$1', `NC_CHAR',   `1',
+                              `$1', `NC_BYTE',   `1',
+                              `$1', `NC_UBYTE',  `1',
+                              `$1', `NC_SHORT',  `2',
+                              `$1', `NC_USHORT', `2',
+                              `$1', `NC_INT',    `4',
+                              `$1', `NC_UINT',   `4',
+                              `$1', `NC_LONG',   `4',
+                              `$1', `NC_FLOAT',  `4',
+                              `$1', `NC_DOUBLE', `8',
+                              `$1', `NC_INT64',  `8',
+                              `$1', `NC_UINT64', `8')')dnl
 dnl
 dnl dnl dnl
 dnl
@@ -32,7 +65,24 @@ define(`ITYPE2MPI',  `ifelse(`$1', `text',      `MPI_CHAR',
                              `$1', `float',     `MPI_FLOAT',
                              `$1', `double',    `MPI_DOUBLE',
                              `$1', `longlong',  `MPI_LONG_LONG_INT',
-                             `$1', `ulonglong', `MPI_UNSIGNED_LONG_LONG')')dnl
+                             `$1', `ulonglong', `MPI_UNSIGNED_LONG_LONG',
+                             `MPI_DATATYPE_NULL')')dnl
+dnl
+dnl dnl dnl
+dnl
+define(`NCTYPE2MPI', `ifelse(`$1', `NC_CHAR',   `MPI_CHAR',
+                             `$1', `NC_BYTE',   `MPI_SIGNED_CHAR',
+                             `$1', `NC_UBYTE',  `MPI_UNSIGNED_CHAR',
+                             `$1', `NC_SHORT',  `MPI_SHORT',
+                             `$1', `NC_USHORT', `MPI_UNSIGNED_SHORT',
+                             `$1', `NC_INT',    `MPI_INT',
+                             `$1', `NC_UINT',   `MPI_UNSIGNED',
+                             `$1', `NC_LONG',   `MPI_LONG',
+                             `$1', `NC_FLOAT',  `MPI_FLOAT',
+                             `$1', `NC_DOUBLE', `MPI_DOUBLE',
+                             `$1', `NC_INT64',  `MPI_LONG_LONG_INT',
+                             `$1', `NC_UINT64', `MPI_UNSIGNED_LONG_LONG',
+                             `MPI_DATATYPE_NULL')')dnl
 dnl
 dnl dnl dnl
 dnl
@@ -59,16 +109,15 @@ dnl
 define(`CDF2_ITYPE_LIST', `text, schar, short, int, long, float, double')dnl
 dnl
 dnl
-define(`CollIndep', `ifelse(`$1', `_all', `COLL_IO', `INDEP_IO')')dnl
-define(`ReadWrite', `ifelse(`$1',  `get', `READ_REQ',
-                            `$1', `iget', `READ_REQ',
-                                          `WRITE_REQ')')dnl
+define(`CollIndep', `ifelse(`$1', `_all', `NC_REQ_COLL', `NC_REQ_INDEP')')dnl
+define(`ReadWrite', `ifelse(`$1',  `get', `NC_REQ_WR',
+                            `$1', `iget', `NC_REQ_RD',
+                                          `NC_REQ_WR')')dnl
 define(`BufArgs',   `ifelse(`$2', `',
-                            `ifelse($1, `put', `const void *buf,', `void *buf,')
-                             MPI_Offset   bufcount,
-                             MPI_Datatype buftype',
-                            `ifelse($1, `put', `const FUNC2ITYPE($2) *buf',
-                                                     `FUNC2ITYPE($2) *buf')')')
+                            `ifelse($1, `get', `void *buf,', `const void *buf,')
+                             MPI_Offset bufcount, MPI_Datatype buftype',
+                            `ifelse($1, `get',       `NC2ITYPE($2) *buf',
+                                               `const NC2ITYPE($2) *buf')')')
 dnl
 dnl index arguments for APIs of different kinds
 dnl
@@ -86,9 +135,16 @@ define(`ArgKind', `ifelse(
 dnl
 dnl arguments passed to a function for APIs of different kinds
 dnl
+define(`ArgStartCountStrideMap', `ifelse(
+       `$1', `',  `NULL,  NULL,  NULL,   NULL',
+       `$1', `1', `start, NULL,  NULL,   NULL',
+       `$1', `a', `start, count, NULL,   NULL',
+       `$1', `s', `start, count, stride, NULL',
+       `$1', `m', `start, count, stride, imap')')dnl
+dnl
 define(`ArgStartCountStride', `ifelse(
-       `$1', `',  `NULL,  NULL, NULL',
-       `$1', `1', `start, NULL, NULL',
+       `$1', `',  `NULL,  NULL,  NULL',
+       `$1', `1', `start, NULL,  NULL',
        `$1', `a', `start, count, NULL',
                   `start, count, stride')')dnl
 dnl
diff --git a/macros.make.in b/macros.make.in
deleted file mode 100644
index dbbf188..0000000
--- a/macros.make.in
+++ /dev/null
@@ -1,159 +0,0 @@
-#
-# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
-# See COPYRIGHT notice in top-level directory.
-#
-# $Id: macros.make.in 2745 2016-12-28 17:02:41Z wkliao $
-#
-# @configure_input@
-#
-# The purpose of this file is to contain common make(1) macros.
-# It should be processed by every execution of that utility.
-#
-
- at SET_MAKE@
-
-# POSIX shell.  Shouldn't be necessary -- but is under IRIX 5.3.
-SHELL		= /bin/sh
-RM		= @RM@
-LN_S		= @LN_S@
-
-# Installation Directories:
-# SRCDIR	= @SRCDIR@
-prefix		= @prefix@
-BUILDDIR	= @BUILDDIR@
-LIBRARY		= @BUILDDIR@/src/lib/libpnetcdf.a
-
-ifdef DESTDIR
-INCDIR		= $(DESTDIR)/$(prefix)/include
-LIBDIR		= $(DESTDIR)/$(prefix)/lib
-BINDIR		= $(DESTDIR)/$(prefix)/bin
-MANDIR		= $(DESTDIR)/$(prefix)/share/man
-else
-INCDIR		= $(prefix)/include
-LIBDIR		= $(prefix)/lib
-BINDIR		= $(prefix)/bin
-MANDIR		= $(prefix)/share/man
-endif
-
-# Useful tools
-M4		= @M4@
-M4FLAGS		= @M4FLAGS@ -I at abs_top_srcdir@/scripts -DPNETCDF
-M4FFLAGS	= @M4FFLAGS@ -I at abs_top_srcdir@/scripts -DPNETCDF
-EGREP		= @EGREP@
-
-# AC_PROG_SED and AC_PROG_GREP are only available on autoconf 2.60 and later
-# SED		= @SED@
-# GREP		= @GREP@
-SED		= sed
-GREP		= grep
-
-# Preprocessing:
-DEFS		= @DEFS@
-FC_DEFINE	= @FC_DEFINE@
-CPP		= @CPP@
-FPP		= @FPP@
-
-ifeq (@PNETCDF_DEBUG@, 1)
-CPPFLAGS	= $(INCLUDES) $(DEFS) @CPPFLAGS@ -DPNETCDF_DEBUG
-CXXCPPFLAGS	= $(INCLUDES) $(DEFS) @CXXCPPFLAGS@ -DPNETCDF_DEBUG
-FPPFLAGS	= $(INCLUDES) @FPPFLAGS@ @NAGf90FPPFLAGS@ @FC_DEFINE at PNETCDF_DEBUG
-else
-CPPFLAGS	= $(INCLUDES) $(DEFS) @CPPFLAGS@
-CXXCPPFLAGS	= $(INCLUDES) $(DEFS) @CXXCPPFLAGS@
-FPPFLAGS	= $(INCLUDES) @FPPFLAGS@ @NAGf90FPPFLAGS@
-endif
-
-# Compilation:
-MPICC		= @MPICC@
-MPICXX		= @MPICXX@
-MPIF77		= @MPIF77@
-MPIF90		= @MPIF90@
-
-SEQ_CC		= @SEQ_CC@
-
-# debugging and optimization options for compiling and linking
-CFLAGS		= @CFLAGS@
-CXXFLAGS	= @CXXFLAGS@
-F77FLAGS	= @F77FLAGS@ @NAG_FCFLAGS@
-F90FLAGS	= @F90FLAGS@ @NAG_FCFLAGS@
-
-# compiler options for different file extensions: .f .F .f90 .F90
-F77FLAGS_f	= @F77FLAGS_f@
-F77FLAGS_F	= @F77FLAGS_F@
-F90FLAGS_f90	= @F90FLAGS_f90@
-F90FLAGS_F90	= @F90FLAGS_F90@
-
-# preprocessor options for different file extensions: .f .F .f90 .F90
-F77PPFLAGS_f	= @F77PPFLAGS_f@
-F77PPFLAGS_F	= @F77PPFLAGS_F@
-F90PPFLAGS_f90	= @F90PPFLAGS_f90@
-F90PPFLAGS_F90	= @F90PPFLAGS_F90@
-
-# NETCDF.MOD	= @NETCDF_MOD@
-CC_MAKEDEPEND	= @CC_MAKEDEPEND@
-
-COMPILE.c	= $(MPICC)  $(CFLAGS)       $(CPPFLAGS) -c
-COMPILE.cxx	= $(MPICXX) $(CXXFLAGS)     $(CXXCPPFLAGS) -c
-COMPILE.f	= $(MPIF77) $(F77FLAGS_f)   $(FPPFLAGS) $(F77FLAGS) -c
-COMPILE.f90	= $(MPIF90) $(F90FLAGS_f90) $(FPPFLAGS) $(F90FLAGS) -c
-COMPILE.F	= $(MPIF77) $(F77FLAGS_F)   $(FPPFLAGS) $(F77FLAGS) $(F77PPFLAGS_F) -c
-COMPILE.F90	= $(MPIF90) $(F90FLAGS_F90) $(FPPFLAGS) $(F90FLAGS) $(F90PPFLAGS_F90) -c
-# In PnetCDF, we follow the file extension convention that .F and .F90 files
-# require preprocessing, while .f and .f90 do not.
-
-
-# Linking:
-FLIBS		= @FLIBS@
-FCLIBS		= @FCLIBS@
-F90LIBS		= @F90LIBS@
-FLDFLAGS	= @FLDFLAGS@
-F90LDFLAGS	= @F90LDFLAGS@
-LDFLAGS		= @LDFLAGS@
-LIBS		= @LIBS@
-
-LINK.c		= $(MPICC)  $(CFLAGS)   -o $@
-LINK.cxx	= $(MPICXX) $(CXXFLAGS) -o $@
-LINK.F77	= $(MPIF77) $(F77FLAGS) -o $@
-LINK.F90	= $(MPIF90) $(F90FLAGS) -o $@
-
-TEST_MPIRUN	= @TEST_MPIRUN@
-TEST_OUTDIR	= @TEST_OUTDIR@
-TEST_SEQRUN	= @TEST_SEQRUN@
-
-# Manual pages:
-WHATIS		= @WHATIS@
-# The following macro should be empty on systems that don't
-# allow users to create their own manual-page indexes.
-MAKEWHATIS_CMD	= @MAKEWHATIS_CMD@
-
-
-# Misc. Utilities:
-AR		= @AR@
-ARFLAGS		= @ARFLAGS@
-AWK		= @AWK@
-RANLIB		= @RANLIB@
-INSTALL 	= @INSTALL@
-INSTALL_DATA	= @INSTALL_DATA@
-TARFLAGS	= -chf
-
-
-# Dummy macros: used only as placeholders to silence GNU make.  They are
-# redefined, as necessary, in subdirectory makefiles.
-HEADER		= dummy_header
-HEADER1		= dummy_header1
-HEADER2		= dummy_header2
-HEADER3		= dummy_header3
-MANUAL		= dummy_manual
-PROGRAM		= dummy_program
-
-
-# Distribution macros:
-FTPDIR		= /home/ftp/pub/$(PACKAGE)
-FTPBINDIR	= @FTPBINDIR@
-
-PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
-PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
-PNETCDF_VERSION_SUB   = @PNETCDF_VERSION_SUB@
-PNETCDF_VERSION_PRE   = @PNETCDF_VERSION_PRE@
-PNETCDF_VERSION       = @PNETCDF_VERSION@
-
diff --git a/man/Makefile.am b/man/Makefile.am
new file mode 100644
index 0000000..4e5d5ca
--- /dev/null
+++ b/man/Makefile.am
@@ -0,0 +1,32 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3495 2017-11-01 05:15:00Z wkliao $
+#
+# @configure_input@
+
+man_MANS = pnetcdf.3
+if HAS_FORTRAN
+man_MANS += pnetcdf_f77.3 pnetcdf_f90.3
+endif
+
+CLEANFILES = $(man_MANS)
+
+EXTRA_DIST = pnetcdf.m4 pnetcdf_f90.m4
+
+pnetcdf.3: pnetcdf.m4
+	$(M4) $(M4FLAGS) -DAPI=C -DPNETCDF_VERSION=$(PNETCDF_VERSION) $? > $@  || $(RM) -f $@
+
+pnetcdf_f77.3: pnetcdf.m4
+	$(M4) $(M4FLAGS) -DAPI=F -DPNETCDF_VERSION=$(PNETCDF_VERSION) $? > $@  || $(RM) -f $@
+
+pnetcdf_f90.3: pnetcdf_f90.m4
+	$(M4) $(M4FLAGS) -DPNETCDF_VERSION=$(PNETCDF_VERSION) $? > $@  || $(RM) -f $@
+
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%e %b %Y'`|g" $(distdir)/pnetcdf.m4
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%Y-%m-%d'`|g"  $(distdir)/pnetcdf.m4
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%e %b %Y'`|g" $(distdir)/pnetcdf_f90.m4
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%Y-%m-%d'`|g"  $(distdir)/pnetcdf_f90.m4
+
diff --git a/man/Makefile.in b/man/Makefile.in
index 1d0db89..c9d8a94 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -1,60 +1,636 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 1507 2013-11-17 05:18:16Z wkliao $
+# $Id: Makefile.am 3495 2017-11-01 05:15:00Z wkliao $
 #
 # @configure_input@
-
-srcdir = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at HAS_FORTRAN_TRUE@am__append_1 = pnetcdf_f77.3 pnetcdf_f90.3
+subdir = man
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man3dir = $(mandir)/man3
+am__installdirs = "$(DESTDIR)$(man3dir)"
+NROFF = nroff
+MANS = $(man_MANS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+man_MANS = pnetcdf.3 $(am__append_1)
+CLEANFILES = $(man_MANS)
+EXTRA_DIST = pnetcdf.m4 pnetcdf_f90.m4
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu man/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man3: $(man_MANS)
+	@$(NORMAL_INSTALL)
+	@list1=''; \
+	list2='$(man_MANS)'; \
+	test -n "$(man3dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.3[a-z]*$$/p'; \
+	fi; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \
+	done; }
+
+uninstall-man3:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man3dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.3[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(man3dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
 
-include ../macros.make
+html: html-am
 
-MANUAL_C   = pnetcdf.3
-MANUAL_F77 = pnetcdf_f77.3
-MANUAL_F90 = pnetcdf_f90.3
+html-am:
 
-MANUAL = $(MANUAL_C)
-ifeq (@has_fortran@, yes)
-MANUAL += $(MANUAL_F77)
-MANUAL += $(MANUAL_F90)
-endif
+info: info-am
 
-PACKING_LIST = pnetcdf.m4 pnetcdf_f90.m4 \
-               Makefile.in
+info-am:
 
-GARBAGE = $(MANUAL)
+install-data-am: install-man
 
-all: $(MANUAL)
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man3
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man3
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags-am dist-hook distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-man3 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags-am tests-am tests-local uninstall uninstall-am \
+	uninstall-man uninstall-man3
+
+.PRECIOUS: Makefile
 
-RELEASE_DATE = "@PNETCDF_RELEASE_DATE2@"
-RELEASE_STR  = "@PNETCDF_VERSION@ of @PNETCDF_RELEASE_DATE@"
 
 pnetcdf.3: pnetcdf.m4
-	$(M4) $(M4FLAGS) -DAPI=C -DRELEASE_STR=$(RELEASE_STR) -DRELEASE_DATE=$(RELEASE_DATE) $? > $@  || $(RM) -f $@
+	$(M4) $(M4FLAGS) -DAPI=C -DPNETCDF_VERSION=$(PNETCDF_VERSION) $? > $@  || $(RM) -f $@
 
 pnetcdf_f77.3: pnetcdf.m4
-	$(M4) $(M4FLAGS) -DAPI=F -DRELEASE_STR=$(RELEASE_STR) -DRELEASE_DATE=$(RELEASE_DATE) $? > $@  || $(RM) -f $@
+	$(M4) $(M4FLAGS) -DAPI=F -DPNETCDF_VERSION=$(PNETCDF_VERSION) $? > $@  || $(RM) -f $@
 
 pnetcdf_f90.3: pnetcdf_f90.m4
-	$(M4) $(M4FLAGS) -DRELEASE_STR=$(RELEASE_STR) -DRELEASE_DATE=$(RELEASE_DATE) $? > $@  || $(RM) -f $@
-
-test:
-
-install: $(MANUAL)
-	$(INSTALL) -d -m 755 $(MANDIR)/man3
-	@for i in $(MANUAL) ; do ( \
-	    if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	    else file=$$i; fi; \
-	    fn=`basename $$i` ; \
-	    $(INSTALL_DATA) $$file $(MANDIR)/man3/$$fn \
-	; ) ; done
-
-uninstall:
-	@for i in $(MANUAL) ; do ( \
-	    fn=`basename $$i` ; \
-	    $(RM) -f $(MANDIR)/man3/$$fn \
-	; ) ; done
-
-include $(srcdir)/../rules.make
+	$(M4) $(M4FLAGS) -DPNETCDF_VERSION=$(PNETCDF_VERSION) $? > $@  || $(RM) -f $@
+
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%e %b %Y'`|g" $(distdir)/pnetcdf.m4
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%Y-%m-%d'`|g"  $(distdir)/pnetcdf.m4
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%e %b %Y'`|g" $(distdir)/pnetcdf_f90.m4
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%Y-%m-%d'`|g"  $(distdir)/pnetcdf_f90.m4
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/man/pnetcdf.m4 b/man/pnetcdf.m4
index 1791ad6..778913f 100644
--- a/man/pnetcdf.m4
+++ b/man/pnetcdf.m4
@@ -429,7 +429,7 @@ divert(0)dnl
 .nr yr \n(yr+1900
 .af mo 01
 .af dy 01
-.TH PNETCDF 3 RELEASE_DATE "Printed: \n(yr-\n(mo-\n(dy" "LIBRARY FUNCTIONS"
+.TH PnetCDF 3<<>>ifelse(API,C,,f) "PnetCDF PNETCDF_VERSION" "Printed: \n(yr-\n(mo-\n(dy" "LIBRARY FUNCTIONS"
 .SH N<<>>AME
 PnetCDF \- Parallel library for accessing files in Network Common Data Form (CDF, CDF-2 and CDF-5 formats)
 .SH SYNOPSIS
@@ -460,13 +460,13 @@ DECL(RETSTR(), inq_libvers, (VOID_ARG))
 FOLD(inq_libvers)
 .sp
 Returns a string identifying the version of the PnetCDF library, and
-when it was built, like: "RELEASE_STR".
+when it was built, like: "PNETCDF_VERSION of  1 Nov 2017".
 .LP
 The RCS \fBident(1)\fP command will find a string like
 "$\|Id: @\|(#) PnetCDF library version 
-RELEASE_STR $"
+PNETCDF_VERSION of  1 Nov 2017 $"
 in the library. The SCCS \fBwhat(1)\fP command will find a string like
-"PnetCDF library version RELEASE_STR".
+"PnetCDF library version PNETCDF_VERSION of  1 Nov 2017".
 .SH "RETURN VALUES"
 .LP
 All PnetCDF functions (except
@@ -1237,7 +1237,29 @@ ifelse(API,C,<<A NULL() pointer means the memory-resident values have
 the same structure as the associated netCDF variable.>>)
 .SH "VARIABLE PREFILLING"
 .LP
-PnetCDF does not support data filling.
+Prior to version 1.6.1, PnetCDF does not support data filling.
+The default fill mode in PnetCDF is MACRO(NOFILL)
+This contrary to netCDF library whose default is MACRO(FILL)
+When fill mode is enabled, PnetCDF sets the values of
+all newly-defined variables of finite length (i.e. those that do not have
+an unlimited, dimension) to the type-dependent fill-value associated with each
+variable.  This is done when FREF(enddef) is called.  The
+fill-value for a variable may be changed from the default value by
+defining the attribute `\fB_FillValue\fR' for the variable.  This
+attribute must have the same type as the variable and be of length one.
+.LP
+Variables with an unlimited dimension are not prefilled in PnetCDF.
+This is also contrary to netCDF, which does prefill record variables.
+In PnetCDF, filling a record variable must be done by calling
+FREF(fill_var_rec). Note this fills only one record of
+a variable.
+.LP 
+The fill mode for the entire file can be set by FREF(set_fill).
+Per-variable fill mode setting is also available through
+FREF(def_var_fill).
+In PnetCDF, changing fill mode must be done in define mode.
+In netCDF, it is true only for fix-sized variables.
+For record variables, changing fill mode can be made at any time in netCDF.
 .SH "ENVIRONMENT VARIABLES"
 .TP 4
 .B PNETCDF_SAFE_MODE
@@ -1258,6 +1280,8 @@ visit https://lists.mcs.anl.gov/mailman/listinfo/parallel-netcdf
 .BR ncmpidiff (1),
 .BR ncmpivalid (1),
 .BR pnetcdf (3<<>>ifelse(API,C,,f)).
+.SH DATE
+2017-11-01
 .LP
 \fIPnetCDF User's Guide\fP, published
 by Northwestern University and Argonne National Laboratory.
diff --git a/man/pnetcdf_f90.m4 b/man/pnetcdf_f90.m4
index 101cc4f..c0737d6 100644
--- a/man/pnetcdf_f90.m4
+++ b/man/pnetcdf_f90.m4
@@ -1,7 +1,7 @@
 .nr yr \n(yr+1900
 .af mo 01
 .af dy 01
-.TH PNETCDF 3f90 "RELEASE_DATE" "Printed: \n(yr.\n(mo.\n(dy" "LIBRARY FUNCTIONS"
+.TH PnetCDF 3f90 "PnetCDF PNETCDF_VERSION" "Printed: \n(yr.\n(mo.\n(dy" "LIBRARY FUNCTIONS"
 .SH NAME
 PnetCDF \- Parallel library for accessing files in Network Common Data Form (CDF, CDF-2 and CDF-5 formats)
 .SH SYNOPSIS
@@ -29,13 +29,13 @@ character(len=80) :: nf90mpi_inq_libvers\fR
 .RE
 .sp
 Returns a string identifying the version of the PnetCDF library, and
-when it was built, like: "RELEASE_STR".
+when it was built, like: "PNETCDF_VERSION of  1 Nov 2017".
 .LP
 The RCS \fBident(1)\fP command will find a string like
 "$\|Id: @\|(#) PnetCDF library version
-RELEASE_STR $"
+PNETCDF_VERSION of  1 Nov 2017 $"
 in the library. The SCCS \fBwhat(1)\fP command will find a string like
-"PnetCDF library version RELEASE_STR".
+"PnetCDF library version PNETCDF_VERSION of  1 Nov 2017".
 .SH "ROUTINE DESCRIPTIONS"
 .LP
 All PnetCDF functions (except
@@ -736,7 +736,30 @@ memory locations is 1 and not the element's byte-length as in netCDF 2).
 
 .SH "VARIABLE PREFILLING"
 .LP
-PnetCDF does not support data filling.
+Prior to version 1.6.1, PnetCDF does not support data filling.
+The default fill mode in PnetCDF is \fBNF90_NOFILL\fR.
+This contrary to netCDF library whose default is \fBNF90_FILL\fR.
+When fill mode is enabled, PnetCDF sets the values of
+all newly-defined variables of finite length (i.e. those that do not have
+an unlimited, dimension) to the type-dependent fill-value associated with each
+variable.  This is done when \fBnf90mpi_enddef(\|)\fR
+is called.  The
+fill-value for a variable may be changed from the default value by
+defining the attribute `\fB_FillValue\fR' for the variable.  This
+attribute must have the same type as the variable and be of length one.
+.LP
+Variables with an unlimited dimension are not prefilled in PnetCDF.
+This is also contrary to netCDF, which does prefill record variables.
+In PnetCDF, filling a record variable must be done by calling
+\fBnf90mpi_fill_var_rec(\|)\fR. Note this fills only one record of
+a variable.
+.LP
+The fill mode for the entire file can be set by \fBnf90mpi_set_fill(\|)\fR.
+Per-variable fill mode setting is also available through
+\fBnf90mpi_def_var_fill(\|)\fR.
+In PnetCDF, changing fill mode must be done in define mode.
+In netCDF, it is true only for fix-sized variables.
+For record variables, changing fill mode can be made at any time in netCDF.
 .SH "ENVIRONMENT VARIABLES"
 .TP 4
 .B PNETCDF_SAFE_MODE
@@ -757,6 +780,8 @@ visit https://lists.mcs.anl.gov/mailman/listinfo/parallel-netcdf
 .BR ncmpidiff (1),
 .BR ncmpivalid (1),
 .BR pnetcdf (3f90).
+.SH DATE
+2017-11-01
 .LP
 \fIPnetCDF User's Guide\fP, published
 by Northwestern University and Argonne National Laboratory.
diff --git a/rules.make b/rules.make
deleted file mode 100644
index e21bbf3..0000000
--- a/rules.make
+++ /dev/null
@@ -1,264 +0,0 @@
-# $Id: rules.make 2650 2016-11-24 02:55:40Z wkliao $
-
-# The purpose of this file is to contain common make(1) rules.
-# It should be processed by every execution of the that utility.
-
-.SUFFIXES:
-.SUFFIXES:	.a .o .i .f .c .cpp .F .y .l .m4 .f90 .F90
-
-
-################################################################################
-# Compilation (including preprocessing):
-
-.c.o:
-	$(COMPILE.c) $<
-
-.c.i:
-	$(CPP) $(CPPFLAGS) $< >$@
-
-.cpp.o:
-	$(COMPILE.cxx) $<
-
-.f.o:
-	$(COMPILE.f) $<
-
-.f90.o:
-	$(COMPILE.f90) $<
-
-.F90.o:
-	$(COMPILE.F90) $<
-
-.F.o:
-	$(COMPILE.F) $<
-
-# Not all FORTRAN compilers support C-preprocessing of *.F files; ergo, a 
-# relatively complicated rule ensues.
-# .F.o:
-# 	@case "$(COMPILE.F)" in	\
-# 	    '')	\
-# 		set -x;	\
-# 		$(FPP) $(FPPFLAGS) -C $*.F | grep -v '^#' >$*-tmp.f || 	\
-# 		    ($(RM) -f $*-tmp.f ; exit 1);	\
-# 		$(COMPILE.f) -o $@ $*-tmp.f || ($(RM) -f $*-tmp.f; exit 1);	\
-# 		$(RM) -f $*-tmp.f;	\
-# 		;;	\
-# 	    *)	\
-# 		$(COMPILE.F) $<;	\
-# 		;;	\
-# 	esac
-
-#.F.f:
-#	$(FPP) $(FPPFLAGS) $*.F | grep -v '^#' >$*.f || ($(RM) -f $*.f; exit 1)
-
-.m4.h:
-	$(M4) $(M4FLAGS) $< >$@
-
-.m4.c:
-	$(M4) $(M4FLAGS) $< >$@
-
-.m4.F:
-	$(M4) $(M4FFLAGS) $< >$@
-
-.m4.f90:
-	$(M4) $(M4FFLAGS) $< >$@
-
-.m4.F90:
-	$(M4) $(M4FFLAGS) $< >$@
-
-
-################################################################################
-# Libraries:
-
-# lib:		$(LIBRARY)
-
-#-------------------------------------------------------------------------------
-# Shared Libraries:
-#
-# Here only as a place holder and notebook.  Don't try to use this stuff
-# unless you really, really know what you're doing!  (And even then we
-# guarantee nothing!)
-#
-shared_library:
-	@case `uname -sr` in \
-	HP-UX*) \
-	    $(MAKE) $(MFLAGS) hpux_shared_library;; \
-	IRIX*) \
-	    $(MAKE) $(MFLAGS) irix_shared_library;; \
-	Linux*) \
-	    $(MAKE) $(MFLAGS) linux_shared_library;; \
-	OSF1*) \
-	    $(MAKE) $(MFLAGS) osf1_shared_library;; \
-	'SunOS 4'*) \
-	    $(MAKE) $(MFLAGS) sunos4_shared_library;; \
-	'SunOS 5'*) \
-	    $(MAKE) $(MFLAGS) sunos5_shared_library;; \
-	*) \
-	    echo 1>&2 "Don't know how to make a shared library" \
-		"on this system"; \
-	    exit 1;; \
-	esac
-
-hpux_shared_library:
-	nm libpnetcdf.a | grep extern | grep entry | \
-	    awk '-F|' '{print $$1}' | sed 's/^/-u /' >symbols.log
-	ld -o $(LIBRARY:.a=.sl) -b -c symbols.log $(LIBRARY)
-	$(RM) -f symbols.log
-irix_shared_library:
-	ld -o $(LIBRARY:.a=.so) -shared -no_archive \
-	    -all $(LIBRARY) -none -lc -lC $(LIBS)
-linux_shared_library:
-	ld -o $(LIBRARY:.a=.so) -shared --whole-archive $(LIBRARY)
-osf1_shared_library:
-	ld -o $(LIBRARY:.a=.so) -shared -all $(LIBRARY)
-sunos4_shared_library:
-	undefopts=`/bin/nm $(LIBRARY) | awk '$$2~/^T$$/{print $$3}' | \
-		   sed 's/^/-u /'` && \
-	    ld -o $(LIBRARY:.a=.so) $$undefopts $(LIBRARY)
-sunos5_shared_library:
-	undefopts=`/usr/ccs/bin/nm $(LIBRARY) | grep GLOB | grep FUNC | \
-		   awk '-F|' '{print $$8}' | sed 's/^/-u /'` && \
-	    ld -o $(LIBRARY:.a=.so) -G $$undefopts $(LIBRARY)
-
-
-################################################################################
-# Linking:
-
-
-################################################################################
-# $(INSTALL)ation:
-
-$(INCDIR)/$(HEADER):	$(INCDIR) $(HEADER)
-	$(INSTALL) $(srcdir)/$(HEADER) $@
-$(INCDIR)/$(HEADER1):	$(INCDIR) $(HEADER1)
-	$(INSTALL) $(srcdir)/$(HEADER1) $@
-$(INCDIR)/$(HEADER2):	$(INCDIR) $(HEADER2)
-	$(INSTALL) $(srcdir)/$(HEADER2) $@
-$(INCDIR)/$(HEADER3):	$(INCDIR) $(HEADER3)
-	$(INSTALL) $(srcdir)/$(HEADER3) $@
-
-$(LIBDIR)/$(LIBRARY):	$(LIBDIR) $(LIBRARY)
-	$(INSTALL) -d -m 755 $(LIBDIR)
-	$(INSTALL) -m 644  $(LIBRARY) $@
-
-$(BINDIR)/$(PROGRAM):	$(BINDIR) $(PROGRAM)
-	$(INSTALL) -d -m 755 $(BINDIR)
-	$(INSTALL) -m 755  $(PROGRAM) $@
-
-#$(BINDIR) \
-#$(INCDIR) \
-#$(LIBDIR) \
-#$(MANDIR) :
-#	-test -d $@ || mkdir $@
-
-#$(MANDIR)/man1 \
-#$(MANDIR)/man3 \
-#$(MANDIR)/man3f \
-#$(MANDIR)/man3f90 :		$(MANDIR)
-#	-test -d $@ || mkdir $@
-
-# $(MANDIR)/man1/$(MANUAL):	$(MANDIR)/man1 $(MANUAL)
-# 	$(INSTALL) $(srcdir)/$(MANUAL) $@
-# $(MANDIR)/man3/$(MANUAL):	$(MANDIR)/man3 $(MANUAL)
-# 	$(INSTALL) $(srcdir)/$(MANUAL) $@
-# $(MANDIR)/man3f/$(MANUAL):	$(MANDIR)/man3 $(MANDIR)/man3/$(MANUAL) \
-# 				$(MANDIR)/man3f
-# 	$(RM) -f $@
-# 	$(LN_S) $(MANDIR)/man3/$(MANUAL) $@
-# $(MANDIR)/man3f90/$(MANUAL):	$(MANDIR)/man3 $(MANDIR)/man3/$(MANUAL) \
-# 				$(MANDIR)/man3f90
-# 	$(RM) -f $@
-# 	$(LN_S) $(MANDIR)/man3/$(MANUAL) $@
-
-################################################################################
-# Cleanup:
-
-clean:		FORCE
-	@if [ -n "$(SUBDIRS)" ]; then \
-	    subdirs="$(SUBDIRS)"; \
-	    for subdir in $$subdirs; do \
-		(cd $$subdir && $(MAKE) $(MFLAGS) clean) ; \
-	    done; \
-	fi
-	@$(RM) -f *.o *.a *.so *.sl *.i *.Z core core.* vgcore.* $(GARBAGE) \
-		  *.gcda *.gcno *.gcov gmon.out
-
-distclean:	FORCE
-	@if [ -n "$(PACKING_SUBDIRS)" ]; then \
-	    subdirs="$(PACKING_SUBDIRS)"; \
-	    for subdir in $$subdirs; do \
-		(cd $$subdir && $(MAKE) $(MFLAGS) distclean) ; \
-	    done; \
-	fi
-	@if [ -n "$(PACKING_SUBDIRS)" ]; then \
-	    subdirs="$(PACKING_SUBDIRS)"; \
-	    for subdir in $$subdirs; do \
-		if ! [ $(srcdir) -ef `pwd` ] ; then rmdir $$subdir ; fi \
-	    done; \
-	fi
-	@$(RM) -rf SunWS_cache
-	@$(RM) -f *.o *.a *.so *.sl *.i *.Z core core.* vgcore.* $(GARBAGE) \
-		  *.gcda *.gcno *.gcov gmon.out \
-	          MANIFEST *.log $(DIST_GARBAGE) cscope.out cscope.files
-	@$(RM) -f Makefile
-
-################################################################################
-# Dependencies:
-
-# This target should only need to be made at the UPC.
-# NOTES:
-#   *  The target file might be a symbolic link.
-#   *  The name of the target doesn't match the name of the created file to
-#      prevent constant updating of the included file `depend' by make(1).
-#
-deps:		FORCE
-	$(CC_MAKEDEPEND) $(CPPFLAGS) *.c | grep -v '/usr/include' >>depend
-	sort -u -o depend depend
-
-
-################################################################################
-# Distribution:
-
-# The following rule echoes the contents of $(PACKING_LIST) in the
-# current directory and in all subdirectories.  All pathnames are made
-# relative to the current directory.
-#
-MANIFEST.echo:	FORCE
-	echo $(PACKING_LIST) | fmt -1
-	if [ -n "$(PACKING_SUBDIRS)" ]; then \
-	    subdirs="$(PACKING_SUBDIRS)"; \
-	    for subdir in $$subdirs; do \
-		(cd $$subdir && \
-		echo 1>&2 Creating $@ in `pwd` && \
-		$(MAKE) $(MFLAGS) MANIFEST.echo | sed "s|^|$$subdir/|") || exit 1; \
-	    done; \
-	else \
-	   :; \
-	fi
-
-# The following rule ensures that all files in $(PACKING_LIST) exist in
-# the current directory and in all subdirectories.
-#
-ensure_manifest:	$(PACKING_LIST) FORCE
-	if [ -n "$(SUBDIRS)" ]; then \
-	    subdirs="$(SUBDIRS)"; \
-	    for subdir in $$subdirs; do \
-		(cd $$subdir && \
-		echo 1>&2 Creating $@ in `pwd` && \
-		$(MAKE) $(MFLAGS) ensure_manifest) || exit 1; \
-	    done; \
-	else \
-	   :; \
-	fi
-
-
-################################################################################
-# Misc:
-
-FORCE:
-
-.PHONY: FORCE all library clean distclean TAGS clean_macros rmdir_src_test b-test c-test f-test
-.PHONY: subdirs $(SUBDIRS) install $(INSTALLDIRS) uninstall $(UNINSTALLDIRS)
-.PHONY: tests check testing $(CHECK_DIRS) $(PTEST_DIRS) verbose_check verbose_testing $(VCHECK_DIRS)
-.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
-.PHONY: install_PKGCONFIG uninstall_PKGCONFIG install_CONFIG uninstall_CONFIG
-
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
deleted file mode 100644
index 08e19a1..0000000
--- a/scripts/Makefile.in
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
-# See COPYRIGHT notice in top-level directory.
-#
-# $Id: Makefile.in 2596 2016-11-02 17:36:50Z wkliao $
-#
-# @configure_input@
-
-srcdir  = @srcdir@
-VPATH   = @srcdir@
-
-include ../macros.make
-
-GARBAGE      =
-
-PACKING_LIST = config.guess \
-               config.sub \
-               install-sh \
-               Makefile.in \
-               foreach.m4 \
-               utils.m4
-
-all:
-
-include $(srcdir)/../rules.make
-
diff --git a/scripts/compile b/scripts/compile
new file mode 100755
index 0000000..a85b723
--- /dev/null
+++ b/scripts/compile
@@ -0,0 +1,347 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-10-14.11; # UTC
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# 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.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""	$nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+	# lazily determine how to convert abs files
+	case `uname -s` in
+	  MINGW*)
+	    file_conv=mingw
+	    ;;
+	  CYGWIN*)
+	    file_conv=cygwin
+	    ;;
+	  *)
+	    file_conv=wine
+	    ;;
+	esac
+      fi
+      case $file_conv/,$2, in
+	*,$file_conv,*)
+	  ;;
+	mingw/*)
+	  file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+	  ;;
+	cygwin/*)
+	  file=`cygpath -m "$file" || echo "$file"`
+	  ;;
+	wine/*)
+	  file=`winepath -w "$file" || echo "$file"`
+	  ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+	-o)
+	  # configure might choose to run compile as 'compile cc -o foo foo.c'.
+	  eat=1
+	  case $2 in
+	    *.o | *.[oO][bB][jJ])
+	      func_file_conv "$2"
+	      set x "$@" -Fo"$file"
+	      shift
+	      ;;
+	    *)
+	      func_file_conv "$2"
+	      set x "$@" -Fe"$file"
+	      shift
+	      ;;
+	  esac
+	  ;;
+	-I)
+	  eat=1
+	  func_file_conv "$2" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-I*)
+	  func_file_conv "${1#-I}" mingw
+	  set x "$@" -I"$file"
+	  shift
+	  ;;
+	-l)
+	  eat=1
+	  func_cl_dashl "$2"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-l*)
+	  func_cl_dashl "${1#-l}"
+	  set x "$@" "$lib"
+	  shift
+	  ;;
+	-L)
+	  eat=1
+	  func_cl_dashL "$2"
+	  ;;
+	-L*)
+	  func_cl_dashL "${1#-L}"
+	  ;;
+	-static)
+	  shared=false
+	  ;;
+	-Wl,*)
+	  arg=${1#-Wl,}
+	  save_ifs="$IFS"; IFS=','
+	  for flag in $arg; do
+	    IFS="$save_ifs"
+	    linker_opts="$linker_opts $flag"
+	  done
+	  IFS="$save_ifs"
+	  ;;
+	-Xlinker)
+	  eat=1
+	  linker_opts="$linker_opts $2"
+	  ;;
+	-*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+	*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+	  func_file_conv "$1"
+	  set x "$@" -Tp"$file"
+	  shift
+	  ;;
+	*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+	  func_file_conv "$1" mingw
+	  set x "$@" "$file"
+	  shift
+	  ;;
+	*)
+	  set x "$@" "$1"
+	  shift
+	  ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+	# configure might choose to run compile as 'compile cc -o foo foo.c'.
+	# So we strip '-o arg' only if arg is an object.
+	eat=1
+	case $2 in
+	  *.o | *.obj)
+	    ofile=$2
+	    ;;
+	  *)
+	    set x "$@" -o "$2"
+	    shift
+	    ;;
+	esac
+	;;
+      *.c)
+	cfile=$1
+	set x "$@" "$1"
+	shift
+	;;
+      *)
+	set x "$@" "$1"
+	shift
+	;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/scripts/config.guess b/scripts/config.guess
index 43f0cdb..07785f5 100755
--- a/scripts/config.guess
+++ b/scripts/config.guess
@@ -1,14 +1,12 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2011-10-01'
+timestamp='2017-07-19'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful, but
@@ -17,26 +15,22 @@ timestamp='2011-10-01'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner.  Please send patches (context
-# diff format) to <config-patches at gnu.org> and include a ChangeLog
-# entry.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 #
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+#
+# Please send patches to <config-patches at gnu.org>.
+
 
 me=`echo "$0" | sed -e 's,.*/,,'`
 
@@ -56,9 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
-Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -140,12 +132,33 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+	# If the system lacks a compiler, then just pick glibc.
+	# We could probably try harder.
+	LIBC=gnu
+
+	eval $set_cc_for_build
+	cat <<-EOF > $dummy.c
+	#include <features.h>
+	#if defined(__UCLIBC__)
+	LIBC=uclibc
+	#elif defined(__dietlibc__)
+	LIBC=dietlibc
+	#else
+	LIBC=gnu
+	#endif
+	EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+	;;
+esac
+
 # Note: order is significant - the case branches are not exclusive.
 
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:NetBSD:*:*)
 	# NetBSD (nbsd) targets should (where applicable) match one or
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
 	# switched to ELF, *-*-netbsd* would select the old
 	# object file format.  This provides both forward
@@ -155,19 +168,29 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	# Note: NetBSD doesn't particularly care about the vendor
 	# portion of the name.  We always set it to "unknown".
 	sysctl="sysctl -n hw.machine_arch"
-	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+	    /sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || \
+	    echo unknown)`
 	case "${UNAME_MACHINE_ARCH}" in
 	    armeb) machine=armeb-unknown ;;
 	    arm*) machine=arm-unknown ;;
 	    sh3el) machine=shl-unknown ;;
 	    sh3eb) machine=sh-unknown ;;
 	    sh5el) machine=sh5le-unknown ;;
+	    earmv*)
+		arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+		endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
+		machine=${arch}${endian}-unknown
+		;;
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
+	# to ELF recently (or will in the future) and ABI.
 	case "${UNAME_MACHINE_ARCH}" in
+	    earm*)
+		os=netbsdelf
+		;;
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
@@ -184,6 +207,13 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		os=netbsd
 		;;
 	esac
+	# Determine ABI tags.
+	case "${UNAME_MACHINE_ARCH}" in
+	    earm*)
+		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+		abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+		;;
+	esac
 	# The OS release
 	# Debian GNU/NetBSD machines have a different userland, and
 	# thus, need a distinct triplet. However, they do not need
@@ -194,18 +224,26 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 		release='-gnu'
 		;;
 	    *)
-		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
 		;;
 	esac
 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-	echo "${machine}-${os}${release}"
+	echo "${machine}-${os}${release}${abi}"
+	exit ;;
+    *:Bitrig:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
 	exit ;;
     *:OpenBSD:*:*)
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
 	exit ;;
+    *:LibertyBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+	exit ;;
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
 	exit ;;
@@ -218,6 +256,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
 	exit ;;
+    *:Sortix:*:*)
+	echo ${UNAME_MACHINE}-unknown-sortix
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	*4.0)
@@ -234,42 +275,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
+		UNAME_MACHINE=alphaev5 ;;
 	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
+		UNAME_MACHINE=alphaev56 ;;
 	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
+		UNAME_MACHINE=alphapca56 ;;
 	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
+		UNAME_MACHINE=alphapca57 ;;
 	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
+		UNAME_MACHINE=alphaev6 ;;
 	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
+		UNAME_MACHINE=alphaev67 ;;
 	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
+		UNAME_MACHINE=alphaev69 ;;
 	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
+		UNAME_MACHINE=alphaev7 ;;
 	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
+		UNAME_MACHINE=alphaev79 ;;
 	esac
 	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
 	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
 	exitcode=$?
 	trap '' 0
@@ -304,7 +345,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
 	exit ;;
-    arm:riscos:*:*|arm:RISCOS:*:*)
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
 	echo arm-unknown-riscos
 	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -342,16 +383,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	eval $set_cc_for_build
-	SUN_ARCH="i386"
+	SUN_ARCH=i386
 	# If there is a compiler, see if it is configured for 64-bit objects.
 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
 	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
 	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
 		grep IS_64BIT_ARCH >/dev/null
 	    then
-		SUN_ARCH="x86_64"
+		SUN_ARCH=x86_64
 	    fi
 	fi
 	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
@@ -376,7 +417,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
 		echo m68k-sun-sunos${UNAME_RELEASE}
@@ -562,8 +603,9 @@ EOF
 	else
 		IBM_ARCH=powerpc
 	fi
-	if [ -x /usr/bin/oslevel ] ; then
-		IBM_REV=`/usr/bin/oslevel`
+	if [ -x /usr/bin/lslpp ] ; then
+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
 	else
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
@@ -600,13 +642,13 @@ EOF
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
 		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
 		    case "${sc_cpu_version}" in
-		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
 		      532)                      # CPU_PA_RISC2_0
 			case "${sc_kernel_bits}" in
-			  32) HP_ARCH="hppa2.0n" ;;
-			  64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+			  32) HP_ARCH=hppa2.0n ;;
+			  64) HP_ARCH=hppa2.0w ;;
+			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
 			esac ;;
 		    esac
 		fi
@@ -645,11 +687,11 @@ EOF
 		    exit (0);
 		}
 EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
+	if [ ${HP_ARCH} = hppa2.0w ]
 	then
 	    eval $set_cc_for_build
 
@@ -662,12 +704,12 @@ EOF
 	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
 	    # => hppa64-hp-hpux11.23
 
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
 		grep -q __LP64__
 	    then
-		HP_ARCH="hppa2.0w"
+		HP_ARCH=hppa2.0w
 	    else
-		HP_ARCH="hppa64"
+		HP_ARCH=hppa64
 	    fi
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@@ -772,14 +814,14 @@ EOF
 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
 	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
 	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
 	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -795,17 +837,24 @@ EOF
 	UNAME_PROCESSOR=`/usr/bin/uname -p`
 	case ${UNAME_PROCESSOR} in
 	    amd64)
-		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-	    *)
-		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+		UNAME_PROCESSOR=x86_64 ;;
+	    i386)
+		UNAME_PROCESSOR=i586 ;;
 	esac
+	echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
 	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
 	exit ;;
+    *:MINGW64*:*)
+	echo ${UNAME_MACHINE}-pc-mingw64
+	exit ;;
     *:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
 	exit ;;
+    *:MSYS*:*)
+	echo ${UNAME_MACHINE}-pc-msys
+	exit ;;
     i*:windows32*:*)
 	# uname -m includes "-pc" on this system.
 	echo ${UNAME_MACHINE}-mingw32
@@ -851,15 +900,22 @@ EOF
 	exit ;;
     *:GNU:*:*)
 	# the GNU system
-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
 	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
 	exit ;;
+    aarch64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    aarch64_be:Linux:*:*)
+	UNAME_MACHINE=aarch64_be
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -871,59 +927,60 @@ EOF
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
 	esac
 	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     arm*:Linux:*:*)
 	eval $set_cc_for_build
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
 	    | grep -q __ARM_EABI__
 	then
-	    echo ${UNAME_MACHINE}-unknown-linux-gnu
+	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	else
 	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
 		| grep -q __ARM_PCS_VFP
 	    then
-		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
 	    else
-		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
 	    fi
 	fi
 	exit ;;
     avr32*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     cris:Linux:*:*)
-	echo cris-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
 	exit ;;
     crisv32:Linux:*:*)
-	echo crisv32-axis-linux-gnu
+	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+	exit ;;
+    e2k:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     frv:Linux:*:*)
-	echo frv-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     hexagon:Linux:*:*)
-	echo hexagon-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     i*86:Linux:*:*)
-	LIBC=gnu
-	eval $set_cc_for_build
-	sed 's/^	//' << EOF >$dummy.c
-	#ifdef __dietlibc__
-	LIBC=dietlibc
-	#endif
-EOF
-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
-	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
 	exit ;;
     ia64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    k1om:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m32r*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     m68*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
 	eval $set_cc_for_build
@@ -942,54 +999,69 @@ EOF
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
-    or32:Linux:*:*)
-	echo or32-unknown-linux-gnu
+    mips64el:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
+    openrisc*:Linux:*:*)
+	echo or1k-unknown-linux-${LIBC}
+	exit ;;
+    or32:Linux:*:* | or1k*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     padre:Linux:*:*)
-	echo sparc-unknown-linux-gnu
+	echo sparc-unknown-linux-${LIBC}
 	exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-	echo hppa64-unknown-linux-gnu
+	echo hppa64-unknown-linux-${LIBC}
 	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
-	  *)    echo hppa-unknown-linux-gnu ;;
+	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+	  *)    echo hppa-unknown-linux-${LIBC} ;;
 	esac
 	exit ;;
     ppc64:Linux:*:*)
-	echo powerpc64-unknown-linux-gnu
+	echo powerpc64-unknown-linux-${LIBC}
 	exit ;;
     ppc:Linux:*:*)
-	echo powerpc-unknown-linux-gnu
+	echo powerpc-unknown-linux-${LIBC}
+	exit ;;
+    ppc64le:Linux:*:*)
+	echo powerpc64le-unknown-linux-${LIBC}
+	exit ;;
+    ppcle:Linux:*:*)
+	echo powerpcle-unknown-linux-${LIBC}
+	exit ;;
+    riscv32:Linux:*:* | riscv64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-	echo ${UNAME_MACHINE}-ibm-linux
+	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
 	exit ;;
     sh64*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sh*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     tile*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     vax:Linux:*:*)
-	echo ${UNAME_MACHINE}-dec-linux-gnu
+	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
 	exit ;;
     x86_64:Linux:*:*)
-	echo x86_64-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
 	exit ;;
     xtensa*:Linux:*:*)
-	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1065,7 +1137,7 @@ EOF
 	# uname -m prints for DJGPP always 'pc', but it prints nothing about
 	# the processor, so we play safe by assuming i586.
 	# Note: whatever this is, it MUST be the same as what config.sub
-	# prints for the "djgpp" host, or else GDB configury will decide that
+	# prints for the "djgpp" host, or else GDB configure will decide that
 	# this is a cross-build.
 	echo i586-pc-msdosdjgpp
 	exit ;;
@@ -1193,6 +1265,9 @@ EOF
     BePC:Haiku:*:*)	# Haiku running on Intel PC compatible.
 	echo i586-pc-haiku
 	exit ;;
+    x86_64:Haiku:*:*)
+	echo x86_64-unknown-haiku
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
 	exit ;;
@@ -1211,6 +1286,9 @@ EOF
     SX-8R:SUPER-UX:*:*)
 	echo sx8r-nec-superux${UNAME_RELEASE}
 	exit ;;
+    SX-ACE:SUPER-UX:*:*)
+	echo sxace-nec-superux${UNAME_RELEASE}
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 	exit ;;
@@ -1219,24 +1297,43 @@ EOF
 	exit ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-	case $UNAME_PROCESSOR in
-	    i386)
-		eval $set_cc_for_build
-		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-		      grep IS_64BIT_ARCH >/dev/null
-		  then
-		      UNAME_PROCESSOR="x86_64"
-		  fi
-		fi ;;
-	    unknown) UNAME_PROCESSOR=powerpc ;;
-	esac
+	eval $set_cc_for_build
+	if test "$UNAME_PROCESSOR" = unknown ; then
+	    UNAME_PROCESSOR=powerpc
+	fi
+	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_64BIT_ARCH >/dev/null
+		then
+		    case $UNAME_PROCESSOR in
+			i386) UNAME_PROCESSOR=x86_64 ;;
+			powerpc) UNAME_PROCESSOR=powerpc64 ;;
+		    esac
+		fi
+		# On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+		if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+		       (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+		       grep IS_PPC >/dev/null
+		then
+		    UNAME_PROCESSOR=powerpc
+		fi
+	    fi
+	elif test "$UNAME_PROCESSOR" = i386 ; then
+	    # Avoid executing cc on OS X 10.9, as it ships with a stub
+	    # that puts up a graphical alert prompting to install
+	    # developer tools.  Any system running Mac OS X 10.7 or
+	    # later (Darwin 11 and later) is required to have a 64-bit
+	    # processor. This is not true of the ARM version of Darwin
+	    # that Apple uses in portable devices.
+	    UNAME_PROCESSOR=x86_64
+	fi
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
+	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
 	fi
@@ -1245,15 +1342,18 @@ EOF
     *:QNX:*:4*)
 	echo i386-pc-qnx
 	exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
+    NEO-*:NONSTOP_KERNEL:*:*)
 	echo neo-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSE-?:NONSTOP_KERNEL:*:*)
+    NSE-*:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
 	exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
+    NSR-*:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
 	exit ;;
+    NSX-*:NONSTOP_KERNEL:*:*)
+	echo nsx-tandem-nsk${UNAME_RELEASE}
+	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
 	exit ;;
@@ -1267,7 +1367,7 @@ EOF
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	if test "$cputype" = "386"; then
+	if test "$cputype" = 386; then
 	    UNAME_MACHINE=i386
 	else
 	    UNAME_MACHINE="$cputype"
@@ -1309,7 +1409,7 @@ EOF
 	echo i386-pc-xenix
 	exit ;;
     i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
 	exit ;;
     i*86:rdos:*:*)
 	echo ${UNAME_MACHINE}-pc-rdos
@@ -1317,174 +1417,28 @@ EOF
     i*86:AROS:*:*)
 	echo ${UNAME_MACHINE}-pc-aros
 	exit ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-	"4"
-#else
-	""
-#endif
-	); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-	printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-	printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-	{ echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-	echo c1-convex-bsd
-	exit ;;
-    c2*)
-	if getsysinfo -f scalar_acc
-	then echo c32-convex-bsd
-	else echo c2-convex-bsd
-	fi
-	exit ;;
-    c34*)
-	echo c34-convex-bsd
+    x86_64:VMkernel:*:*)
+	echo ${UNAME_MACHINE}-unknown-esx
 	exit ;;
-    c38*)
-	echo c38-convex-bsd
+    amd64:Isilon\ OneFS:*:*)
+	echo x86_64-unknown-onefs
 	exit ;;
-    c4*)
-	echo c4-convex-bsd
-	exit ;;
-    esac
-fi
+esac
 
 cat >&2 <<EOF
 $0: unable to guess system type
 
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches at gnu.org> in order to provide the needed
-information to handle your system.
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches at gnu.org to
+provide the necessary information to handle your system.
 
 config.guess timestamp = $timestamp
 
diff --git a/scripts/config.sub b/scripts/config.sub
index 5b87368..40ea5df 100755
--- a/scripts/config.sub
+++ b/scripts/config.sub
@@ -1,38 +1,31 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-#   2011 Free Software Foundation, Inc.
+#   Copyright 1992-2017 Free Software Foundation, Inc.
 
-timestamp='2011-10-08'
+timestamp='2017-04-02'
 
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
 # (at your option) any later version.
 #
-# 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.  See the
-# GNU General Public License for more details.
+# 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.  See the GNU
+# General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
 
 
-# Please send patches to <config-patches at gnu.org>.  Submit a context
-# diff and a properly formatted GNU ChangeLog entry.
+# Please send patches to <config-patches at gnu.org>.
 #
 # Configuration subroutine to validate and canonicalize a configuration type.
 # Supply the specified configuration type as an argument.
@@ -40,7 +33,7 @@ timestamp='2011-10-08'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -60,8 +53,7 @@ timestamp='2011-10-08'
 me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
@@ -75,9 +67,7 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
-Software Foundation, Inc.
+Copyright 1992-2017 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -125,13 +115,17 @@ esac
 maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
+  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
+  kopensolaris*-gnu* | cloudabi*-eabi* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
+  android-linux)
+    os=-linux-android
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    ;;
   *)
     basic_machine=`echo $1 | sed 's/-[^-]*$//'`
     if [ $basic_machine != $1 ]
@@ -154,7 +148,7 @@ case $os in
 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-	-apple | -axis | -knuth | -cray | -microblaze)
+	-apple | -axis | -knuth | -cray | -microblaze*)
 		os=
 		basic_machine=$1
 		;;
@@ -223,6 +217,12 @@ case $os in
 	-isc*)
 		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
 		;;
+	-lynx*178)
+		os=-lynxos178
+		;;
+	-lynx*5)
+		os=-lynxos5
+		;;
 	-lynx*)
 		os=-lynxos
 		;;
@@ -247,24 +247,29 @@ case $basic_machine in
 	# Some are omitted here because they have special meanings below.
 	1750a | 580 \
 	| a29k \
+	| aarch64 | aarch64_be \
 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-        | be32 | be64 \
+	| arc | arceb \
+	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+	| avr | avr32 \
+	| ba \
+	| be32 | be64 \
 	| bfin \
-	| c4x | clipper \
+	| c4x | c8051 | clipper \
 	| d10v | d30v | dlx | dsp16xx \
-	| epiphany \
-	| fido | fr30 | frv \
+	| e2k | epiphany \
+	| fido | fr30 | frv | ft32 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| hexagon \
-	| i370 | i860 | i960 | ia64 \
+	| i370 | i860 | i960 | ia16 | ia64 \
 	| ip2k | iq2000 \
+	| k1om \
 	| le32 | le64 \
 	| lm32 \
 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-	| maxq | mb | microblaze | mcore | mep | metag \
+	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
 	| mips | mipsbe | mipseb | mipsel | mipsle \
 	| mips16 \
 	| mips64 | mips64el \
@@ -278,26 +283,30 @@ case $basic_machine in
 	| mips64vr5900 | mips64vr5900el \
 	| mipsisa32 | mipsisa32el \
 	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa32r6 | mipsisa32r6el \
 	| mipsisa64 | mipsisa64el \
 	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64r6 | mipsisa64r6el \
 	| mipsisa64sb1 | mipsisa64sb1el \
 	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipsr5900 | mipsr5900el \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
 	| moxie \
 	| mt \
 	| msp430 \
 	| nds32 | nds32le | nds32be \
-	| nios | nios2 \
+	| nios | nios2 | nios2eb | nios2el \
 	| ns16k | ns32k \
-	| open8 \
-	| or32 \
+	| open8 | or1k | or1knd | or32 \
 	| pdp10 | pdp11 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
+	| pru \
 	| pyramid \
-	| rx \
+	| riscv32 | riscv64 \
+	| rl78 | rx \
 	| score \
-	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
@@ -305,6 +314,8 @@ case $basic_machine in
 	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
 	| ubicom32 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+	| visium \
+	| wasm32 \
 	| we32k \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
@@ -319,8 +330,10 @@ case $basic_machine in
 	c6x)
 		basic_machine=tic6x-unknown
 		;;
-	m6811 | m68hc11 | m6812 | m68hc12 | picochip)
-		# Motorola 68HC11/12.
+	leon|leon[3-9])
+		basic_machine=sparc-$basic_machine
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
 		basic_machine=$basic_machine-unknown
 		os=-none
 		;;
@@ -333,7 +346,10 @@ case $basic_machine in
 	strongarm | thumb | xscale)
 		basic_machine=arm-unknown
 		;;
-
+	xgate)
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
 	xscaleeb)
 		basic_machine=armeb-unknown
 		;;
@@ -356,28 +372,32 @@ case $basic_machine in
 	# Recognize the basic CPU types with company name.
 	580-* \
 	| a29k-* \
+	| aarch64-* | aarch64_be-* \
 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* | avr32-* \
+	| ba-* \
 	| be32-* | be64-* \
 	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
-	| clipper-* | craynv-* | cydra-* \
+	| c8051-* | clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
-	| elxsi-* \
+	| e2k-* | elxsi-* \
 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
+	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
 	| ip2k-* | iq2000-* \
+	| k1om-* \
 	| le32-* | le64-* \
 	| lm32-* \
 	| m32c-* | m32r-* | m32rle-* \
 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+	| microblaze-* | microblazeel-* \
 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
 	| mips16-* \
 	| mips64-* | mips64el-* \
@@ -391,28 +411,34 @@ case $basic_machine in
 	| mips64vr5900-* | mips64vr5900el-* \
 	| mipsisa32-* | mipsisa32el-* \
 	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa32r6-* | mipsisa32r6el-* \
 	| mipsisa64-* | mipsisa64el-* \
 	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64r6-* | mipsisa64r6el-* \
 	| mipsisa64sb1-* | mipsisa64sb1el-* \
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipsr5900-* | mipsr5900el-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
 	| mt-* \
 	| msp430-* \
 	| nds32-* | nds32le-* | nds32be-* \
-	| nios-* | nios2-* \
+	| nios-* | nios2-* | nios2eb-* | nios2el-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
 	| open8-* \
+	| or1k*-* \
 	| orion-* \
 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+	| pru-* \
 	| pyramid-* \
-	| romp-* | rs6000-* | rx-* \
+	| riscv32-* | riscv64-* \
+	| rl78-* | romp-* | rs6000-* | rx-* \
 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
 	| sparclite-* \
-	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
 	| tahoe-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
 	| tile*-* \
@@ -420,6 +446,8 @@ case $basic_machine in
 	| ubicom32-* \
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| vax-* \
+	| visium-* \
+	| wasm32-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
@@ -496,6 +524,9 @@ case $basic_machine in
 		basic_machine=i386-pc
 		os=-aros
 		;;
+	asmjs)
+		basic_machine=asmjs-unknown
+		;;
 	aux)
 		basic_machine=m68k-apple
 		os=-aux
@@ -616,6 +647,14 @@ case $basic_machine in
 		basic_machine=m68k-bull
 		os=-sysv3
 		;;
+	e500v[12])
+		basic_machine=powerpc-unknown
+		os=$os"spe"
+		;;
+	e500v[12]-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=$os"spe"
+		;;
 	ebmon29k)
 		basic_machine=a29k-amd
 		os=-ebmon
@@ -719,7 +758,6 @@ case $basic_machine in
 	i370-ibm* | ibm*)
 		basic_machine=i370-ibm
 		;;
-# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
 	i*86v32)
 		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
@@ -758,6 +796,9 @@ case $basic_machine in
 		basic_machine=m68k-isi
 		os=-sysv
 		;;
+	leon-*|leon[3-9]-*)
+		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+		;;
 	m68knommu)
 		basic_machine=m68k-unknown
 		os=-linux
@@ -777,11 +818,15 @@ case $basic_machine in
 		basic_machine=ns32k-utek
 		os=-sysv
 		;;
-	microblaze)
+	microblaze*)
 		basic_machine=microblaze-xilinx
 		;;
+	mingw64)
+		basic_machine=x86_64-pc
+		os=-mingw64
+		;;
 	mingw32)
-		basic_machine=i386-pc
+		basic_machine=i686-pc
 		os=-mingw32
 		;;
 	mingw32ce)
@@ -809,6 +854,10 @@ case $basic_machine in
 		basic_machine=powerpc-unknown
 		os=-morphos
 		;;
+	moxiebox)
+		basic_machine=moxie-unknown
+		os=-moxiebox
+		;;
 	msdos)
 		basic_machine=i386-pc
 		os=-msdos
@@ -816,6 +865,10 @@ case $basic_machine in
 	ms1-*)
 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
 		;;
+	msys)
+		basic_machine=i686-pc
+		os=-msys
+		;;
 	mvs)
 		basic_machine=i370-ibm
 		os=-mvs
@@ -897,6 +950,9 @@ case $basic_machine in
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		;;
+	nsx-tandem)
+		basic_machine=nsx-tandem
+		;;
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		os=-proelf
@@ -981,7 +1037,7 @@ case $basic_machine in
 	ppc-* | ppcbe-*)
 		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
+	ppcle | powerpclittle)
 		basic_machine=powerpcle-unknown
 		;;
 	ppcle-* | powerpclittle-*)
@@ -991,7 +1047,7 @@ case $basic_machine in
 		;;
 	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+	ppc64le | powerpc64little)
 		basic_machine=powerpc64le-unknown
 		;;
 	ppc64le-* | powerpc64little-*)
@@ -1004,7 +1060,11 @@ case $basic_machine in
 		basic_machine=i586-unknown
 		os=-pw32
 		;;
-	rdos)
+	rdos | rdos64)
+		basic_machine=x86_64-pc
+		os=-rdos
+		;;
+	rdos32)
 		basic_machine=i386-pc
 		os=-rdos
 		;;
@@ -1188,6 +1248,9 @@ case $basic_machine in
 		basic_machine=a29k-wrs
 		os=-vxworks
 		;;
+	wasm32)
+		basic_machine=wasm32-unknown
+		;;
 	w65*)
 		basic_machine=w65-wdc
 		os=-none
@@ -1331,29 +1394,30 @@ case $os in
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-	      | -sym* | -kopensolaris* \
+	      | -sym* | -kopensolaris* | -plan9* \
 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-	      | -aos* | -aros* \
+	      | -aos* | -aros* | -cloudabi* | -sortix* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -openbsd* | -solidbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* \
-	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -linux-gnu* | -linux-android* \
-	      | -linux-newlib* | -linux-uclibc* \
-	      | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
+	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
+	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1477,9 +1541,6 @@ case $os in
 	-aros*)
 		os=-aros
 		;;
-	-kaos*)
-		os=-kaos
-		;;
 	-zvmoe)
 		os=-zvmoe
 		;;
@@ -1488,6 +1549,8 @@ case $os in
 		;;
 	-nacl*)
 		;;
+	-ios)
+		;;
 	-none)
 		;;
 	*)
@@ -1528,6 +1591,12 @@ case $basic_machine in
 	c4x-* | tic4x-*)
 		os=-coff
 		;;
+	c8051-*)
+		os=-elf
+		;;
+	hexagon-*)
+		os=-elf
+		;;
 	tic54x-*)
 		os=-coff
 		;;
@@ -1555,9 +1624,6 @@ case $basic_machine in
 		;;
 	m68000-sun)
 		os=-sunos3
-		# This also exists in the configure program, but was not the
-		# default.
-		# os=-sunos4
 		;;
 	m68*-cisco)
 		os=-aout
@@ -1580,6 +1646,9 @@ case $basic_machine in
 	sparc-* | *-sun)
 		os=-sunos4.1.1
 		;;
+	pru-*)
+		os=-elf
+		;;
 	*-be)
 		os=-beos
 		;;
diff --git a/scripts/depcomp b/scripts/depcomp
new file mode 100755
index 0000000..fc98710
--- /dev/null
+++ b/scripts/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2013-05-30.07; # UTC
+
+# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# 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.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+case $1 in
+  '')
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputting dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake at gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='	'
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+  # This is just like dashmstdout with a different argument.
+  dashmflag=-xM
+  depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The second -e expression handles DOS-style file names with drive
+  # letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'.  On the theory
+## that the space means something, we add a space to the output as
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like '#:fec' to the end of the
+    # dependency line.
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
+    echo >> "$depfile"
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  set_dir_from "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using '\' :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
+
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  set_dir_from  "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+  # The Tru64 compiler uses -MD to generate dependencies as a side
+  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+  # dependencies in 'foo.d' instead, so we check for that too.
+  # Subdirectories are respected.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove '-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for ':'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+  "$@" $dashmflag |
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove '-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E \
+    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+    | sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+        set fnord "$@"
+        shift
+        shift
+        ;;
+    *)
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/scripts/install-sh b/scripts/install-sh
index a9244eb..0b0fdcb 100755
--- a/scripts/install-sh
+++ b/scripts/install-sh
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2011-01-19.21; # UTC
+scriptversion=2013-12-25.23; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,25 +35,21 @@ scriptversion=2011-01-19.21; # UTC
 # FSF changes to this file are in the public domain.
 #
 # Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
+# 'make' implicit rules from creating a file called install from it
 # when there is no Makefile.
 #
 # This script is compatible with the BSD install script, but was written
 # from scratch.
 
+tab='	'
 nl='
 '
-IFS=" ""	$nl"
+IFS=" $tab$nl"
 
-# set DOITPROG to echo to test this script
+# Set DOITPROG to "echo" to test this script.
 
-# Don't use :- since 4.3BSD and earlier shells don't like it.
 doit=${DOITPROG-}
-if test -z "$doit"; then
-  doit_exec=exec
-else
-  doit_exec=$doit
-fi
+doit_exec=${doit:-exec}
 
 # Put in absolute file names if you don't have them in your path;
 # or use environment vars.
@@ -68,17 +64,6 @@ mvprog=${MVPROG-mv}
 rmprog=${RMPROG-rm}
 stripprog=${STRIPPROG-strip}
 
-posix_glob='?'
-initialize_posix_glob='
-  test "$posix_glob" != "?" || {
-    if (set -f) 2>/dev/null; then
-      posix_glob=
-    else
-      posix_glob=:
-    fi
-  }
-'
-
 posix_mkdir=
 
 # Desired mode of installed file.
@@ -97,7 +82,7 @@ dir_arg=
 dst_arg=
 
 copy_on_change=false
-no_target_directory=
+is_target_a_directory=possibly
 
 usage="\
 Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
@@ -137,46 +122,57 @@ while test $# -ne 0; do
     -d) dir_arg=true;;
 
     -g) chgrpcmd="$chgrpprog $2"
-	shift;;
+        shift;;
 
     --help) echo "$usage"; exit $?;;
 
     -m) mode=$2
-	case $mode in
-	  *' '* | *'	'* | *'
-'*	  | *'*'* | *'?'* | *'['*)
-	    echo "$0: invalid mode: $mode" >&2
-	    exit 1;;
-	esac
-	shift;;
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
 
     -o) chowncmd="$chownprog $2"
-	shift;;
+        shift;;
 
     -s) stripcmd=$stripprog;;
 
-    -t) dst_arg=$2
-	# Protect names problematic for `test' and other utilities.
-	case $dst_arg in
-	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
-	esac
-	shift;;
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
 
-    -T) no_target_directory=true;;
+    -T) is_target_a_directory=never;;
 
     --version) echo "$0 $scriptversion"; exit $?;;
 
-    --)	shift
-	break;;
+    --) shift
+        break;;
 
-    -*)	echo "$0: invalid option: $1" >&2
-	exit 1;;
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
 
     *)  break;;
   esac
   shift
 done
 
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
 if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
   # When -d is used, all remaining arguments are directories to create.
   # When -t is used, the destination is already specified.
@@ -190,7 +186,7 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
     fi
     shift # arg
     dst_arg=$arg
-    # Protect names problematic for `test' and other utilities.
+    # Protect names problematic for 'test' and other utilities.
     case $dst_arg in
       -* | [=\(\)!]) dst_arg=./$dst_arg;;
     esac
@@ -202,12 +198,21 @@ if test $# -eq 0; then
     echo "$0: no input file specified." >&2
     exit 1
   fi
-  # It's OK to call `install-sh -d' without argument.
+  # It's OK to call 'install-sh -d' without argument.
   # This can happen when creating conditional directories.
   exit 0
 fi
 
 if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+fi
+
+if test -z "$dir_arg"; then
   do_exit='(exit $ret); exit $ret'
   trap "ret=129; $do_exit" 1
   trap "ret=130; $do_exit" 2
@@ -223,16 +228,16 @@ if test -z "$dir_arg"; then
 
     *[0-7])
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw='% 200'
+        u_plus_rw='% 200'
       fi
       cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
     *)
       if test -z "$stripcmd"; then
-	u_plus_rw=
+        u_plus_rw=
       else
-	u_plus_rw=,u+rw
+        u_plus_rw=,u+rw
       fi
       cp_umask=$mode$u_plus_rw;;
   esac
@@ -240,7 +245,7 @@ fi
 
 for src
 do
-  # Protect names problematic for `test' and other utilities.
+  # Protect names problematic for 'test' and other utilities.
   case $src in
     -* | [=\(\)!]) src=./$src;;
   esac
@@ -269,41 +274,15 @@ do
     # If destination is a directory, append the input filename; won't work
     # if double slashes aren't ignored.
     if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-	echo "$0: $dst_arg: Is a directory" >&2
-	exit 1
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
       fi
       dstdir=$dst
       dst=$dstdir/`basename "$src"`
       dstdir_status=0
     else
-      # Prefer dirname, but fall back on a substitute if dirname fails.
-      dstdir=`
-	(dirname "$dst") 2>/dev/null ||
-	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	     X"$dst" : 'X\(//\)[^/]' \| \
-	     X"$dst" : 'X\(//\)$' \| \
-	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
-	echo X"$dst" |
-	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)[^/].*/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\/\)$/{
-		   s//\1/
-		   q
-		 }
-		 /^X\(\/\).*/{
-		   s//\1/
-		   q
-		 }
-		 s/.*/./; q'
-      `
-
+      dstdir=`dirname "$dst"`
       test -d "$dstdir"
       dstdir_status=$?
     fi
@@ -314,74 +293,74 @@ do
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
-	# Create intermediate dirs using mode 755 as modified by the umask.
-	# This is like FreeBSD 'install' as of 1997-10-28.
-	umask=`umask`
-	case $stripcmd.$umask in
-	  # Optimize common cases.
-	  *[2367][2367]) mkdir_umask=$umask;;
-	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-	  *[0-7])
-	    mkdir_umask=`expr $umask + 22 \
-	      - $umask % 100 % 40 + $umask % 20 \
-	      - $umask % 10 % 4 + $umask % 2
-	    `;;
-	  *) mkdir_umask=$umask,go-w;;
-	esac
-
-	# With -d, create the new directory with the user-specified mode.
-	# Otherwise, rely on $mkdir_umask.
-	if test -n "$dir_arg"; then
-	  mkdir_mode=-m$mode
-	else
-	  mkdir_mode=
-	fi
-
-	posix_mkdir=false
-	case $umask in
-	  *[123567][0-7][0-7])
-	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
-	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-	    ;;
-	  *)
-	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-	    if (umask $mkdir_umask &&
-		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-	    then
-	      if test -z "$dir_arg" || {
-		   # Check for POSIX incompatibilities with -m.
-		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-		   # other-writeable bit of parent directory when it shouldn't.
-		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-		   case $ls_ld_tmpdir in
-		     d????-?r-*) different_mode=700;;
-		     d????-?--*) different_mode=755;;
-		     *) false;;
-		   esac &&
-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-		   }
-		 }
-	      then posix_mkdir=:
-	      fi
-	      rmdir "$tmpdir/d" "$tmpdir"
-	    else
-	      # Remove any dirs left behind by ancient mkdir implementations.
-	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-	    fi
-	    trap '' 0;;
-	esac;;
+        # Create intermediate dirs using mode 755 as modified by the umask.
+        # This is like FreeBSD 'install' as of 1997-10-28.
+        umask=`umask`
+        case $stripcmd.$umask in
+          # Optimize common cases.
+          *[2367][2367]) mkdir_umask=$umask;;
+          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
+
+        # With -d, create the new directory with the user-specified mode.
+        # Otherwise, rely on $mkdir_umask.
+        if test -n "$dir_arg"; then
+          mkdir_mode=-m$mode
+        else
+          mkdir_mode=
+        fi
+
+        posix_mkdir=false
+        case $umask in
+          *[123567][0-7][0-7])
+            # POSIX mkdir -p sets u+wx bits regardless of umask, which
+            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+            ;;
+          *)
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            if (umask $mkdir_umask &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+            then
+              if test -z "$dir_arg" || {
+                   # Check for POSIX incompatibilities with -m.
+                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                   # other-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/d" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
     esac
 
     if
       $posix_mkdir && (
-	umask $mkdir_umask &&
-	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
       )
     then :
     else
@@ -391,53 +370,51 @@ do
       # directory the slow way, step by step, checking for races as we go.
 
       case $dstdir in
-	/*) prefix='/';;
-	[-=\(\)!]*) prefix='./';;
-	*)  prefix='';;
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
       esac
 
-      eval "$initialize_posix_glob"
-
       oIFS=$IFS
       IFS=/
-      $posix_glob set -f
+      set -f
       set fnord $dstdir
       shift
-      $posix_glob set +f
+      set +f
       IFS=$oIFS
 
       prefixes=
 
       for d
       do
-	test X"$d" = X && continue
-
-	prefix=$prefix$d
-	if test -d "$prefix"; then
-	  prefixes=
-	else
-	  if $posix_mkdir; then
-	    (umask=$mkdir_umask &&
-	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-	    # Don't fail if two instances are running concurrently.
-	    test -d "$prefix" || exit 1
-	  else
-	    case $prefix in
-	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-	      *) qprefix=$prefix;;
-	    esac
-	    prefixes="$prefixes '$qprefix'"
-	  fi
-	fi
-	prefix=$prefix/
+        test X"$d" = X && continue
+
+        prefix=$prefix$d
+        if test -d "$prefix"; then
+          prefixes=
+        else
+          if $posix_mkdir; then
+            (umask=$mkdir_umask &&
+             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+            # Don't fail if two instances are running concurrently.
+            test -d "$prefix" || exit 1
+          else
+            case $prefix in
+              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+              *) qprefix=$prefix;;
+            esac
+            prefixes="$prefixes '$qprefix'"
+          fi
+        fi
+        prefix=$prefix/
       done
 
       if test -n "$prefixes"; then
-	# Don't fail if two instances are running concurrently.
-	(umask $mkdir_umask &&
-	 eval "\$doit_exec \$mkdirprog $prefixes") ||
-	  test -d "$dstdir" || exit 1
-	obsolete_mkdir_used=true
+        # Don't fail if two instances are running concurrently.
+        (umask $mkdir_umask &&
+         eval "\$doit_exec \$mkdirprog $prefixes") ||
+          test -d "$dstdir" || exit 1
+        obsolete_mkdir_used=true
       fi
     fi
   fi
@@ -472,15 +449,12 @@ do
 
     # If -C, don't bother to copy if it wouldn't change the file.
     if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
-
-       eval "$initialize_posix_glob" &&
-       $posix_glob set -f &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
        set X $old && old=:$2:$4:$5:$6 &&
        set X $new && new=:$2:$4:$5:$6 &&
-       $posix_glob set +f &&
-
+       set +f &&
        test "$old" = "$new" &&
        $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
     then
@@ -493,24 +467,24 @@ do
       # to itself, or perhaps because mv is so ancient that it does not
       # support -f.
       {
-	# Now remove or move aside any old file at destination location.
-	# We try this two ways since rm can't unlink itself on some
-	# systems and the destination file might be busy for other
-	# reasons.  In this case, the final cleanup might fail but the new
-	# file should still install successfully.
-	{
-	  test ! -f "$dst" ||
-	  $doit $rmcmd -f "$dst" 2>/dev/null ||
-	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-	  } ||
-	  { echo "$0: cannot unlink or rename $dst" >&2
-	    (exit 1); exit 1
-	  }
-	} &&
-
-	# Now rename the file to the real destination.
-	$doit $mvcmd "$dsttmp" "$dst"
+        # Now remove or move aside any old file at destination location.
+        # We try this two ways since rm can't unlink itself on some
+        # systems and the destination file might be busy for other
+        # reasons.  In this case, the final cleanup might fail but the new
+        # file should still install successfully.
+        {
+          test ! -f "$dst" ||
+          $doit $rmcmd -f "$dst" 2>/dev/null ||
+          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+          } ||
+          { echo "$0: cannot unlink or rename $dst" >&2
+            (exit 1); exit 1
+          }
+        } &&
+
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
       }
     fi || exit 1
 
diff --git a/scripts/ltmain.sh b/scripts/ltmain.sh
new file mode 100644
index 0000000..0f0a2da
--- /dev/null
+++ b/scripts/ltmain.sh
@@ -0,0 +1,11147 @@
+#! /bin/sh
+## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
+##               by inline-source v2014-01-03.01
+
+# libtool (GNU libtool) 2.4.6
+# Provide generalized library-building support services.
+# Written by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# GNU Libtool is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# As a special exception to the GNU General Public License,
+# if you distribute this file as part of a program or library that
+# is built using GNU Libtool, you may include this file under the
+# same distribution terms that you use for the rest of that program.
+#
+# GNU Libtool 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.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+
+PROGRAM=libtool
+PACKAGE=libtool
+VERSION=2.4.6
+package_revision=2.4.6
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Run './libtool --help' for help with using this script from the
+# command line.
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# After configure completes, it has a better idea of some of the
+# shell tools we need than the defaults used by the functions shared
+# with bootstrap, so set those here where they can still be over-
+# ridden by the user, but otherwise take precedence.
+
+: ${AUTOCONF="autoconf"}
+: ${AUTOMAKE="automake"}
+
+
+## -------------------------- ##
+## Source external libraries. ##
+## -------------------------- ##
+
+# Much of our low-level functionality needs to be sourced from external
+# libraries, which are installed to $pkgauxdir.
+
+# Set a version string for this script.
+scriptversion=2015-01-20.17; # UTC
+
+# General shell script boiler plate, and helper functions.
+# Written by Gary V. Vaughan, 2004
+
+# Copyright (C) 2004-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary at gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# Evaluate this file near the top of your script to gain access to
+# the functions and variables defined here:
+#
+#   . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh
+#
+# If you need to override any of the default environment variable
+# settings, do that before evaluating this file.
+
+
+## -------------------- ##
+## Shell normalisation. ##
+## -------------------- ##
+
+# Some shells need a little help to be as Bourne compatible as possible.
+# Before doing anything else, make sure all that help has been provided!
+
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac
+fi
+
+# NLS nuisances: We save the old values in case they are required later.
+_G_user_locale=
+_G_safe_locale=
+for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+do
+  eval "if test set = \"\${$_G_var+set}\"; then
+          save_$_G_var=\$$_G_var
+          $_G_var=C
+	  export $_G_var
+	  _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\"
+	  _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
+	fi"
+done
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Make sure IFS has a sensible default
+sp=' '
+nl='
+'
+IFS="$sp	$nl"
+
+# There are apparently some retarded systems that use ';' as a PATH separator!
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
+fi
+
+
+
+## ------------------------- ##
+## Locate command utilities. ##
+## ------------------------- ##
+
+
+# func_executable_p FILE
+# ----------------------
+# Check that FILE is an executable regular file.
+func_executable_p ()
+{
+    test -f "$1" && test -x "$1"
+}
+
+
+# func_path_progs PROGS_LIST CHECK_FUNC [PATH]
+# --------------------------------------------
+# Search for either a program that responds to --version with output
+# containing "GNU", or else returned by CHECK_FUNC otherwise, by
+# trying all the directories in PATH with each of the elements of
+# PROGS_LIST.
+#
+# CHECK_FUNC should accept the path to a candidate program, and
+# set $func_check_prog_result if it truncates its output less than
+# $_G_path_prog_max characters.
+func_path_progs ()
+{
+    _G_progs_list=$1
+    _G_check_func=$2
+    _G_PATH=${3-"$PATH"}
+
+    _G_path_prog_max=0
+    _G_path_prog_found=false
+    _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:}
+    for _G_dir in $_G_PATH; do
+      IFS=$_G_save_IFS
+      test -z "$_G_dir" && _G_dir=.
+      for _G_prog_name in $_G_progs_list; do
+        for _exeext in '' .EXE; do
+          _G_path_prog=$_G_dir/$_G_prog_name$_exeext
+          func_executable_p "$_G_path_prog" || continue
+          case `"$_G_path_prog" --version 2>&1` in
+            *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;;
+            *)     $_G_check_func $_G_path_prog
+		   func_path_progs_result=$func_check_prog_result
+		   ;;
+          esac
+          $_G_path_prog_found && break 3
+        done
+      done
+    done
+    IFS=$_G_save_IFS
+    test -z "$func_path_progs_result" && {
+      echo "no acceptable sed could be found in \$PATH" >&2
+      exit 1
+    }
+}
+
+
+# We want to be able to use the functions in this file before configure
+# has figured out where the best binaries are kept, which means we have
+# to search for them ourselves - except when the results are already set
+# where we skip the searches.
+
+# Unless the user overrides by setting SED, search the path for either GNU
+# sed, or the sed that truncates its output the least.
+test -z "$SED" && {
+  _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+  for _G_i in 1 2 3 4 5 6 7; do
+    _G_sed_script=$_G_sed_script$nl$_G_sed_script
+  done
+  echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed
+  _G_sed_script=
+
+  func_check_prog_sed ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo '' >> conftest.nl
+      "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+  rm -f conftest.sed
+  SED=$func_path_progs_result
+}
+
+
+# Unless the user overrides by setting GREP, search the path for either GNU
+# grep, or the grep that truncates its output the least.
+test -z "$GREP" && {
+  func_check_prog_grep ()
+  {
+    _G_path_prog=$1
+
+    _G_count=0
+    _G_path_prog_max=0
+    printf 0123456789 >conftest.in
+    while :
+    do
+      cat conftest.in conftest.in >conftest.tmp
+      mv conftest.tmp conftest.in
+      cp conftest.in conftest.nl
+      echo 'GREP' >> conftest.nl
+      "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break
+      diff conftest.out conftest.nl >/dev/null 2>&1 || break
+      _G_count=`expr $_G_count + 1`
+      if test "$_G_count" -gt "$_G_path_prog_max"; then
+        # Best one so far, save it but keep looking for a better one
+        func_check_prog_result=$_G_path_prog
+        _G_path_prog_max=$_G_count
+      fi
+      # 10*(2^10) chars as input seems more than enough
+      test 10 -lt "$_G_count" && break
+    done
+    rm -f conftest.in conftest.tmp conftest.nl conftest.out
+  }
+
+  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+  GREP=$func_path_progs_result
+}
+
+
+## ------------------------------- ##
+## User overridable command paths. ##
+## ------------------------------- ##
+
+# All uppercase variable names are used for environment variables.  These
+# variables can be overridden by the user before calling a script that
+# uses them if a suitable command of that name is not already available
+# in the command search PATH.
+
+: ${CP="cp -f"}
+: ${ECHO="printf %s\n"}
+: ${EGREP="$GREP -E"}
+: ${FGREP="$GREP -F"}
+: ${LN_S="ln -s"}
+: ${MAKE="make"}
+: ${MKDIR="mkdir"}
+: ${MV="mv -f"}
+: ${RM="rm -f"}
+: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
+
+
+## -------------------- ##
+## Useful sed snippets. ##
+## -------------------- ##
+
+sed_dirname='s|/[^/]*$||'
+sed_basename='s|^.*/||'
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='s|\([`"$\\]\)|\\\1|g'
+
+# Same as above, but do not quote variable references.
+sed_double_quote_subst='s/\(["`\\]\)/\\\1/g'
+
+# Sed substitution that turns a string into a regex matching for the
+# string literally.
+sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g'
+
+# Sed substitution that converts a w32 file name or path
+# that contains forward slashes, into one that contains
+# (escaped) backslashes.  A very naive implementation.
+sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
+
+# Re-'\' parameter expansions in output of sed_double_quote_subst that
+# were '\'-ed in input to the same.  If an odd number of '\' preceded a
+# '$' in input to sed_double_quote_subst, that '$' was protected from
+# expansion.  Since each input '\' is now two '\'s, look for any number
+# of runs of four '\'s followed by two '\'s and then a '$'.  '\' that '$'.
+_G_bs='\\'
+_G_bs2='\\\\'
+_G_bs4='\\\\\\\\'
+_G_dollar='\$'
+sed_double_backslash="\
+  s/$_G_bs4/&\\
+/g
+  s/^$_G_bs2$_G_dollar/$_G_bs&/
+  s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
+  s/\n//g"
+
+
+## ----------------- ##
+## Global variables. ##
+## ----------------- ##
+
+# Except for the global variables explicitly listed below, the following
+# functions in the '^func_' namespace, and the '^require_' namespace
+# variables initialised in the 'Resource management' section, sourcing
+# this file will not pollute your global namespace with anything
+# else. There's no portable way to scope variables in Bourne shell
+# though, so actually running these functions will sometimes place
+# results into a variable named after the function, and often use
+# temporary variables in the '^_G_' namespace. If you are careful to
+# avoid using those namespaces casually in your sourcing script, things
+# should continue to work as you expect. And, of course, you can freely
+# overwrite any of the functions or variables defined here before
+# calling anything to customize them.
+
+EXIT_SUCCESS=0
+EXIT_FAILURE=1
+EXIT_MISMATCH=63  # $? = 63 is used to indicate version mismatch to missing.
+EXIT_SKIP=77	  # $? = 77 is used to indicate a skipped test to automake.
+
+# Allow overriding, eg assuming that you follow the convention of
+# putting '$debug_cmd' at the start of all your functions, you can get
+# bash to show function call trace with:
+#
+#    debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name
+debug_cmd=${debug_cmd-":"}
+exit_cmd=:
+
+# By convention, finish your script with:
+#
+#    exit $exit_status
+#
+# so that you can set exit_status to non-zero if you want to indicate
+# something went wrong during execution without actually bailing out at
+# the point of failure.
+exit_status=$EXIT_SUCCESS
+
+# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
+# is ksh but when the shell is invoked as "sh" and the current value of
+# the _XPG environment variable is not equal to 1 (one), the special
+# positional parameter $0, within a function call, is the name of the
+# function.
+progpath=$0
+
+# The name of this program.
+progname=`$ECHO "$progpath" |$SED "$sed_basename"`
+
+# Make sure we have an absolute progpath for reexecution:
+case $progpath in
+  [\\/]*|[A-Za-z]:\\*) ;;
+  *[\\/]*)
+     progdir=`$ECHO "$progpath" |$SED "$sed_dirname"`
+     progdir=`cd "$progdir" && pwd`
+     progpath=$progdir/$progname
+     ;;
+  *)
+     _G_IFS=$IFS
+     IFS=${PATH_SEPARATOR-:}
+     for progdir in $PATH; do
+       IFS=$_G_IFS
+       test -x "$progdir/$progname" && break
+     done
+     IFS=$_G_IFS
+     test -n "$progdir" || progdir=`pwd`
+     progpath=$progdir/$progname
+     ;;
+esac
+
+
+## ----------------- ##
+## Standard options. ##
+## ----------------- ##
+
+# The following options affect the operation of the functions defined
+# below, and should be set appropriately depending on run-time para-
+# meters passed on the command line.
+
+opt_dry_run=false
+opt_quiet=false
+opt_verbose=false
+
+# Categories 'all' and 'none' are always available.  Append any others
+# you will pass as the first argument to func_warning from your own
+# code.
+warning_categories=
+
+# By default, display warnings according to 'opt_warning_types'.  Set
+# 'warning_func'  to ':' to elide all warnings, or func_fatal_error to
+# treat the next displayed warning as a fatal error.
+warning_func=func_warn_and_continue
+
+# Set to 'all' to display all warnings, 'none' to suppress all
+# warnings, or a space delimited list of some subset of
+# 'warning_categories' to display only the listed warnings.
+opt_warning_types=all
+
+
+## -------------------- ##
+## Resource management. ##
+## -------------------- ##
+
+# This section contains definitions for functions that each ensure a
+# particular resource (a file, or a non-empty configuration variable for
+# example) is available, and if appropriate to extract default values
+# from pertinent package files. Call them using their associated
+# 'require_*' variable to ensure that they are executed, at most, once.
+#
+# It's entirely deliberate that calling these functions can set
+# variables that don't obey the namespace limitations obeyed by the rest
+# of this file, in order that that they be as useful as possible to
+# callers.
+
+
+# require_term_colors
+# -------------------
+# Allow display of bold text on terminals that support it.
+require_term_colors=func_require_term_colors
+func_require_term_colors ()
+{
+    $debug_cmd
+
+    test -t 1 && {
+      # COLORTERM and USE_ANSI_COLORS environment variables take
+      # precedence, because most terminfo databases neglect to describe
+      # whether color sequences are supported.
+      test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"}
+
+      if test 1 = "$USE_ANSI_COLORS"; then
+        # Standard ANSI escape sequences
+        tc_reset=''
+        tc_bold='';   tc_standout=''
+        tc_red='';   tc_green=''
+        tc_blue='';  tc_cyan=''
+      else
+        # Otherwise trust the terminfo database after all.
+        test -n "`tput sgr0 2>/dev/null`" && {
+          tc_reset=`tput sgr0`
+          test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold`
+          tc_standout=$tc_bold
+          test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso`
+          test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1`
+          test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2`
+          test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4`
+          test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5`
+        }
+      fi
+    }
+
+    require_term_colors=:
+}
+
+
+## ----------------- ##
+## Function library. ##
+## ----------------- ##
+
+# This section contains a variety of useful functions to call in your
+# scripts. Take note of the portable wrappers for features provided by
+# some modern shells, which will fall back to slower equivalents on
+# less featureful shells.
+
+
+# func_append VAR VALUE
+# ---------------------
+# Append VALUE onto the existing contents of VAR.
+
+  # We should try to minimise forks, especially on Windows where they are
+  # unreasonably slow, so skip the feature probes when bash or zsh are
+  # being used:
+  if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then
+    : ${_G_HAVE_ARITH_OP="yes"}
+    : ${_G_HAVE_XSI_OPS="yes"}
+    # The += operator was introduced in bash 3.1
+    case $BASH_VERSION in
+      [12].* | 3.0 | 3.0*) ;;
+      *)
+        : ${_G_HAVE_PLUSEQ_OP="yes"}
+        ;;
+    esac
+  fi
+
+  # _G_HAVE_PLUSEQ_OP
+  # Can be empty, in which case the shell is probed, "yes" if += is
+  # useable or anything else if it does not work.
+  test -z "$_G_HAVE_PLUSEQ_OP" \
+    && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \
+    && _G_HAVE_PLUSEQ_OP=yes
+
+if test yes = "$_G_HAVE_PLUSEQ_OP"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_append ()
+  {
+    $debug_cmd
+
+    eval "$1+=\$2"
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_append ()
+  {
+    $debug_cmd
+
+    eval "$1=\$$1\$2"
+  }
+fi
+
+
+# func_append_quoted VAR VALUE
+# ----------------------------
+# Quote VALUE and append to the end of shell variable VAR, separated
+# by a space.
+if test yes = "$_G_HAVE_PLUSEQ_OP"; then
+  eval 'func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1+=\\ \$func_quote_for_eval_result"
+  }'
+else
+  func_append_quoted ()
+  {
+    $debug_cmd
+
+    func_quote_for_eval "$2"
+    eval "$1=\$$1\\ \$func_quote_for_eval_result"
+  }
+fi
+
+
+# func_append_uniq VAR VALUE
+# --------------------------
+# Append unique VALUE onto the existing contents of VAR, assuming
+# entries are delimited by the first character of VALUE.  For example:
+#
+#   func_append_uniq options " --another-option option-argument"
+#
+# will only append to $options if " --another-option option-argument "
+# is not already present somewhere in $options already (note spaces at
+# each end implied by leading space in second argument).
+func_append_uniq ()
+{
+    $debug_cmd
+
+    eval _G_current_value='`$ECHO $'$1'`'
+    _G_delim=`expr "$2" : '\(.\)'`
+
+    case $_G_delim$_G_current_value$_G_delim in
+      *"$2$_G_delim"*) ;;
+      *) func_append "$@" ;;
+    esac
+}
+
+
+# func_arith TERM...
+# ------------------
+# Set func_arith_result to the result of evaluating TERMs.
+  test -z "$_G_HAVE_ARITH_OP" \
+    && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \
+    && _G_HAVE_ARITH_OP=yes
+
+if test yes = "$_G_HAVE_ARITH_OP"; then
+  eval 'func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=$(( $* ))
+  }'
+else
+  func_arith ()
+  {
+    $debug_cmd
+
+    func_arith_result=`expr "$@"`
+  }
+fi
+
+
+# func_basename FILE
+# ------------------
+# Set func_basename_result to FILE with everything up to and including
+# the last / stripped.
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  # If this shell supports suffix pattern removal, then use it to avoid
+  # forking. Hide the definitions single quotes in case the shell chokes
+  # on unsupported syntax...
+  _b='func_basename_result=${1##*/}'
+  _d='case $1 in
+        */*) func_dirname_result=${1%/*}$2 ;;
+        *  ) func_dirname_result=$3        ;;
+      esac'
+
+else
+  # ...otherwise fall back to using sed.
+  _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`'
+  _d='func_dirname_result=`$ECHO "$1"  |$SED "$sed_dirname"`
+      if test "X$func_dirname_result" = "X$1"; then
+        func_dirname_result=$3
+      else
+        func_append func_dirname_result "$2"
+      fi'
+fi
+
+eval 'func_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+}'
+
+
+# func_dirname FILE APPEND NONDIR_REPLACEMENT
+# -------------------------------------------
+# Compute the dirname of FILE.  If nonempty, add APPEND to the result,
+# otherwise set result to NONDIR_REPLACEMENT.
+eval 'func_dirname ()
+{
+    $debug_cmd
+
+    '"$_d"'
+}'
+
+
+# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT
+# --------------------------------------------------------
+# Perform func_basename and func_dirname in a single function
+# call:
+#   dirname:  Compute the dirname of FILE.  If nonempty,
+#             add APPEND to the result, otherwise set result
+#             to NONDIR_REPLACEMENT.
+#             value returned in "$func_dirname_result"
+#   basename: Compute filename of FILE.
+#             value retuned in "$func_basename_result"
+# For efficiency, we do not delegate to the functions above but instead
+# duplicate the functionality here.
+eval 'func_dirname_and_basename ()
+{
+    $debug_cmd
+
+    '"$_b"'
+    '"$_d"'
+}'
+
+
+# func_echo ARG...
+# ----------------
+# Echo program name prefixed message.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_echo_all ARG...
+# --------------------
+# Invoke $ECHO with all args, space-separated.
+func_echo_all ()
+{
+    $ECHO "$*"
+}
+
+
+# func_echo_infix_1 INFIX ARG...
+# ------------------------------
+# Echo program name, followed by INFIX on the first line, with any
+# additional lines not showing INFIX.
+func_echo_infix_1 ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    _G_infix=$1; shift
+    _G_indent=$_G_infix
+    _G_prefix="$progname: $_G_infix: "
+    _G_message=$*
+
+    # Strip color escape sequences before counting printable length
+    for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan"
+    do
+      test -n "$_G_tc" && {
+        _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"`
+        _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"`
+      }
+    done
+    _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`"  " ## exclude from sc_prohibit_nested_quotes
+
+    func_echo_infix_1_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_infix_1_IFS
+      $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2
+      _G_prefix=$_G_indent
+    done
+    IFS=$func_echo_infix_1_IFS
+}
+
+
+# func_error ARG...
+# -----------------
+# Echo program name prefixed message to standard error.
+func_error ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "  $tc_standout${tc_red}error$tc_reset" "$*" >&2
+}
+
+
+# func_fatal_error ARG...
+# -----------------------
+# Echo program name prefixed message to standard error, and exit.
+func_fatal_error ()
+{
+    $debug_cmd
+
+    func_error "$*"
+    exit $EXIT_FAILURE
+}
+
+
+# func_grep EXPRESSION FILENAME
+# -----------------------------
+# Check whether EXPRESSION matches any line of FILENAME, without output.
+func_grep ()
+{
+    $debug_cmd
+
+    $GREP "$1" "$2" >/dev/null 2>&1
+}
+
+
+# func_len STRING
+# ---------------
+# Set func_len_result to the length of STRING. STRING may not
+# start with a hyphen.
+  test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=${#1}
+  }'
+else
+  func_len ()
+  {
+    $debug_cmd
+
+    func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
+  }
+fi
+
+
+# func_mkdir_p DIRECTORY-PATH
+# ---------------------------
+# Make sure the entire path to DIRECTORY-PATH is available.
+func_mkdir_p ()
+{
+    $debug_cmd
+
+    _G_directory_path=$1
+    _G_dir_list=
+
+    if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then
+
+      # Protect directory names starting with '-'
+      case $_G_directory_path in
+        -*) _G_directory_path=./$_G_directory_path ;;
+      esac
+
+      # While some portion of DIR does not yet exist...
+      while test ! -d "$_G_directory_path"; do
+        # ...make a list in topmost first order.  Use a colon delimited
+	# list incase some portion of path contains whitespace.
+        _G_dir_list=$_G_directory_path:$_G_dir_list
+
+        # If the last portion added has no slash in it, the list is done
+        case $_G_directory_path in */*) ;; *) break ;; esac
+
+        # ...otherwise throw away the child directory and loop
+        _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"`
+      done
+      _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'`
+
+      func_mkdir_p_IFS=$IFS; IFS=:
+      for _G_dir in $_G_dir_list; do
+	IFS=$func_mkdir_p_IFS
+        # mkdir can fail with a 'File exist' error if two processes
+        # try to create one of the directories concurrently.  Don't
+        # stop in that case!
+        $MKDIR "$_G_dir" 2>/dev/null || :
+      done
+      IFS=$func_mkdir_p_IFS
+
+      # Bail out if we (or some other process) failed to create a directory.
+      test -d "$_G_directory_path" || \
+        func_fatal_error "Failed to create '$1'"
+    fi
+}
+
+
+# func_mktempdir [BASENAME]
+# -------------------------
+# Make a temporary directory that won't clash with other running
+# libtool processes, and avoids race conditions if possible.  If
+# given, BASENAME is the basename for that directory.
+func_mktempdir ()
+{
+    $debug_cmd
+
+    _G_template=${TMPDIR-/tmp}/${1-$progname}
+
+    if test : = "$opt_dry_run"; then
+      # Return a directory name, but don't create it in dry-run mode
+      _G_tmpdir=$_G_template-$$
+    else
+
+      # If mktemp works, use that first and foremost
+      _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null`
+
+      if test ! -d "$_G_tmpdir"; then
+        # Failing that, at least try and use $RANDOM to avoid a race
+        _G_tmpdir=$_G_template-${RANDOM-0}$$
+
+        func_mktempdir_umask=`umask`
+        umask 0077
+        $MKDIR "$_G_tmpdir"
+        umask $func_mktempdir_umask
+      fi
+
+      # If we're not in dry-run mode, bomb out on failure
+      test -d "$_G_tmpdir" || \
+        func_fatal_error "cannot create temporary directory '$_G_tmpdir'"
+    fi
+
+    $ECHO "$_G_tmpdir"
+}
+
+
+# func_normal_abspath PATH
+# ------------------------
+# Remove doubled-up and trailing slashes, "." path components,
+# and cancel out any ".." path components in PATH after making
+# it an absolute path.
+func_normal_abspath ()
+{
+    $debug_cmd
+
+    # These SED scripts presuppose an absolute path with a trailing slash.
+    _G_pathcar='s|^/\([^/]*\).*$|\1|'
+    _G_pathcdr='s|^/[^/]*||'
+    _G_removedotparts=':dotsl
+		s|/\./|/|g
+		t dotsl
+		s|/\.$|/|'
+    _G_collapseslashes='s|/\{1,\}|/|g'
+    _G_finalslash='s|/*$|/|'
+
+    # Start from root dir and reassemble the path.
+    func_normal_abspath_result=
+    func_normal_abspath_tpath=$1
+    func_normal_abspath_altnamespace=
+    case $func_normal_abspath_tpath in
+      "")
+        # Empty path, that just means $cwd.
+        func_stripname '' '/' "`pwd`"
+        func_normal_abspath_result=$func_stripname_result
+        return
+        ;;
+      # The next three entries are used to spot a run of precisely
+      # two leading slashes without using negated character classes;
+      # we take advantage of case's first-match behaviour.
+      ///*)
+        # Unusual form of absolute path, do nothing.
+        ;;
+      //*)
+        # Not necessarily an ordinary path; POSIX reserves leading '//'
+        # and for example Cygwin uses it to access remote file shares
+        # over CIFS/SMB, so we conserve a leading double slash if found.
+        func_normal_abspath_altnamespace=/
+        ;;
+      /*)
+        # Absolute path, do nothing.
+        ;;
+      *)
+        # Relative path, prepend $cwd.
+        func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath
+        ;;
+    esac
+
+    # Cancel out all the simple stuff to save iterations.  We also want
+    # the path to end with a slash for ease of parsing, so make sure
+    # there is one (and only one) here.
+    func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"`
+    while :; do
+      # Processed it all yet?
+      if test / = "$func_normal_abspath_tpath"; then
+        # If we ascended to the root using ".." the result may be empty now.
+        if test -z "$func_normal_abspath_result"; then
+          func_normal_abspath_result=/
+        fi
+        break
+      fi
+      func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcar"`
+      func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \
+          -e "$_G_pathcdr"`
+      # Figure out what to do with it
+      case $func_normal_abspath_tcomponent in
+        "")
+          # Trailing empty path component, ignore it.
+          ;;
+        ..)
+          # Parent dir; strip last assembled component from result.
+          func_dirname "$func_normal_abspath_result"
+          func_normal_abspath_result=$func_dirname_result
+          ;;
+        *)
+          # Actual path component, append it.
+          func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent"
+          ;;
+      esac
+    done
+    # Restore leading double-slash if one was found on entry.
+    func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result
+}
+
+
+# func_notquiet ARG...
+# --------------------
+# Echo program name prefixed message only when not in quiet mode.
+func_notquiet ()
+{
+    $debug_cmd
+
+    $opt_quiet || func_echo ${1+"$@"}
+
+    # A bug in bash halts the script if the last line of a function
+    # fails when set -e is in force, so we need another command to
+    # work around that:
+    :
+}
+
+
+# func_relative_path SRCDIR DSTDIR
+# --------------------------------
+# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR.
+func_relative_path ()
+{
+    $debug_cmd
+
+    func_relative_path_result=
+    func_normal_abspath "$1"
+    func_relative_path_tlibdir=$func_normal_abspath_result
+    func_normal_abspath "$2"
+    func_relative_path_tbindir=$func_normal_abspath_result
+
+    # Ascend the tree starting from libdir
+    while :; do
+      # check if we have found a prefix of bindir
+      case $func_relative_path_tbindir in
+        $func_relative_path_tlibdir)
+          # found an exact match
+          func_relative_path_tcancelled=
+          break
+          ;;
+        $func_relative_path_tlibdir*)
+          # found a matching prefix
+          func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir"
+          func_relative_path_tcancelled=$func_stripname_result
+          if test -z "$func_relative_path_result"; then
+            func_relative_path_result=.
+          fi
+          break
+          ;;
+        *)
+          func_dirname $func_relative_path_tlibdir
+          func_relative_path_tlibdir=$func_dirname_result
+          if test -z "$func_relative_path_tlibdir"; then
+            # Have to descend all the way to the root!
+            func_relative_path_result=../$func_relative_path_result
+            func_relative_path_tcancelled=$func_relative_path_tbindir
+            break
+          fi
+          func_relative_path_result=../$func_relative_path_result
+          ;;
+      esac
+    done
+
+    # Now calculate path; take care to avoid doubling-up slashes.
+    func_stripname '' '/' "$func_relative_path_result"
+    func_relative_path_result=$func_stripname_result
+    func_stripname '/' '/' "$func_relative_path_tcancelled"
+    if test -n "$func_stripname_result"; then
+      func_append func_relative_path_result "/$func_stripname_result"
+    fi
+
+    # Normalisation. If bindir is libdir, return '.' else relative path.
+    if test -n "$func_relative_path_result"; then
+      func_stripname './' '' "$func_relative_path_result"
+      func_relative_path_result=$func_stripname_result
+    fi
+
+    test -n "$func_relative_path_result" || func_relative_path_result=.
+
+    :
+}
+
+
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+#   i) func_quote_for_eval_result
+#      double-quoted, suitable for a subsequent eval
+#  ii) func_quote_for_eval_unquoted_result
+#      has all characters that are still active within double
+#      quotes backslashified.
+func_quote_for_eval ()
+{
+    $debug_cmd
+
+    func_quote_for_eval_unquoted_result=
+    func_quote_for_eval_result=
+    while test 0 -lt $#; do
+      case $1 in
+        *[\\\`\"\$]*)
+	  _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+        *)
+          _G_unquoted_arg=$1 ;;
+      esac
+      if test -n "$func_quote_for_eval_unquoted_result"; then
+	func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+      else
+        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+      fi
+
+      case $_G_unquoted_arg in
+        # Double-quote args containing shell metacharacters to delay
+        # word splitting, command substitution and variable expansion
+        # for a subsequent eval.
+        # Many Bourne shells cannot handle close brackets correctly
+        # in scan sets, so we specify it separately.
+        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+          _G_quoted_arg=\"$_G_unquoted_arg\"
+          ;;
+        *)
+          _G_quoted_arg=$_G_unquoted_arg
+	  ;;
+      esac
+
+      if test -n "$func_quote_for_eval_result"; then
+	func_append func_quote_for_eval_result " $_G_quoted_arg"
+      else
+        func_append func_quote_for_eval_result "$_G_quoted_arg"
+      fi
+      shift
+    done
+}
+
+
+# func_quote_for_expand ARG
+# -------------------------
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    $debug_cmd
+
+    case $1 in
+      *[\\\`\"]*)
+	_G_arg=`$ECHO "$1" | $SED \
+	    -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        _G_arg=$1 ;;
+    esac
+
+    case $_G_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+        _G_arg=\"$_G_arg\"
+        ;;
+    esac
+
+    func_quote_for_expand_result=$_G_arg
+}
+
+
+# func_stripname PREFIX SUFFIX NAME
+# ---------------------------------
+# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result.
+# PREFIX and SUFFIX must not contain globbing or regex special
+# characters, hashes, percent signs, but SUFFIX may contain a leading
+# dot (in which case that matches only a dot).
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_stripname ()
+  {
+    $debug_cmd
+
+    # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
+    # positional parameters, so assign one to ordinary variable first.
+    func_stripname_result=$3
+    func_stripname_result=${func_stripname_result#"$1"}
+    func_stripname_result=${func_stripname_result%"$2"}
+  }'
+else
+  func_stripname ()
+  {
+    $debug_cmd
+
+    case $2 in
+      .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;;
+      *)  func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;;
+    esac
+  }
+fi
+
+
+# func_show_eval CMD [FAIL_EXP]
+# -----------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.
+func_show_eval ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    func_quote_for_expand "$_G_cmd"
+    eval "func_notquiet $func_quote_for_expand_result"
+
+    $opt_dry_run || {
+      eval "$_G_cmd"
+      _G_status=$?
+      if test 0 -ne "$_G_status"; then
+	eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_show_eval_locale CMD [FAIL_EXP]
+# ------------------------------------
+# Unless opt_quiet is true, then output CMD.  Then, if opt_dryrun is
+# not true, evaluate CMD.  If the evaluation of CMD fails, and FAIL_EXP
+# is given, then evaluate it.  Use the saved locale for evaluation.
+func_show_eval_locale ()
+{
+    $debug_cmd
+
+    _G_cmd=$1
+    _G_fail_exp=${2-':'}
+
+    $opt_quiet || {
+      func_quote_for_expand "$_G_cmd"
+      eval "func_echo $func_quote_for_expand_result"
+    }
+
+    $opt_dry_run || {
+      eval "$_G_user_locale
+	    $_G_cmd"
+      _G_status=$?
+      eval "$_G_safe_locale"
+      if test 0 -ne "$_G_status"; then
+	eval "(exit $_G_status); $_G_fail_exp"
+      fi
+    }
+}
+
+
+# func_tr_sh
+# ----------
+# Turn $1 into a string suitable for a shell variable name.
+# Result is stored in $func_tr_sh_result.  All characters
+# not in the set a-zA-Z0-9_ are replaced with '_'. Further,
+# if $1 begins with a digit, a '_' is prepended as well.
+func_tr_sh ()
+{
+    $debug_cmd
+
+    case $1 in
+    [0-9]* | *[!a-zA-Z0-9_]*)
+      func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'`
+      ;;
+    * )
+      func_tr_sh_result=$1
+      ;;
+    esac
+}
+
+
+# func_verbose ARG...
+# -------------------
+# Echo program name prefixed message in verbose mode only.
+func_verbose ()
+{
+    $debug_cmd
+
+    $opt_verbose && func_echo "$*"
+
+    :
+}
+
+
+# func_warn_and_continue ARG...
+# -----------------------------
+# Echo program name prefixed warning message to standard error.
+func_warn_and_continue ()
+{
+    $debug_cmd
+
+    $require_term_colors
+
+    func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2
+}
+
+
+# func_warning CATEGORY ARG...
+# ----------------------------
+# Echo program name prefixed warning message to standard error. Warning
+# messages can be filtered according to CATEGORY, where this function
+# elides messages where CATEGORY is not listed in the global variable
+# 'opt_warning_types'.
+func_warning ()
+{
+    $debug_cmd
+
+    # CATEGORY must be in the warning_categories list!
+    case " $warning_categories " in
+      *" $1 "*) ;;
+      *) func_internal_error "invalid warning category '$1'" ;;
+    esac
+
+    _G_category=$1
+    shift
+
+    case " $opt_warning_types " in
+      *" $_G_category "*) $warning_func ${1+"$@"} ;;
+    esac
+}
+
+
+# func_sort_ver VER1 VER2
+# -----------------------
+# 'sort -V' is not generally available.
+# Note this deviates from the version comparison in automake
+# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
+# but this should suffice as we won't be specifying old
+# version formats or redundant trailing .0 in bootstrap.conf.
+# If we did want full compatibility then we should probably
+# use m4_version_compare from autoconf.
+func_sort_ver ()
+{
+    $debug_cmd
+
+    printf '%s\n%s\n' "$1" "$2" \
+      | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n
+}
+
+# func_lt_ver PREV CURR
+# ---------------------
+# Return true if PREV and CURR are in the correct order according to
+# func_sort_ver, otherwise false.  Use it like this:
+#
+#  func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..."
+func_lt_ver ()
+{
+    $debug_cmd
+
+    test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q`
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+#! /bin/sh
+
+# Set a version string for this script.
+scriptversion=2014-01-07.03; # UTC
+
+# A portable, pluggable option parser for Bourne shell.
+# Written by Gary V. Vaughan, 2010
+
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# 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.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary at gnu.org.
+
+
+## ------ ##
+## Usage. ##
+## ------ ##
+
+# This file is a library for parsing options in your shell scripts along
+# with assorted other useful supporting features that you can make use
+# of too.
+#
+# For the simplest scripts you might need only:
+#
+#   #!/bin/sh
+#   . relative/path/to/funclib.sh
+#   . relative/path/to/options-parser
+#   scriptversion=1.0
+#   func_options ${1+"$@"}
+#   eval set dummy "$func_options_result"; shift
+#   ...rest of your script...
+#
+# In order for the '--version' option to work, you will need to have a
+# suitably formatted comment like the one at the top of this file
+# starting with '# Written by ' and ending with '# warranty; '.
+#
+# For '-h' and '--help' to work, you will also need a one line
+# description of your script's purpose in a comment directly above the
+# '# Written by ' line, like the one at the top of this file.
+#
+# The default options also support '--debug', which will turn on shell
+# execution tracing (see the comment above debug_cmd below for another
+# use), and '--verbose' and the func_verbose function to allow your script
+# to display verbose messages only when your user has specified
+# '--verbose'.
+#
+# After sourcing this file, you can plug processing for additional
+# options by amending the variables from the 'Configuration' section
+# below, and following the instructions in the 'Option parsing'
+# section further down.
+
+## -------------- ##
+## Configuration. ##
+## -------------- ##
+
+# You should override these variables in your script after sourcing this
+# file so that they reflect the customisations you have added to the
+# option parser.
+
+# The usage line for option parsing errors and the start of '-h' and
+# '--help' output messages. You can embed shell variables for delayed
+# expansion at the time the message is displayed, but you will need to
+# quote other shell meta-characters carefully to prevent them being
+# expanded when the contents are evaled.
+usage='$progpath [OPTION]...'
+
+# Short help message in response to '-h' and '--help'.  Add to this or
+# override it after sourcing this library to reflect the full set of
+# options your script accepts.
+usage_message="\
+       --debug        enable verbose shell tracing
+   -W, --warnings=CATEGORY
+                      report the warnings falling in CATEGORY [all]
+   -v, --verbose      verbosely report processing
+       --version      print version information and exit
+   -h, --help         print short or long help message and exit
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+long_help_message="
+Warning categories include:
+       'all'          show all warnings
+       'none'         turn off all the warnings
+       'error'        warnings are treated as fatal errors"
+
+# Help message printed before fatal option parsing errors.
+fatal_help="Try '\$progname --help' for more information."
+
+
+
+## ------------------------- ##
+## Hook function management. ##
+## ------------------------- ##
+
+# This section contains functions for adding, removing, and running hooks
+# to the main code.  A hook is just a named list of of function, that can
+# be run in order later on.
+
+# func_hookable FUNC_NAME
+# -----------------------
+# Declare that FUNC_NAME will run hooks added with
+# 'func_add_hook FUNC_NAME ...'.
+func_hookable ()
+{
+    $debug_cmd
+
+    func_append hookable_fns " $1"
+}
+
+
+# func_add_hook FUNC_NAME HOOK_FUNC
+# ---------------------------------
+# Request that FUNC_NAME call HOOK_FUNC before it returns.  FUNC_NAME must
+# first have been declared "hookable" by a call to 'func_hookable'.
+func_add_hook ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not accept hook functions." ;;
+    esac
+
+    eval func_append ${1}_hooks '" $2"'
+}
+
+
+# func_remove_hook FUNC_NAME HOOK_FUNC
+# ------------------------------------
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+func_remove_hook ()
+{
+    $debug_cmd
+
+    eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`'
+}
+
+
+# func_run_hooks FUNC_NAME [ARG]...
+# ---------------------------------
+# Run all hook functions registered to FUNC_NAME.
+# It is assumed that the list of hook functions contains nothing more
+# than a whitespace-delimited list of legal shell function names, and
+# no effort is wasted trying to catch shell meta-characters or preserve
+# whitespace.
+func_run_hooks ()
+{
+    $debug_cmd
+
+    case " $hookable_fns " in
+      *" $1 "*) ;;
+      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+    esac
+
+    eval _G_hook_fns=\$$1_hooks; shift
+
+    for _G_hook in $_G_hook_fns; do
+      eval $_G_hook '"$@"'
+
+      # store returned options list back into positional
+      # parameters for next 'cmd' execution.
+      eval _G_hook_result=\$${_G_hook}_result
+      eval set dummy "$_G_hook_result"; shift
+    done
+
+    func_quote_for_eval ${1+"$@"}
+    func_run_hooks_result=$func_quote_for_eval_result
+}
+
+
+
+## --------------- ##
+## Option parsing. ##
+## --------------- ##
+
+# In order to add your own option parsing hooks, you must accept the
+# full positional parameter list in your hook function, remove any
+# options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'.  Like this:
+#
+#    my_options_prep ()
+#    {
+#        $debug_cmd
+#
+#        # Extend the existing usage message.
+#        usage_message=$usage_message'
+#      -s, --silent       don'\''t print informational messages
+#    '
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_options_prep_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_options_prep my_options_prep
+#
+#
+#    my_silent_option ()
+#    {
+#        $debug_cmd
+#
+#        # Note that for efficiency, we parse as many options as we can
+#        # recognise in a loop before passing the remainder back to the
+#        # caller on the first unrecognised argument we encounter.
+#        while test $# -gt 0; do
+#          opt=$1; shift
+#          case $opt in
+#            --silent|-s) opt_silent=: ;;
+#            # Separate non-argument short options:
+#            -s*)         func_split_short_opt "$_G_opt"
+#                         set dummy "$func_split_short_opt_name" \
+#                             "-$func_split_short_opt_arg" ${1+"$@"}
+#                         shift
+#                         ;;
+#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
+#          esac
+#        done
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_silent_option_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_parse_options my_silent_option
+#
+#
+#    my_option_validation ()
+#    {
+#        $debug_cmd
+#
+#        $opt_silent && $opt_verbose && func_fatal_help "\
+#    '--silent' and '--verbose' options are mutually exclusive."
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_option_validation_result=$func_quote_for_eval_result
+#    }
+#    func_add_hook func_validate_options my_option_validation
+#
+# You'll alse need to manually amend $usage_message to reflect the extra
+# options you parse.  It's preferable to append if you can, so that
+# multiple option parsing hooks can be added safely.
+
+
+# func_options [ARG]...
+# ---------------------
+# All the functions called inside func_options are hookable. See the
+# individual implementations for details.
+func_hookable func_options
+func_options ()
+{
+    $debug_cmd
+
+    func_options_prep ${1+"$@"}
+    eval func_parse_options \
+        ${func_options_prep_result+"$func_options_prep_result"}
+    eval func_validate_options \
+        ${func_parse_options_result+"$func_parse_options_result"}
+
+    eval func_run_hooks func_options \
+        ${func_validate_options_result+"$func_validate_options_result"}
+
+    # save modified positional parameters for caller
+    func_options_result=$func_run_hooks_result
+}
+
+
+# func_options_prep [ARG]...
+# --------------------------
+# All initialisations required before starting the option parse loop.
+# Note that when calling hook functions, we pass through the list of
+# positional parameters.  If a hook function modifies that list, and
+# needs to propogate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning.
+func_hookable func_options_prep
+func_options_prep ()
+{
+    $debug_cmd
+
+    # Option defaults:
+    opt_verbose=false
+    opt_warning_types=
+
+    func_run_hooks func_options_prep ${1+"$@"}
+
+    # save modified positional parameters for caller
+    func_options_prep_result=$func_run_hooks_result
+}
+
+
+# func_parse_options [ARG]...
+# ---------------------------
+# The main option parsing loop.
+func_hookable func_parse_options
+func_parse_options ()
+{
+    $debug_cmd
+
+    func_parse_options_result=
+
+    # this just eases exit handling
+    while test $# -gt 0; do
+      # Defer to hook functions for initial option parsing, so they
+      # get priority in the event of reusing an option name.
+      func_run_hooks func_parse_options ${1+"$@"}
+
+      # Adjust func_parse_options positional parameters to match
+      eval set dummy "$func_run_hooks_result"; shift
+
+      # Break out of the loop if we already parsed every option.
+      test $# -gt 0 || break
+
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --debug|-x)   debug_cmd='set -x'
+                      func_echo "enabling shell trace mode"
+                      $debug_cmd
+                      ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                      set dummy --warnings none ${1+"$@"}
+                      shift
+		      ;;
+
+        --warnings|--warning|-W)
+                      test $# = 0 && func_missing_arg $_G_opt && break
+                      case " $warning_categories $1" in
+                        *" $1 "*)
+                          # trailing space prevents matching last $1 above
+                          func_append_uniq opt_warning_types " $1"
+                          ;;
+                        *all)
+                          opt_warning_types=$warning_categories
+                          ;;
+                        *none)
+                          opt_warning_types=none
+                          warning_func=:
+                          ;;
+                        *error)
+                          opt_warning_types=$warning_categories
+                          warning_func=func_fatal_error
+                          ;;
+                        *)
+                          func_fatal_error \
+                             "unsupported warning category: '$1'"
+                          ;;
+                      esac
+                      shift
+                      ;;
+
+        --verbose|-v) opt_verbose=: ;;
+        --version)    func_version ;;
+        -\?|-h)       func_usage ;;
+        --help)       func_help ;;
+
+	# Separate optargs to long options (plugins may need this):
+	--*=*)        func_split_equals "$_G_opt"
+	              set dummy "$func_split_equals_lhs" \
+                          "$func_split_equals_rhs" ${1+"$@"}
+                      shift
+                      ;;
+
+       # Separate optargs to short options:
+        -W*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        # Separate non-argument short options:
+        -\?*|-h*|-v*|-x*)
+                      func_split_short_opt "$_G_opt"
+                      set dummy "$func_split_short_opt_name" \
+                          "-$func_split_short_opt_arg" ${1+"$@"}
+                      shift
+                      ;;
+
+        --)           break ;;
+        -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
+        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+      esac
+    done
+
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    func_parse_options_result=$func_quote_for_eval_result
+}
+
+
+# func_validate_options [ARG]...
+# ------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+func_hookable func_validate_options
+func_validate_options ()
+{
+    $debug_cmd
+
+    # Display all warnings if -W was not given.
+    test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
+
+    func_run_hooks func_validate_options ${1+"$@"}
+
+    # Bail if the options were screwed!
+    $exit_cmd $EXIT_FAILURE
+
+    # save modified positional parameters for caller
+    func_validate_options_result=$func_run_hooks_result
+}
+
+
+
+## ----------------- ##
+## Helper functions. ##
+## ----------------- ##
+
+# This section contains the helper functions used by the rest of the
+# hookable option parser framework in ascii-betical order.
+
+
+# func_fatal_help ARG...
+# ----------------------
+# Echo program name prefixed message to standard error, followed by
+# a help hint, and exit.
+func_fatal_help ()
+{
+    $debug_cmd
+
+    eval \$ECHO \""Usage: $usage"\"
+    eval \$ECHO \""$fatal_help"\"
+    func_error ${1+"$@"}
+    exit $EXIT_FAILURE
+}
+
+
+# func_help
+# ---------
+# Echo long help message to standard output and exit.
+func_help ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$long_help_message"
+    exit 0
+}
+
+
+# func_missing_arg ARGNAME
+# ------------------------
+# Echo program name prefixed message to standard error and set global
+# exit_cmd.
+func_missing_arg ()
+{
+    $debug_cmd
+
+    func_error "Missing argument for '$1'."
+    exit_cmd=exit
+}
+
+
+# func_split_equals STRING
+# ------------------------
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
+test -z "$_G_HAVE_XSI_OPS" \
+    && (eval 'x=a/b/c;
+      test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
+    && _G_HAVE_XSI_OPS=yes
+
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=${1%%=*}
+      func_split_equals_rhs=${1#*=}
+      test "x$func_split_equals_lhs" = "x$1" \
+        && func_split_equals_rhs=
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_equals ()
+  {
+      $debug_cmd
+
+      func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
+      func_split_equals_rhs=
+      test "x$func_split_equals_lhs" = "x$1" \
+        || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
+  }
+fi #func_split_equals
+
+
+# func_split_short_opt SHORTOPT
+# -----------------------------
+# Set func_split_short_opt_name and func_split_short_opt_arg shell
+# variables after splitting SHORTOPT after the 2nd character.
+if test yes = "$_G_HAVE_XSI_OPS"
+then
+  # This is an XSI compatible shell, allowing a faster implementation...
+  eval 'func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_arg=${1#??}
+      func_split_short_opt_name=${1%"$func_split_short_opt_arg"}
+  }'
+else
+  # ...otherwise fall back to using expr, which is often a shell builtin.
+  func_split_short_opt ()
+  {
+      $debug_cmd
+
+      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+      func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
+  }
+fi #func_split_short_opt
+
+
+# func_usage
+# ----------
+# Echo short help message to standard output and exit.
+func_usage ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "Run '$progname --help |${PAGER-more}' for full usage"
+    exit 0
+}
+
+
+# func_usage_message
+# ------------------
+# Echo short help message to standard output.
+func_usage_message ()
+{
+    $debug_cmd
+
+    eval \$ECHO \""Usage: $usage"\"
+    echo
+    $SED -n 's|^# ||
+        /^Written by/{
+          x;p;x
+        }
+	h
+	/^Written by/q' < "$progpath"
+    echo
+    eval \$ECHO \""$usage_message"\"
+}
+
+
+# func_version
+# ------------
+# Echo version message to standard output and exit.
+func_version ()
+{
+    $debug_cmd
+
+    printf '%s\n' "$progname $scriptversion"
+    $SED -n '
+        /(C)/!b go
+        :more
+        /\./!{
+          N
+          s|\n# | |
+          b more
+        }
+        :go
+        /^# Written by /,/# warranty; / {
+          s|^# ||
+          s|^# *$||
+          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+          p
+        }
+        /^# Written by / {
+          s|^# ||
+          p
+        }
+        /^warranty; /q' < "$progpath"
+
+    exit $?
+}
+
+
+# Local variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-time-zone: "UTC"
+# End:
+
+# Set a version string.
+scriptversion='(GNU libtool) 2.4.6'
+
+
+# func_echo ARG...
+# ----------------
+# Libtool also displays the current mode in messages, so override
+# funclib.sh func_echo with this custom definition.
+func_echo ()
+{
+    $debug_cmd
+
+    _G_message=$*
+
+    func_echo_IFS=$IFS
+    IFS=$nl
+    for _G_line in $_G_message; do
+      IFS=$func_echo_IFS
+      $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line"
+    done
+    IFS=$func_echo_IFS
+}
+
+
+# func_warning ARG...
+# -------------------
+# Libtool warnings are not categorized, so override funclib.sh
+# func_warning with this simpler definition.
+func_warning ()
+{
+    $debug_cmd
+
+    $warning_func ${1+"$@"}
+}
+
+
+## ---------------- ##
+## Options parsing. ##
+## ---------------- ##
+
+# Hook in the functions to make sure our own options are parsed during
+# the option parsing loop.
+
+usage='$progpath [OPTION]... [MODE-ARG]...'
+
+# Short help message in response to '-h'.
+usage_message="Options:
+       --config             show all configuration variables
+       --debug              enable verbose shell tracing
+   -n, --dry-run            display commands without modifying any files
+       --features           display basic configuration information and exit
+       --mode=MODE          use operation mode MODE
+       --no-warnings        equivalent to '-Wnone'
+       --preserve-dup-deps  don't remove duplicate dependency libraries
+       --quiet, --silent    don't print informational messages
+       --tag=TAG            use configuration variables from tag TAG
+   -v, --verbose            print more informational messages than default
+       --version            print version information
+   -W, --warnings=CATEGORY  report the warnings falling in CATEGORY [all]
+   -h, --help, --help-all   print short, long, or detailed help message
+"
+
+# Additional text appended to 'usage_message' in response to '--help'.
+func_help ()
+{
+    $debug_cmd
+
+    func_usage_message
+    $ECHO "$long_help_message
+
+MODE must be one of the following:
+
+       clean           remove files from the build directory
+       compile         compile a source file into a libtool object
+       execute         automatically set library path, then run a program
+       finish          complete the installation of libtool libraries
+       install         install libraries or executables
+       link            create a library or an executable
+       uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  When passed as first option,
+'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that.
+Try '$progname --help --mode=MODE' for a more detailed description of MODE.
+
+When reporting a bug, please describe a test case to reproduce it and
+include the following information:
+
+       host-triplet:   $host
+       shell:          $SHELL
+       compiler:       $LTCC
+       compiler flags: $LTCFLAGS
+       linker:         $LD (gnu? $with_gnu_ld)
+       version:        $progname (GNU libtool) 2.4.6
+       automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
+       autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
+
+Report bugs to <bug-libtool at gnu.org>.
+GNU libtool home page: <http://www.gnu.org/software/libtool/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+    exit 0
+}
+
+
+# func_lo2o OBJECT-NAME
+# ---------------------
+# Transform OBJECT-NAME from a '.lo' suffix to the platform specific
+# object suffix.
+
+lo2o=s/\\.lo\$/.$objext/
+o2lo=s/\\.$objext\$/.lo/
+
+if test yes = "$_G_HAVE_XSI_OPS"; then
+  eval 'func_lo2o ()
+  {
+    case $1 in
+      *.lo) func_lo2o_result=${1%.lo}.$objext ;;
+      *   ) func_lo2o_result=$1               ;;
+    esac
+  }'
+
+  # func_xform LIBOBJ-OR-SOURCE
+  # ---------------------------
+  # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise)
+  # suffix to a '.lo' libtool-object suffix.
+  eval 'func_xform ()
+  {
+    func_xform_result=${1%.*}.lo
+  }'
+else
+  # ...otherwise fall back to using sed.
+  func_lo2o ()
+  {
+    func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"`
+  }
+
+  func_xform ()
+  {
+    func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'`
+  }
+fi
+
+
+# func_fatal_configuration ARG...
+# -------------------------------
+# Echo program name prefixed message to standard error, followed by
+# a configuration failure hint, and exit.
+func_fatal_configuration ()
+{
+    func__fatal_error ${1+"$@"} \
+      "See the $PACKAGE documentation for more information." \
+      "Fatal configuration error."
+}
+
+
+# func_config
+# -----------
+# Display the configuration for all the tags in this script.
+func_config ()
+{
+    re_begincf='^# ### BEGIN LIBTOOL'
+    re_endcf='^# ### END LIBTOOL'
+
+    # Default configuration.
+    $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
+
+    # Now print the configurations for the tags.
+    for tagname in $taglist; do
+      $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
+    done
+
+    exit $?
+}
+
+
+# func_features
+# -------------
+# Display the features supported by this script.
+func_features ()
+{
+    echo "host: $host"
+    if test yes = "$build_libtool_libs"; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test yes = "$build_old_libs"; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+
+    exit $?
+}
+
+
+# func_enable_tag TAGNAME
+# -----------------------
+# Verify that TAGNAME is valid, and either flag an error and exit, or
+# enable the TAGNAME tag.  We also add TAGNAME to the global $taglist
+# variable here.
+func_enable_tag ()
+{
+    # Global variable:
+    tagname=$1
+
+    re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
+    re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
+    sed_extractcf=/$re_begincf/,/$re_endcf/p
+
+    # Validate tagname.
+    case $tagname in
+      *[!-_A-Za-z0-9,/]*)
+        func_fatal_error "invalid tag name: $tagname"
+        ;;
+    esac
+
+    # Don't test for the "default" C tag, as we know it's
+    # there but not specially marked.
+    case $tagname in
+        CC) ;;
+    *)
+        if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
+	  taglist="$taglist $tagname"
+
+	  # Evaluate the configuration.  Be careful to quote the path
+	  # and the sed script, to avoid splitting on whitespace, but
+	  # also don't use non-portable quotes within backquotes within
+	  # quotes we have to do it in 2 steps:
+	  extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
+	  eval "$extractedcf"
+        else
+	  func_error "ignoring unknown tag $tagname"
+        fi
+        ;;
+    esac
+}
+
+
+# func_check_version_match
+# ------------------------
+# Ensure that we are using m4 macros, and libtool script from the same
+# release of libtool.
+func_check_version_match ()
+{
+    if test "$package_revision" != "$macro_revision"; then
+      if test "$VERSION" != "$macro_version"; then
+        if test -z "$macro_version"; then
+          cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from an older release.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+        else
+          cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, but the
+$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
+$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
+$progname: and run autoconf again.
+_LT_EOF
+        fi
+      else
+        cat >&2 <<_LT_EOF
+$progname: Version mismatch error.  This is $PACKAGE $VERSION, revision $package_revision,
+$progname: but the definition of this LT_INIT comes from revision $macro_revision.
+$progname: You should recreate aclocal.m4 with macros from revision $package_revision
+$progname: of $PACKAGE $VERSION and run autoconf again.
+_LT_EOF
+      fi
+
+      exit $EXIT_MISMATCH
+    fi
+}
+
+
+# libtool_options_prep [ARG]...
+# -----------------------------
+# Preparation for options parsed by libtool.
+libtool_options_prep ()
+{
+    $debug_mode
+
+    # Option defaults:
+    opt_config=false
+    opt_dlopen=
+    opt_dry_run=false
+    opt_help=false
+    opt_mode=
+    opt_preserve_dup_deps=false
+    opt_quiet=false
+
+    nonopt=
+    preserve_args=
+
+    # Shorthand for --mode=foo, only valid as the first argument
+    case $1 in
+    clean|clea|cle|cl)
+      shift; set dummy --mode clean ${1+"$@"}; shift
+      ;;
+    compile|compil|compi|comp|com|co|c)
+      shift; set dummy --mode compile ${1+"$@"}; shift
+      ;;
+    execute|execut|execu|exec|exe|ex|e)
+      shift; set dummy --mode execute ${1+"$@"}; shift
+      ;;
+    finish|finis|fini|fin|fi|f)
+      shift; set dummy --mode finish ${1+"$@"}; shift
+      ;;
+    install|instal|insta|inst|ins|in|i)
+      shift; set dummy --mode install ${1+"$@"}; shift
+      ;;
+    link|lin|li|l)
+      shift; set dummy --mode link ${1+"$@"}; shift
+      ;;
+    uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
+      shift; set dummy --mode uninstall ${1+"$@"}; shift
+      ;;
+    esac
+
+    # Pass back the list of options.
+    func_quote_for_eval ${1+"$@"}
+    libtool_options_prep_result=$func_quote_for_eval_result
+}
+func_add_hook func_options_prep libtool_options_prep
+
+
+# libtool_parse_options [ARG]...
+# ---------------------------------
+# Provide handling for libtool specific options.
+libtool_parse_options ()
+{
+    $debug_cmd
+
+    # Perform our own loop to consume as many options as possible in
+    # each iteration.
+    while test $# -gt 0; do
+      _G_opt=$1
+      shift
+      case $_G_opt in
+        --dry-run|--dryrun|-n)
+                        opt_dry_run=:
+                        ;;
+
+        --config)       func_config ;;
+
+        --dlopen|-dlopen)
+                        opt_dlopen="${opt_dlopen+$opt_dlopen
+}$1"
+                        shift
+                        ;;
+
+        --preserve-dup-deps)
+                        opt_preserve_dup_deps=: ;;
+
+        --features)     func_features ;;
+
+        --finish)       set dummy --mode finish ${1+"$@"}; shift ;;
+
+        --help)         opt_help=: ;;
+
+        --help-all)     opt_help=': help-all' ;;
+
+        --mode)         test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_mode=$1
+                        case $1 in
+                          # Valid mode arguments:
+                          clean|compile|execute|finish|install|link|relink|uninstall) ;;
+
+                          # Catch anything else as an error
+                          *) func_error "invalid argument for $_G_opt"
+                             exit_cmd=exit
+                             break
+                             ;;
+                        esac
+                        shift
+                        ;;
+
+        --no-silent|--no-quiet)
+                        opt_quiet=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-warnings|--no-warning|--no-warn)
+                        opt_warning=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --no-verbose)
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --silent|--quiet)
+                        opt_quiet=:
+                        opt_verbose=false
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+        --tag)          test $# = 0 && func_missing_arg $_G_opt && break
+                        opt_tag=$1
+                        func_append preserve_args " $_G_opt $1"
+                        func_enable_tag "$1"
+                        shift
+                        ;;
+
+        --verbose|-v)   opt_quiet=false
+                        opt_verbose=:
+                        func_append preserve_args " $_G_opt"
+                        ;;
+
+	# An option not handled by this hook function:
+        *)		set dummy "$_G_opt" ${1+"$@"};	shift; break  ;;
+      esac
+    done
+
+
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    libtool_parse_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_parse_options libtool_parse_options
+
+
+
+# libtool_validate_options [ARG]...
+# ---------------------------------
+# Perform any sanity checks on option settings and/or unconsumed
+# arguments.
+libtool_validate_options ()
+{
+    # save first non-option argument
+    if test 0 -lt $#; then
+      nonopt=$1
+      shift
+    fi
+
+    # preserve --debug
+    test : = "$debug_cmd" || func_append preserve_args " --debug"
+
+    case $host in
+      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+        # don't eliminate duplications in $postdeps and $predeps
+        opt_duplicate_compiler_generated_deps=:
+        ;;
+      *)
+        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+        ;;
+    esac
+
+    $opt_help || {
+      # Sanity checks first:
+      func_check_version_match
+
+      test yes != "$build_libtool_libs" \
+        && test yes != "$build_old_libs" \
+        && func_fatal_configuration "not configured to build any kind of library"
+
+      # Darwin sucks
+      eval std_shrext=\"$shrext_cmds\"
+
+      # Only execute mode is allowed to have -dlopen flags.
+      if test -n "$opt_dlopen" && test execute != "$opt_mode"; then
+        func_error "unrecognized option '-dlopen'"
+        $ECHO "$help" 1>&2
+        exit $EXIT_FAILURE
+      fi
+
+      # Change the help message to a mode-specific one.
+      generic_help=$help
+      help="Try '$progname --help --mode=$opt_mode' for more information."
+    }
+
+    # Pass back the unparsed argument list
+    func_quote_for_eval ${1+"$@"}
+    libtool_validate_options_result=$func_quote_for_eval_result
+}
+func_add_hook func_validate_options libtool_validate_options
+
+
+# Process options as early as possible so that --help and --version
+# can return quickly.
+func_options ${1+"$@"}
+eval set dummy "$func_options_result"; shift
+
+
+
+## ----------- ##
+##    Main.    ##
+## ----------- ##
+
+magic='%%%MAGIC variable%%%'
+magic_exe='%%%MAGIC EXE variable%%%'
+
+# Global variables.
+extracted_archives=
+extracted_serial=0
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+$1
+_LTECHO_EOF'
+}
+
+# func_generated_by_libtool
+# True iff stdin has been generated by Libtool. This function is only
+# a basic sanity check; it will hardly flush out determined imposters.
+func_generated_by_libtool_p ()
+{
+  $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
+}
+
+# func_lalib_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_lalib_p ()
+{
+    test -f "$1" &&
+      $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_lalib_unsafe_p file
+# True iff FILE is a libtool '.la' library or '.lo' object file.
+# This function implements the same check as func_lalib_p without
+# resorting to external programs.  To this end, it redirects stdin and
+# closes it afterwards, without saving the original file descriptor.
+# As a safety measure, use it only where a negative result would be
+# fatal anyway.  Works if 'file' does not exist.
+func_lalib_unsafe_p ()
+{
+    lalib_p=no
+    if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
+	for lalib_p_l in 1 2 3 4
+	do
+	    read lalib_p_line
+	    case $lalib_p_line in
+		\#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
+	    esac
+	done
+	exec 0<&5 5<&-
+    fi
+    test yes = "$lalib_p"
+}
+
+# func_ltwrapper_script_p file
+# True iff FILE is a libtool wrapper script
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_script_p ()
+{
+    test -f "$1" &&
+      $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p
+}
+
+# func_ltwrapper_executable_p file
+# True iff FILE is a libtool wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_executable_p ()
+{
+    func_ltwrapper_exec_suffix=
+    case $1 in
+    *.exe) ;;
+    *) func_ltwrapper_exec_suffix=.exe ;;
+    esac
+    $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
+}
+
+# func_ltwrapper_scriptname file
+# Assumes file is an ltwrapper_executable
+# uses $file to determine the appropriate filename for a
+# temporary ltwrapper_script.
+func_ltwrapper_scriptname ()
+{
+    func_dirname_and_basename "$1" "" "."
+    func_stripname '' '.exe' "$func_basename_result"
+    func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper
+}
+
+# func_ltwrapper_p file
+# True iff FILE is a libtool wrapper script or wrapper executable
+# This function is only a basic sanity check; it will hardly flush out
+# determined imposters.
+func_ltwrapper_p ()
+{
+    func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
+}
+
+
+# func_execute_cmds commands fail_cmd
+# Execute tilde-delimited COMMANDS.
+# If FAIL_CMD is given, eval that upon failure.
+# FAIL_CMD may read-access the current command in variable CMD!
+func_execute_cmds ()
+{
+    $debug_cmd
+
+    save_ifs=$IFS; IFS='~'
+    for cmd in $1; do
+      IFS=$sp$nl
+      eval cmd=\"$cmd\"
+      IFS=$save_ifs
+      func_show_eval "$cmd" "${2-:}"
+    done
+    IFS=$save_ifs
+}
+
+
+# func_source file
+# Source FILE, adding directory component if necessary.
+# Note that it is not necessary on cygwin/mingw to append a dot to
+# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
+# behavior happens only for exec(3), not for open(2)!  Also, sourcing
+# 'FILE.' does not work on cygwin managed mounts.
+func_source ()
+{
+    $debug_cmd
+
+    case $1 in
+    */* | *\\*)	. "$1" ;;
+    *)		. "./$1" ;;
+    esac
+}
+
+
+# func_resolve_sysroot PATH
+# Replace a leading = in PATH with a sysroot.  Store the result into
+# func_resolve_sysroot_result
+func_resolve_sysroot ()
+{
+  func_resolve_sysroot_result=$1
+  case $func_resolve_sysroot_result in
+  =*)
+    func_stripname '=' '' "$func_resolve_sysroot_result"
+    func_resolve_sysroot_result=$lt_sysroot$func_stripname_result
+    ;;
+  esac
+}
+
+# func_replace_sysroot PATH
+# If PATH begins with the sysroot, replace it with = and
+# store the result into func_replace_sysroot_result.
+func_replace_sysroot ()
+{
+  case $lt_sysroot:$1 in
+  ?*:"$lt_sysroot"*)
+    func_stripname "$lt_sysroot" '' "$1"
+    func_replace_sysroot_result='='$func_stripname_result
+    ;;
+  *)
+    # Including no sysroot.
+    func_replace_sysroot_result=$1
+    ;;
+  esac
+}
+
+# func_infer_tag arg
+# Infer tagged configuration to use if any are available and
+# if one wasn't chosen via the "--tag" command line option.
+# Only attempt this if the compiler in the base compile
+# command doesn't match the default compiler.
+# arg is usually of the form 'gcc ...'
+func_infer_tag ()
+{
+    $debug_cmd
+
+    if test -n "$available_tags" && test -z "$tagname"; then
+      CC_quoted=
+      for arg in $CC; do
+	func_append_quoted CC_quoted "$arg"
+      done
+      CC_expanded=`func_echo_all $CC`
+      CC_quoted_expanded=`func_echo_all $CC_quoted`
+      case $@ in
+      # Blanks in the command may have been stripped by the calling shell,
+      # but not from the CC environment variable when configure was run.
+      " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+      " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;;
+      # Blanks at the start of $base_compile will cause this to fail
+      # if we don't check for them as well.
+      *)
+	for z in $available_tags; do
+	  if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
+	    # Evaluate the configuration.
+	    eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
+	    CC_quoted=
+	    for arg in $CC; do
+	      # Double-quote args containing other shell metacharacters.
+	      func_append_quoted CC_quoted "$arg"
+	    done
+	    CC_expanded=`func_echo_all $CC`
+	    CC_quoted_expanded=`func_echo_all $CC_quoted`
+	    case "$@ " in
+	    " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \
+	    " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*)
+	      # The compiler in the base compile command matches
+	      # the one in the tagged configuration.
+	      # Assume this is the tagged configuration we want.
+	      tagname=$z
+	      break
+	      ;;
+	    esac
+	  fi
+	done
+	# If $tagname still isn't set, then no tagged configuration
+	# was found and let the user know that the "--tag" command
+	# line option must be used.
+	if test -z "$tagname"; then
+	  func_echo "unable to infer tagged configuration"
+	  func_fatal_error "specify a tag with '--tag'"
+#	else
+#	  func_verbose "using $tagname tagged configuration"
+	fi
+	;;
+      esac
+    fi
+}
+
+
+
+# func_write_libtool_object output_name pic_name nonpic_name
+# Create a libtool object file (analogous to a ".la" file),
+# but don't create it if we're doing a dry run.
+func_write_libtool_object ()
+{
+    write_libobj=$1
+    if test yes = "$build_libtool_libs"; then
+      write_lobj=\'$2\'
+    else
+      write_lobj=none
+    fi
+
+    if test yes = "$build_old_libs"; then
+      write_oldobj=\'$3\'
+    else
+      write_oldobj=none
+    fi
+
+    $opt_dry_run || {
+      cat >${write_libobj}T <<EOF
+# $write_libobj - a libtool object file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object=$write_lobj
+
+# Name of the non-PIC object
+non_pic_object=$write_oldobj
+
+EOF
+      $MV "${write_libobj}T" "$write_libobj"
+    }
+}
+
+
+##################################################
+# FILE NAME AND PATH CONVERSION HELPER FUNCTIONS #
+##################################################
+
+# func_convert_core_file_wine_to_w32 ARG
+# Helper function used by file name conversion functions when $build is *nix,
+# and $host is mingw, cygwin, or some other w32 environment. Relies on a
+# correctly configured wine environment available, with the winepath program
+# in $build's $PATH.
+#
+# ARG is the $build file name to be converted to w32 format.
+# Result is available in $func_convert_core_file_wine_to_w32_result, and will
+# be empty on error (or when ARG is empty)
+func_convert_core_file_wine_to_w32 ()
+{
+  $debug_cmd
+
+  func_convert_core_file_wine_to_w32_result=$1
+  if test -n "$1"; then
+    # Unfortunately, winepath does not exit with a non-zero error code, so we
+    # are forced to check the contents of stdout. On the other hand, if the
+    # command is not found, the shell will set an exit code of 127 and print
+    # *an error message* to stdout. So we must check for both error code of
+    # zero AND non-empty stdout, which explains the odd construction:
+    func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null`
+    if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then
+      func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" |
+        $SED -e "$sed_naive_backslashify"`
+    else
+      func_convert_core_file_wine_to_w32_result=
+    fi
+  fi
+}
+# end: func_convert_core_file_wine_to_w32
+
+
+# func_convert_core_path_wine_to_w32 ARG
+# Helper function used by path conversion functions when $build is *nix, and
+# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly
+# configured wine environment available, with the winepath program in $build's
+# $PATH. Assumes ARG has no leading or trailing path separator characters.
+#
+# ARG is path to be converted from $build format to win32.
+# Result is available in $func_convert_core_path_wine_to_w32_result.
+# Unconvertible file (directory) names in ARG are skipped; if no directory names
+# are convertible, then the result may be empty.
+func_convert_core_path_wine_to_w32 ()
+{
+  $debug_cmd
+
+  # unfortunately, winepath doesn't convert paths, only file names
+  func_convert_core_path_wine_to_w32_result=
+  if test -n "$1"; then
+    oldIFS=$IFS
+    IFS=:
+    for func_convert_core_path_wine_to_w32_f in $1; do
+      IFS=$oldIFS
+      func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f"
+      if test -n "$func_convert_core_file_wine_to_w32_result"; then
+        if test -z "$func_convert_core_path_wine_to_w32_result"; then
+          func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result
+        else
+          func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result"
+        fi
+      fi
+    done
+    IFS=$oldIFS
+  fi
+}
+# end: func_convert_core_path_wine_to_w32
+
+
+# func_cygpath ARGS...
+# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when
+# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2)
+# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or
+# (2), returns the Cygwin file name or path in func_cygpath_result (input
+# file name or path is assumed to be in w32 format, as previously converted
+# from $build's *nix or MSYS format). In case (3), returns the w32 file name
+# or path in func_cygpath_result (input file name or path is assumed to be in
+# Cygwin format). Returns an empty string on error.
+#
+# ARGS are passed to cygpath, with the last one being the file name or path to
+# be converted.
+#
+# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH
+# environment variable; do not put it in $PATH.
+func_cygpath ()
+{
+  $debug_cmd
+
+  if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then
+    func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null`
+    if test "$?" -ne 0; then
+      # on failure, ensure result is empty
+      func_cygpath_result=
+    fi
+  else
+    func_cygpath_result=
+    func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'"
+  fi
+}
+#end: func_cygpath
+
+
+# func_convert_core_msys_to_w32 ARG
+# Convert file name or path ARG from MSYS format to w32 format.  Return
+# result in func_convert_core_msys_to_w32_result.
+func_convert_core_msys_to_w32 ()
+{
+  $debug_cmd
+
+  # awkward: cmd appends spaces to result
+  func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null |
+    $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"`
+}
+#end: func_convert_core_msys_to_w32
+
+
+# func_convert_file_check ARG1 ARG2
+# Verify that ARG1 (a file name in $build format) was converted to $host
+# format in ARG2. Otherwise, emit an error message, but continue (resetting
+# func_to_host_file_result to ARG1).
+func_convert_file_check ()
+{
+  $debug_cmd
+
+  if test -z "$2" && test -n "$1"; then
+    func_error "Could not determine host file name corresponding to"
+    func_error "  '$1'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback:
+    func_to_host_file_result=$1
+  fi
+}
+# end func_convert_file_check
+
+
+# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH
+# Verify that FROM_PATH (a path in $build format) was converted to $host
+# format in TO_PATH. Otherwise, emit an error message, but continue, resetting
+# func_to_host_file_result to a simplistic fallback value (see below).
+func_convert_path_check ()
+{
+  $debug_cmd
+
+  if test -z "$4" && test -n "$3"; then
+    func_error "Could not determine the host path corresponding to"
+    func_error "  '$3'"
+    func_error "Continuing, but uninstalled executables may not work."
+    # Fallback.  This is a deliberately simplistic "conversion" and
+    # should not be "improved".  See libtool.info.
+    if test "x$1" != "x$2"; then
+      lt_replace_pathsep_chars="s|$1|$2|g"
+      func_to_host_path_result=`echo "$3" |
+        $SED -e "$lt_replace_pathsep_chars"`
+    else
+      func_to_host_path_result=$3
+    fi
+  fi
+}
+# end func_convert_path_check
+
+
+# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG
+# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT
+# and appending REPL if ORIG matches BACKPAT.
+func_convert_path_front_back_pathsep ()
+{
+  $debug_cmd
+
+  case $4 in
+  $1 ) func_to_host_path_result=$3$func_to_host_path_result
+    ;;
+  esac
+  case $4 in
+  $2 ) func_append func_to_host_path_result "$3"
+    ;;
+  esac
+}
+# end func_convert_path_front_back_pathsep
+
+
+##################################################
+# $build to $host FILE NAME CONVERSION FUNCTIONS #
+##################################################
+# invoked via '$to_host_file_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# Result will be available in $func_to_host_file_result.
+
+
+# func_to_host_file ARG
+# Converts the file name ARG from $build format to $host format. Return result
+# in func_to_host_file_result.
+func_to_host_file ()
+{
+  $debug_cmd
+
+  $to_host_file_cmd "$1"
+}
+# end func_to_host_file
+
+
+# func_to_tool_file ARG LAZY
+# converts the file name ARG from $build format to toolchain format. Return
+# result in func_to_tool_file_result.  If the conversion in use is listed
+# in (the comma separated) LAZY, no conversion takes place.
+func_to_tool_file ()
+{
+  $debug_cmd
+
+  case ,$2, in
+    *,"$to_tool_file_cmd",*)
+      func_to_tool_file_result=$1
+      ;;
+    *)
+      $to_tool_file_cmd "$1"
+      func_to_tool_file_result=$func_to_host_file_result
+      ;;
+  esac
+}
+# end func_to_tool_file
+
+
+# func_convert_file_noop ARG
+# Copy ARG to func_to_host_file_result.
+func_convert_file_noop ()
+{
+  func_to_host_file_result=$1
+}
+# end func_convert_file_noop
+
+
+# func_convert_file_msys_to_w32 ARG
+# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_file_result.
+func_convert_file_msys_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_to_host_file_result=$func_convert_core_msys_to_w32_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_w32
+
+
+# func_convert_file_cygwin_to_w32 ARG
+# Convert file name ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_file_cygwin_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    # because $build is cygwin, we call "the" cygpath in $PATH; no need to use
+    # LT_CYGPATH in this case.
+    func_to_host_file_result=`cygpath -m "$1"`
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_cygwin_to_w32
+
+
+# func_convert_file_nix_to_w32 ARG
+# Convert file name ARG from *nix to w32 format.  Requires a wine environment
+# and a working winepath. Returns result in func_to_host_file_result.
+func_convert_file_nix_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_file_wine_to_w32 "$1"
+    func_to_host_file_result=$func_convert_core_file_wine_to_w32_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_w32
+
+
+# func_convert_file_msys_to_cygwin ARG
+# Convert file name ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_file_msys_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    func_convert_core_msys_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_msys_to_w32_result"
+    func_to_host_file_result=$func_cygpath_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_msys_to_cygwin
+
+
+# func_convert_file_nix_to_cygwin ARG
+# Convert file name ARG from *nix to Cygwin format.  Requires Cygwin installed
+# in a wine environment, working winepath, and LT_CYGPATH set.  Returns result
+# in func_to_host_file_result.
+func_convert_file_nix_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_file_result=$1
+  if test -n "$1"; then
+    # convert from *nix to w32, then use cygpath to convert from w32 to cygwin.
+    func_convert_core_file_wine_to_w32 "$1"
+    func_cygpath -u "$func_convert_core_file_wine_to_w32_result"
+    func_to_host_file_result=$func_cygpath_result
+  fi
+  func_convert_file_check "$1" "$func_to_host_file_result"
+}
+# end func_convert_file_nix_to_cygwin
+
+
+#############################################
+# $build to $host PATH CONVERSION FUNCTIONS #
+#############################################
+# invoked via '$to_host_path_cmd ARG'
+#
+# In each case, ARG is the path to be converted from $build to $host format.
+# The result will be available in $func_to_host_path_result.
+#
+# Path separators are also converted from $build format to $host format.  If
+# ARG begins or ends with a path separator character, it is preserved (but
+# converted to $host format) on output.
+#
+# All path conversion functions are named using the following convention:
+#   file name conversion function    : func_convert_file_X_to_Y ()
+#   path conversion function         : func_convert_path_X_to_Y ()
+# where, for any given $build/$host combination the 'X_to_Y' value is the
+# same.  If conversion functions are added for new $build/$host combinations,
+# the two new functions must follow this pattern, or func_init_to_host_path_cmd
+# will break.
+
+
+# func_init_to_host_path_cmd
+# Ensures that function "pointer" variable $to_host_path_cmd is set to the
+# appropriate value, based on the value of $to_host_file_cmd.
+to_host_path_cmd=
+func_init_to_host_path_cmd ()
+{
+  $debug_cmd
+
+  if test -z "$to_host_path_cmd"; then
+    func_stripname 'func_convert_file_' '' "$to_host_file_cmd"
+    to_host_path_cmd=func_convert_path_$func_stripname_result
+  fi
+}
+
+
+# func_to_host_path ARG
+# Converts the path ARG from $build format to $host format. Return result
+# in func_to_host_path_result.
+func_to_host_path ()
+{
+  $debug_cmd
+
+  func_init_to_host_path_cmd
+  $to_host_path_cmd "$1"
+}
+# end func_to_host_path
+
+
+# func_convert_path_noop ARG
+# Copy ARG to func_to_host_path_result.
+func_convert_path_noop ()
+{
+  func_to_host_path_result=$1
+}
+# end func_convert_path_noop
+
+
+# func_convert_path_msys_to_w32 ARG
+# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic
+# conversion to w32 is not available inside the cwrapper.  Returns result in
+# func_to_host_path_result.
+func_convert_path_msys_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from ARG.  MSYS
+    # behavior is inconsistent here; cygpath turns them into '.;' and ';.';
+    # and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result=$func_convert_core_msys_to_w32_result
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_msys_to_w32
+
+
+# func_convert_path_cygwin_to_w32 ARG
+# Convert path ARG from Cygwin to w32 format.  Returns result in
+# func_to_host_file_result.
+func_convert_path_cygwin_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"`
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_cygwin_to_w32
+
+
+# func_convert_path_nix_to_w32 ARG
+# Convert path ARG from *nix to w32 format.  Requires a wine environment and
+# a working winepath.  Returns result in func_to_host_file_result.
+func_convert_path_nix_to_w32 ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_to_host_path_result=$func_convert_core_path_wine_to_w32_result
+    func_convert_path_check : ";" \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" ";" "$1"
+  fi
+}
+# end func_convert_path_nix_to_w32
+
+
+# func_convert_path_msys_to_cygwin ARG
+# Convert path ARG from MSYS to Cygwin format.  Requires LT_CYGPATH set.
+# Returns result in func_to_host_file_result.
+func_convert_path_msys_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # See func_convert_path_msys_to_w32:
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_msys_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_msys_to_w32_result"
+    func_to_host_path_result=$func_cygpath_result
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_msys_to_cygwin
+
+
+# func_convert_path_nix_to_cygwin ARG
+# Convert path ARG from *nix to Cygwin format.  Requires Cygwin installed in a
+# a wine environment, working winepath, and LT_CYGPATH set.  Returns result in
+# func_to_host_file_result.
+func_convert_path_nix_to_cygwin ()
+{
+  $debug_cmd
+
+  func_to_host_path_result=$1
+  if test -n "$1"; then
+    # Remove leading and trailing path separator characters from
+    # ARG. msys behavior is inconsistent here, cygpath turns them
+    # into '.;' and ';.', and winepath ignores them completely.
+    func_stripname : : "$1"
+    func_to_host_path_tmp1=$func_stripname_result
+    func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1"
+    func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result"
+    func_to_host_path_result=$func_cygpath_result
+    func_convert_path_check : : \
+      "$func_to_host_path_tmp1" "$func_to_host_path_result"
+    func_convert_path_front_back_pathsep ":*" "*:" : "$1"
+  fi
+}
+# end func_convert_path_nix_to_cygwin
+
+
+# func_dll_def_p FILE
+# True iff FILE is a Windows DLL '.def' file.
+# Keep in sync with _LT_DLL_DEF_P in libtool.m4
+func_dll_def_p ()
+{
+  $debug_cmd
+
+  func_dll_def_p_tmp=`$SED -n \
+    -e 's/^[	 ]*//' \
+    -e '/^\(;.*\)*$/d' \
+    -e 's/^\(EXPORTS\|LIBRARY\)\([	 ].*\)*$/DEF/p' \
+    -e q \
+    "$1"`
+  test DEF = "$func_dll_def_p_tmp"
+}
+
+
+# func_mode_compile arg...
+func_mode_compile ()
+{
+    $debug_cmd
+
+    # Get the compilation command and the source file.
+    base_compile=
+    srcfile=$nonopt  #  always keep a non-empty value in "srcfile"
+    suppress_opt=yes
+    suppress_output=
+    arg_mode=normal
+    libobj=
+    later=
+    pie_flag=
+
+    for arg
+    do
+      case $arg_mode in
+      arg  )
+	# do not "continue".  Instead, add this to base_compile
+	lastarg=$arg
+	arg_mode=normal
+	;;
+
+      target )
+	libobj=$arg
+	arg_mode=normal
+	continue
+	;;
+
+      normal )
+	# Accept any command-line options.
+	case $arg in
+	-o)
+	  test -n "$libobj" && \
+	    func_fatal_error "you cannot specify '-o' more than once"
+	  arg_mode=target
+	  continue
+	  ;;
+
+	-pie | -fpie | -fPIE)
+          func_append pie_flag " $arg"
+	  continue
+	  ;;
+
+	-shared | -static | -prefer-pic | -prefer-non-pic)
+	  func_append later " $arg"
+	  continue
+	  ;;
+
+	-no-suppress)
+	  suppress_opt=no
+	  continue
+	  ;;
+
+	-Xcompiler)
+	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
+	  continue      #  The current "srcfile" will either be retained or
+	  ;;            #  replaced later.  I would guess that would be a bug.
+
+	-Wc,*)
+	  func_stripname '-Wc,' '' "$arg"
+	  args=$func_stripname_result
+	  lastarg=
+	  save_ifs=$IFS; IFS=,
+	  for arg in $args; do
+	    IFS=$save_ifs
+	    func_append_quoted lastarg "$arg"
+	  done
+	  IFS=$save_ifs
+	  func_stripname ' ' '' "$lastarg"
+	  lastarg=$func_stripname_result
+
+	  # Add the arguments to base_compile.
+	  func_append base_compile " $lastarg"
+	  continue
+	  ;;
+
+	*)
+	  # Accept the current argument as the source file.
+	  # The previous "srcfile" becomes the current argument.
+	  #
+	  lastarg=$srcfile
+	  srcfile=$arg
+	  ;;
+	esac  #  case $arg
+	;;
+      esac    #  case $arg_mode
+
+      # Aesthetically quote the previous argument.
+      func_append_quoted base_compile "$lastarg"
+    done # for arg
+
+    case $arg_mode in
+    arg)
+      func_fatal_error "you must specify an argument for -Xcompile"
+      ;;
+    target)
+      func_fatal_error "you must specify a target with '-o'"
+      ;;
+    *)
+      # Get the name of the library object.
+      test -z "$libobj" && {
+	func_basename "$srcfile"
+	libobj=$func_basename_result
+      }
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    case $libobj in
+    *.[cCFSifmso] | \
+    *.ada | *.adb | *.ads | *.asm | \
+    *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
+    *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup)
+      func_xform "$libobj"
+      libobj=$func_xform_result
+      ;;
+    esac
+
+    case $libobj in
+    *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
+    *)
+      func_fatal_error "cannot determine name of library object from '$libobj'"
+      ;;
+    esac
+
+    func_infer_tag $base_compile
+
+    for arg in $later; do
+      case $arg in
+      -shared)
+	test yes = "$build_libtool_libs" \
+	  || func_fatal_configuration "cannot build a shared library"
+	build_old_libs=no
+	continue
+	;;
+
+      -static)
+	build_libtool_libs=no
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+      esac
+    done
+
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
+      && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'	 &()|`$[]' \
+      && func_warning "libobj name '$libobj' may not contain shell special characters."
+    func_dirname_and_basename "$obj" "/" ""
+    objname=$func_basename_result
+    xdir=$func_dirname_result
+    lobj=$xdir$objdir/$objname
+
+    test -z "$base_compile" && \
+      func_fatal_help "you must specify a compilation command"
+
+    # Delete any leftover library objects.
+    if test yes = "$build_old_libs"; then
+      removelist="$obj $lobj $libobj ${libobj}T"
+    else
+      removelist="$lobj $libobj ${libobj}T"
+    fi
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2* | cegcc*)
+      pic_mode=default
+      ;;
+    esac
+    if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test no = "$compiler_c_o"; then
+      output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext
+      lockfile=$output_obj.lock
+    else
+      output_obj=
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test yes = "$need_locks"; then
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test warn = "$need_locks"; then
+      if test -f "$lockfile"; then
+	$ECHO "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+      func_append removelist " $output_obj"
+      $ECHO "$srcfile" > "$lockfile"
+    fi
+
+    $opt_dry_run || $RM $removelist
+    func_append removelist " $lockfile"
+    trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
+
+    func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
+    srcfile=$func_to_tool_file_result
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test yes = "$build_libtool_libs"; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test no != "$pic_mode"; then
+	command="$base_compile $qsrcfile $pic_flag"
+      else
+	# Don't build PIC code
+	command="$base_compile $qsrcfile"
+      fi
+
+      func_mkdir_p "$xdir$objdir"
+
+      if test -z "$output_obj"; then
+	# Place PIC objects in $objdir
+	func_append command " -o $lobj"
+      fi
+
+      func_show_eval_locale "$command"	\
+          'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
+
+      if test warn = "$need_locks" &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
+	func_show_eval '$MV "$output_obj" "$lobj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+
+      # Allow error messages only from the first compilation.
+      if test yes = "$suppress_opt"; then
+	suppress_output=' >/dev/null 2>&1'
+      fi
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test yes = "$build_old_libs"; then
+      if test yes != "$pic_mode"; then
+	# Don't build PIC code
+	command="$base_compile $qsrcfile$pie_flag"
+      else
+	command="$base_compile $qsrcfile $pic_flag"
+      fi
+      if test yes = "$compiler_c_o"; then
+	func_append command " -o $obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      func_append command "$suppress_output"
+      func_show_eval_locale "$command" \
+        '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
+
+      if test warn = "$need_locks" &&
+	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
+	$ECHO "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support '-c' and '-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$opt_dry_run || $RM $removelist
+	exit $EXIT_FAILURE
+      fi
+
+      # Just move the object if needed
+      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
+	func_show_eval '$MV "$output_obj" "$obj"' \
+	  'error=$?; $opt_dry_run || $RM $removelist; exit $error'
+      fi
+    fi
+
+    $opt_dry_run || {
+      func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
+
+      # Unlock the critical section if it was locked
+      if test no != "$need_locks"; then
+	removelist=$lockfile
+        $RM "$lockfile"
+      fi
+    }
+
+    exit $EXIT_SUCCESS
+}
+
+$opt_help || {
+  test compile = "$opt_mode" && func_mode_compile ${1+"$@"}
+}
+
+func_mode_help ()
+{
+    # We need to display help for each of the modes.
+    case $opt_mode in
+      "")
+        # Generic help is extracted from the usage comments
+        # at the start of this file.
+        func_help
+        ;;
+
+      clean)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      compile)
+      $ECHO \
+"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -no-suppress      do not suppress compiler output for multiple passes
+  -prefer-pic       try to build PIC objects only
+  -prefer-non-pic   try to build non-PIC objects only
+  -shared           do not build a '.o' file suitable for static linking
+  -static           only build a '.o' file suitable for static linking
+  -Wc,FLAG          pass FLAG directly to the compiler
+
+COMPILE-COMMAND is a command to be used in creating a 'standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix '.c' with the
+library object suffix, '.lo'."
+        ;;
+
+      execute)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to '-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+        ;;
+
+      finish)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the '--dry-run' option if you just want to see what would be executed."
+        ;;
+
+      install)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the 'install' or 'cp' program.
+
+The following components of INSTALL-COMMAND are treated specially:
+
+  -inst-prefix-dir PREFIX-DIR  Use PREFIX-DIR as a staging area for installation
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+        ;;
+
+      link)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -bindir BINDIR    specify path to binaries directory (for systems where
+                    libraries must be found in the PATH setting at runtime)
+  -dlopen FILE      '-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+                    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+                    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -objectlist FILE  use a list of object files found in FILE to specify objects
+  -os2dllname NAME  force a short DLL name on OS/2 (no effect on other OSes)
+  -precious-files-regex REGEX
+                    don't remove output files matching REGEX
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -shared           only do dynamic linking of libtool libraries
+  -shrext SUFFIX    override the standard shared library file extension
+  -static           do not do any dynamic linking of uninstalled libtool libraries
+  -static-libtool-libs
+                    do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+                    specify library version info [each variable defaults to 0]
+  -weak LIBNAME     declare that the target provides the LIBNAME interface
+  -Wc,FLAG
+  -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
+  -Wl,FLAG
+  -Xlinker FLAG     pass linker-specific FLAG directly to the linker
+  -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
+
+All other options (arguments beginning with '-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in '.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in '.la', then a libtool library is created,
+only library objects ('.lo' files) may be specified, and '-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created
+using 'ar' and 'ranlib', or on Windows using 'lib'.
+
+If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file
+is created, otherwise an executable program is created."
+        ;;
+
+      uninstall)
+        $ECHO \
+"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically '/bin/rm').  RM-OPTIONS are options (such as '-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+        ;;
+
+      *)
+        func_fatal_help "invalid operation mode '$opt_mode'"
+        ;;
+    esac
+
+    echo
+    $ECHO "Try '$progname --help' for more information about other modes."
+}
+
+# Now that we've collected a possible --mode arg, show help if necessary
+if $opt_help; then
+  if test : = "$opt_help"; then
+    func_mode_help
+  else
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	func_mode_help
+      done
+    } | $SED -n '1p; 2,$s/^Usage:/  or: /p'
+    {
+      func_help noexit
+      for opt_mode in compile link execute install finish uninstall clean; do
+	echo
+	func_mode_help
+      done
+    } |
+    $SED '1d
+      /^When reporting/,/^Report/{
+	H
+	d
+      }
+      $x
+      /information about other modes/d
+      /more detailed .*MODE/d
+      s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/'
+  fi
+  exit $?
+fi
+
+
+# func_mode_execute arg...
+func_mode_execute ()
+{
+    $debug_cmd
+
+    # The first argument is the command name.
+    cmd=$nonopt
+    test -z "$cmd" && \
+      func_fatal_help "you must specify a COMMAND"
+
+    # Handle -dlopen flags immediately.
+    for file in $opt_dlopen; do
+      test -f "$file" \
+	|| func_fatal_help "'$file' is not a file"
+
+      dir=
+      case $file in
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "'$lib' is not a valid libtool archive"
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+	func_source "$file"
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && \
+	    func_warning "'$file' was not linked with '-export-dynamic'"
+	  continue
+	fi
+
+	func_dirname "$file" "" "."
+	dir=$func_dirname_result
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  func_append dir "/$objdir"
+	else
+	  if test ! -f "$dir/$dlname"; then
+	    func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'"
+	  fi
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	func_dirname "$file" "" "."
+	dir=$func_dirname_result
+	;;
+
+      *)
+	func_warning "'-dlopen' is ignored for non-libtool libraries and objects"
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir=$absdir
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic=$magic
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -* | *.la | *.lo ) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if func_ltwrapper_script_p "$file"; then
+	  func_source "$file"
+	  # Transform arg to wrapped name.
+	  file=$progdir/$program
+	elif func_ltwrapper_executable_p "$file"; then
+	  func_ltwrapper_scriptname "$file"
+	  func_source "$func_ltwrapper_scriptname_result"
+	  # Transform arg to wrapped name.
+	  file=$progdir/$program
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      func_append_quoted args "$file"
+    done
+
+    if $opt_dry_run; then
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
+	echo "export $shlibpath_var"
+      fi
+      $ECHO "$cmd$args"
+      exit $EXIT_SUCCESS
+    else
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved environment variables
+      for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
+      do
+	eval "if test \"\${save_$lt_var+set}\" = set; then
+                $lt_var=\$save_$lt_var; export $lt_var
+	      else
+		$lt_unset $lt_var
+	      fi"
+      done
+
+      # Now prepare to actually exec the command.
+      exec_cmd=\$cmd$args
+    fi
+}
+
+test execute = "$opt_mode" && func_mode_execute ${1+"$@"}
+
+
+# func_mode_finish arg...
+func_mode_finish ()
+{
+    $debug_cmd
+
+    libs=
+    libdirs=
+    admincmds=
+
+    for opt in "$nonopt" ${1+"$@"}
+    do
+      if test -d "$opt"; then
+	func_append libdirs " $opt"
+
+      elif test -f "$opt"; then
+	if func_lalib_unsafe_p "$opt"; then
+	  func_append libs " $opt"
+	else
+	  func_warning "'$opt' is not a valid libtool archive"
+	fi
+
+      else
+	func_fatal_error "invalid argument '$opt'"
+      fi
+    done
+
+    if test -n "$libs"; then
+      if test -n "$lt_sysroot"; then
+        sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"`
+        sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;"
+      else
+        sysroot_cmd=
+      fi
+
+      # Remove sysroot references
+      if $opt_dry_run; then
+        for lib in $libs; do
+          echo "removing references to $lt_sysroot and '=' prefixes from $lib"
+        done
+      else
+        tmpdir=`func_mktempdir`
+        for lib in $libs; do
+	  $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \
+	    > $tmpdir/tmp-la
+	  mv -f $tmpdir/tmp-la $lib
+	done
+        ${RM}r "$tmpdir"
+      fi
+    fi
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
+'"$cmd"'"'
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $opt_dry_run || eval "$cmds" || func_append admincmds "
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    $opt_quiet && exit $EXIT_SUCCESS
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      echo "----------------------------------------------------------------------"
+      echo "Libraries have been installed in:"
+      for libdir in $libdirs; do
+	$ECHO "   $libdir"
+      done
+      echo
+      echo "If you ever happen to want to link against installed libraries"
+      echo "in a given directory, LIBDIR, you must either use libtool, and"
+      echo "specify the full pathname of the library, or use the '-LLIBDIR'"
+      echo "flag during linking and do at least one of the following:"
+      if test -n "$shlibpath_var"; then
+	echo "   - add LIBDIR to the '$shlibpath_var' environment variable"
+	echo "     during execution"
+      fi
+      if test -n "$runpath_var"; then
+	echo "   - add LIBDIR to the '$runpath_var' environment variable"
+	echo "     during linking"
+      fi
+      if test -n "$hardcode_libdir_flag_spec"; then
+	libdir=LIBDIR
+	eval flag=\"$hardcode_libdir_flag_spec\"
+
+	$ECHO "   - use the '$flag' linker flag"
+      fi
+      if test -n "$admincmds"; then
+	$ECHO "   - have your system administrator run these commands:$admincmds"
+      fi
+      if test -f /etc/ld.so.conf; then
+	echo "   - have your system administrator add LIBDIR to '/etc/ld.so.conf'"
+      fi
+      echo
+
+      echo "See any operating system documentation about shared libraries for"
+      case $host in
+	solaris2.[6789]|solaris2.1[0-9])
+	  echo "more information, such as the ld(1), crle(1) and ld.so(8) manual"
+	  echo "pages."
+	  ;;
+	*)
+	  echo "more information, such as the ld(1) and ld.so(8) manual pages."
+	  ;;
+      esac
+      echo "----------------------------------------------------------------------"
+    fi
+    exit $EXIT_SUCCESS
+}
+
+test finish = "$opt_mode" && func_mode_finish ${1+"$@"}
+
+
+# func_mode_install arg...
+func_mode_install ()
+{
+    $debug_cmd
+
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" ||
+       # Allow the use of GNU shtool's install command.
+       case $nonopt in *shtool*) :;; *) false;; esac
+    then
+      # Aesthetically quote it.
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
+      arg=$1
+      shift
+    else
+      install_prog=
+      arg=$nonopt
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    func_quote_for_eval "$arg"
+    func_append install_prog "$func_quote_for_eval_result"
+    install_shared_prog=$install_prog
+    case " $install_prog " in
+      *[\\\ /]cp\ *) install_cp=: ;;
+      *) install_cp=false ;;
+    esac
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=false
+    stripme=
+    no_mode=:
+    for arg
+    do
+      arg2=
+      if test -n "$dest"; then
+	func_append files " $dest"
+	dest=$arg
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=: ;;
+      -f)
+	if $install_cp; then :; else
+	  prev=$arg
+	fi
+	;;
+      -g | -m | -o)
+	prev=$arg
+	;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*)
+	;;
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  if test X-m = "X$prev" && test -n "$install_override_mode"; then
+	    arg2=$install_override_mode
+	    no_mode=false
+	  fi
+	  prev=
+	else
+	  dest=$arg
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      func_quote_for_eval "$arg"
+      func_append install_prog " $func_quote_for_eval_result"
+      if test -n "$arg2"; then
+	func_quote_for_eval "$arg2"
+      fi
+      func_append install_shared_prog " $func_quote_for_eval_result"
+    done
+
+    test -z "$install_prog" && \
+      func_fatal_help "you must specify an install program"
+
+    test -n "$prev" && \
+      func_fatal_help "the '$prev' option requires an argument"
+
+    if test -n "$install_override_mode" && $no_mode; then
+      if $install_cp; then :; else
+	func_quote_for_eval "$install_override_mode"
+	func_append install_shared_prog " -m $func_quote_for_eval_result"
+      fi
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	func_fatal_help "no file or destination specified"
+      else
+	func_fatal_help "you must specify a destination"
+      fi
+    fi
+
+    # Strip any trailing slash from the destination.
+    func_stripname '' '/' "$dest"
+    dest=$func_stripname_result
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=:
+    if $isdir; then
+      destdir=$dest
+      destname=
+    else
+      func_dirname_and_basename "$dest" "" "."
+      destdir=$func_dirname_result
+      destname=$func_basename_result
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files; shift
+      test "$#" -gt 1 && \
+	func_fatal_help "'$dest' is not a directory"
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  func_fatal_help "'$destdir' must be an absolute directory name"
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic=$magic
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	func_append staticlibs " $file"
+	;;
+
+      *.la)
+	func_resolve_sysroot "$file"
+	file=$func_resolve_sysroot_result
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$file" \
+	  || func_fatal_help "'$file' is not a valid libtool archive"
+
+	library_names=
+	old_library=
+	relink_command=
+	func_source "$file"
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append current_libdirs " $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) func_append future_libdirs " $libdir" ;;
+	  esac
+	fi
+
+	func_dirname "$file" "/" ""
+	dir=$func_dirname_result
+	func_append dir "$objdir"
+
+	if test -n "$relink_command"; then
+	  # Determine the prefix the user has applied to our future dir.
+	  inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"`
+
+	  # Don't allow the user to place us outside of our expected
+	  # location b/c this prevents finding dependent libraries that
+	  # are installed to the same prefix.
+	  # At present, this check doesn't affect windows .dll's that
+	  # are installed into $libdir/../bin (currently, that works fine)
+	  # but it's something to keep an eye on.
+	  test "$inst_prefix_dir" = "$destdir" && \
+	    func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir"
+
+	  if test -n "$inst_prefix_dir"; then
+	    # Stick the inst_prefix_dir data into the link command.
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
+	  else
+	    relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
+	  fi
+
+	  func_warning "relinking '$file'"
+	  func_show_eval "$relink_command" \
+	    'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"'
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names; shift
+	if test -n "$1"; then
+	  realname=$1
+	  shift
+
+	  srcname=$realname
+	  test -n "$relink_command" && srcname=${realname}T
+
+	  # Install the shared library and build the symlinks.
+	  func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \
+	      'exit $?'
+	  tstripme=$stripme
+	  case $host_os in
+	  cygwin* | mingw* | pw32* | cegcc*)
+	    case $realname in
+	    *.dll.a)
+	      tstripme=
+	      ;;
+	    esac
+	    ;;
+	  os2*)
+	    case $realname in
+	    *_dll.a)
+	      tstripme=
+	      ;;
+	    esac
+	    ;;
+	  esac
+	  if test -n "$tstripme" && test -n "$striplib"; then
+	    func_show_eval "$striplib $destdir/$realname" 'exit $?'
+	  fi
+
+	  if test "$#" -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    # Try 'ln -sf' first, because the 'ln' binary might depend on
+	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
+	    # so we also need to try rm && ln -s.
+	    for linkname
+	    do
+	      test "$linkname" != "$realname" \
+		&& func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib=$destdir/$realname
+	  func_execute_cmds "$postinstall_cmds" 'exit $?'
+	fi
+
+	# Install the pseudo-library for information purposes.
+	func_basename "$file"
+	name=$func_basename_result
+	instname=$dir/${name}i
+	func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && func_append staticlibs " $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile=$destdir/$destname
+	else
+	  func_basename "$file"
+	  destfile=$func_basename_result
+	  destfile=$destdir/$destfile
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  func_lo2o "$destfile"
+	  staticdest=$func_lo2o_result
+	  ;;
+	*.$objext)
+	  staticdest=$destfile
+	  destfile=
+	  ;;
+	*)
+	  func_fatal_help "cannot copy a libtool object to '$destfile'"
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	test -n "$destfile" && \
+	  func_show_eval "$install_prog $file $destfile" 'exit $?'
+
+	# Install the old object if enabled.
+	if test yes = "$build_old_libs"; then
+	  # Deduce the name of the old-style object file.
+	  func_lo2o "$file"
+	  staticobj=$func_lo2o_result
+	  func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
+	fi
+	exit $EXIT_SUCCESS
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile=$destdir/$destname
+	else
+	  func_basename "$file"
+	  destfile=$func_basename_result
+	  destfile=$destdir/$destfile
+	fi
+
+	# If the file is missing, and there is a .exe on the end, strip it
+	# because it is most likely a libtool script we actually want to
+	# install
+	stripped_ext=
+	case $file in
+	  *.exe)
+	    if test ! -f "$file"; then
+	      func_stripname '' '.exe' "$file"
+	      file=$func_stripname_result
+	      stripped_ext=.exe
+	    fi
+	    ;;
+	esac
+
+	# Do a test to see if this is really a libtool program.
+	case $host in
+	*cygwin* | *mingw*)
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      wrapper=$func_ltwrapper_scriptname_result
+	    else
+	      func_stripname '' '.exe' "$file"
+	      wrapper=$func_stripname_result
+	    fi
+	    ;;
+	*)
+	    wrapper=$file
+	    ;;
+	esac
+	if func_ltwrapper_script_p "$wrapper"; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  func_source "$wrapper"
+
+	  # Check the variables that should have been set.
+	  test -z "$generated_by_libtool_version" && \
+	    func_fatal_error "invalid libtool wrapper script '$wrapper'"
+
+	  finalize=:
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      func_source "$lib"
+	    fi
+	    libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'`
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      func_warning "'$lib' has not been installed in '$libdir'"
+	      finalize=false
+	    fi
+	  done
+
+	  relink_command=
+	  func_source "$wrapper"
+
+	  outputname=
+	  if test no = "$fast_install" && test -n "$relink_command"; then
+	    $opt_dry_run || {
+	      if $finalize; then
+	        tmpdir=`func_mktempdir`
+		func_basename "$file$stripped_ext"
+		file=$func_basename_result
+	        outputname=$tmpdir/$file
+	        # Replace the output file specification.
+	        relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
+
+	        $opt_quiet || {
+	          func_quote_for_expand "$relink_command"
+		  eval "func_echo $func_quote_for_expand_result"
+	        }
+	        if eval "$relink_command"; then :
+	          else
+		  func_error "error: relink '$file' with the above command before installing it"
+		  $opt_dry_run || ${RM}r "$tmpdir"
+		  continue
+	        fi
+	        file=$outputname
+	      else
+	        func_warning "cannot relink '$file'"
+	      fi
+	    }
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyway
+	case $install_prog,$host in
+	*/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    func_stripname '' '.exe' "$destfile"
+	    destfile=$func_stripname_result
+	    ;;
+	  esac
+	  ;;
+	esac
+	func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
+	$opt_dry_run || if test -n "$outputname"; then
+	  ${RM}r "$tmpdir"
+	fi
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      func_basename "$file"
+      name=$func_basename_result
+
+      # Set up the ranlib parameters.
+      oldlib=$destdir/$name
+      func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+      tool_oldlib=$func_to_tool_file_result
+
+      func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
+
+      if test -n "$stripme" && test -n "$old_striplib"; then
+	func_show_eval "$old_striplib $tool_oldlib" 'exit $?'
+      fi
+
+      # Do each command in the postinstall commands.
+      func_execute_cmds "$old_postinstall_cmds" 'exit $?'
+    done
+
+    test -n "$future_libdirs" && \
+      func_warning "remember to run '$progname --finish$future_libdirs'"
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      $opt_dry_run && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs'
+    else
+      exit $EXIT_SUCCESS
+    fi
+}
+
+test install = "$opt_mode" && func_mode_install ${1+"$@"}
+
+
+# func_generate_dlsyms outputname originator pic_p
+# Extract symbols from dlprefiles and create ${outputname}S.o with
+# a dlpreopen symbol table.
+func_generate_dlsyms ()
+{
+    $debug_cmd
+
+    my_outputname=$1
+    my_originator=$2
+    my_pic_p=${3-false}
+    my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'`
+    my_dlsyms=
+
+    if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+      if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	my_dlsyms=${my_outputname}S.c
+      else
+	func_error "not configured to extract global symbols from dlpreopened files"
+      fi
+    fi
+
+    if test -n "$my_dlsyms"; then
+      case $my_dlsyms in
+      "") ;;
+      *.c)
+	# Discover the nlist of each of the dlfiles.
+	nlist=$output_objdir/$my_outputname.nm
+
+	func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
+
+	# Parse the name list into a source file.
+	func_verbose "creating $output_objdir/$my_dlsyms"
+
+	$opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
+/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */
+/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4))
+#pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
+#endif
+
+/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests.  */
+#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE
+/* DATA imports from DLLs on WIN32 can't be const, because runtime
+   relocations are performed -- see ld's documentation on pseudo-relocs.  */
+# define LT_DLSYM_CONST
+#elif defined __osf__
+/* This system does not cope well with relocations in const data.  */
+# define LT_DLSYM_CONST
+#else
+# define LT_DLSYM_CONST const
+#endif
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* External symbol declarations for the compiler. */\
+"
+
+	if test yes = "$dlself"; then
+	  func_verbose "generating symbol list for '$output'"
+
+	  $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
+
+	  # Add our own program objects to the symbol list.
+	  progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	  for progfile in $progfiles; do
+	    func_to_tool_file "$progfile" func_convert_file_msys_to_w32
+	    func_verbose "extracting global C symbols from '$func_to_tool_file_result'"
+	    $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -n "$exclude_expsyms"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  if test -n "$export_symbols_regex"; then
+	    $opt_dry_run || {
+	      eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	    }
+	  fi
+
+	  # Prepare the list of exported symbols
+	  if test -z "$export_symbols"; then
+	    export_symbols=$output_objdir/$outputname.exp
+	    $opt_dry_run || {
+	      $RM $export_symbols
+	      eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	      case $host in
+	      *cygwin* | *mingw* | *cegcc* )
+                eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+                eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
+	        ;;
+	      esac
+	    }
+	  else
+	    $opt_dry_run || {
+	      eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
+	      eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
+	      eval '$MV "$nlist"T "$nlist"'
+	      case $host in
+	        *cygwin* | *mingw* | *cegcc* )
+	          eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
+	          eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
+	          ;;
+	      esac
+	    }
+	  fi
+	fi
+
+	for dlprefile in $dlprefiles; do
+	  func_verbose "extracting global C symbols from '$dlprefile'"
+	  func_basename "$dlprefile"
+	  name=$func_basename_result
+          case $host in
+	    *cygwin* | *mingw* | *cegcc* )
+	      # if an import library, we need to obtain dlname
+	      if func_win32_import_lib_p "$dlprefile"; then
+	        func_tr_sh "$dlprefile"
+	        eval "curr_lafile=\$libfile_$func_tr_sh_result"
+	        dlprefile_dlbasename=
+	        if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then
+	          # Use subshell, to avoid clobbering current variable values
+	          dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"`
+	          if test -n "$dlprefile_dlname"; then
+	            func_basename "$dlprefile_dlname"
+	            dlprefile_dlbasename=$func_basename_result
+	          else
+	            # no lafile. user explicitly requested -dlpreopen <import library>.
+	            $sharedlib_from_linklib_cmd "$dlprefile"
+	            dlprefile_dlbasename=$sharedlib_from_linklib_result
+	          fi
+	        fi
+	        $opt_dry_run || {
+	          if test -n "$dlprefile_dlbasename"; then
+	            eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"'
+	          else
+	            func_warning "Could not compute DLL name from $name"
+	            eval '$ECHO ": $name " >> "$nlist"'
+	          fi
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe |
+	            $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'"
+	        }
+	      else # not an import lib
+	        $opt_dry_run || {
+	          eval '$ECHO ": $name " >> "$nlist"'
+	          func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	          eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	        }
+	      fi
+	    ;;
+	    *)
+	      $opt_dry_run || {
+	        eval '$ECHO ": $name " >> "$nlist"'
+	        func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32
+	        eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'"
+	      }
+	    ;;
+          esac
+	done
+
+	$opt_dry_run || {
+	  # Make sure we have at least an empty file.
+	  test -f "$nlist" || : > "$nlist"
+
+	  if test -n "$exclude_expsyms"; then
+	    $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	    $MV "$nlist"T "$nlist"
+	  fi
+
+	  # Try sorting and uniquifying the output.
+	  if $GREP -v "^: " < "$nlist" |
+	      if sort -k 3 </dev/null >/dev/null 2>&1; then
+		sort -k 3
+	      else
+		sort +2
+	      fi |
+	      uniq > "$nlist"S; then
+	    :
+	  else
+	    $GREP -v "^: " < "$nlist" > "$nlist"S
+	  fi
+
+	  if test -f "$nlist"S; then
+	    eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
+	  else
+	    echo '/* NONE */' >> "$output_objdir/$my_dlsyms"
+	  fi
+
+	  func_show_eval '$RM "${nlist}I"'
+	  if test -n "$global_symbol_to_import"; then
+	    eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I'
+	  fi
+
+	  echo >> "$output_objdir/$my_dlsyms" "\
+
+/* The mapping between symbol names and symbols.  */
+typedef struct {
+  const char *name;
+  void *address;
+} lt_dlsymlist;
+extern LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[];\
+"
+
+	  if test -s "$nlist"I; then
+	    echo >> "$output_objdir/$my_dlsyms" "\
+static void lt_syminit(void)
+{
+  LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols;
+  for (; symbol->name; ++symbol)
+    {"
+	    $SED 's/.*/      if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms"
+	    echo >> "$output_objdir/$my_dlsyms" "\
+    }
+}"
+	  fi
+	  echo >> "$output_objdir/$my_dlsyms" "\
+LT_DLSYM_CONST lt_dlsymlist
+lt_${my_prefix}_LTX_preloaded_symbols[] =
+{ {\"$my_originator\", (void *) 0},"
+
+	  if test -s "$nlist"I; then
+	    echo >> "$output_objdir/$my_dlsyms" "\
+  {\"@INIT@\", (void *) &lt_syminit},"
+	  fi
+
+	  case $need_lib_prefix in
+	  no)
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  *)
+	    eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
+	    ;;
+	  esac
+	  echo >> "$output_objdir/$my_dlsyms" "\
+  {0, (void *) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_${my_prefix}_LTX_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	} # !$opt_dry_run
+
+	pic_flag_for_symtable=
+	case "$compile_command " in
+	*" -static "*) ;;
+	*)
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
+	  *-*-hpux*)
+	    pic_flag_for_symtable=" $pic_flag"  ;;
+	  *)
+	    $my_pic_p && pic_flag_for_symtable=" $pic_flag"
+	    ;;
+	  esac
+	  ;;
+	esac
+	symtab_cflags=
+	for arg in $LTCFLAGS; do
+	  case $arg in
+	  -pie | -fpie | -fPIE) ;;
+	  *) func_append symtab_cflags " $arg" ;;
+	  esac
+	done
+
+	# Now compile the dynamic symbol file.
+	func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
+
+	# Clean up the generated files.
+	func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"'
+
+	# Transform the symbol file into the correct name.
+	symfileobj=$output_objdir/${my_outputname}S.$objext
+	case $host in
+	*cygwin* | *mingw* | *cegcc* )
+	  if test -f "$output_objdir/$my_outputname.def"; then
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
+	  else
+	    compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	    finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  fi
+	  ;;
+	*)
+	  compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"`
+	  ;;
+	esac
+	;;
+      *)
+	func_fatal_error "unknown suffix for '$my_dlsyms'"
+	;;
+      esac
+    else
+      # We keep going just in case the user didn't refer to
+      # lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+      # really was required.
+
+      # Nullify the symbol file.
+      compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"`
+      finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"`
+    fi
+}
+
+# func_cygming_gnu_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is a GNU/binutils-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_gnu_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'`
+  test -n "$func_cygming_gnu_implib_tmp"
+}
+
+# func_cygming_ms_implib_p ARG
+# This predicate returns with zero status (TRUE) if
+# ARG is an MS-style import library. Returns
+# with nonzero status (FALSE) otherwise.
+func_cygming_ms_implib_p ()
+{
+  $debug_cmd
+
+  func_to_tool_file "$1" func_convert_file_msys_to_w32
+  func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'`
+  test -n "$func_cygming_ms_implib_tmp"
+}
+
+# func_win32_libid arg
+# return the library type of file 'arg'
+#
+# Need a lot of goo to handle *both* DLLs and import libs
+# Has to be a shell function in order to 'eat' the argument
+# that is supplied when $file_magic_command is called.
+# Despite the name, also deal with 64 bit binaries.
+func_win32_libid ()
+{
+  $debug_cmd
+
+  win32_libid_type=unknown
+  win32_fileres=`file -L $1 2>/dev/null`
+  case $win32_fileres in
+  *ar\ archive\ import\ library*) # definitely import
+    win32_libid_type="x86 archive import"
+    ;;
+  *ar\ archive*) # could be an import, or static
+    # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD.
+    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
+       $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then
+      case $nm_interface in
+      "MS dumpbin")
+	if func_cygming_ms_implib_p "$1" ||
+	   func_cygming_gnu_implib_p "$1"
+	then
+	  win32_nmres=import
+	else
+	  win32_nmres=
+	fi
+	;;
+      *)
+	func_to_tool_file "$1" func_convert_file_msys_to_w32
+	win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" |
+	  $SED -n -e '
+	    1,100{
+		/ I /{
+		    s|.*|import|
+		    p
+		    q
+		}
+	    }'`
+	;;
+      esac
+      case $win32_nmres in
+      import*)  win32_libid_type="x86 archive import";;
+      *)        win32_libid_type="x86 archive static";;
+      esac
+    fi
+    ;;
+  *DLL*)
+    win32_libid_type="x86 DLL"
+    ;;
+  *executable*) # but shell scripts are "executable" too...
+    case $win32_fileres in
+    *MS\ Windows\ PE\ Intel*)
+      win32_libid_type="x86 DLL"
+      ;;
+    esac
+    ;;
+  esac
+  $ECHO "$win32_libid_type"
+}
+
+# func_cygming_dll_for_implib ARG
+#
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib ()
+{
+  $debug_cmd
+
+  sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"`
+}
+
+# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs
+#
+# The is the core of a fallback implementation of a
+# platform-specific function to extract the name of the
+# DLL associated with the specified import library LIBNAME.
+#
+# SECTION_NAME is either .idata$6 or .idata$7, depending
+# on the platform and compiler that created the implib.
+#
+# Echos the name of the DLL associated with the
+# specified import library.
+func_cygming_dll_for_implib_fallback_core ()
+{
+  $debug_cmd
+
+  match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"`
+  $OBJDUMP -s --section "$1" "$2" 2>/dev/null |
+    $SED '/^Contents of section '"$match_literal"':/{
+      # Place marker at beginning of archive member dllname section
+      s/.*/====MARK====/
+      p
+      d
+    }
+    # These lines can sometimes be longer than 43 characters, but
+    # are always uninteresting
+    /:[	 ]*file format pe[i]\{,1\}-/d
+    /^In archive [^:]*:/d
+    # Ensure marker is printed
+    /^====MARK====/p
+    # Remove all lines with less than 43 characters
+    /^.\{43\}/!d
+    # From remaining lines, remove first 43 characters
+    s/^.\{43\}//' |
+    $SED -n '
+      # Join marker and all lines until next marker into a single line
+      /^====MARK====/ b para
+      H
+      $ b para
+      b
+      :para
+      x
+      s/\n//g
+      # Remove the marker
+      s/^====MARK====//
+      # Remove trailing dots and whitespace
+      s/[\. \t]*$//
+      # Print
+      /./p' |
+    # we now have a list, one entry per line, of the stringified
+    # contents of the appropriate section of all members of the
+    # archive that possess that section. Heuristic: eliminate
+    # all those that have a first or second character that is
+    # a '.' (that is, objdump's representation of an unprintable
+    # character.) This should work for all archives with less than
+    # 0x302f exports -- but will fail for DLLs whose name actually
+    # begins with a literal '.' or a single character followed by
+    # a '.'.
+    #
+    # Of those that remain, print the first one.
+    $SED -e '/^\./d;/^.\./d;q'
+}
+
+# func_cygming_dll_for_implib_fallback ARG
+# Platform-specific function to extract the
+# name of the DLL associated with the specified
+# import library ARG.
+#
+# This fallback implementation is for use when $DLLTOOL
+# does not support the --identify-strict option.
+# Invoked by eval'ing the libtool variable
+#    $sharedlib_from_linklib_cmd
+# Result is available in the variable
+#    $sharedlib_from_linklib_result
+func_cygming_dll_for_implib_fallback ()
+{
+  $debug_cmd
+
+  if func_cygming_gnu_implib_p "$1"; then
+    # binutils import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"`
+  elif func_cygming_ms_implib_p "$1"; then
+    # ms-generated import library
+    sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"`
+  else
+    # unknown
+    sharedlib_from_linklib_result=
+  fi
+}
+
+
+# func_extract_an_archive dir oldlib
+func_extract_an_archive ()
+{
+    $debug_cmd
+
+    f_ex_an_ar_dir=$1; shift
+    f_ex_an_ar_oldlib=$1
+    if test yes = "$lock_old_archive_extraction"; then
+      lockfile=$f_ex_an_ar_oldlib.lock
+      until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
+	func_echo "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    fi
+    func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \
+		   'stat=$?; rm -f "$lockfile"; exit $stat'
+    if test yes = "$lock_old_archive_extraction"; then
+      $opt_dry_run || rm -f "$lockfile"
+    fi
+    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
+     :
+    else
+      func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
+    fi
+}
+
+
+# func_extract_archives gentop oldlib ...
+func_extract_archives ()
+{
+    $debug_cmd
+
+    my_gentop=$1; shift
+    my_oldlibs=${1+"$@"}
+    my_oldobjs=
+    my_xlib=
+    my_xabs=
+    my_xdir=
+
+    for my_xlib in $my_oldlibs; do
+      # Extract the objects.
+      case $my_xlib in
+	[\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;;
+	*) my_xabs=`pwd`"/$my_xlib" ;;
+      esac
+      func_basename "$my_xlib"
+      my_xlib=$func_basename_result
+      my_xlib_u=$my_xlib
+      while :; do
+        case " $extracted_archives " in
+	*" $my_xlib_u "*)
+	  func_arith $extracted_serial + 1
+	  extracted_serial=$func_arith_result
+	  my_xlib_u=lt$extracted_serial-$my_xlib ;;
+	*) break ;;
+	esac
+      done
+      extracted_archives="$extracted_archives $my_xlib_u"
+      my_xdir=$my_gentop/$my_xlib_u
+
+      func_mkdir_p "$my_xdir"
+
+      case $host in
+      *-darwin*)
+	func_verbose "Extracting $my_xabs"
+	# Do not bother doing anything if just a dry run
+	$opt_dry_run || {
+	  darwin_orig_dir=`pwd`
+	  cd $my_xdir || exit $?
+	  darwin_archive=$my_xabs
+	  darwin_curdir=`pwd`
+	  func_basename "$darwin_archive"
+	  darwin_base_archive=$func_basename_result
+	  darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
+	  if test -n "$darwin_arches"; then
+	    darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
+	    darwin_arch=
+	    func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
+	    for darwin_arch in  $darwin_arches; do
+	      func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch"
+	      $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive"
+	      cd "unfat-$$/$darwin_base_archive-$darwin_arch"
+	      func_extract_an_archive "`pwd`" "$darwin_base_archive"
+	      cd "$darwin_curdir"
+	      $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive"
+	    done # $darwin_arches
+            ## Okay now we've a bunch of thin objects, gotta fatten them up :)
+	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u`
+	    darwin_file=
+	    darwin_files=
+	    for darwin_file in $darwin_filelist; do
+	      darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+	      $LIPO -create -output "$darwin_file" $darwin_files
+	    done # $darwin_filelist
+	    $RM -rf unfat-$$
+	    cd "$darwin_orig_dir"
+	  else
+	    cd $darwin_orig_dir
+	    func_extract_an_archive "$my_xdir" "$my_xabs"
+	  fi # $darwin_arches
+	} # !$opt_dry_run
+	;;
+      *)
+        func_extract_an_archive "$my_xdir" "$my_xabs"
+	;;
+      esac
+      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+    done
+
+    func_extract_archives_result=$my_oldobjs
+}
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable.  Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take.  If 'yes', then the emitted script
+# will assume that the directory where it is stored is
+# the $objdir directory.  This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+	func_emit_wrapper_arg1=${1-no}
+
+	$ECHO "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+sed_quote_subst='$sed_quote_subst'
+
+# Be Bourne compatible
+if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '\${1+\"\$@\"}'='\"\$@\"'
+  setopt NO_GLOB_SUBST
+else
+  case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='$macro_version'
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$ECHO are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    file=\"\$0\""
+
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+    $ECHO "\
+
+# A function that is used when there is no print builtin or printf.
+func_fallback_echo ()
+{
+  eval 'cat <<_LTECHO_EOF
+\$1
+_LTECHO_EOF'
+}
+    ECHO=\"$qECHO\"
+  fi
+
+# Very basic option parsing. These options are (a) specific to
+# the libtool wrapper, (b) are identical between the wrapper
+# /script/ and the wrapper /executable/ that is used only on
+# windows platforms, and (c) all begin with the string "--lt-"
+# (application programs are unlikely to have options that match
+# this pattern).
+#
+# There are only two supported options: --lt-debug and
+# --lt-dump-script. There is, deliberately, no --lt-help.
+#
+# The first argument to this parsing function should be the
+# script's $0 value, followed by "$@".
+lt_option_debug=
+func_parse_lt_options ()
+{
+  lt_script_arg0=\$0
+  shift
+  for lt_opt
+  do
+    case \"\$lt_opt\" in
+    --lt-debug) lt_option_debug=1 ;;
+    --lt-dump-script)
+        lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\`
+        test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=.
+        lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\`
+        cat \"\$lt_dump_D/\$lt_dump_F\"
+        exit 0
+      ;;
+    --lt-*)
+        \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2
+        exit 1
+      ;;
+    esac
+  done
+
+  # Print the debug banner immediately:
+  if test -n \"\$lt_option_debug\"; then
+    echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2
+  fi
+}
+
+# Used when --lt-debug. Prints its arguments to stdout
+# (redirection is the responsibility of the caller)
+func_lt_dump_args ()
+{
+  lt_dump_args_N=1;
+  for lt_arg
+  do
+    \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\"
+    lt_dump_args_N=\`expr \$lt_dump_args_N + 1\`
+  done
+}
+
+# Core function for launching the target application
+func_exec_program_core ()
+{
+"
+  case $host in
+  # Backslashes separate directories on plain windows
+  *-*-mingw | *-*-os2* | *-cegcc*)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
+"
+    ;;
+
+  *)
+    $ECHO "\
+      if test -n \"\$lt_option_debug\"; then
+        \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2
+        func_lt_dump_args \${1+\"\$@\"} 1>&2
+      fi
+      exec \"\$progdir/\$program\" \${1+\"\$@\"}
+"
+    ;;
+  esac
+  $ECHO "\
+      \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
+      exit 1
+}
+
+# A function to encapsulate launching the target application
+# Strips options in the --lt-* namespace from \$@ and
+# launches target application with the remaining arguments.
+func_exec_program ()
+{
+  case \" \$* \" in
+  *\\ --lt-*)
+    for lt_wr_arg
+    do
+      case \$lt_wr_arg in
+      --lt-*) ;;
+      *) set x \"\$@\" \"\$lt_wr_arg\"; shift;;
+      esac
+      shift
+    done ;;
+  esac
+  func_exec_program_core \${1+\"\$@\"}
+}
+
+  # Parse options
+  func_parse_lt_options \"\$0\" \${1+\"\$@\"}
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+  if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
+    # special case for '.'
+    if test \"\$thisdir\" = \".\"; then
+      thisdir=\`pwd\`
+    fi
+    # remove .libs from thisdir
+    case \"\$thisdir\" in
+    *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;;
+    $objdir )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test yes = "$fast_install"; then
+	  $ECHO "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" ||
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $MKDIR \"\$progdir\"
+    else
+      $RM \"\$progdir/\$file\"
+    fi"
+
+	  $ECHO "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	\$ECHO \"\$relink_command_output\" >&2
+	$RM \"\$progdir/\$file\"
+	exit 1
+      fi
+    fi
+
+    $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $RM \"\$progdir/\$program\";
+      $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $RM \"\$progdir/\$file\"
+  fi"
+	else
+	  $ECHO "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	$ECHO "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# fixup the dll searchpath if we need to.
+	#
+	# Fix the DLL searchpath if we need to.  Do this before prepending
+	# to shlibpath, because on Windows, both are PATH and uninstalled
+	# libraries must come first.
+	if test -n "$dllsearchpath"; then
+	  $ECHO "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	# Export our shlibpath_var if we have one.
+	if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $ECHO "\
+    # Add our own library path to $shlibpath_var
+    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	$ECHO "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+      func_exec_program \${1+\"\$@\"}
+    fi
+  else
+    # The program doesn't exist.
+    \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2
+    \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
+    \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+}
+
+
+# func_emit_cwrapperexe_src
+# emit the source code for a wrapper executable on stdout
+# Must ONLY be called from within func_mode_link because
+# it depends on a number of variable set therein.
+func_emit_cwrapperexe_src ()
+{
+	cat <<EOF
+
+/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
+   Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+
+   The $output program cannot be directly executed until all the libtool
+   libraries that it depends on are installed.
+
+   This wrapper executable should never be moved out of the build directory.
+   If it is, it will not operate correctly.
+*/
+EOF
+	    cat <<"EOF"
+#ifdef _MSC_VER
+# define _CRT_SECURE_NO_DEPRECATE 1
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef _MSC_VER
+# include <direct.h>
+# include <process.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <stdint.h>
+# ifdef __CYGWIN__
+#  include <io.h>
+# endif
+#endif
+#include <malloc.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0)
+
+/* declarations of non-ANSI functions */
+#if defined __MINGW32__
+# ifdef __STRICT_ANSI__
+int _putenv (const char *);
+# endif
+#elif defined __CYGWIN__
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+int putenv (char *);
+int setenv (const char *, const char *, int);
+# endif
+/* #elif defined other_platform || defined ... */
+#endif
+
+/* portability defines, excluding path handling macros */
+#if defined _MSC_VER
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+# define S_IXUSR _S_IEXEC
+#elif defined __MINGW32__
+# define setmode _setmode
+# define stat    _stat
+# define chmod   _chmod
+# define getcwd  _getcwd
+# define putenv  _putenv
+#elif defined __CYGWIN__
+# define HAVE_SETENV
+# define FOPEN_WB "wb"
+/* #elif defined other platforms ... */
+#endif
+
+#if defined PATH_MAX
+# define LT_PATHMAX PATH_MAX
+#elif defined MAXPATHLEN
+# define LT_PATHMAX MAXPATHLEN
+#else
+# define LT_PATHMAX 1024
+#endif
+
+#ifndef S_IXOTH
+# define S_IXOTH 0
+#endif
+#ifndef S_IXGRP
+# define S_IXGRP 0
+#endif
+
+/* path handling portability macros */
+#ifndef DIR_SEPARATOR
+# define DIR_SEPARATOR '/'
+# define PATH_SEPARATOR ':'
+#endif
+
+#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \
+  defined __OS2__
+# define HAVE_DOS_BASED_FILE_SYSTEM
+# define FOPEN_WB "wb"
+# ifndef DIR_SEPARATOR_2
+#  define DIR_SEPARATOR_2 '\\'
+# endif
+# ifndef PATH_SEPARATOR_2
+#  define PATH_SEPARATOR_2 ';'
+# endif
+#endif
+
+#ifndef DIR_SEPARATOR_2
+# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
+#else /* DIR_SEPARATOR_2 */
+# define IS_DIR_SEPARATOR(ch) \
+	(((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
+#endif /* DIR_SEPARATOR_2 */
+
+#ifndef PATH_SEPARATOR_2
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
+#else /* PATH_SEPARATOR_2 */
+# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
+#endif /* PATH_SEPARATOR_2 */
+
+#ifndef FOPEN_WB
+# define FOPEN_WB "w"
+#endif
+#ifndef _O_BINARY
+# define _O_BINARY 0
+#endif
+
+#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
+#define XFREE(stale) do { \
+  if (stale) { free (stale); stale = 0; } \
+} while (0)
+
+#if defined LT_DEBUGWRAPPER
+static int lt_debug = 1;
+#else
+static int lt_debug = 0;
+#endif
+
+const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */
+
+void *xmalloc (size_t num);
+char *xstrdup (const char *string);
+const char *base_name (const char *name);
+char *find_executable (const char *wrapper);
+char *chase_symlinks (const char *pathspec);
+int make_executable (const char *path);
+int check_executable (const char *path);
+char *strendzap (char *str, const char *pat);
+void lt_debugprintf (const char *file, int line, const char *fmt, ...);
+void lt_fatal (const char *file, int line, const char *message, ...);
+static const char *nonnull (const char *s);
+static const char *nonempty (const char *s);
+void lt_setenv (const char *name, const char *value);
+char *lt_extend_str (const char *orig_value, const char *add, int to_end);
+void lt_update_exe_path (const char *name, const char *value);
+void lt_update_lib_path (const char *name, const char *value);
+char **prepare_spawn (char **argv);
+void lt_dump_script (FILE *f);
+EOF
+
+	    cat <<EOF
+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5)
+# define externally_visible volatile
+#else
+# define externally_visible __attribute__((externally_visible)) volatile
+#endif
+externally_visible const char * MAGIC_EXE = "$magic_exe";
+const char * LIB_PATH_VARNAME = "$shlibpath_var";
+EOF
+
+	    if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+              func_to_host_path "$temp_rpath"
+	      cat <<EOF
+const char * LIB_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * LIB_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test -n "$dllsearchpath"; then
+              func_to_host_path "$dllsearchpath:"
+	      cat <<EOF
+const char * EXE_PATH_VARNAME = "PATH";
+const char * EXE_PATH_VALUE   = "$func_to_host_path_result";
+EOF
+	    else
+	      cat <<"EOF"
+const char * EXE_PATH_VARNAME = "";
+const char * EXE_PATH_VALUE   = "";
+EOF
+	    fi
+
+	    if test yes = "$fast_install"; then
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
+EOF
+	    else
+	      cat <<EOF
+const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
+EOF
+	    fi
+
+
+	    cat <<"EOF"
+
+#define LTWRAPPER_OPTION_PREFIX         "--lt-"
+
+static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
+static const char *dumpscript_opt       = LTWRAPPER_OPTION_PREFIX "dump-script";
+static const char *debug_opt            = LTWRAPPER_OPTION_PREFIX "debug";
+
+int
+main (int argc, char *argv[])
+{
+  char **newargz;
+  int  newargc;
+  char *tmp_pathspec;
+  char *actual_cwrapper_path;
+  char *actual_cwrapper_name;
+  char *target_name;
+  char *lt_argv_zero;
+  int rval = 127;
+
+  int i;
+
+  program_name = (char *) xstrdup (base_name (argv[0]));
+  newargz = XMALLOC (char *, (size_t) argc + 1);
+
+  /* very simple arg parsing; don't want to rely on getopt
+   * also, copy all non cwrapper options to newargz, except
+   * argz[0], which is handled differently
+   */
+  newargc=0;
+  for (i = 1; i < argc; i++)
+    {
+      if (STREQ (argv[i], dumpscript_opt))
+	{
+EOF
+	    case $host in
+	      *mingw* | *cygwin* )
+		# make stdout use "unix" line endings
+		echo "          setmode(1,_O_BINARY);"
+		;;
+	      esac
+
+	    cat <<"EOF"
+	  lt_dump_script (stdout);
+	  return 0;
+	}
+      if (STREQ (argv[i], debug_opt))
+	{
+          lt_debug = 1;
+          continue;
+	}
+      if (STREQ (argv[i], ltwrapper_option_prefix))
+        {
+          /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
+             namespace, but it is not one of the ones we know about and
+             have already dealt with, above (inluding dump-script), then
+             report an error. Otherwise, targets might begin to believe
+             they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
+             namespace. The first time any user complains about this, we'll
+             need to make LTWRAPPER_OPTION_PREFIX a configure-time option
+             or a configure.ac-settable value.
+           */
+          lt_fatal (__FILE__, __LINE__,
+		    "unrecognized %s option: '%s'",
+                    ltwrapper_option_prefix, argv[i]);
+        }
+      /* otherwise ... */
+      newargz[++newargc] = xstrdup (argv[i]);
+    }
+  newargz[++newargc] = NULL;
+
+EOF
+	    cat <<EOF
+  /* The GNU banner must be the first non-error debug message */
+  lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n");
+EOF
+	    cat <<"EOF"
+  lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name);
+
+  tmp_pathspec = find_executable (argv[0]);
+  if (tmp_pathspec == NULL)
+    lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (before symlink chase) at: %s\n",
+		  tmp_pathspec);
+
+  actual_cwrapper_path = chase_symlinks (tmp_pathspec);
+  lt_debugprintf (__FILE__, __LINE__,
+                  "(main) found exe (after symlink chase) at: %s\n",
+		  actual_cwrapper_path);
+  XFREE (tmp_pathspec);
+
+  actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path));
+  strendzap (actual_cwrapper_path, actual_cwrapper_name);
+
+  /* wrapper name transforms */
+  strendzap (actual_cwrapper_name, ".exe");
+  tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
+  XFREE (actual_cwrapper_name);
+  actual_cwrapper_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  /* target_name transforms -- use actual target program name; might have lt- prefix */
+  target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
+  strendzap (target_name, ".exe");
+  tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
+  XFREE (target_name);
+  target_name = tmp_pathspec;
+  tmp_pathspec = 0;
+
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(main) libtool target name: %s\n",
+		  target_name);
+EOF
+
+	    cat <<EOF
+  newargz[0] =
+    XMALLOC (char, (strlen (actual_cwrapper_path) +
+		    strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
+  strcpy (newargz[0], actual_cwrapper_path);
+  strcat (newargz[0], "$objdir");
+  strcat (newargz[0], "/");
+EOF
+
+	    cat <<"EOF"
+  /* stop here, and copy so we don't have to do this twice */
+  tmp_pathspec = xstrdup (newargz[0]);
+
+  /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
+  strcat (newargz[0], actual_cwrapper_name);
+
+  /* DO want the lt- prefix here if it exists, so use target_name */
+  lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
+  XFREE (tmp_pathspec);
+  tmp_pathspec = NULL;
+EOF
+
+	    case $host_os in
+	      mingw*)
+	    cat <<"EOF"
+  {
+    char* p;
+    while ((p = strchr (newargz[0], '\\')) != NULL)
+      {
+	*p = '/';
+      }
+    while ((p = strchr (lt_argv_zero, '\\')) != NULL)
+      {
+	*p = '/';
+      }
+  }
+EOF
+	    ;;
+	    esac
+
+	    cat <<"EOF"
+  XFREE (target_name);
+  XFREE (actual_cwrapper_path);
+  XFREE (actual_cwrapper_name);
+
+  lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
+  lt_setenv ("DUALCASE", "1");  /* for MSK sh */
+  /* Update the DLL searchpath.  EXE_PATH_VALUE ($dllsearchpath) must
+     be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath)
+     because on Windows, both *_VARNAMEs are PATH but uninstalled
+     libraries must come first. */
+  lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
+  lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
+
+  lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n",
+		  nonnull (lt_argv_zero));
+  for (i = 0; i < newargc; i++)
+    {
+      lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n",
+		      i, nonnull (newargz[i]));
+    }
+
+EOF
+
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+  /* execv doesn't actually work on mingw as expected on unix */
+  newargz = prepare_spawn (newargz);
+  rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
+  if (rval == -1)
+    {
+      /* failed to start process */
+      lt_debugprintf (__FILE__, __LINE__,
+		      "(main) failed to launch target \"%s\": %s\n",
+		      lt_argv_zero, nonnull (strerror (errno)));
+      return 127;
+    }
+  return rval;
+EOF
+		;;
+	      *)
+		cat <<"EOF"
+  execv (lt_argv_zero, newargz);
+  return rval; /* =127, but avoids unused variable warning */
+EOF
+		;;
+	    esac
+
+	    cat <<"EOF"
+}
+
+void *
+xmalloc (size_t num)
+{
+  void *p = (void *) malloc (num);
+  if (!p)
+    lt_fatal (__FILE__, __LINE__, "memory exhausted");
+
+  return p;
+}
+
+char *
+xstrdup (const char *string)
+{
+  return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
+			  string) : NULL;
+}
+
+const char *
+base_name (const char *name)
+{
+  const char *base;
+
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+  /* Skip over the disk name in MSDOS pathnames. */
+  if (isalpha ((unsigned char) name[0]) && name[1] == ':')
+    name += 2;
+#endif
+
+  for (base = name; *name; name++)
+    if (IS_DIR_SEPARATOR (*name))
+      base = name + 1;
+  return base;
+}
+
+int
+check_executable (const char *path)
+{
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if ((stat (path, &st) >= 0)
+      && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
+    return 1;
+  else
+    return 0;
+}
+
+int
+make_executable (const char *path)
+{
+  int rval = 0;
+  struct stat st;
+
+  lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n",
+                  nonempty (path));
+  if ((!path) || (!*path))
+    return 0;
+
+  if (stat (path, &st) >= 0)
+    {
+      rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
+    }
+  return rval;
+}
+
+/* Searches for the full path of the wrapper.  Returns
+   newly allocated full path name if found, NULL otherwise
+   Does not chase symlinks, even on platforms that support them.
+*/
+char *
+find_executable (const char *wrapper)
+{
+  int has_slash = 0;
+  const char *p;
+  const char *p_next;
+  /* static buffer for getcwd */
+  char tmp[LT_PATHMAX + 1];
+  size_t tmp_len;
+  char *concat_name;
+
+  lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n",
+                  nonempty (wrapper));
+
+  if ((wrapper == NULL) || (*wrapper == '\0'))
+    return NULL;
+
+  /* Absolute path? */
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+  if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
+    {
+      concat_name = xstrdup (wrapper);
+      if (check_executable (concat_name))
+	return concat_name;
+      XFREE (concat_name);
+    }
+  else
+    {
+#endif
+      if (IS_DIR_SEPARATOR (wrapper[0]))
+	{
+	  concat_name = xstrdup (wrapper);
+	  if (check_executable (concat_name))
+	    return concat_name;
+	  XFREE (concat_name);
+	}
+#if defined HAVE_DOS_BASED_FILE_SYSTEM
+    }
+#endif
+
+  for (p = wrapper; *p; p++)
+    if (*p == '/')
+      {
+	has_slash = 1;
+	break;
+      }
+  if (!has_slash)
+    {
+      /* no slashes; search PATH */
+      const char *path = getenv ("PATH");
+      if (path != NULL)
+	{
+	  for (p = path; *p; p = p_next)
+	    {
+	      const char *q;
+	      size_t p_len;
+	      for (q = p; *q; q++)
+		if (IS_PATH_SEPARATOR (*q))
+		  break;
+	      p_len = (size_t) (q - p);
+	      p_next = (*q == '\0' ? q : q + 1);
+	      if (p_len == 0)
+		{
+		  /* empty path: current directory */
+		  if (getcwd (tmp, LT_PATHMAX) == NULL)
+		    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+                              nonnull (strerror (errno)));
+		  tmp_len = strlen (tmp);
+		  concat_name =
+		    XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, tmp, tmp_len);
+		  concat_name[tmp_len] = '/';
+		  strcpy (concat_name + tmp_len + 1, wrapper);
+		}
+	      else
+		{
+		  concat_name =
+		    XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
+		  memcpy (concat_name, p, p_len);
+		  concat_name[p_len] = '/';
+		  strcpy (concat_name + p_len + 1, wrapper);
+		}
+	      if (check_executable (concat_name))
+		return concat_name;
+	      XFREE (concat_name);
+	    }
+	}
+      /* not found in PATH; assume curdir */
+    }
+  /* Relative path | not found in path: prepend cwd */
+  if (getcwd (tmp, LT_PATHMAX) == NULL)
+    lt_fatal (__FILE__, __LINE__, "getcwd failed: %s",
+              nonnull (strerror (errno)));
+  tmp_len = strlen (tmp);
+  concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
+  memcpy (concat_name, tmp, tmp_len);
+  concat_name[tmp_len] = '/';
+  strcpy (concat_name + tmp_len + 1, wrapper);
+
+  if (check_executable (concat_name))
+    return concat_name;
+  XFREE (concat_name);
+  return NULL;
+}
+
+char *
+chase_symlinks (const char *pathspec)
+{
+#ifndef S_ISLNK
+  return xstrdup (pathspec);
+#else
+  char buf[LT_PATHMAX];
+  struct stat s;
+  char *tmp_pathspec = xstrdup (pathspec);
+  char *p;
+  int has_symlinks = 0;
+  while (strlen (tmp_pathspec) && !has_symlinks)
+    {
+      lt_debugprintf (__FILE__, __LINE__,
+		      "checking path component for symlinks: %s\n",
+		      tmp_pathspec);
+      if (lstat (tmp_pathspec, &s) == 0)
+	{
+	  if (S_ISLNK (s.st_mode) != 0)
+	    {
+	      has_symlinks = 1;
+	      break;
+	    }
+
+	  /* search backwards for last DIR_SEPARATOR */
+	  p = tmp_pathspec + strlen (tmp_pathspec) - 1;
+	  while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    p--;
+	  if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
+	    {
+	      /* no more DIR_SEPARATORS left */
+	      break;
+	    }
+	  *p = '\0';
+	}
+      else
+	{
+	  lt_fatal (__FILE__, __LINE__,
+		    "error accessing file \"%s\": %s",
+		    tmp_pathspec, nonnull (strerror (errno)));
+	}
+    }
+  XFREE (tmp_pathspec);
+
+  if (!has_symlinks)
+    {
+      return xstrdup (pathspec);
+    }
+
+  tmp_pathspec = realpath (pathspec, buf);
+  if (tmp_pathspec == 0)
+    {
+      lt_fatal (__FILE__, __LINE__,
+		"could not follow symlinks for %s", pathspec);
+    }
+  return xstrdup (tmp_pathspec);
+#endif
+}
+
+char *
+strendzap (char *str, const char *pat)
+{
+  size_t len, patlen;
+
+  assert (str != NULL);
+  assert (pat != NULL);
+
+  len = strlen (str);
+  patlen = strlen (pat);
+
+  if (patlen <= len)
+    {
+      str += len - patlen;
+      if (STREQ (str, pat))
+	*str = '\0';
+    }
+  return str;
+}
+
+void
+lt_debugprintf (const char *file, int line, const char *fmt, ...)
+{
+  va_list args;
+  if (lt_debug)
+    {
+      (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line);
+      va_start (args, fmt);
+      (void) vfprintf (stderr, fmt, args);
+      va_end (args);
+    }
+}
+
+static void
+lt_error_core (int exit_status, const char *file,
+	       int line, const char *mode,
+	       const char *message, va_list ap)
+{
+  fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode);
+  vfprintf (stderr, message, ap);
+  fprintf (stderr, ".\n");
+
+  if (exit_status >= 0)
+    exit (exit_status);
+}
+
+void
+lt_fatal (const char *file, int line, const char *message, ...)
+{
+  va_list ap;
+  va_start (ap, message);
+  lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap);
+  va_end (ap);
+}
+
+static const char *
+nonnull (const char *s)
+{
+  return s ? s : "(null)";
+}
+
+static const char *
+nonempty (const char *s)
+{
+  return (s && !*s) ? "(empty)" : nonnull (s);
+}
+
+void
+lt_setenv (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_setenv) setting '%s' to '%s'\n",
+                  nonnull (name), nonnull (value));
+  {
+#ifdef HAVE_SETENV
+    /* always make a copy, for consistency with !HAVE_SETENV */
+    char *str = xstrdup (value);
+    setenv (name, str, 1);
+#else
+    size_t len = strlen (name) + 1 + strlen (value) + 1;
+    char *str = XMALLOC (char, len);
+    sprintf (str, "%s=%s", name, value);
+    if (putenv (str) != EXIT_SUCCESS)
+      {
+        XFREE (str);
+      }
+#endif
+  }
+}
+
+char *
+lt_extend_str (const char *orig_value, const char *add, int to_end)
+{
+  char *new_value;
+  if (orig_value && *orig_value)
+    {
+      size_t orig_value_len = strlen (orig_value);
+      size_t add_len = strlen (add);
+      new_value = XMALLOC (char, add_len + orig_value_len + 1);
+      if (to_end)
+        {
+          strcpy (new_value, orig_value);
+          strcpy (new_value + orig_value_len, add);
+        }
+      else
+        {
+          strcpy (new_value, add);
+          strcpy (new_value + add_len, orig_value);
+        }
+    }
+  else
+    {
+      new_value = xstrdup (add);
+    }
+  return new_value;
+}
+
+void
+lt_update_exe_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      /* some systems can't cope with a ':'-terminated path #' */
+      size_t len = strlen (new_value);
+      while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
+        {
+          new_value[--len] = '\0';
+        }
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+void
+lt_update_lib_path (const char *name, const char *value)
+{
+  lt_debugprintf (__FILE__, __LINE__,
+		  "(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
+                  nonnull (name), nonnull (value));
+
+  if (name && *name && value && *value)
+    {
+      char *new_value = lt_extend_str (getenv (name), value, 0);
+      lt_setenv (name, new_value);
+      XFREE (new_value);
+    }
+}
+
+EOF
+	    case $host_os in
+	      mingw*)
+		cat <<"EOF"
+
+/* Prepares an argument vector before calling spawn().
+   Note that spawn() does not by itself call the command interpreter
+     (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") :
+      ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+         GetVersionEx(&v);
+         v.dwPlatformId == VER_PLATFORM_WIN32_NT;
+      }) ? "cmd.exe" : "command.com").
+   Instead it simply concatenates the arguments, separated by ' ', and calls
+   CreateProcess().  We must quote the arguments since Win32 CreateProcess()
+   interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a
+   special way:
+   - Space and tab are interpreted as delimiters. They are not treated as
+     delimiters if they are surrounded by double quotes: "...".
+   - Unescaped double quotes are removed from the input. Their only effect is
+     that within double quotes, space and tab are treated like normal
+     characters.
+   - Backslashes not followed by double quotes are not special.
+   - But 2*n+1 backslashes followed by a double quote become
+     n backslashes followed by a double quote (n >= 0):
+       \" -> "
+       \\\" -> \"
+       \\\\\" -> \\"
+ */
+#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
+char **
+prepare_spawn (char **argv)
+{
+  size_t argc;
+  char **new_argv;
+  size_t i;
+
+  /* Count number of arguments.  */
+  for (argc = 0; argv[argc] != NULL; argc++)
+    ;
+
+  /* Allocate new argument vector.  */
+  new_argv = XMALLOC (char *, argc + 1);
+
+  /* Put quoted arguments into the new argument vector.  */
+  for (i = 0; i < argc; i++)
+    {
+      const char *string = argv[i];
+
+      if (string[0] == '\0')
+	new_argv[i] = xstrdup ("\"\"");
+      else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL)
+	{
+	  int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL);
+	  size_t length;
+	  unsigned int backslashes;
+	  const char *s;
+	  char *quoted_string;
+	  char *p;
+
+	  length = 0;
+	  backslashes = 0;
+	  if (quote_around)
+	    length++;
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		length += backslashes + 1;
+	      length++;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    length += backslashes + 1;
+
+	  quoted_string = XMALLOC (char, length + 1);
+
+	  p = quoted_string;
+	  backslashes = 0;
+	  if (quote_around)
+	    *p++ = '"';
+	  for (s = string; *s != '\0'; s++)
+	    {
+	      char c = *s;
+	      if (c == '"')
+		{
+		  unsigned int j;
+		  for (j = backslashes + 1; j > 0; j--)
+		    *p++ = '\\';
+		}
+	      *p++ = c;
+	      if (c == '\\')
+		backslashes++;
+	      else
+		backslashes = 0;
+	    }
+	  if (quote_around)
+	    {
+	      unsigned int j;
+	      for (j = backslashes; j > 0; j--)
+		*p++ = '\\';
+	      *p++ = '"';
+	    }
+	  *p = '\0';
+
+	  new_argv[i] = quoted_string;
+	}
+      else
+	new_argv[i] = (char *) string;
+    }
+  new_argv[argc] = NULL;
+
+  return new_argv;
+}
+EOF
+		;;
+	    esac
+
+            cat <<"EOF"
+void lt_dump_script (FILE* f)
+{
+EOF
+	    func_emit_wrapper yes |
+	      $SED -n -e '
+s/^\(.\{79\}\)\(..*\)/\1\
+\2/
+h
+s/\([\\"]\)/\\\1/g
+s/$/\\n/
+s/\([^\n]*\).*/  fputs ("\1", f);/p
+g
+D'
+            cat <<"EOF"
+}
+EOF
+}
+# end: func_emit_cwrapperexe_src
+
+# func_win32_import_lib_p ARG
+# True if ARG is an import lib, as indicated by $file_magic_cmd
+func_win32_import_lib_p ()
+{
+    $debug_cmd
+
+    case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in
+    *import*) : ;;
+    *) false ;;
+    esac
+}
+
+# func_suncc_cstd_abi
+# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!!
+# Several compiler flags select an ABI that is incompatible with the
+# Cstd library. Avoid specifying it if any are in CXXFLAGS.
+func_suncc_cstd_abi ()
+{
+    $debug_cmd
+
+    case " $compile_command " in
+    *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*)
+      suncc_use_cstd_abi=no
+      ;;
+    *)
+      suncc_use_cstd_abi=yes
+      ;;
+    esac
+}
+
+# func_mode_link arg...
+func_mode_link ()
+{
+    $debug_cmd
+
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # what system we are compiling for in order to pass an extra
+      # flag for every libtool invocation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll that has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args=$nonopt
+    base_compile="$nonopt $@"
+    compile_command=$nonopt
+    finalize_command=$nonopt
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+    inst_prefix_dir=
+    new_inherited_linker_flags=
+
+    avoid_version=no
+    bindir=
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    os2dllname=
+    non_pic_objects=
+    precious_files_regex=
+    prefer_static_libs=no
+    preload=false
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+    vinfo_number=no
+    weak_libs=
+    single_module=$wl-single_module
+    func_infer_tag $base_compile
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -shared)
+	test yes != "$build_libtool_libs" \
+	  && func_fatal_configuration "cannot build a shared library"
+	build_old_libs=no
+	break
+	;;
+      -all-static | -static | -static-libtool-libs)
+	case $arg in
+	-all-static)
+	  if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then
+	    func_warning "complete static linking is impossible in this configuration"
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	-static)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=built
+	  ;;
+	-static-libtool-libs)
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	  prefer_static_libs=yes
+	  ;;
+	esac
+	build_libtool_libs=no
+	build_old_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test "$#" -gt 0; do
+      arg=$1
+      shift
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  func_append compile_command " @OUTPUT@"
+	  func_append finalize_command " @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	bindir)
+	  bindir=$arg
+	  prev=
+	  continue
+	  ;;
+	dlfiles|dlprefiles)
+	  $preload || {
+	    # Add the symbol object into the linking commands.
+	    func_append compile_command " @SYMFILE@"
+	    func_append finalize_command " @SYMFILE@"
+	    preload=:
+	  }
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test no = "$dlself"; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test dlprefiles = "$prev"; then
+	      dlself=yes
+	    elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test dlfiles = "$prev"; then
+	      func_append dlfiles " $arg"
+	    else
+	      func_append dlprefiles " $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols=$arg
+	  test -f "$arg" \
+	    || func_fatal_error "symbol file '$arg' does not exist"
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex=$arg
+	  prev=
+	  continue
+	  ;;
+	framework)
+	  case $host in
+	    *-*-darwin*)
+	      case "$deplibs " in
+		*" $qarg.ltframework "*) ;;
+		*) func_append deplibs " $qarg.ltframework" # this is fixed later
+		   ;;
+	      esac
+	      ;;
+	  esac
+	  prev=
+	  continue
+	  ;;
+	inst_prefix)
+	  inst_prefix_dir=$arg
+	  prev=
+	  continue
+	  ;;
+	mllvm)
+	  # Clang does not use LLVM to link, so we can simply discard any
+	  # '-mllvm $arg' options when doing the link step.
+	  prev=
+	  continue
+	  ;;
+	objectlist)
+	  if test -f "$arg"; then
+	    save_arg=$arg
+	    moreargs=
+	    for fil in `cat "$save_arg"`
+	    do
+#	      func_append moreargs " $fil"
+	      arg=$fil
+	      # A libtool-controlled object.
+
+	      # Check to see that this really is a libtool object.
+	      if func_lalib_unsafe_p "$arg"; then
+		pic_object=
+		non_pic_object=
+
+		# Read the .lo file
+		func_source "$arg"
+
+		if test -z "$pic_object" ||
+		   test -z "$non_pic_object" ||
+		   test none = "$pic_object" &&
+		   test none = "$non_pic_object"; then
+		  func_fatal_error "cannot find name of object for '$arg'"
+		fi
+
+		# Extract subdirectory from the argument.
+		func_dirname "$arg" "/" ""
+		xdir=$func_dirname_result
+
+		if test none != "$pic_object"; then
+		  # Prepend the subdirectory the object is found in.
+		  pic_object=$xdir$pic_object
+
+		  if test dlfiles = "$prev"; then
+		    if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+		      func_append dlfiles " $pic_object"
+		      prev=
+		      continue
+		    else
+		      # If libtool objects are unsupported, then we need to preload.
+		      prev=dlprefiles
+		    fi
+		  fi
+
+		  # CHECK ME:  I think I busted this.  -Ossama
+		  if test dlprefiles = "$prev"; then
+		    # Preload the old-style object.
+		    func_append dlprefiles " $pic_object"
+		    prev=
+		  fi
+
+		  # A PIC object.
+		  func_append libobjs " $pic_object"
+		  arg=$pic_object
+		fi
+
+		# Non-PIC object.
+		if test none != "$non_pic_object"; then
+		  # Prepend the subdirectory the object is found in.
+		  non_pic_object=$xdir$non_pic_object
+
+		  # A standard non-PIC object
+		  func_append non_pic_objects " $non_pic_object"
+		  if test -z "$pic_object" || test none = "$pic_object"; then
+		    arg=$non_pic_object
+		  fi
+		else
+		  # If the PIC object exists, use it instead.
+		  # $xdir was prepended to $pic_object above.
+		  non_pic_object=$pic_object
+		  func_append non_pic_objects " $non_pic_object"
+		fi
+	      else
+		# Only an error if not doing a dry-run.
+		if $opt_dry_run; then
+		  # Extract subdirectory from the argument.
+		  func_dirname "$arg" "/" ""
+		  xdir=$func_dirname_result
+
+		  func_lo2o "$arg"
+		  pic_object=$xdir$objdir/$func_lo2o_result
+		  non_pic_object=$xdir$func_lo2o_result
+		  func_append libobjs " $pic_object"
+		  func_append non_pic_objects " $non_pic_object"
+	        else
+		  func_fatal_error "'$arg' is not a valid libtool object"
+		fi
+	      fi
+	    done
+	  else
+	    func_fatal_error "link input file '$arg' does not exist"
+	  fi
+	  arg=$save_arg
+	  prev=
+	  continue
+	  ;;
+	os2dllname)
+	  os2dllname=$arg
+	  prev=
+	  continue
+	  ;;
+	precious_regex)
+	  precious_files_regex=$arg
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release=-$arg
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    func_fatal_error "only absolute run-paths are allowed"
+	    ;;
+	  esac
+	  if test rpath = "$prev"; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) func_append rpath " $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) func_append xrpath " $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	shrext)
+	  shrext_cmds=$arg
+	  prev=
+	  continue
+	  ;;
+	weak)
+	  func_append weak_libs " $arg"
+	  prev=
+	  continue
+	  ;;
+	xcclinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xcompiler)
+	  func_append compiler_flags " $qarg"
+	  prev=
+	  func_append compile_command " $qarg"
+	  func_append finalize_command " $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  func_append linker_flags " $qarg"
+	  func_append compiler_flags " $wl$qarg"
+	  prev=
+	  func_append compile_command " $wl$qarg"
+	  func_append finalize_command " $wl$qarg"
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n "$prev"
+
+      prevarg=$arg
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  # See comment for -static flag below, for more details.
+	  func_append compile_command " $link_static_flag"
+	  func_append finalize_command " $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	func_fatal_error "'-allow-undefined' must not be used because it is the default"
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -bindir)
+	prev=bindir
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  func_fatal_error "more than one -exported-symbols argument is not allowed"
+	fi
+	if test X-export-symbols = "X$arg"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      -framework)
+	prev=framework
+	continue
+	;;
+
+      -inst-prefix-dir)
+	prev=inst_prefix
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix* | /*-*-irix*)
+	  func_append compile_command " $arg"
+	  func_append finalize_command " $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	func_stripname "-L" '' "$arg"
+	if test -z "$func_stripname_result"; then
+	  if test "$#" -gt 0; then
+	    func_fatal_error "require no space between '-L' and '$1'"
+	  else
+	    func_fatal_error "need path for '-L' option"
+	  fi
+	fi
+	func_resolve_sysroot "$func_stripname_result"
+	dir=$func_resolve_sysroot_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  test -z "$absdir" && \
+	    func_fatal_error "cannot determine absolute directory name of '$dir'"
+	  dir=$absdir
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "* | *" $arg "*)
+	  # Will only happen for absolute or sysroot arguments
+	  ;;
+	*)
+	  # Preserve sysroot, but never include relative directories
+	  case $dir in
+	    [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;;
+	    *) func_append deplibs " -L$dir" ;;
+	  esac
+	  func_append lib_search_path " $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  ::) dllsearchpath=$dir;;
+	  *) func_append dllsearchpath ":$dir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test X-lc = "X$arg" || test X-lm = "X$arg"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test X-lc = "X$arg" && continue
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test X-lc = "X$arg" && continue
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C and math libraries are in the System framework
+	    func_append deplibs " System.ltframework"
+	    continue
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    test X-lc = "X$arg" && continue
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    test X-lc = "X$arg" && continue
+	    ;;
+	  esac
+	elif test X-lc_r = "X$arg"; then
+	 case $host in
+	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+	   # Do not include libc_r directly, use -pthread flag.
+	   continue
+	   ;;
+	 esac
+	fi
+	func_append deplibs " $arg"
+	continue
+	;;
+
+      -mllvm)
+	prev=mllvm
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      # Tru64 UNIX uses -model [arg] to determine the layout of C++
+      # classes, name mangling, and exception handling.
+      # Darwin uses the -arch flag to determine output architecture.
+      -model|-arch|-isysroot|--sysroot)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	prev=xcompiler
+	continue
+	;;
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+      |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	func_append compiler_flags " $arg"
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+	case "$new_inherited_linker_flags " in
+	    *" $arg "*) ;;
+	    * ) func_append new_inherited_linker_flags " $arg" ;;
+	esac
+	continue
+	;;
+
+      -multi_module)
+	single_module=$wl-multi_module
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # and Darwin in order for the loader to find any dlls it needs.
+	  func_warning "'-no-install' is ignored for $host"
+	  func_warning "assuming '-no-fast-install' instead"
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -objectlist)
+	prev=objectlist
+	continue
+	;;
+
+      -os2dllname)
+	prev=os2dllname
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -precious-files-regex)
+	prev=precious_regex
+	continue
+	;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	func_stripname '-R' '' "$arg"
+	dir=$func_stripname_result
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	=*)
+	  func_stripname '=' '' "$dir"
+	  dir=$lt_sysroot$func_stripname_result
+	  ;;
+	*)
+	  func_fatal_error "only absolute run-paths are allowed"
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) func_append xrpath " $dir" ;;
+	esac
+	continue
+	;;
+
+      -shared)
+	# The effects of -shared are defined in a previous loop.
+	continue
+	;;
+
+      -shrext)
+	prev=shrext
+	continue
+	;;
+
+      -static | -static-libtool-libs)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+
+      -version-number)
+	prev=vinfo
+	vinfo_number=yes
+	continue
+	;;
+
+      -weak)
+        prev=weak
+	continue
+	;;
+
+      -Wc,*)
+	func_stripname '-Wc,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs=$IFS; IFS=,
+	for flag in $args; do
+	  IFS=$save_ifs
+          func_quote_for_eval "$flag"
+	  func_append arg " $func_quote_for_eval_result"
+	  func_append compiler_flags " $func_quote_for_eval_result"
+	done
+	IFS=$save_ifs
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Wl,*)
+	func_stripname '-Wl,' '' "$arg"
+	args=$func_stripname_result
+	arg=
+	save_ifs=$IFS; IFS=,
+	for flag in $args; do
+	  IFS=$save_ifs
+          func_quote_for_eval "$flag"
+	  func_append arg " $wl$func_quote_for_eval_result"
+	  func_append compiler_flags " $wl$func_quote_for_eval_result"
+	  func_append linker_flags " $func_quote_for_eval_result"
+	done
+	IFS=$save_ifs
+	func_stripname ' ' '' "$arg"
+	arg=$func_stripname_result
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      -XCClinker)
+	prev=xcclinker
+	continue
+	;;
+
+      # -msg_* for osf cc
+      -msg_*)
+	func_quote_for_eval "$arg"
+	arg=$func_quote_for_eval_result
+	;;
+
+      # Flags to be passed through unchanged, with rationale:
+      # -64, -mips[0-9]      enable 64-bit mode for the SGI compiler
+      # -r[0-9][0-9]*        specify processor for the SGI compiler
+      # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler
+      # +DA*, +DD*           enable 64-bit mode for the HP compiler
+      # -q*                  compiler args for the IBM compiler
+      # -m*, -t[45]*, -txscale* architecture-specific flags for GCC
+      # -F/path              path to uninstalled frameworks, gcc on darwin
+      # -p, -pg, --coverage, -fprofile-*  profiling flags for GCC
+      # -fstack-protector*   stack protector flags for GCC
+      # @file                GCC response files
+      # -tp=*                Portland pgcc target processor selection
+      # --sysroot=*          for sysroot support
+      # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
+      # -stdlib=*            select c++ std lib with clang
+      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
+      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
+      -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*)
+        func_quote_for_eval "$arg"
+	arg=$func_quote_for_eval_result
+        func_append compile_command " $arg"
+        func_append finalize_command " $arg"
+        func_append compiler_flags " $arg"
+        continue
+        ;;
+
+      -Z*)
+        if test os2 = "`expr $host : '.*\(os2\)'`"; then
+          # OS/2 uses -Zxxx to specify OS/2-specific options
+	  compiler_flags="$compiler_flags $arg"
+	  func_append compile_command " $arg"
+	  func_append finalize_command " $arg"
+	  case $arg in
+	  -Zlinker | -Zstack)
+	    prev=xcompiler
+	    ;;
+	  esac
+	  continue
+        else
+	  # Otherwise treat like 'Some other compiler flag' below
+	  func_quote_for_eval "$arg"
+	  arg=$func_quote_for_eval_result
+        fi
+	;;
+
+      # Some other compiler flag.
+      -* | +*)
+        func_quote_for_eval "$arg"
+	arg=$func_quote_for_eval_result
+	;;
+
+      *.$objext)
+	# A standard object.
+	func_append objs " $arg"
+	;;
+
+      *.lo)
+	# A libtool-controlled object.
+
+	# Check to see that this really is a libtool object.
+	if func_lalib_unsafe_p "$arg"; then
+	  pic_object=
+	  non_pic_object=
+
+	  # Read the .lo file
+	  func_source "$arg"
+
+	  if test -z "$pic_object" ||
+	     test -z "$non_pic_object" ||
+	     test none = "$pic_object" &&
+	     test none = "$non_pic_object"; then
+	    func_fatal_error "cannot find name of object for '$arg'"
+	  fi
+
+	  # Extract subdirectory from the argument.
+	  func_dirname "$arg" "/" ""
+	  xdir=$func_dirname_result
+
+	  test none = "$pic_object" || {
+	    # Prepend the subdirectory the object is found in.
+	    pic_object=$xdir$pic_object
+
+	    if test dlfiles = "$prev"; then
+	      if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then
+		func_append dlfiles " $pic_object"
+		prev=
+		continue
+	      else
+		# If libtool objects are unsupported, then we need to preload.
+		prev=dlprefiles
+	      fi
+	    fi
+
+	    # CHECK ME:  I think I busted this.  -Ossama
+	    if test dlprefiles = "$prev"; then
+	      # Preload the old-style object.
+	      func_append dlprefiles " $pic_object"
+	      prev=
+	    fi
+
+	    # A PIC object.
+	    func_append libobjs " $pic_object"
+	    arg=$pic_object
+	  }
+
+	  # Non-PIC object.
+	  if test none != "$non_pic_object"; then
+	    # Prepend the subdirectory the object is found in.
+	    non_pic_object=$xdir$non_pic_object
+
+	    # A standard non-PIC object
+	    func_append non_pic_objects " $non_pic_object"
+	    if test -z "$pic_object" || test none = "$pic_object"; then
+	      arg=$non_pic_object
+	    fi
+	  else
+	    # If the PIC object exists, use it instead.
+	    # $xdir was prepended to $pic_object above.
+	    non_pic_object=$pic_object
+	    func_append non_pic_objects " $non_pic_object"
+	  fi
+	else
+	  # Only an error if not doing a dry-run.
+	  if $opt_dry_run; then
+	    # Extract subdirectory from the argument.
+	    func_dirname "$arg" "/" ""
+	    xdir=$func_dirname_result
+
+	    func_lo2o "$arg"
+	    pic_object=$xdir$objdir/$func_lo2o_result
+	    non_pic_object=$xdir$func_lo2o_result
+	    func_append libobjs " $pic_object"
+	    func_append non_pic_objects " $non_pic_object"
+	  else
+	    func_fatal_error "'$arg' is not a valid libtool object"
+	  fi
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	func_append deplibs " $arg"
+	func_append old_deplibs " $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	func_resolve_sysroot "$arg"
+	if test dlfiles = "$prev"; then
+	  # This library was specified with -dlopen.
+	  func_append dlfiles " $func_resolve_sysroot_result"
+	  prev=
+	elif test dlprefiles = "$prev"; then
+	  # The library was specified with -dlpreopen.
+	  func_append dlprefiles " $func_resolve_sysroot_result"
+	  prev=
+	else
+	  func_append deplibs " $func_resolve_sysroot_result"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	func_quote_for_eval "$arg"
+	arg=$func_quote_for_eval_result
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	func_append compile_command " $arg"
+	func_append finalize_command " $arg"
+      fi
+    done # argument parsing loop
+
+    test -n "$prev" && \
+      func_fatal_help "the '$prevarg' option requires an argument"
+
+    if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      func_append compile_command " $arg"
+      func_append finalize_command " $arg"
+    fi
+
+    oldlibs=
+    # calculate the name of the file, without its directory
+    func_basename "$output"
+    outputname=$func_basename_result
+    libobjs_save=$libobjs
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    # Definition is injected by LT_CONFIG during libtool generation.
+    func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH"
+
+    func_dirname "$output" "/" ""
+    output_objdir=$func_dirname_result$objdir
+    func_to_tool_file "$output_objdir/"
+    tool_output_objdir=$func_to_tool_file_result
+    # Create the object directory.
+    func_mkdir_p "$output_objdir"
+
+    # Determine the type of output
+    case $output in
+    "")
+      func_fatal_help "you must specify an output file"
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      if $opt_preserve_dup_deps; then
+	case "$libs " in
+	*" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	esac
+      fi
+      func_append libs " $deplib"
+    done
+
+    if test lib = "$linkmode"; then
+      libs="$predeps $libs $compiler_lib_search_path $postdeps"
+
+      # Compute libraries that are listed more than once in $predeps
+      # $postdeps and mark them as special (i.e., whose duplicates are
+      # not to be eliminated).
+      pre_post_deps=
+      if $opt_duplicate_compiler_generated_deps; then
+	for pre_post_dep in $predeps $postdeps; do
+	  case "$pre_post_deps " in
+	  *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;;
+	  esac
+	  func_append pre_post_deps " $pre_post_dep"
+	done
+      fi
+      pre_post_deps=
+    fi
+
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+
+    case $linkmode in
+    lib)
+	passes="conv dlpreopen link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    func_fatal_help "libraries can '-dlopen' only libtool libraries: $file"
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=false
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+
+    for pass in $passes; do
+      # The preopen pass in lib mode reverses $deplibs; put it back here
+      # so that -L comes before libs that need it for instance...
+      if test lib,link = "$linkmode,$pass"; then
+	## FIXME: Find the place where the list is rebuilt in the wrong
+	##        order, and fix it there properly
+        tmp_deplibs=
+	for deplib in $deplibs; do
+	  tmp_deplibs="$deplib $tmp_deplibs"
+	done
+	deplibs=$tmp_deplibs
+      fi
+
+      if test lib,link = "$linkmode,$pass" ||
+	 test prog,scan = "$linkmode,$pass"; then
+	libs=$deplibs
+	deplibs=
+      fi
+      if test prog = "$linkmode"; then
+	case $pass in
+	dlopen) libs=$dlfiles ;;
+	dlpreopen) libs=$dlprefiles ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      if test lib,dlpreopen = "$linkmode,$pass"; then
+	# Collect and forward deplibs of preopened libtool libs
+	for lib in $dlprefiles; do
+	  # Ignore non-libtool-libs
+	  dependency_libs=
+	  func_resolve_sysroot "$lib"
+	  case $lib in
+	  *.la)	func_source "$func_resolve_sysroot_result" ;;
+	  esac
+
+	  # Collect preopened libtool deplibs, except any this library
+	  # has declared as weak libs
+	  for deplib in $dependency_libs; do
+	    func_basename "$deplib"
+            deplib_base=$func_basename_result
+	    case " $weak_libs " in
+	    *" $deplib_base "*) ;;
+	    *) func_append deplibs " $deplib" ;;
+	    esac
+	  done
+	done
+	libs=$dlprefiles
+      fi
+      if test dlopen = "$pass"; then
+	# Collect dlpreopened libraries
+	save_deplibs=$deplibs
+	deplibs=
+      fi
+
+      for deplib in $libs; do
+	lib=
+	found=false
+	case $deplib in
+	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+        |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
+	  if test prog,link = "$linkmode,$pass"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    func_append compiler_flags " $deplib"
+	    if test lib = "$linkmode"; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-l*)
+	  if test lib != "$linkmode" && test prog != "$linkmode"; then
+	    func_warning "'-l' is ignored for archives/objects"
+	    continue
+	  fi
+	  func_stripname '-l' '' "$deplib"
+	  name=$func_stripname_result
+	  if test lib = "$linkmode"; then
+	    searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
+	  else
+	    searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
+	  fi
+	  for searchdir in $searchdirs; do
+	    for search_ext in .la $std_shrext .so .a; do
+	      # Search the libtool library
+	      lib=$searchdir/lib$name$search_ext
+	      if test -f "$lib"; then
+		if test .la = "$search_ext"; then
+		  found=:
+		else
+		  found=false
+		fi
+		break 2
+	      fi
+	    done
+	  done
+	  if $found; then
+	    # deplib is a libtool library
+	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
+	    # We need to do some special things here, and not later.
+	    if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+	      case " $predeps $postdeps " in
+	      *" $deplib "*)
+		if func_lalib_p "$lib"; then
+		  library_names=
+		  old_library=
+		  func_source "$lib"
+		  for l in $old_library $library_names; do
+		    ll=$l
+		  done
+		  if test "X$ll" = "X$old_library"; then # only static version available
+		    found=false
+		    func_dirname "$lib" "" "."
+		    ladir=$func_dirname_result
+		    lib=$ladir/$old_library
+		    if test prog,link = "$linkmode,$pass"; then
+		      compile_deplibs="$deplib $compile_deplibs"
+		      finalize_deplibs="$deplib $finalize_deplibs"
+		    else
+		      deplibs="$deplib $deplibs"
+		      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+		    fi
+		    continue
+		  fi
+		fi
+		;;
+	      *) ;;
+	      esac
+	    fi
+	  else
+	    # deplib doesn't seem to be a libtool library
+	    if test prog,link = "$linkmode,$pass"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  fi
+	  ;; # -l
+	*.ltframework)
+	  if test prog,link = "$linkmode,$pass"; then
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    deplibs="$deplib $deplibs"
+	    if test lib = "$linkmode"; then
+		case "$new_inherited_linker_flags " in
+		    *" $deplib "*) ;;
+		    * ) func_append new_inherited_linker_flags " $deplib" ;;
+		esac
+	    fi
+	  fi
+	  continue
+	  ;;
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test conv = "$pass" && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  prog)
+	    if test conv = "$pass"; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test scan = "$pass"; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    func_stripname '-L' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    func_append newlib_search_path " $func_resolve_sysroot_result"
+	    ;;
+	  *)
+	    func_warning "'-L' is ignored for archives/objects"
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test link = "$pass"; then
+	    func_stripname '-R' '' "$deplib"
+	    func_resolve_sysroot "$func_stripname_result"
+	    dir=$func_resolve_sysroot_result
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) func_append xrpath " $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la)
+	  func_resolve_sysroot "$deplib"
+	  lib=$func_resolve_sysroot_result
+	  ;;
+	*.$libext)
+	  if test conv = "$pass"; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    # Linking convenience modules into shared libraries is allowed,
+	    # but linking other static libraries is non-portable.
+	    case " $dlpreconveniencelibs " in
+	    *" $deplib "*) ;;
+	    *)
+	      valid_a_lib=false
+	      case $deplibs_check_method in
+		match_pattern*)
+		  set dummy $deplibs_check_method; shift
+		  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+		  if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \
+		    | $EGREP "$match_pattern_regex" > /dev/null; then
+		    valid_a_lib=:
+		  fi
+		;;
+		pass_all)
+		  valid_a_lib=:
+		;;
+	      esac
+	      if $valid_a_lib; then
+		echo
+		$ECHO "*** Warning: Linking the shared library $output against the"
+		$ECHO "*** static library $deplib is not portable!"
+		deplibs="$deplib $deplibs"
+	      else
+		echo
+		$ECHO "*** Warning: Trying to link with static lib archive $deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because the file extensions .$libext of this argument makes me believe"
+		echo "*** that it is just a static archive that I should not use here."
+	      fi
+	      ;;
+	    esac
+	    continue
+	    ;;
+	  prog)
+	    if test link != "$pass"; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test conv = "$pass"; then
+	    deplibs="$deplib $deplibs"
+	  elif test prog = "$linkmode"; then
+	    if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then
+	      # If there is no dlopen support or we're linking statically,
+	      # we need to preload.
+	      func_append newdlprefiles " $deplib"
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      func_append newdlfiles " $deplib"
+	    fi
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=:
+	  continue
+	  ;;
+	esac # case $deplib
+
+	$found || test -f "$lib" \
+	  || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'"
+
+	# Check to see that this really is a libtool archive.
+	func_lalib_unsafe_p "$lib" \
+	  || func_fatal_error "'$lib' is not a valid libtool archive"
+
+	func_dirname "$lib" "" "."
+	ladir=$func_dirname_result
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	inherited_linker_flags=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variables installed, or shouldnotlink
+	installed=yes
+	shouldnotlink=no
+	avoidtemprpath=
+
+
+	# Read the .la file
+	func_source "$lib"
+
+	# Convert "-framework foo" to "foo.ltframework"
+	if test -n "$inherited_linker_flags"; then
+	  tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'`
+	  for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
+	    case " $new_inherited_linker_flags " in
+	      *" $tmp_inherited_linker_flag "*) ;;
+	      *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";;
+	    esac
+	  done
+	fi
+	dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	if test lib,link = "$linkmode,$pass" ||
+	   test prog,scan = "$linkmode,$pass" ||
+	   { test prog != "$linkmode" && test lib != "$linkmode"; }; then
+	  test -n "$dlopen" && func_append dlfiles " $dlopen"
+	  test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen"
+	fi
+
+	if test conv = "$pass"; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      func_fatal_error "cannot find name of link library for '$lib'"
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    func_append convenience " $ladir/$objdir/$old_library"
+	    func_append old_convenience " $ladir/$objdir/$old_library"
+	  elif test prog != "$linkmode" && test lib != "$linkmode"; then
+	    func_fatal_error "'$lib' is not a convenience library"
+	  fi
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    deplibs="$deplib $deplibs"
+	    if $opt_preserve_dup_deps; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done
+	  continue
+	fi # $pass = conv
+
+
+	# Get the name of the library we link against.
+	linklib=
+	if test -n "$old_library" &&
+	   { test yes = "$prefer_static_libs" ||
+	     test built,no = "$prefer_static_libs,$installed"; }; then
+	  linklib=$old_library
+	else
+	  for l in $old_library $library_names; do
+	    linklib=$l
+	  done
+	fi
+	if test -z "$linklib"; then
+	  func_fatal_error "cannot find name of link library for '$lib'"
+	fi
+
+	# This library was specified with -dlopen.
+	if test dlopen = "$pass"; then
+	  test -z "$libdir" \
+	    && func_fatal_error "cannot -dlopen a convenience library: '$lib'"
+	  if test -z "$dlname" ||
+	     test yes != "$dlopen_support" ||
+	     test no = "$build_libtool_libs"
+	  then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.  We also need to preload any
+	    # dependent libraries so libltdl's deplib preloader doesn't
+	    # bomb out in the load deplibs phase.
+	    func_append dlprefiles " $lib $dependency_libs"
+	  else
+	    func_append newdlfiles " $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    func_warning "cannot determine absolute directory name of '$ladir'"
+	    func_warning "passing it literally to the linker, although it might fail"
+	    abs_ladir=$ladir
+	  fi
+	  ;;
+	esac
+	func_basename "$lib"
+	laname=$func_basename_result
+
+	# Find the relevant object directory and library name.
+	if test yes = "$installed"; then
+	  if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    func_warning "library '$lib' was moved."
+	    dir=$ladir
+	    absdir=$abs_ladir
+	    libdir=$abs_ladir
+	  else
+	    dir=$lt_sysroot$libdir
+	    absdir=$lt_sysroot$libdir
+	  fi
+	  test yes = "$hardcode_automatic" && avoidtemprpath=yes
+	else
+	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    dir=$ladir
+	    absdir=$abs_ladir
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  else
+	    dir=$ladir/$objdir
+	    absdir=$abs_ladir/$objdir
+	    # Remove this search path later
+	    func_append notinst_path " $abs_ladir"
+	  fi
+	fi # $installed = yes
+	func_stripname 'lib' '.la' "$laname"
+	name=$func_stripname_result
+
+	# This library was specified with -dlpreopen.
+	if test dlpreopen = "$pass"; then
+	  if test -z "$libdir" && test prog = "$linkmode"; then
+	    func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'"
+	  fi
+	  case $host in
+	    # special handling for platforms with PE-DLLs.
+	    *cygwin* | *mingw* | *cegcc* )
+	      # Linker will automatically link against shared library if both
+	      # static and shared are present.  Therefore, ensure we extract
+	      # symbols from the import library if a shared library is present
+	      # (otherwise, the dlopen module name will be incorrect).  We do
+	      # this by putting the import library name into $newdlprefiles.
+	      # We recover the dlopen module name by 'saving' the la file
+	      # name in a special purpose variable, and (later) extracting the
+	      # dlname from the la file.
+	      if test -n "$dlname"; then
+	        func_tr_sh "$dir/$linklib"
+	        eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname"
+	        func_append newdlprefiles " $dir/$linklib"
+	      else
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      fi
+	    ;;
+	    * )
+	      # Prefer using a static library (so that no silly _DYNAMIC symbols
+	      # are required to link).
+	      if test -n "$old_library"; then
+	        func_append newdlprefiles " $dir/$old_library"
+	        # Keep a list of preopened convenience libraries to check
+	        # that they are being used correctly in the link pass.
+	        test -z "$libdir" && \
+	          func_append dlpreconveniencelibs " $dir/$old_library"
+	      # Otherwise, use the dlname, so that lt_dlopen finds it.
+	      elif test -n "$dlname"; then
+	        func_append newdlprefiles " $dir/$dlname"
+	      else
+	        func_append newdlprefiles " $dir/$linklib"
+	      fi
+	    ;;
+	  esac
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test lib = "$linkmode"; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test prog,link = "$linkmode,$pass"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs" # used for prog,scan pass
+	  fi
+	  continue
+	fi
+
+
+	if test prog = "$linkmode" && test link != "$pass"; then
+	  func_append newlib_search_path " $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=false
+	  if test no != "$link_all_deplibs" || test -z "$library_names" ||
+	     test no = "$build_libtool_libs"; then
+	    linkalldeplibs=:
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) func_stripname '-L' '' "$deplib"
+	         func_resolve_sysroot "$func_stripname_result"
+	         func_append newlib_search_path " $func_resolve_sysroot_result"
+		 ;;
+	    esac
+	    # Need to link against all dependency_libs?
+	    if $linkalldeplibs; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    if $opt_preserve_dup_deps; then
+	      case "$tmp_libs " in
+	      *" $deplib "*) func_append specialdeplibs " $deplib" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	if test prog,link = "$linkmode,$pass"; then
+	  if test -n "$library_names" &&
+	     { { test no = "$prefer_static_libs" ||
+	         test built,yes = "$prefer_static_libs,$installed"; } ||
+	       test -z "$old_library"; }; then
+	    # We need to hardcode the library path
+	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then
+	      # Make sure the rpath contains only unique directories.
+	      case $temp_rpath: in
+	      *"$absdir:"*) ;;
+	      *) func_append temp_rpath "$absdir:" ;;
+	      esac
+	    fi
+
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi # $linkmode,$pass = prog,link...
+
+	  if $alldeplibs &&
+	     { test pass_all = "$deplibs_check_method" ||
+	       { test yes = "$build_libtool_libs" &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+	fi
+
+	link_static=no # Whether the deplib will be linked statically
+	use_static_libs=$prefer_static_libs
+	if test built = "$use_static_libs" && test yes = "$installed"; then
+	  use_static_libs=no
+	fi
+	if test -n "$library_names" &&
+	   { test no = "$use_static_libs" || test -z "$old_library"; }; then
+	  case $host in
+	  *cygwin* | *mingw* | *cegcc* | *os2*)
+	      # No point in relinking DLLs because paths are not encoded
+	      func_append notinst_deplibs " $lib"
+	      need_relink=no
+	    ;;
+	  *)
+	    if test no = "$installed"; then
+	      func_append notinst_deplibs " $lib"
+	      need_relink=yes
+	    fi
+	    ;;
+	  esac
+	  # This is a shared library
+
+	  # Warn about portability, can't link against -module's on some
+	  # systems (darwin).  Don't bleat about dlopened modules though!
+	  dlopenmodule=
+	  for dlpremoduletest in $dlprefiles; do
+	    if test "X$dlpremoduletest" = "X$lib"; then
+	      dlopenmodule=$dlpremoduletest
+	      break
+	    fi
+	  done
+	  if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then
+	    echo
+	    if test prog = "$linkmode"; then
+	      $ECHO "*** Warning: Linking the executable $output against the loadable module"
+	    else
+	      $ECHO "*** Warning: Linking the shared library $output against the loadable module"
+	    fi
+	    $ECHO "*** $linklib is not portable!"
+	  fi
+	  if test lib = "$linkmode" &&
+	     test yes = "$hardcode_into_libs"; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) func_append compile_rpath " $absdir" ;;
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append finalize_rpath " $libdir" ;;
+	      esac
+	      ;;
+	    esac
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    shift
+	    realname=$1
+	    shift
+	    libname=`eval "\\$ECHO \"$libname_spec\""`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname=$dlname
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin* | mingw* | *cegcc* | *os2*)
+	        func_arith $current - $age
+		major=$func_arith_result
+		versuffix=-$major
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname=$realname
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot=$soname
+	    func_basename "$soroot"
+	    soname=$func_basename_result
+	    func_stripname 'lib' '.dll' "$soname"
+	    newlib=libimp-$func_stripname_result.a
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      func_verbose "extracting exported symbol list from '$soname'"
+	      func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      func_verbose "generating import library for '$soname'"
+	      func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n "$old_archive_from_expsyms_cmds"
+
+	  if test prog = "$linkmode" || test relink != "$opt_mode"; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test no = "$hardcode_direct"; then
+		add=$dir/$linklib
+		case $host in
+		  *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;;
+		  *-*-sysv4*uw2*) add_dir=-L$dir ;;
+		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
+		    *-*-unixware7*) add_dir=-L$dir ;;
+		  *-*-darwin* )
+		    # if the lib is a (non-dlopened) module then we cannot
+		    # link against it, someone is ignoring the earlier warnings
+		    if /usr/bin/file -L $add 2> /dev/null |
+			 $GREP ": [^:]* bundle" >/dev/null; then
+		      if test "X$dlopenmodule" != "X$lib"; then
+			$ECHO "*** Warning: lib $linklib is a module, not a shared library"
+			if test -z "$old_library"; then
+			  echo
+			  echo "*** And there doesn't seem to be a static archive available"
+			  echo "*** The link will probably fail, sorry"
+			else
+			  add=$dir/$old_library
+			fi
+		      elif test -n "$old_library"; then
+			add=$dir/$old_library
+		      fi
+		    fi
+		esac
+	      elif test no = "$hardcode_minus_L"; then
+		case $host in
+		*-*-sunos*) add_shlibpath=$dir ;;
+		esac
+		add_dir=-L$dir
+		add=-l$name
+	      elif test no = "$hardcode_shlibpath_var"; then
+		add_shlibpath=$dir
+		add=-l$name
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test yes = "$hardcode_direct" &&
+	         test no = "$hardcode_direct_absolute"; then
+		add=$dir/$linklib
+	      elif test yes = "$hardcode_minus_L"; then
+		add_dir=-L$absdir
+		# Try looking first in the location we're being installed to.
+		if test -n "$inst_prefix_dir"; then
+		  case $libdir in
+		    [\\/]*)
+		      func_append add_dir " -L$inst_prefix_dir$libdir"
+		      ;;
+		  esac
+		fi
+		add=-l$name
+	      elif test yes = "$hardcode_shlibpath_var"; then
+		add_shlibpath=$dir
+		add=-l$name
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test yes != "$lib_linked"; then
+	      func_fatal_configuration "unsupported hardcode properties"
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) func_append compile_shlibpath "$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test prog = "$linkmode"; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test yes != "$hardcode_direct" &&
+		 test yes != "$hardcode_minus_L" &&
+		 test yes = "$hardcode_shlibpath_var"; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) func_append finalize_shlibpath "$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test prog = "$linkmode" || test relink = "$opt_mode"; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test yes = "$hardcode_direct" &&
+	       test no = "$hardcode_direct_absolute"; then
+	      add=$libdir/$linklib
+	    elif test yes = "$hardcode_minus_L"; then
+	      add_dir=-L$libdir
+	      add=-l$name
+	    elif test yes = "$hardcode_shlibpath_var"; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) func_append finalize_shlibpath "$libdir:" ;;
+	      esac
+	      add=-l$name
+	    elif test yes = "$hardcode_automatic"; then
+	      if test -n "$inst_prefix_dir" &&
+		 test -f "$inst_prefix_dir$libdir/$linklib"; then
+		add=$inst_prefix_dir$libdir/$linklib
+	      else
+		add=$libdir/$linklib
+	      fi
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir=-L$libdir
+	      # Try looking first in the location we're being installed to.
+	      if test -n "$inst_prefix_dir"; then
+		case $libdir in
+		  [\\/]*)
+		    func_append add_dir " -L$inst_prefix_dir$libdir"
+		    ;;
+		esac
+	      fi
+	      add=-l$name
+	    fi
+
+	    if test prog = "$linkmode"; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test prog = "$linkmode"; then
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test unsupported != "$hardcode_direct"; then
+	    test -n "$old_library" && linklib=$old_library
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test yes = "$build_libtool_libs"; then
+	  # Not a shared library
+	  if test pass_all != "$deplibs_check_method"; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    echo
+	    $ECHO "*** Warning: This system cannot link to static lib archive $lib."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
+	    if test yes = "$module"; then
+	      echo "*** But as you try to build a module library, libtool will still create "
+	      echo "*** a static module, that should work as long as the dlopening application"
+	      echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
+	      if test -z "$global_symbol_pipe"; then
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** 'nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test no = "$build_old_libs"; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test lib = "$linkmode"; then
+	  if test -n "$dependency_libs" &&
+	     { test yes != "$hardcode_into_libs" ||
+	       test yes = "$build_old_libs" ||
+	       test yes = "$link_static"; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) func_stripname '-R' '' "$libdir"
+	           temp_xrpath=$func_stripname_result
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) func_append xrpath " $temp_xrpath";;
+		   esac;;
+	      *) func_append temp_deplibs " $libdir";;
+	      esac
+	    done
+	    dependency_libs=$temp_deplibs
+	  fi
+
+	  func_append newlib_search_path " $absdir"
+	  # Link against this library
+	  test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    case $deplib in
+              -L*) func_stripname '-L' '' "$deplib"
+                   func_resolve_sysroot "$func_stripname_result";;
+              *) func_resolve_sysroot "$deplib" ;;
+            esac
+	    if $opt_preserve_dup_deps; then
+	      case "$tmp_libs " in
+	      *" $func_resolve_sysroot_result "*)
+                func_append specialdeplibs " $func_resolve_sysroot_result" ;;
+	      esac
+	    fi
+	    func_append tmp_libs " $func_resolve_sysroot_result"
+	  done
+
+	  if test no != "$link_all_deplibs"; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      path=
+	      case $deplib in
+	      -L*) path=$deplib ;;
+	      *.la)
+	        func_resolve_sysroot "$deplib"
+	        deplib=$func_resolve_sysroot_result
+	        func_dirname "$deplib" "" "."
+		dir=$func_dirname_result
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    func_warning "cannot determine absolute directory name of '$dir'"
+		    absdir=$dir
+		  fi
+		  ;;
+		esac
+		if $GREP "^installed=no" $deplib > /dev/null; then
+		case $host in
+		*-*-darwin*)
+		  depdepl=
+		  eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
+		  if test -n "$deplibrary_names"; then
+		    for tmp in $deplibrary_names; do
+		      depdepl=$tmp
+		    done
+		    if test -f "$absdir/$objdir/$depdepl"; then
+		      depdepl=$absdir/$objdir/$depdepl
+		      darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
+                      if test -z "$darwin_install_name"; then
+                          darwin_install_name=`$OTOOL64 -L $depdepl  | awk '{if (NR == 2) {print $1;exit}}'`
+                      fi
+		      func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl"
+		      func_append linker_flags " -dylib_file $darwin_install_name:$depdepl"
+		      path=
+		    fi
+		  fi
+		  ;;
+		*)
+		  path=-L$absdir/$objdir
+		  ;;
+		esac
+		else
+		  eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  test -z "$libdir" && \
+		    func_fatal_error "'$deplib' is not a valid libtool archive"
+		  test "$absdir" != "$libdir" && \
+		    func_warning "'$deplib' seems to be moved"
+
+		  path=-L$absdir
+		fi
+		;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$path $deplibs" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      if test link = "$pass"; then
+	if test prog = "$linkmode"; then
+	  compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
+	  finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
+	else
+	  compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	fi
+      fi
+      dependency_libs=$newdependency_libs
+      if test dlpreopen = "$pass"; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test dlopen != "$pass"; then
+	test conv = "$pass" || {
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) func_append lib_search_path " $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	}
+
+	if test prog,link = "$linkmode,$pass"; then
+	  vars="compile_deplibs finalize_deplibs"
+	else
+	  vars=deplibs
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    # FIXME: Pedantically, this is the right thing to do, so
+	    #        that some nasty dependency loop isn't accidentally
+	    #        broken:
+	    #new_libs="$deplib $new_libs"
+	    # Pragmatically, this seems to cause very few problems in
+	    # practice:
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    -R*) ;;
+	    *)
+	      # And here is the reason: when a library appears more
+	      # than once as an explicit dependence of a library, or
+	      # is implicitly linked in more than once by the
+	      # compiler, it is considered special, and multiple
+	      # occurrences thereof are not removed.  Compare this
+	      # with having the same library being listed as a
+	      # dependency of multiple other libraries: in this case,
+	      # we know (pedantically, we assume) the library does not
+	      # need to be listed more than once, so we keep only the
+	      # last copy.  This is not always right, but it is rare
+	      # enough that we require users that really mean to play
+	      # such unportable linking tricks to link the library
+	      # using -Wl,-lname, so that libtool does not consider it
+	      # for duplicate removal.
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) func_append tmp_libs " $deplib" ;;
+	      esac
+	      ;;
+	    *) func_append tmp_libs " $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+
+      # Add Sun CC postdeps if required:
+      test CXX = "$tagname" && {
+        case $host_os in
+        linux*)
+          case `$CC -V 2>&1 | sed 5q` in
+          *Sun\ C*) # Sun C++ 5.9
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+
+        solaris*)
+          func_cc_basename "$CC"
+          case $func_cc_basename_result in
+          CC* | sunCC*)
+            func_suncc_cstd_abi
+
+            if test no != "$suncc_use_cstd_abi"; then
+              func_append postdeps ' -library=Cstd -library=Crun'
+            fi
+            ;;
+          esac
+          ;;
+        esac
+      }
+
+      # Last step: remove runtime libs from dependency_libs
+      # (they stay in deplibs)
+      tmp_libs=
+      for i in $dependency_libs; do
+	case " $predeps $postdeps $compiler_lib_search_path " in
+	*" $i "*)
+	  i=
+	  ;;
+	esac
+	if test -n "$i"; then
+	  func_append tmp_libs " $i"
+	fi
+      done
+      dependency_libs=$tmp_libs
+    done # for pass
+    if test prog = "$linkmode"; then
+      dlfiles=$newdlfiles
+    fi
+    if test prog = "$linkmode" || test lib = "$linkmode"; then
+      dlprefiles=$newdlprefiles
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+	func_warning "'-dlopen' is ignored for archives"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "'-l' and '-L' are ignored for archives" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "'-rpath' is ignored for archives"
+
+      test -n "$xrpath" && \
+	func_warning "'-R' is ignored for archives"
+
+      test -n "$vinfo" && \
+	func_warning "'-version-info/-version-number' is ignored for archives"
+
+      test -n "$release" && \
+	func_warning "'-release' is ignored for archives"
+
+      test -n "$export_symbols$export_symbols_regex" && \
+	func_warning "'-export-symbols' is ignored for archives"
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs=$output
+      func_append objs "$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form 'libNAME.la'.
+      case $outputname in
+      lib*)
+	func_stripname 'lib' '.la' "$outputname"
+	name=$func_stripname_result
+	eval shared_ext=\"$shrext_cmds\"
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	test no = "$module" \
+	  && func_fatal_help "libtool library '$output' must begin with 'lib'"
+
+	if test no != "$need_lib_prefix"; then
+	  # Add the "lib" prefix for modules if required
+	  func_stripname '' '.la' "$outputname"
+	  name=$func_stripname_result
+	  eval shared_ext=\"$shrext_cmds\"
+	  eval libname=\"$libname_spec\"
+	else
+	  func_stripname '' '.la' "$outputname"
+	  libname=$func_stripname_result
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test pass_all != "$deplibs_check_method"; then
+	  func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs"
+	else
+	  echo
+	  $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
+	  $ECHO "*** objects $objs is not portable!"
+	  func_append libobjs " $objs"
+	fi
+      fi
+
+      test no = "$dlself" \
+	|| func_warning "'-dlopen self' is ignored for libtool libraries"
+
+      set dummy $rpath
+      shift
+      test 1 -lt "$#" \
+	&& func_warning "ignoring multiple '-rpath's for a libtool library"
+
+      install_libdir=$1
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test yes = "$build_libtool_libs"; then
+	  # Building a libtool convenience library.
+	  # Some compilers have problems with a '.al' extension so
+	  # convenience libraries should have the same extension an
+	  # archive normally would.
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	test -n "$vinfo" && \
+	  func_warning "'-version-info/-version-number' is ignored for convenience libraries"
+
+	test -n "$release" && \
+	  func_warning "'-release' is ignored for convenience libraries"
+      else
+
+	# Parse the version information argument.
+	save_ifs=$IFS; IFS=:
+	set dummy $vinfo 0 0 0
+	shift
+	IFS=$save_ifs
+
+	test -n "$7" && \
+	  func_fatal_help "too many parameters to '-version-info'"
+
+	# convert absolute version numbers to libtool ages
+	# this retains compatibility with .la files and attempts
+	# to make the code below a bit more comprehensible
+
+	case $vinfo_number in
+	yes)
+	  number_major=$1
+	  number_minor=$2
+	  number_revision=$3
+	  #
+	  # There are really only two kinds -- those that
+	  # use the current revision as the major version
+	  # and those that subtract age and use age as
+	  # a minor version.  But, then there is irix
+	  # that has an extra 1 added just for fun
+	  #
+	  case $version_type in
+	  # correct linux to gnu/linux during the next big refactor
+	  darwin|freebsd-elf|linux|osf|windows|none)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age=$number_minor
+	    revision=$number_revision
+	    ;;
+	  freebsd-aout|qnx|sunos)
+	    current=$number_major
+	    revision=$number_minor
+	    age=0
+	    ;;
+	  irix|nonstopux)
+	    func_arith $number_major + $number_minor
+	    current=$func_arith_result
+	    age=$number_minor
+	    revision=$number_minor
+	    lt_irix_increment=no
+	    ;;
+	  esac
+	  ;;
+	no)
+	  current=$1
+	  revision=$2
+	  age=$3
+	  ;;
+	esac
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "CURRENT '$current' must be a nonnegative integer"
+	  func_fatal_error "'$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $revision in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "REVISION '$revision' must be a nonnegative integer"
+	  func_fatal_error "'$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	case $age in
+	0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
+	*)
+	  func_error "AGE '$age' must be a nonnegative integer"
+	  func_fatal_error "'$vinfo' is not valid version information"
+	  ;;
+	esac
+
+	if test "$age" -gt "$current"; then
+	  func_error "AGE '$age' is greater than the current interface number '$current'"
+	  func_fatal_error "'$vinfo' is not valid version information"
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=$major.$age.$revision
+	  # Darwin ld doesn't like 0 for these options...
+	  func_arith $current + 1
+	  minor_current=$func_arith_result
+	  xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+          # On Darwin other compilers
+          case $CC in
+              nagfor*)
+                  verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision"
+                  ;;
+              *)
+                  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+                  ;;
+          esac
+	  ;;
+
+	freebsd-aout)
+	  major=.$current
+	  versuffix=.$current.$revision
+	  ;;
+
+	freebsd-elf)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=$major.$age.$revision
+	  ;;
+
+	irix | nonstopux)
+	  if test no = "$lt_irix_increment"; then
+	    func_arith $current - $age
+	  else
+	    func_arith $current - $age + 1
+	  fi
+	  major=$func_arith_result
+
+	  case $version_type in
+	    nonstopux) verstring_prefix=nonstopux ;;
+	    *)         verstring_prefix=sgi ;;
+	  esac
+	  verstring=$verstring_prefix$major.$revision
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test 0 -ne "$loop"; do
+	    func_arith $revision - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring=$verstring_prefix$major.$iface:$verstring
+	  done
+
+	  # Before this point, $major must not contain '.'.
+	  major=.$major
+	  versuffix=$major.$revision
+	  ;;
+
+	linux) # correct to gnu/linux during the next big refactor
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=$major.$age.$revision
+	  ;;
+
+	osf)
+	  func_arith $current - $age
+	  major=.$func_arith_result
+	  versuffix=.$current.$age.$revision
+	  verstring=$current.$age.$revision
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test 0 -ne "$loop"; do
+	    func_arith $current - $loop
+	    iface=$func_arith_result
+	    func_arith $loop - 1
+	    loop=$func_arith_result
+	    verstring=$verstring:$iface.0
+	  done
+
+	  # Make executables depend on our current version.
+	  func_append verstring ":$current.0"
+	  ;;
+
+	qnx)
+	  major=.$current
+	  versuffix=.$current
+	  ;;
+
+	sco)
+	  major=.$current
+	  versuffix=.$current
+	  ;;
+
+	sunos)
+	  major=.$current
+	  versuffix=.$current.$revision
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 file systems.
+	  func_arith $current - $age
+	  major=$func_arith_result
+	  versuffix=-$major
+	  ;;
+
+	*)
+	  func_fatal_configuration "unknown library version type '$version_type'"
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=
+	    ;;
+	  *)
+	    verstring=0.0
+	    ;;
+	  esac
+	  if test no = "$need_version"; then
+	    versuffix=
+	  else
+	    versuffix=.0.0
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test yes,no = "$avoid_version,$need_version"; then
+	  major=
+	  versuffix=
+	  verstring=
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test yes = "$allow_undefined"; then
+	  if test unsupported = "$allow_undefined_flag"; then
+	    if test yes = "$build_old_libs"; then
+	      func_warning "undefined symbols not allowed in $host shared libraries; building static only"
+	      build_libtool_libs=no
+	    else
+	      func_fatal_error "can't build $host shared library unless -no-undefined is specified"
+	    fi
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag=$no_undefined_flag
+	fi
+
+      fi
+
+      func_generate_dlsyms "$libname" "$libname" :
+      func_append libobjs " $symfileobj"
+      test " " = "$libobjs" && libobjs=
+
+      if test relink != "$opt_mode"; then
+	# Remove our outputs, but don't remove object files since they
+	# may have been created when compiling PIC objects.
+	removelist=
+	tempremovelist=`$ECHO "$output_objdir/*"`
+	for p in $tempremovelist; do
+	  case $p in
+	    *.$objext | *.gcno)
+	       ;;
+	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*)
+	       if test -n "$precious_files_regex"; then
+		 if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
+		 then
+		   continue
+		 fi
+	       fi
+	       func_append removelist " $p"
+	       ;;
+	    *) ;;
+	  esac
+	done
+	test -n "$removelist" && \
+	  func_show_eval "${RM}r \$removelist"
+      fi
+
+      # Now set the variables for building old libraries.
+      if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then
+	func_append oldlibs " $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      #for path in $notinst_path; do
+      #	lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"`
+      #	deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"`
+      #	dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"`
+      #done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  func_replace_sysroot "$libdir"
+	  func_append temp_xrpath " -R$func_replace_sysroot_result"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+	if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles=$dlfiles
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) func_append dlfiles " $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles=$dlprefiles
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) func_append dlprefiles " $lib" ;;
+	esac
+      done
+
+      if test yes = "$build_libtool_libs"; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    func_append deplibs " System.ltframework"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+	    # Do not include libc due to us having libc/libc_r.
+	    ;;
+	  *-*-sco3.2v5* | *-*-sco5v6*)
+	    # Causes problems with __ctype
+	    ;;
+	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
+	    # Compiler inserts libc in the correct place for threads to work
+	    ;;
+	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test yes = "$build_libtool_need_lc"; then
+	      func_append deplibs " -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=
+	versuffix=
+	major=
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behavior.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $opt_dry_run || $RM conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $opt_dry_run || $RM conftest
+	  if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+		  case " $predeps $postdeps " in
+		  *" $i "*)
+		    func_append newdeplibs " $i"
+		    i=
+		    ;;
+		  esac
+		fi
+		if test -n "$i"; then
+		  libname=`eval "\\$ECHO \"$libname_spec\""`
+		  deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		  set dummy $deplib_matches; shift
+		  deplib_match=$1
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+		    func_append newdeplibs " $i"
+		  else
+		    droppeddeps=yes
+		    echo
+		    $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which I believe you do not have"
+		    echo "*** because a test_compile did reveal that the linker did not use it for"
+		    echo "*** its dynamic dependency list that programs get resolved with at runtime."
+		  fi
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  else
+	    # Error occurred in the first compile.  Let's try to salvage
+	    # the situation: Compile a separate program for each library.
+	    for i in $deplibs; do
+	      case $i in
+	      -l*)
+		func_stripname -l '' "$i"
+		name=$func_stripname_result
+		$opt_dry_run || $RM conftest
+		if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
+		  ldd_output=`ldd conftest`
+		  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+		    case " $predeps $postdeps " in
+		    *" $i "*)
+		      func_append newdeplibs " $i"
+		      i=
+		      ;;
+		    esac
+		  fi
+		  if test -n "$i"; then
+		    libname=`eval "\\$ECHO \"$libname_spec\""`
+		    deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
+		    set dummy $deplib_matches; shift
+		    deplib_match=$1
+		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then
+		      func_append newdeplibs " $i"
+		    else
+		      droppeddeps=yes
+		      echo
+		      $ECHO "*** Warning: dynamic linker does not accept needed library $i."
+		      echo "*** I have the capability to make that library automatically link in when"
+		      echo "*** you link to this library.  But I can only do this if you have a"
+		      echo "*** shared version of the library, which you do not appear to have"
+		      echo "*** because a test_compile did reveal that the linker did not use this one"
+		      echo "*** as a dynamic dependency that programs can get resolved with at runtime."
+		    fi
+		  fi
+		else
+		  droppeddeps=yes
+		  echo
+		  $ECHO "*** Warning!  Library $i is needed by this library but I was not able to"
+		  echo "*** make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
+		fi
+		;;
+	      *)
+		func_append newdeplibs " $i"
+		;;
+	      esac
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method; shift
+	  file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib"; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		if test -n "$file_magic_glob"; then
+		  libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob`
+		else
+		  libnameglob=$libname
+		fi
+		test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  if test yes = "$want_nocaseglob"; then
+		    shopt -s nocaseglob
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		    $nocaseglob
+		  else
+		    potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null`
+		  fi
+		  for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null |
+			 $GREP " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib=$potent_lib
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | $SED 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;;
+			*) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
+			 $SED -e 10q |
+			 $EGREP "$file_magic_regex" > /dev/null; then
+			func_append newdeplibs " $a_deplib"
+			a_deplib=
+			break 2
+		      fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib"; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib"; then
+		  $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a file magic. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method; shift
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    case $a_deplib in
+	    -l*)
+	      func_stripname -l '' "$a_deplib"
+	      name=$func_stripname_result
+	      if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+		case " $predeps $postdeps " in
+		*" $a_deplib "*)
+		  func_append newdeplibs " $a_deplib"
+		  a_deplib=
+		  ;;
+		esac
+	      fi
+	      if test -n "$a_deplib"; then
+		libname=`eval "\\$ECHO \"$libname_spec\""`
+		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		  for potent_lib in $potential_libs; do
+		    potlib=$potent_lib # see symlink-check above in file_magic test
+		    if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \
+		       $EGREP "$match_pattern_regex" > /dev/null; then
+		      func_append newdeplibs " $a_deplib"
+		      a_deplib=
+		      break 2
+		    fi
+		  done
+		done
+	      fi
+	      if test -n "$a_deplib"; then
+		droppeddeps=yes
+		echo
+		$ECHO "*** Warning: linker path does not have real file for library $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have"
+		echo "*** because I did check the linker path looking for a file starting"
+		if test -z "$potlib"; then
+		  $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
+		else
+		  $ECHO "*** with $libname and none of the candidates passed a file format test"
+		  $ECHO "*** using a regex pattern. Last file checked: $potlib"
+		fi
+	      fi
+	      ;;
+	    *)
+	      # Add a -L argument.
+	      func_append newdeplibs " $a_deplib"
+	      ;;
+	    esac
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=
+	  tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'`
+	  if test yes = "$allow_libtool_libs_with_static_runtimes"; then
+	    for i in $predeps $postdeps; do
+	      # can't use Xsed below, because $i might contain '/'
+	      tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"`
+	    done
+	  fi
+	  case $tmp_deplibs in
+	  *[!\	\ ]*)
+	    echo
+	    if test none = "$deplibs_check_method"; then
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	    ;;
+	  esac
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library with the System framework
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'`
+	  ;;
+	esac
+
+	if test yes = "$droppeddeps"; then
+	  if test yes = "$module"; then
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    $ECHO "*** dependencies of module $libname.  Therefore, libtool will create"
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using 'nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** 'nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test no = "$build_old_libs"; then
+	      oldlibs=$output_objdir/$libname.$libext
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
+
+	    if test no = "$allow_undefined"; then
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
+	      if test no = "$build_old_libs"; then
+		oldlibs=$output_objdir/$libname.$libext
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+      # Time to change all our "foo.ltframework" stuff back to "-framework foo"
+      case $host in
+	*-*-darwin*)
+	  newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	  ;;
+      esac
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      deplibs=$new_libs
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test yes = "$build_libtool_libs"; then
+	# Remove $wl instances when linking with ld.
+	# FIXME: should test the right _cmds variable.
+	case $archive_cmds in
+	  *\$LD\ *) wl= ;;
+        esac
+	if test yes = "$hardcode_into_libs"; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath=$finalize_rpath
+	  test relink = "$opt_mode" || rpath=$compile_rpath$rpath
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		func_replace_sysroot "$libdir"
+		libdir=$func_replace_sysroot_result
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs=$libdir
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		func_append dep_rpath " $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) func_append perm_rpath " $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir=$hardcode_libdirs
+	    eval "dep_rpath=\"$hardcode_libdir_flag_spec\""
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      func_append rpath "$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath=$finalize_shlibpath
+	test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval shared_ext=\"$shrext_cmds\"
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	shift
+	realname=$1
+	shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname=$realname
+	fi
+	if test -z "$dlname"; then
+	  dlname=$soname
+	fi
+
+	lib=$output_objdir/$realname
+	linknames=
+	for link
+	do
+	  func_append linknames " $link"
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	test "X$libobjs" = "X " && libobjs=
+
+	delfiles=
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
+	  export_symbols=$output_objdir/$libname.uexp
+	  func_append delfiles " $export_symbols"
+	fi
+
+	orig_export_symbols=
+	case $host_os in
+	cygwin* | mingw* | cegcc*)
+	  if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
+	    # exporting using user supplied symfile
+	    func_dll_def_p "$export_symbols" || {
+	      # and it's NOT already a .def file. Must figure out
+	      # which of the given symbols are data symbols and tag
+	      # them as such. So, trigger use of export_symbols_cmds.
+	      # export_symbols gets reassigned inside the "prepare
+	      # the list of exported symbols" if statement, so the
+	      # include_expsyms logic still works.
+	      orig_export_symbols=$export_symbols
+	      export_symbols=
+	      always_export_symbols=yes
+	    }
+	  fi
+	  ;;
+	esac
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then
+	    func_verbose "generating symbol list for '$libname.la'"
+	    export_symbols=$output_objdir/$libname.exp
+	    $opt_dry_run || $RM $export_symbols
+	    cmds=$export_symbols_cmds
+	    save_ifs=$IFS; IFS='~'
+	    for cmd1 in $cmds; do
+	      IFS=$save_ifs
+	      # Take the normal branch if the nm_file_list_spec branch
+	      # doesn't work or if tool conversion is not needed.
+	      case $nm_file_list_spec~$to_tool_file_cmd in
+		*~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*)
+		  try_normal_branch=yes
+		  eval cmd=\"$cmd1\"
+		  func_len " $cmd"
+		  len=$func_len_result
+		  ;;
+		*)
+		  try_normal_branch=no
+		  ;;
+	      esac
+	      if test yes = "$try_normal_branch" \
+		 && { test "$len" -lt "$max_cmd_len" \
+		      || test "$max_cmd_len" -le -1; }
+	      then
+		func_show_eval "$cmd" 'exit $?'
+		skipped_export=false
+	      elif test -n "$nm_file_list_spec"; then
+		func_basename "$output"
+		output_la=$func_basename_result
+		save_libobjs=$libobjs
+		save_output=$output
+		output=$output_objdir/$output_la.nm
+		func_to_tool_file "$output"
+		libobjs=$nm_file_list_spec$func_to_tool_file_result
+		func_append delfiles " $output"
+		func_verbose "creating $NM input file list: $output"
+		for obj in $save_libobjs; do
+		  func_to_tool_file "$obj"
+		  $ECHO "$func_to_tool_file_result"
+		done > "$output"
+		eval cmd=\"$cmd1\"
+		func_show_eval "$cmd" 'exit $?'
+		output=$save_output
+		libobjs=$save_libobjs
+		skipped_export=false
+	      else
+		# The command line is too long to execute in one step.
+		func_verbose "using reloadable object file for export list..."
+		skipped_export=:
+		# Break out early, otherwise skipped_export may be
+		# set to false by a later but shorter cmd.
+		break
+	      fi
+	    done
+	    IFS=$save_ifs
+	    if test -n "$export_symbols_regex" && test : != "$skipped_export"; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  tmp_export_symbols=$export_symbols
+	  test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+	  $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	fi
+
+	if test : != "$skipped_export" && test -n "$orig_export_symbols"; then
+	  # The given exports_symbols file has to be filtered, so filter it.
+	  func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+	  # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	  # 's' commands, which not all seds can handle. GNU sed should be fine
+	  # though. Also, the filter scales superlinearly with the number of
+	  # global variables. join(1) would be nice here, but unfortunately
+	  # isn't a blessed tool.
+	  $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	  func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	  export_symbols=$output_objdir/$libname.def
+	  $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	fi
+
+	tmp_deplibs=
+	for test_deplib in $deplibs; do
+	  case " $convenience " in
+	  *" $test_deplib "*) ;;
+	  *)
+	    func_append tmp_deplibs " $test_deplib"
+	    ;;
+	  esac
+	done
+	deplibs=$tmp_deplibs
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec" &&
+	    test yes = "$compiler_needs_object" &&
+	    test -z "$libobjs"; then
+	    # extract the archives, so we have objects to list.
+	    # TODO: could optimize this to just extract one archive.
+	    whole_archive_flag_spec=
+	  fi
+	  if test -n "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  else
+	    gentop=$output_objdir/${outputname}x
+	    func_append generated " $gentop"
+
+	    func_extract_archives $gentop $convenience
+	    func_append libobjs " $func_extract_archives_result"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	fi
+
+	if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  func_append linker_flags " $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test relink = "$opt_mode"; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test yes = "$module" && test -n "$module_cmds"; then
+	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	    eval test_cmds=\"$module_expsym_cmds\"
+	    cmds=$module_expsym_cmds
+	  else
+	    eval test_cmds=\"$module_cmds\"
+	    cmds=$module_cmds
+	  fi
+	else
+	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	    eval test_cmds=\"$archive_expsym_cmds\"
+	    cmds=$archive_expsym_cmds
+	  else
+	    eval test_cmds=\"$archive_cmds\"
+	    cmds=$archive_cmds
+	  fi
+	fi
+
+	if test : != "$skipped_export" &&
+	   func_len " $test_cmds" &&
+	   len=$func_len_result &&
+	   test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  :
+	else
+	  # The command line is too long to link in one step, link piecewise
+	  # or, if using GNU ld and skipped_export is not :, use a linker
+	  # script.
+
+	  # Save the value of $output and $libobjs because we want to
+	  # use them later.  If we have whole_archive_flag_spec, we
+	  # want to use save_libobjs as it was before
+	  # whole_archive_flag_spec was expanded, because we can't
+	  # assume the linker understands whole_archive_flag_spec.
+	  # This may have to be revisited, in case too many
+	  # convenience libraries get linked in and end up exceeding
+	  # the spec.
+	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
+	    save_libobjs=$libobjs
+	  fi
+	  save_output=$output
+	  func_basename "$output"
+	  output_la=$func_basename_result
+
+	  # Clear the reloadable object creation command queue and
+	  # initialize k to one.
+	  test_cmds=
+	  concat_cmds=
+	  objlist=
+	  last_robj=
+	  k=1
+
+	  if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then
+	    output=$output_objdir/$output_la.lnkscript
+	    func_verbose "creating GNU ld script: $output"
+	    echo 'INPUT (' > $output
+	    for obj in $save_libobjs
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    echo ')' >> $output
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$func_to_tool_file_result
+	  elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then
+	    output=$output_objdir/$output_la.lnk
+	    func_verbose "creating linker input file list: $output"
+	    : > $output
+	    set x $save_libobjs
+	    shift
+	    firstobj=
+	    if test yes = "$compiler_needs_object"; then
+	      firstobj="$1 "
+	      shift
+	    fi
+	    for obj
+	    do
+	      func_to_tool_file "$obj"
+	      $ECHO "$func_to_tool_file_result" >> $output
+	    done
+	    func_append delfiles " $output"
+	    func_to_tool_file "$output"
+	    output=$firstobj\"$file_list_spec$func_to_tool_file_result\"
+	  else
+	    if test -n "$save_libobjs"; then
+	      func_verbose "creating reloadable object files..."
+	      output=$output_objdir/$output_la-$k.$objext
+	      eval test_cmds=\"$reload_cmds\"
+	      func_len " $test_cmds"
+	      len0=$func_len_result
+	      len=$len0
+
+	      # Loop over the list of objects to be linked.
+	      for obj in $save_libobjs
+	      do
+		func_len " $obj"
+		func_arith $len + $func_len_result
+		len=$func_arith_result
+		if test -z "$objlist" ||
+		   test "$len" -lt "$max_cmd_len"; then
+		  func_append objlist " $obj"
+		else
+		  # The command $test_cmds is almost too long, add a
+		  # command to the queue.
+		  if test 1 -eq "$k"; then
+		    # The first file doesn't have a previous command to add.
+		    reload_objs=$objlist
+		    eval concat_cmds=\"$reload_cmds\"
+		  else
+		    # All subsequent reloadable object files will link in
+		    # the last one created.
+		    reload_objs="$objlist $last_robj"
+		    eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\"
+		  fi
+		  last_robj=$output_objdir/$output_la-$k.$objext
+		  func_arith $k + 1
+		  k=$func_arith_result
+		  output=$output_objdir/$output_la-$k.$objext
+		  objlist=" $obj"
+		  func_len " $last_robj"
+		  func_arith $len0 + $func_len_result
+		  len=$func_arith_result
+		fi
+	      done
+	      # Handle the remaining objects by creating one last
+	      # reloadable object file.  All subsequent reloadable object
+	      # files will link in the last one created.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      reload_objs="$objlist $last_robj"
+	      eval concat_cmds=\"\$concat_cmds$reload_cmds\"
+	      if test -n "$last_robj"; then
+	        eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+	      fi
+	      func_append delfiles " $output"
+
+	    else
+	      output=
+	    fi
+
+	    ${skipped_export-false} && {
+	      func_verbose "generating symbol list for '$libname.la'"
+	      export_symbols=$output_objdir/$libname.exp
+	      $opt_dry_run || $RM $export_symbols
+	      libobjs=$output
+	      # Append the command to create the export file.
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
+	      if test -n "$last_robj"; then
+		eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
+	      fi
+	    }
+
+	    test -n "$save_libobjs" &&
+	      func_verbose "creating a temporary reloadable object file: $output"
+
+	    # Loop through the commands generated above and execute them.
+	    save_ifs=$IFS; IFS='~'
+	    for cmd in $concat_cmds; do
+	      IFS=$save_ifs
+	      $opt_quiet || {
+		  func_quote_for_expand "$cmd"
+		  eval "func_echo $func_quote_for_expand_result"
+	      }
+	      $opt_dry_run || eval "$cmd" || {
+		lt_exit=$?
+
+		# Restore the uninstalled library and exit
+		if test relink = "$opt_mode"; then
+		  ( cd "$output_objdir" && \
+		    $RM "${realname}T" && \
+		    $MV "${realname}U" "$realname" )
+		fi
+
+		exit $lt_exit
+	      }
+	    done
+	    IFS=$save_ifs
+
+	    if test -n "$export_symbols_regex" && ${skipped_export-false}; then
+	      func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+
+          ${skipped_export-false} && {
+	    if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	      tmp_export_symbols=$export_symbols
+	      test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols
+	      $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"'
+	    fi
+
+	    if test -n "$orig_export_symbols"; then
+	      # The given exports_symbols file has to be filtered, so filter it.
+	      func_verbose "filter symbol list for '$libname.la' to tag DATA exports"
+	      # FIXME: $output_objdir/$libname.filter potentially contains lots of
+	      # 's' commands, which not all seds can handle. GNU sed should be fine
+	      # though. Also, the filter scales superlinearly with the number of
+	      # global variables. join(1) would be nice here, but unfortunately
+	      # isn't a blessed tool.
+	      $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
+	      func_append delfiles " $export_symbols $output_objdir/$libname.filter"
+	      export_symbols=$output_objdir/$libname.def
+	      $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
+	    fi
+	  }
+
+	  libobjs=$output
+	  # Restore the value of output.
+	  output=$save_output
+
+	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	    test "X$libobjs" = "X " && libobjs=
+	  fi
+	  # Expand the library linking commands again to reset the
+	  # value of $libobjs for piecewise linking.
+
+	  # Do each of the archive commands.
+	  if test yes = "$module" && test -n "$module_cmds"; then
+	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
+	      cmds=$module_expsym_cmds
+	    else
+	      cmds=$module_cmds
+	    fi
+	  else
+	    if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	      cmds=$archive_expsym_cmds
+	    else
+	      cmds=$archive_cmds
+	    fi
+	  fi
+	fi
+
+	if test -n "$delfiles"; then
+	  # Append the command to remove temporary files to $cmds.
+	  eval cmds=\"\$cmds~\$RM $delfiles\"
+	fi
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop=$output_objdir/${outputname}x
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append libobjs " $func_extract_archives_result"
+	  test "X$libobjs" = "X " && libobjs=
+	fi
+
+	save_ifs=$IFS; IFS='~'
+	for cmd in $cmds; do
+	  IFS=$sp$nl
+	  eval cmd=\"$cmd\"
+	  IFS=$save_ifs
+	  $opt_quiet || {
+	    func_quote_for_expand "$cmd"
+	    eval "func_echo $func_quote_for_expand_result"
+	  }
+	  $opt_dry_run || eval "$cmd" || {
+	    lt_exit=$?
+
+	    # Restore the uninstalled library and exit
+	    if test relink = "$opt_mode"; then
+	      ( cd "$output_objdir" && \
+	        $RM "${realname}T" && \
+		$MV "${realname}U" "$realname" )
+	    fi
+
+	    exit $lt_exit
+	  }
+	done
+	IFS=$save_ifs
+
+	# Restore the uninstalled library and exit
+	if test relink = "$opt_mode"; then
+	  $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
+
+	  if test -n "$convenience"; then
+	    if test -z "$whole_archive_flag_spec"; then
+	      func_show_eval '${RM}r "$gentop"'
+	    fi
+	  fi
+
+	  exit $EXIT_SUCCESS
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test yes = "$module" || test yes = "$export_dynamic"; then
+	  # On all known operating systems, these are identical.
+	  dlname=$soname
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then
+	func_warning "'-dlopen' is ignored for objects"
+      fi
+
+      case " $deplibs" in
+      *\ -l* | *\ -L*)
+	func_warning "'-l' and '-L' are ignored for objects" ;;
+      esac
+
+      test -n "$rpath" && \
+	func_warning "'-rpath' is ignored for objects"
+
+      test -n "$xrpath" && \
+	func_warning "'-R' is ignored for objects"
+
+      test -n "$vinfo" && \
+	func_warning "'-version-info' is ignored for objects"
+
+      test -n "$release" && \
+	func_warning "'-release' is ignored for objects"
+
+      case $output in
+      *.lo)
+	test -n "$objs$old_deplibs" && \
+	  func_fatal_error "cannot build library object '$output' from non-libtool objects"
+
+	libobj=$output
+	func_lo2o "$libobj"
+	obj=$func_lo2o_result
+	;;
+      *)
+	libobj=
+	obj=$output
+	;;
+      esac
+
+      # Delete the old objects.
+      $opt_dry_run || $RM $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # if reload_cmds runs $LD directly, get rid of -Wl from
+      # whole_archive_flag_spec and hope we can get by with turning comma
+      # into space.
+      case $reload_cmds in
+        *\$LD[\ \$]*) wl= ;;
+      esac
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
+	  test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'`
+	  reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags
+	else
+	  gentop=$output_objdir/${obj}x
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $convenience
+	  reload_conv_objs="$reload_objs $func_extract_archives_result"
+	fi
+      fi
+
+      # If we're not building shared, we need to use non_pic_objs
+      test yes = "$build_libtool_libs" || libobjs=$non_pic_objects
+
+      # Create the old-style object.
+      reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs
+
+      output=$obj
+      func_execute_cmds "$reload_cmds" 'exit $?'
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      test yes = "$build_libtool_libs" || {
+	if test -n "$gentop"; then
+	  func_show_eval '${RM}r "$gentop"'
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	# $show "echo timestamp > $libobj"
+	# $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
+	exit $EXIT_SUCCESS
+      }
+
+      if test -n "$pic_flag" || test default != "$pic_mode"; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output=$libobj
+	func_execute_cmds "$reload_cmds" 'exit $?'
+      fi
+
+      if test -n "$gentop"; then
+	func_show_eval '${RM}r "$gentop"'
+      fi
+
+      exit $EXIT_SUCCESS
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) func_stripname '' '.exe' "$output"
+	          output=$func_stripname_result.exe;;
+      esac
+      test -n "$vinfo" && \
+	func_warning "'-version-info' is ignored for programs"
+
+      test -n "$release" && \
+	func_warning "'-release' is ignored for programs"
+
+      $preload \
+	&& test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \
+	&& func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support."
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'`
+	;;
+      esac
+
+      case $host in
+      *-*-darwin*)
+	# Don't allow lazy linking, it breaks C++ global constructors
+	# But is supposedly fixed on 10.4 or later (yay!).
+	if test CXX = "$tagname"; then
+	  case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
+	    10.[0123])
+	      func_append compile_command " $wl-bind_at_load"
+	      func_append finalize_command " $wl-bind_at_load"
+	    ;;
+	  esac
+	fi
+	# Time to change all our "foo.ltframework" stuff back to "-framework foo"
+	compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'`
+	;;
+      esac
+
+
+      # move library search paths that coincide with paths to not yet
+      # installed libraries to the beginning of the library search list
+      new_libs=
+      for path in $notinst_path; do
+	case " $new_libs " in
+	*" -L$path/$objdir "*) ;;
+	*)
+	  case " $compile_deplibs " in
+	  *" -L$path/$objdir "*)
+	    func_append new_libs " -L$path/$objdir" ;;
+	  esac
+	  ;;
+	esac
+      done
+      for deplib in $compile_deplibs; do
+	case $deplib in
+	-L*)
+	  case " $new_libs " in
+	  *" $deplib "*) ;;
+	  *) func_append new_libs " $deplib" ;;
+	  esac
+	  ;;
+	*) func_append new_libs " $deplib" ;;
+	esac
+      done
+      compile_deplibs=$new_libs
+
+
+      func_append compile_command " $compile_deplibs"
+      func_append finalize_command " $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_rpath " $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs=$libdir
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append perm_rpath " $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
+	  testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'`
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  ::) dllsearchpath=$libdir;;
+	  *) func_append dllsearchpath ":$libdir";;
+	  esac
+	  case :$dllsearchpath: in
+	  *":$testbindir:"*) ;;
+	  ::) dllsearchpath=$testbindir;;
+	  *) func_append dllsearchpath ":$testbindir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir=$hardcode_libdirs
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath=$rpath
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs=$libdir
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		func_append hardcode_libdirs "$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    func_append rpath " $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) func_append finalize_perm_rpath " $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir=$hardcode_libdirs
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      finalize_rpath=$rpath
+
+      if test -n "$libobjs" && test yes = "$build_old_libs"; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+	finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP`
+      fi
+
+      func_generate_dlsyms "$outputname" "@PROGRAM@" false
+
+      # template prelinking step
+      if test -n "$prelink_cmds"; then
+	func_execute_cmds "$prelink_cmds" 'exit $?'
+      fi
+
+      wrappers_required=:
+      case $host in
+      *cegcc* | *mingw32ce*)
+        # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway.
+        wrappers_required=false
+        ;;
+      *cygwin* | *mingw* )
+        test yes = "$build_libtool_libs" || wrappers_required=false
+        ;;
+      *)
+        if test no = "$need_relink" || test yes != "$build_libtool_libs"; then
+          wrappers_required=false
+        fi
+        ;;
+      esac
+      $wrappers_required || {
+	# Replace the output file specification.
+	compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	link_command=$compile_command$compile_rpath
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	exit_status=0
+	func_show_eval "$link_command" 'exit_status=$?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	# Delete the generated files.
+	if test -f "$output_objdir/${outputname}S.$objext"; then
+	  func_show_eval '$RM "$output_objdir/${outputname}S.$objext"'
+	fi
+
+	exit $exit_status
+      }
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    func_append rpath "$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test yes = "$no_install"; then
+	# We don't need to create a wrapper script.
+	link_command=$compile_var$compile_command$compile_rpath
+	# Replace the output file specification.
+	link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$opt_dry_run || $RM $output
+	# Link the executable and exit
+	func_show_eval "$link_command" 'exit $?'
+
+	if test -n "$postlink_cmds"; then
+	  func_to_tool_file "$output"
+	  postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	  func_execute_cmds "$postlink_cmds" 'exit $?'
+	fi
+
+	exit $EXIT_SUCCESS
+      fi
+
+      case $hardcode_action,$fast_install in
+        relink,*)
+	  # Fast installation is not supported
+	  link_command=$compile_var$compile_command$compile_rpath
+	  relink_command=$finalize_var$finalize_command$finalize_rpath
+
+	  func_warning "this platform does not like uninstalled shared libraries"
+	  func_warning "'$output' will be relinked during installation"
+	  ;;
+        *,yes)
+	  link_command=$finalize_var$compile_command$finalize_rpath
+	  relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'`
+          ;;
+	*,no)
+	  link_command=$compile_var$compile_command$compile_rpath
+	  relink_command=$finalize_var$finalize_command$finalize_rpath
+          ;;
+	*,needless)
+	  link_command=$finalize_var$compile_command$finalize_rpath
+	  relink_command=
+          ;;
+      esac
+
+      # Replace the output file specification.
+      link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      func_show_eval "$link_command" 'exit $?'
+
+      if test -n "$postlink_cmds"; then
+	func_to_tool_file "$output_objdir/$outputname"
+	postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'`
+	func_execute_cmds "$postlink_cmds" 'exit $?'
+      fi
+
+      # Now create the wrapper script.
+      func_verbose "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    func_quote_for_eval "$var_value"
+	    relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	  fi
+	done
+	relink_command="(cd `pwd`; $relink_command)"
+	relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if not in dry run mode.
+      $opt_dry_run || {
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) func_stripname '' '.exe' "$output"
+	         output=$func_stripname_result ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*)
+	    exeext=.exe
+	    func_stripname '' '.exe' "$outputname"
+	    outputname=$func_stripname_result ;;
+	  *) exeext= ;;
+	esac
+	case $host in
+	  *cygwin* | *mingw* )
+	    func_dirname_and_basename "$output" "" "."
+	    output_name=$func_basename_result
+	    output_path=$func_dirname_result
+	    cwrappersource=$output_path/$objdir/lt-$output_name.c
+	    cwrapper=$output_path/$output_name.exe
+	    $RM $cwrappersource $cwrapper
+	    trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_cwrapperexe_src > $cwrappersource
+
+	    # The wrapper executable is built using the $host compiler,
+	    # because it contains $host paths and files. If cross-
+	    # compiling, it, like the target executable, must be
+	    # executed on the $host or under an emulation environment.
+	    $opt_dry_run || {
+	      $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
+	      $STRIP $cwrapper
+	    }
+
+	    # Now, create the wrapper script for func_source use:
+	    func_ltwrapper_scriptname $cwrapper
+	    $RM $func_ltwrapper_scriptname_result
+	    trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
+	    $opt_dry_run || {
+	      # note: this script will not be executed, so do not chmod.
+	      if test "x$build" = "x$host"; then
+		$cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
+	      else
+		func_emit_wrapper no > $func_ltwrapper_scriptname_result
+	      fi
+	    }
+	  ;;
+	  * )
+	    $RM $output
+	    trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
+
+	    func_emit_wrapper no > $output
+	    chmod +x $output
+	  ;;
+	esac
+      }
+      exit $EXIT_SUCCESS
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      case $build_libtool_libs in
+        convenience)
+	  oldobjs="$libobjs_save $symfileobj"
+	  addlibs=$convenience
+	  build_libtool_libs=no
+	  ;;
+	module)
+	  oldobjs=$libobjs_save
+	  addlibs=$old_convenience
+	  build_libtool_libs=no
+          ;;
+	*)
+	  oldobjs="$old_deplibs $non_pic_objects"
+	  $preload && test -f "$symfileobj" \
+	    && func_append oldobjs " $symfileobj"
+	  addlibs=$old_convenience
+	  ;;
+      esac
+
+      if test -n "$addlibs"; then
+	gentop=$output_objdir/${outputname}x
+	func_append generated " $gentop"
+
+	func_extract_archives $gentop $addlibs
+	func_append oldobjs " $func_extract_archives_result"
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then
+	cmds=$old_archive_from_new_cmds
+      else
+
+	# Add any objects from preloaded convenience libraries
+	if test -n "$dlprefiles"; then
+	  gentop=$output_objdir/${outputname}x
+	  func_append generated " $gentop"
+
+	  func_extract_archives $gentop $dlprefiles
+	  func_append oldobjs " $func_extract_archives_result"
+	fi
+
+	# POSIX demands no paths to be encoded in archives.  We have
+	# to avoid creating archives with duplicate basenames if we
+	# might have to extract them afterwards, e.g., when creating a
+	# static archive out of a convenience library, or when linking
+	# the entirety of a libtool archive into another (currently
+	# not supported by libtool).
+	if (for obj in $oldobjs
+	    do
+	      func_basename "$obj"
+	      $ECHO "$func_basename_result"
+	    done | sort | sort -uc >/dev/null 2>&1); then
+	  :
+	else
+	  echo "copying selected object files to avoid basename conflicts..."
+	  gentop=$output_objdir/${outputname}x
+	  func_append generated " $gentop"
+	  func_mkdir_p "$gentop"
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  counter=1
+	  for obj in $save_oldobjs
+	  do
+	    func_basename "$obj"
+	    objbase=$func_basename_result
+	    case " $oldobjs " in
+	    " ") oldobjs=$obj ;;
+	    *[\ /]"$objbase "*)
+	      while :; do
+		# Make sure we don't pick an alternate name that also
+		# overlaps.
+		newobj=lt$counter-$objbase
+		func_arith $counter + 1
+		counter=$func_arith_result
+		case " $oldobjs " in
+		*[\ /]"$newobj "*) ;;
+		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
+		esac
+	      done
+	      func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
+	      func_append oldobjs " $gentop/$newobj"
+	      ;;
+	    *) func_append oldobjs " $obj" ;;
+	    esac
+	  done
+	fi
+	func_to_tool_file "$oldlib" func_convert_file_msys_to_w32
+	tool_oldlib=$func_to_tool_file_result
+	eval cmds=\"$old_archive_cmds\"
+
+	func_len " $cmds"
+	len=$func_len_result
+	if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
+	  cmds=$old_archive_cmds
+	elif test -n "$archiver_list_spec"; then
+	  func_verbose "using command file archive linking..."
+	  for obj in $oldobjs
+	  do
+	    func_to_tool_file "$obj"
+	    $ECHO "$func_to_tool_file_result"
+	  done > $output_objdir/$libname.libcmd
+	  func_to_tool_file "$output_objdir/$libname.libcmd"
+	  oldobjs=" $archiver_list_spec$func_to_tool_file_result"
+	  cmds=$old_archive_cmds
+	else
+	  # the command line is too long to link in one step, link in parts
+	  func_verbose "using piecewise archive linking..."
+	  save_RANLIB=$RANLIB
+	  RANLIB=:
+	  objlist=
+	  concat_cmds=
+	  save_oldobjs=$oldobjs
+	  oldobjs=
+	  # Is there a better way of finding the last object in the list?
+	  for obj in $save_oldobjs
+	  do
+	    last_oldobj=$obj
+	  done
+	  eval test_cmds=\"$old_archive_cmds\"
+	  func_len " $test_cmds"
+	  len0=$func_len_result
+	  len=$len0
+	  for obj in $save_oldobjs
+	  do
+	    func_len " $obj"
+	    func_arith $len + $func_len_result
+	    len=$func_arith_result
+	    func_append objlist " $obj"
+	    if test "$len" -lt "$max_cmd_len"; then
+	      :
+	    else
+	      # the above command should be used before it gets too long
+	      oldobjs=$objlist
+	      if test "$obj" = "$last_oldobj"; then
+		RANLIB=$save_RANLIB
+	      fi
+	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
+	      eval concat_cmds=\"\$concat_cmds$old_archive_cmds\"
+	      objlist=
+	      len=$len0
+	    fi
+	  done
+	  RANLIB=$save_RANLIB
+	  oldobjs=$objlist
+	  if test -z "$oldobjs"; then
+	    eval cmds=\"\$concat_cmds\"
+	  else
+	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
+	  fi
+	fi
+      fi
+      func_execute_cmds "$cmds" 'exit $?'
+    done
+
+    test -n "$generated" && \
+      func_show_eval "${RM}r$generated"
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test yes = "$build_old_libs" && old_library=$libname.$libext
+      func_verbose "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  func_quote_for_eval "$var_value"
+	  relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+      if test yes = "$hardcode_automatic"; then
+	relink_command=
+      fi
+
+      # Only create the output if not a dry run.
+      $opt_dry_run || {
+	for installed in no yes; do
+	  if test yes = "$installed"; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output=$output_objdir/${outputname}i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		func_basename "$deplib"
+		name=$func_basename_result
+		func_resolve_sysroot "$deplib"
+		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result`
+		test -z "$libdir" && \
+		  func_fatal_error "'$deplib' is not a valid libtool archive"
+		func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      -L*)
+		func_stripname -L '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -L$func_replace_sysroot_result"
+		;;
+	      -R*)
+		func_stripname -R '' "$deplib"
+		func_replace_sysroot "$func_stripname_result"
+		func_append newdependency_libs " -R$func_replace_sysroot_result"
+		;;
+	      *) func_append newdependency_libs " $deplib" ;;
+	      esac
+	    done
+	    dependency_libs=$newdependency_libs
+	    newdlfiles=
+
+	    for lib in $dlfiles; do
+	      case $lib in
+	      *.la)
+	        func_basename "$lib"
+		name=$func_basename_result
+		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "'$lib' is not a valid libtool archive"
+		func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      *) func_append newdlfiles " $lib" ;;
+	      esac
+	    done
+	    dlfiles=$newdlfiles
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+	      *.la)
+		# Only pass preopened files to the pseudo-archive (for
+		# eventual linking with the app. that links it) if we
+		# didn't already link the preopened objects directly into
+		# the library:
+		func_basename "$lib"
+		name=$func_basename_result
+		eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+		test -z "$libdir" && \
+		  func_fatal_error "'$lib' is not a valid libtool archive"
+		func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name"
+		;;
+	      esac
+	    done
+	    dlprefiles=$newdlprefiles
+	  else
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlfiles " $abs"
+	    done
+	    dlfiles=$newdlfiles
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      case $lib in
+		[\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;;
+		*) abs=`pwd`"/$lib" ;;
+	      esac
+	      func_append newdlprefiles " $abs"
+	    done
+	    dlprefiles=$newdlprefiles
+	  fi
+	  $RM $output
+	  # place dlname in correct position for cygwin
+	  # In fact, it would be nice if we could use this code for all target
+	  # systems that can't hard-code library paths into their executables
+	  # and that have no shared library path variable independent of PATH,
+	  # but it turns out we can't easily determine that from inspecting
+	  # libtool variables, so we have to hard-code the OSs to which it
+	  # applies here; at the moment, that means platforms that use the PE
+	  # object format with DLL files.  See the long comment at the top of
+	  # tests/bindir.at for full details.
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll)
+	      # If a -bindir argument was supplied, place the dll there.
+	      if test -n "$bindir"; then
+		func_relative_path "$install_libdir" "$bindir"
+		tdlname=$func_relative_path_result/$dlname
+	      else
+		# Otherwise fall back on heuristic.
+		tdlname=../bin/$dlname
+	      fi
+	      ;;
+	  esac
+	  $ECHO > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM (GNU $PACKAGE) $VERSION
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Linker flags that cannot go in dependency_libs.
+inherited_linker_flags='$new_inherited_linker_flags'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Names of additional weak libraries provided by this library
+weak_library_names='$weak_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Should we warn about portability when linking against -modules?
+shouldnotlink=$module
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test no,yes = "$installed,$need_relink"; then
+	    $ECHO >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      }
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
+      ;;
+    esac
+    exit $EXIT_SUCCESS
+}
+
+if test link = "$opt_mode" || test relink = "$opt_mode"; then
+  func_mode_link ${1+"$@"}
+fi
+
+
+# func_mode_uninstall arg...
+func_mode_uninstall ()
+{
+    $debug_cmd
+
+    RM=$nonopt
+    files=
+    rmforce=false
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic=$magic
+
+    for arg
+    do
+      case $arg in
+      -f) func_append RM " $arg"; rmforce=: ;;
+      -*) func_append RM " $arg" ;;
+      *) func_append files " $arg" ;;
+      esac
+    done
+
+    test -z "$RM" && \
+      func_fatal_help "you must specify an RM program"
+
+    rmdirs=
+
+    for file in $files; do
+      func_dirname "$file" "" "."
+      dir=$func_dirname_result
+      if test . = "$dir"; then
+	odir=$objdir
+      else
+	odir=$dir/$objdir
+      fi
+      func_basename "$file"
+      name=$func_basename_result
+      test uninstall = "$opt_mode" && odir=$dir
+
+      # Remember odir for removal later, being careful to avoid duplicates
+      if test clean = "$opt_mode"; then
+	case " $rmdirs " in
+	  *" $odir "*) ;;
+	  *) func_append rmdirs " $odir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if { test -L "$file"; } >/dev/null 2>&1 ||
+	 { test -h "$file"; } >/dev/null 2>&1 ||
+	 test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif $rmforce; then
+	continue
+      fi
+
+      rmfiles=$file
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if func_lalib_p "$file"; then
+	  func_source $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    func_append rmfiles " $odir/$n"
+	  done
+	  test -n "$old_library" && func_append rmfiles " $odir/$old_library"
+
+	  case $opt_mode in
+	  clean)
+	    case " $library_names " in
+	    *" $dlname "*) ;;
+	    *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;;
+	    esac
+	    test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i"
+	    ;;
+	  uninstall)
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1'
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1'
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	    ;;
+	  esac
+	fi
+	;;
+
+      *.lo)
+	# Possibly a libtool object, so verify it.
+	if func_lalib_p "$file"; then
+
+	  # Read the .lo file
+	  func_source $dir/$name
+
+	  # Add PIC object to the list of files to remove.
+	  if test -n "$pic_object" && test none != "$pic_object"; then
+	    func_append rmfiles " $dir/$pic_object"
+	  fi
+
+	  # Add non-PIC object to the list of files to remove.
+	  if test -n "$non_pic_object" && test none != "$non_pic_object"; then
+	    func_append rmfiles " $dir/$non_pic_object"
+	  fi
+	fi
+	;;
+
+      *)
+	if test clean = "$opt_mode"; then
+	  noexename=$name
+	  case $file in
+	  *.exe)
+	    func_stripname '' '.exe' "$file"
+	    file=$func_stripname_result
+	    func_stripname '' '.exe' "$name"
+	    noexename=$func_stripname_result
+	    # $file with .exe has already been added to rmfiles,
+	    # add $file without .exe
+	    func_append rmfiles " $file"
+	    ;;
+	  esac
+	  # Do a test to see if this is a libtool program.
+	  if func_ltwrapper_p "$file"; then
+	    if func_ltwrapper_executable_p "$file"; then
+	      func_ltwrapper_scriptname "$file"
+	      relink_command=
+	      func_source $func_ltwrapper_scriptname_result
+	      func_append rmfiles " $func_ltwrapper_scriptname_result"
+	    else
+	      relink_command=
+	      func_source $dir/$noexename
+	    fi
+
+	    # note $name still contains .exe if it was in $file originally
+	    # as does the version of $file that was added into $rmfiles
+	    func_append rmfiles " $odir/$name $odir/${name}S.$objext"
+	    if test yes = "$fast_install" && test -n "$relink_command"; then
+	      func_append rmfiles " $odir/lt-$name"
+	    fi
+	    if test "X$noexename" != "X$name"; then
+	      func_append rmfiles " $odir/lt-$noexename.c"
+	    fi
+	  fi
+	fi
+	;;
+      esac
+      func_show_eval "$RM $rmfiles" 'exit_status=1'
+    done
+
+    # Try to remove the $objdir's in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	func_show_eval "rmdir $dir >/dev/null 2>&1"
+      fi
+    done
+
+    exit $exit_status
+}
+
+if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then
+  func_mode_uninstall ${1+"$@"}
+fi
+
+test -z "$opt_mode" && {
+  help=$generic_help
+  func_fatal_help "you must specify a MODE"
+}
+
+test -z "$exec_cmd" && \
+  func_fatal_help "invalid operation mode '$opt_mode'"
+
+if test -n "$exec_cmd"; then
+  eval exec "$exec_cmd"
+  exit $EXIT_FAILURE
+fi
+
+exit $exit_status
+
+
+# The TAGs below are defined such that we never get into a situation
+# where we disable both kinds of libraries.  Given conflicting
+# choices, we go for a static library, that is the most portable,
+# since we can't tell whether shared libraries were disabled because
+# the user asked for that or because the platform doesn't support
+# them.  This is particularly important on AIX, because we don't
+# support having both static and shared libraries enabled at the same
+# time on that platform, so we default to a shared-only configuration.
+# If a disable-shared tag is given, we'll fallback to a static-only
+# configuration.  But we'll never go from static-only to shared-only.
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
+build_libtool_libs=no
+build_old_libs=yes
+# ### END LIBTOOL TAG CONFIG: disable-shared
+
+# ### BEGIN LIBTOOL TAG CONFIG: disable-static
+build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
+# ### END LIBTOOL TAG CONFIG: disable-static
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:
diff --git a/scripts/missing b/scripts/missing
new file mode 100755
index 0000000..f62bbae
--- /dev/null
+++ b/scripts/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2013-10-28.13; # UTC
+
+# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# 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.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try '$0 --help' for more information"
+  exit 1
+fi
+
+case $1 in
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
+
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake at gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
+    ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/scripts/test-driver b/scripts/test-driver
new file mode 100755
index 0000000..8e575b0
--- /dev/null
+++ b/scripts/test-driver
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2013-07-13.22; # UTC
+
+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# 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.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake at gnu.org> or send patches to
+# <automake-patches at gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='' # Red.
+  grn='' # Green.
+  lgn='' # Light green.
+  blu='' # Blue.
+  mgn='' # Magenta.
+  std=''     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  tweaked_estatus=1
+else
+  tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..e715f42
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,24 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+# adding . to the list of SUBDIRS causes the directories built before .
+# This is useful for "make -j" option, as libs should be built after all
+# sub-libraries
+SUBDIRS = include dispatchers drivers binding packaging . libs utils
+DIST_SUBDIRS = include dispatchers drivers binding packaging libs utils
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       if [ "$$d" = "." ] ; then \
+	          continue ; \
+	       fi ; \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
diff --git a/src/Makefile.in b/src/Makefile.in
index 6efc3a8..5f8b3f0 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,55 +1,731 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2676 2016-12-05 03:11:14Z wkliao $
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# adding . to the list of SUBDIRS causes the directories built before .
+# This is useful for "make -j" option, as libs should be built after all
+# sub-libraries
+SUBDIRS = include dispatchers drivers binding packaging . libs utils
+DIST_SUBDIRS = include dispatchers drivers binding packaging libs utils
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
 
-include ../macros.make
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
 
-OPT_DIRS =
-ifeq (@has_mpicxx@, yes)
-   OPT_DIRS += libcxx
-endif
-ifeq (@has_fortran@, yes)
-   OPT_DIRS += libf
-   OPT_DIRS += libf90
-endif
-OBJ_SUBDIRS = lib $(OPT_DIRS)
+pdf: pdf-recursive
 
-SUBDIRS = $(OBJ_SUBDIRS) utils
+pdf-am:
 
-PACKING_LIST = Makefile.in
+ps: ps-recursive
 
-PACKING_SUBDIRS = lib libcxx libf libf90 utils
+ps-am:
 
-all: $(OBJ_SUBDIRS) library utils
+tests: tests-recursive
 
-$(OBJ_SUBDIRS):
-	$(MAKE) $(MFLAGS) -C $@ objs
+tests-am: tests-local
 
-library: $(OBJ_SUBDIRS)
-	@set -e; for i in $(OBJ_SUBDIRS); do ( $(MAKE) $(MFLAGS) -C $$i library; ) ; done
+uninstall-am:
 
-# utils must be built after lib
-utils: library
-	$(MAKE) $(MFLAGS) -C utils
+.MAKE: $(am__recursive_targets) install-am install-strip
 
-INSTALL_SUBDIRS = $(SUBDIRS)
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-generic distclean-libtool \
+	distclean-local distclean-tags distdir dvi dvi-am html html-am \
+	info info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am
 
-INSTALLDIRS = $(INSTALL_SUBDIRS:%=install-%)
-install: $(INSTALLDIRS)
-$(INSTALLDIRS): all
-	$(MAKE) $(MFLAGS) -C $(@:install-%=%) install
+.PRECIOUS: Makefile
 
-UNINSTALLDIRS = $(INSTALL_SUBDIRS:%=uninstall-%)
-uninstall: $(UNINSTALLDIRS)
-$(UNINSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:uninstall-%=%) uninstall
 
-include $(srcdir)/../rules.make
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       if [ "$$d" = "." ] ; then \
+	          continue ; \
+	       fi ; \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/binding/Makefile.am b/src/binding/Makefile.am
new file mode 100644
index 0000000..2d94af9
--- /dev/null
+++ b/src/binding/Makefile.am
@@ -0,0 +1,25 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2749 2016-12-28 17:51:37Z wkliao $
+#
+# @configure_input@
+
+SUBDIRS =
+if HAS_MPICXX
+SUBDIRS += cxx
+endif
+if HAS_FORTRAN
+SUBDIRS += f77 f90
+endif
+
+DIST_SUBDIRS = cxx f77 f90
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
diff --git a/src/binding/Makefile.in b/src/binding/Makefile.in
new file mode 100644
index 0000000..c574ad6
--- /dev/null
+++ b/src/binding/Makefile.in
@@ -0,0 +1,726 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2749 2016-12-28 17:51:37Z wkliao $
+#
+# @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at HAS_MPICXX_TRUE@am__append_1 = cxx
+ at HAS_FORTRAN_TRUE@am__append_2 = f77 f90
+subdir = src/binding
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = $(am__append_1) $(am__append_2)
+DIST_SUBDIRS = cxx f77 f90
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/binding/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/binding/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+tests: tests-recursive
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-generic distclean-libtool \
+	distclean-local distclean-tags distdir dvi dvi-am html html-am \
+	info info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/binding/cxx/Makefile.am b/src/binding/cxx/Makefile.am
new file mode 100755
index 0000000..03e01e3
--- /dev/null
+++ b/src/binding/cxx/Makefile.am
@@ -0,0 +1,67 @@
+#
+# Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .cpp .hpp
+
+AM_CPPFLAGS = -I$(top_builddir)/src/include
+
+if SEEK_SET_REDEFINED
+AM_CPPFLAGS += -DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX
+endif
+
+CXX_HEADER = pnetcdf
+
+nodist_include_HEADERS = $(CXX_HEADER)
+
+noinst_LTLIBRARIES = libcxx.la
+
+# Note the file order is important
+HPP_FILES = ncmpi_notyet.h \
+            ncmpiCheck.h \
+            ncmpiType.h \
+            ncmpiAtt.h \
+            ncmpiEnumType.h \
+            ncmpiGroupAtt.h \
+            ncmpiGroup.h \
+            ncmpiByte.h \
+            ncmpiChar.h \
+            ncmpiCompoundType.h \
+            ncmpiDouble.h \
+            ncmpiFloat.h \
+            ncmpiInt.h \
+            ncmpiInt64.h \
+            ncmpiOpaqueType.h \
+            ncmpiShort.h \
+            ncmpiUbyte.h \
+            ncmpiUint.h \
+            ncmpiUint64.h \
+            ncmpiUshort.h \
+            ncmpiException.h \
+            ncmpiDim.h \
+            ncmpiFile.h \
+            ncmpiVarAtt.h \
+            ncmpiVar.h \
+            ncmpiVlenType.h
+
+LIB_SRCS   = $(HPP_FILES:.h=.cpp)
+libcxx_la_SOURCES = $(LIB_SRCS) $(HPP_FILES)
+nodist_libcxx_la_SOURCES = $(CXX_HEADER)
+BUILT_SOURCES = $(CXX_HEADER)
+
+EXTRA_DIST = pnetcdf.in
+
+CLEANFILES = $(CXX_HEADER) *.gcno
+
+$(CXX_HEADER): $(HPP_FILES) Makefile
+	cat $(srcdir)/pnetcdf.in >$@
+	set -e; for i in $(HPP_FILES); do ( \
+	$(SED) -e '/#ifndef/d' -e '/#define/d' -e '/#endif/d' -e '/#include/d' $(srcdir)/$$i >> $@ ; \
+	) ; done
+
+tests-local: all
+
diff --git a/src/binding/cxx/Makefile.in b/src/binding/cxx/Makefile.in
new file mode 100644
index 0000000..48847dd
--- /dev/null
+++ b/src/binding/cxx/Makefile.in
@@ -0,0 +1,843 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at SEEK_SET_REDEFINED_TRUE@am__append_1 = -DMPICH_IGNORE_CXX_SEEK -DMPICH_SKIP_MPICXX
+subdir = src/binding/cxx
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcxx_la_LIBADD =
+am__objects_1 = ncmpi_notyet.lo ncmpiCheck.lo ncmpiType.lo ncmpiAtt.lo \
+	ncmpiEnumType.lo ncmpiGroupAtt.lo ncmpiGroup.lo ncmpiByte.lo \
+	ncmpiChar.lo ncmpiCompoundType.lo ncmpiDouble.lo ncmpiFloat.lo \
+	ncmpiInt.lo ncmpiInt64.lo ncmpiOpaqueType.lo ncmpiShort.lo \
+	ncmpiUbyte.lo ncmpiUint.lo ncmpiUint64.lo ncmpiUshort.lo \
+	ncmpiException.lo ncmpiDim.lo ncmpiFile.lo ncmpiVarAtt.lo \
+	ncmpiVar.lo ncmpiVlenType.lo
+am__objects_2 = $(am__objects_1)
+am__objects_3 =
+am_libcxx_la_OBJECTS = $(am__objects_2) $(am__objects_3)
+nodist_libcxx_la_OBJECTS = $(am__objects_3)
+libcxx_la_OBJECTS = $(am_libcxx_la_OBJECTS) \
+	$(nodist_libcxx_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libcxx_la_SOURCES) $(nodist_libcxx_la_SOURCES)
+DIST_SOURCES = $(libcxx_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(nodist_include_HEADERS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .cpp .hpp
+AM_CPPFLAGS = -I$(top_builddir)/src/include $(am__append_1)
+CXX_HEADER = pnetcdf
+nodist_include_HEADERS = $(CXX_HEADER)
+noinst_LTLIBRARIES = libcxx.la
+
+# Note the file order is important
+HPP_FILES = ncmpi_notyet.h \
+            ncmpiCheck.h \
+            ncmpiType.h \
+            ncmpiAtt.h \
+            ncmpiEnumType.h \
+            ncmpiGroupAtt.h \
+            ncmpiGroup.h \
+            ncmpiByte.h \
+            ncmpiChar.h \
+            ncmpiCompoundType.h \
+            ncmpiDouble.h \
+            ncmpiFloat.h \
+            ncmpiInt.h \
+            ncmpiInt64.h \
+            ncmpiOpaqueType.h \
+            ncmpiShort.h \
+            ncmpiUbyte.h \
+            ncmpiUint.h \
+            ncmpiUint64.h \
+            ncmpiUshort.h \
+            ncmpiException.h \
+            ncmpiDim.h \
+            ncmpiFile.h \
+            ncmpiVarAtt.h \
+            ncmpiVar.h \
+            ncmpiVlenType.h
+
+LIB_SRCS = $(HPP_FILES:.h=.cpp)
+libcxx_la_SOURCES = $(LIB_SRCS) $(HPP_FILES)
+nodist_libcxx_la_SOURCES = $(CXX_HEADER)
+BUILT_SOURCES = $(CXX_HEADER)
+EXTRA_DIST = pnetcdf.in
+CLEANFILES = $(CXX_HEADER) *.gcno
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .cpp .hpp .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/binding/cxx/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/binding/cxx/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libcxx.la: $(libcxx_la_OBJECTS) $(libcxx_la_DEPENDENCIES) $(EXTRA_libcxx_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(CXXLINK)  $(libcxx_la_OBJECTS) $(libcxx_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiAtt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiByte.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiChar.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiCheck.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiCompoundType.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiDim.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiDouble.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiEnumType.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiException.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiFile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiFloat.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiGroup.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiGroupAtt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiInt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiInt64.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiOpaqueType.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiShort.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiType.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiUbyte.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiUint.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiUint64.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiUshort.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiVar.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiVarAtt.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpiVlenType.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpi_notyet.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-nodist_includeHEADERS: $(nodist_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+	done
+
+uninstall-nodist_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-nodist_includeHEADERS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-nodist_includeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags tags-am tests-am tests-local \
+	uninstall uninstall-am uninstall-nodist_includeHEADERS
+
+.PRECIOUS: Makefile
+
+
+$(CXX_HEADER): $(HPP_FILES) Makefile
+	cat $(srcdir)/pnetcdf.in >$@
+	set -e; for i in $(HPP_FILES); do ( \
+	$(SED) -e '/#ifndef/d' -e '/#define/d' -e '/#endif/d' -e '/#include/d' $(srcdir)/$$i >> $@ ; \
+	) ; done
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/libcxx/ncmpiAtt.cpp b/src/binding/cxx/ncmpiAtt.cpp
similarity index 100%
rename from src/libcxx/ncmpiAtt.cpp
rename to src/binding/cxx/ncmpiAtt.cpp
diff --git a/src/libcxx/ncmpiAtt.h b/src/binding/cxx/ncmpiAtt.h
similarity index 100%
rename from src/libcxx/ncmpiAtt.h
rename to src/binding/cxx/ncmpiAtt.h
diff --git a/src/libcxx/ncmpiByte.cpp b/src/binding/cxx/ncmpiByte.cpp
similarity index 100%
rename from src/libcxx/ncmpiByte.cpp
rename to src/binding/cxx/ncmpiByte.cpp
diff --git a/src/libcxx/ncmpiByte.h b/src/binding/cxx/ncmpiByte.h
similarity index 100%
rename from src/libcxx/ncmpiByte.h
rename to src/binding/cxx/ncmpiByte.h
diff --git a/src/libcxx/ncmpiChar.cpp b/src/binding/cxx/ncmpiChar.cpp
similarity index 100%
rename from src/libcxx/ncmpiChar.cpp
rename to src/binding/cxx/ncmpiChar.cpp
diff --git a/src/libcxx/ncmpiChar.h b/src/binding/cxx/ncmpiChar.h
similarity index 100%
rename from src/libcxx/ncmpiChar.h
rename to src/binding/cxx/ncmpiChar.h
diff --git a/src/libcxx/ncmpiCheck.cpp b/src/binding/cxx/ncmpiCheck.cpp
similarity index 99%
rename from src/libcxx/ncmpiCheck.cpp
rename to src/binding/cxx/ncmpiCheck.cpp
index c9d3793..b9314e8 100644
--- a/src/libcxx/ncmpiCheck.cpp
+++ b/src/binding/cxx/ncmpiCheck.cpp
@@ -1,6 +1,8 @@
 #include <cstring>
 #include <pnetcdf.h>
 #include "ncmpiException.h"
+#include "ncmpiCheck.h"
+
 using namespace std;
 using namespace PnetCDF::exceptions;
 
diff --git a/src/libcxx/ncmpiCheck.h b/src/binding/cxx/ncmpiCheck.h
similarity index 100%
rename from src/libcxx/ncmpiCheck.h
rename to src/binding/cxx/ncmpiCheck.h
diff --git a/src/libcxx/ncmpiCompoundType.cpp b/src/binding/cxx/ncmpiCompoundType.cpp
similarity index 100%
rename from src/libcxx/ncmpiCompoundType.cpp
rename to src/binding/cxx/ncmpiCompoundType.cpp
diff --git a/src/libcxx/ncmpiCompoundType.h b/src/binding/cxx/ncmpiCompoundType.h
similarity index 100%
rename from src/libcxx/ncmpiCompoundType.h
rename to src/binding/cxx/ncmpiCompoundType.h
diff --git a/src/libcxx/ncmpiDim.cpp b/src/binding/cxx/ncmpiDim.cpp
similarity index 100%
rename from src/libcxx/ncmpiDim.cpp
rename to src/binding/cxx/ncmpiDim.cpp
diff --git a/src/libcxx/ncmpiDim.h b/src/binding/cxx/ncmpiDim.h
similarity index 100%
rename from src/libcxx/ncmpiDim.h
rename to src/binding/cxx/ncmpiDim.h
diff --git a/src/libcxx/ncmpiDouble.cpp b/src/binding/cxx/ncmpiDouble.cpp
similarity index 100%
rename from src/libcxx/ncmpiDouble.cpp
rename to src/binding/cxx/ncmpiDouble.cpp
diff --git a/src/libcxx/ncmpiDouble.h b/src/binding/cxx/ncmpiDouble.h
similarity index 100%
rename from src/libcxx/ncmpiDouble.h
rename to src/binding/cxx/ncmpiDouble.h
diff --git a/src/libcxx/ncmpiEnumType.cpp b/src/binding/cxx/ncmpiEnumType.cpp
similarity index 100%
rename from src/libcxx/ncmpiEnumType.cpp
rename to src/binding/cxx/ncmpiEnumType.cpp
diff --git a/src/libcxx/ncmpiEnumType.h b/src/binding/cxx/ncmpiEnumType.h
similarity index 100%
rename from src/libcxx/ncmpiEnumType.h
rename to src/binding/cxx/ncmpiEnumType.h
diff --git a/src/libcxx/ncmpiException.cpp b/src/binding/cxx/ncmpiException.cpp
similarity index 100%
rename from src/libcxx/ncmpiException.cpp
rename to src/binding/cxx/ncmpiException.cpp
diff --git a/src/libcxx/ncmpiException.h b/src/binding/cxx/ncmpiException.h
similarity index 100%
rename from src/libcxx/ncmpiException.h
rename to src/binding/cxx/ncmpiException.h
diff --git a/src/libcxx/ncmpiFile.cpp b/src/binding/cxx/ncmpiFile.cpp
similarity index 100%
rename from src/libcxx/ncmpiFile.cpp
rename to src/binding/cxx/ncmpiFile.cpp
diff --git a/src/libcxx/ncmpiFile.h b/src/binding/cxx/ncmpiFile.h
similarity index 100%
rename from src/libcxx/ncmpiFile.h
rename to src/binding/cxx/ncmpiFile.h
diff --git a/src/libcxx/ncmpiFloat.cpp b/src/binding/cxx/ncmpiFloat.cpp
similarity index 100%
rename from src/libcxx/ncmpiFloat.cpp
rename to src/binding/cxx/ncmpiFloat.cpp
diff --git a/src/libcxx/ncmpiFloat.h b/src/binding/cxx/ncmpiFloat.h
similarity index 100%
rename from src/libcxx/ncmpiFloat.h
rename to src/binding/cxx/ncmpiFloat.h
diff --git a/src/libcxx/ncmpiGroup.cpp b/src/binding/cxx/ncmpiGroup.cpp
similarity index 100%
rename from src/libcxx/ncmpiGroup.cpp
rename to src/binding/cxx/ncmpiGroup.cpp
diff --git a/src/libcxx/ncmpiGroup.h b/src/binding/cxx/ncmpiGroup.h
similarity index 100%
rename from src/libcxx/ncmpiGroup.h
rename to src/binding/cxx/ncmpiGroup.h
diff --git a/src/libcxx/ncmpiGroupAtt.cpp b/src/binding/cxx/ncmpiGroupAtt.cpp
similarity index 100%
rename from src/libcxx/ncmpiGroupAtt.cpp
rename to src/binding/cxx/ncmpiGroupAtt.cpp
diff --git a/src/libcxx/ncmpiGroupAtt.h b/src/binding/cxx/ncmpiGroupAtt.h
similarity index 100%
rename from src/libcxx/ncmpiGroupAtt.h
rename to src/binding/cxx/ncmpiGroupAtt.h
diff --git a/src/libcxx/ncmpiInt.cpp b/src/binding/cxx/ncmpiInt.cpp
similarity index 100%
rename from src/libcxx/ncmpiInt.cpp
rename to src/binding/cxx/ncmpiInt.cpp
diff --git a/src/libcxx/ncmpiInt.h b/src/binding/cxx/ncmpiInt.h
similarity index 100%
rename from src/libcxx/ncmpiInt.h
rename to src/binding/cxx/ncmpiInt.h
diff --git a/src/libcxx/ncmpiInt64.cpp b/src/binding/cxx/ncmpiInt64.cpp
similarity index 100%
rename from src/libcxx/ncmpiInt64.cpp
rename to src/binding/cxx/ncmpiInt64.cpp
diff --git a/src/libcxx/ncmpiInt64.h b/src/binding/cxx/ncmpiInt64.h
similarity index 100%
rename from src/libcxx/ncmpiInt64.h
rename to src/binding/cxx/ncmpiInt64.h
diff --git a/src/libcxx/ncmpiOpaqueType.cpp b/src/binding/cxx/ncmpiOpaqueType.cpp
similarity index 100%
rename from src/libcxx/ncmpiOpaqueType.cpp
rename to src/binding/cxx/ncmpiOpaqueType.cpp
diff --git a/src/libcxx/ncmpiOpaqueType.h b/src/binding/cxx/ncmpiOpaqueType.h
similarity index 100%
rename from src/libcxx/ncmpiOpaqueType.h
rename to src/binding/cxx/ncmpiOpaqueType.h
diff --git a/src/libcxx/ncmpiShort.cpp b/src/binding/cxx/ncmpiShort.cpp
similarity index 100%
rename from src/libcxx/ncmpiShort.cpp
rename to src/binding/cxx/ncmpiShort.cpp
diff --git a/src/libcxx/ncmpiShort.h b/src/binding/cxx/ncmpiShort.h
similarity index 100%
rename from src/libcxx/ncmpiShort.h
rename to src/binding/cxx/ncmpiShort.h
diff --git a/src/libcxx/ncmpiType.cpp b/src/binding/cxx/ncmpiType.cpp
similarity index 100%
rename from src/libcxx/ncmpiType.cpp
rename to src/binding/cxx/ncmpiType.cpp
diff --git a/src/libcxx/ncmpiType.h b/src/binding/cxx/ncmpiType.h
similarity index 100%
rename from src/libcxx/ncmpiType.h
rename to src/binding/cxx/ncmpiType.h
diff --git a/src/libcxx/ncmpiUbyte.cpp b/src/binding/cxx/ncmpiUbyte.cpp
similarity index 100%
rename from src/libcxx/ncmpiUbyte.cpp
rename to src/binding/cxx/ncmpiUbyte.cpp
diff --git a/src/libcxx/ncmpiUbyte.h b/src/binding/cxx/ncmpiUbyte.h
similarity index 100%
rename from src/libcxx/ncmpiUbyte.h
rename to src/binding/cxx/ncmpiUbyte.h
diff --git a/src/libcxx/ncmpiUint.cpp b/src/binding/cxx/ncmpiUint.cpp
similarity index 100%
rename from src/libcxx/ncmpiUint.cpp
rename to src/binding/cxx/ncmpiUint.cpp
diff --git a/src/libcxx/ncmpiUint.h b/src/binding/cxx/ncmpiUint.h
similarity index 100%
rename from src/libcxx/ncmpiUint.h
rename to src/binding/cxx/ncmpiUint.h
diff --git a/src/libcxx/ncmpiUint64.cpp b/src/binding/cxx/ncmpiUint64.cpp
similarity index 100%
rename from src/libcxx/ncmpiUint64.cpp
rename to src/binding/cxx/ncmpiUint64.cpp
diff --git a/src/libcxx/ncmpiUint64.h b/src/binding/cxx/ncmpiUint64.h
similarity index 100%
rename from src/libcxx/ncmpiUint64.h
rename to src/binding/cxx/ncmpiUint64.h
diff --git a/src/libcxx/ncmpiUshort.cpp b/src/binding/cxx/ncmpiUshort.cpp
similarity index 100%
rename from src/libcxx/ncmpiUshort.cpp
rename to src/binding/cxx/ncmpiUshort.cpp
diff --git a/src/libcxx/ncmpiUshort.h b/src/binding/cxx/ncmpiUshort.h
similarity index 100%
rename from src/libcxx/ncmpiUshort.h
rename to src/binding/cxx/ncmpiUshort.h
diff --git a/src/libcxx/ncmpiVar.cpp b/src/binding/cxx/ncmpiVar.cpp
similarity index 100%
rename from src/libcxx/ncmpiVar.cpp
rename to src/binding/cxx/ncmpiVar.cpp
diff --git a/src/libcxx/ncmpiVar.h b/src/binding/cxx/ncmpiVar.h
similarity index 100%
rename from src/libcxx/ncmpiVar.h
rename to src/binding/cxx/ncmpiVar.h
diff --git a/src/libcxx/ncmpiVarAtt.cpp b/src/binding/cxx/ncmpiVarAtt.cpp
similarity index 100%
rename from src/libcxx/ncmpiVarAtt.cpp
rename to src/binding/cxx/ncmpiVarAtt.cpp
diff --git a/src/libcxx/ncmpiVarAtt.h b/src/binding/cxx/ncmpiVarAtt.h
similarity index 100%
rename from src/libcxx/ncmpiVarAtt.h
rename to src/binding/cxx/ncmpiVarAtt.h
diff --git a/src/libcxx/ncmpiVlenType.cpp b/src/binding/cxx/ncmpiVlenType.cpp
similarity index 100%
rename from src/libcxx/ncmpiVlenType.cpp
rename to src/binding/cxx/ncmpiVlenType.cpp
diff --git a/src/libcxx/ncmpiVlenType.h b/src/binding/cxx/ncmpiVlenType.h
similarity index 100%
rename from src/libcxx/ncmpiVlenType.h
rename to src/binding/cxx/ncmpiVlenType.h
diff --git a/src/libcxx/ncmpi_notyet.cpp b/src/binding/cxx/ncmpi_notyet.cpp
similarity index 63%
rename from src/libcxx/ncmpi_notyet.cpp
rename to src/binding/cxx/ncmpi_notyet.cpp
index be1af0f..58dc2bd 100644
--- a/src/libcxx/ncmpi_notyet.cpp
+++ b/src/binding/cxx/ncmpi_notyet.cpp
@@ -208,111 +208,3 @@ ncmpi_def_var_fletcher32(int ncid, int varid, int fletcher32){std::cout << __fun
  int
 ncmpi_inq_var_fletcher32(int ncid, int varid, int *fletcher32p){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
 
- int
-ncmpi_put_var1_string(int ncid, int varid, const MPI_Offset *indexp,
-                   const char **op){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_get_var1_string(int ncid, int varid, const MPI_Offset *indexp,
-                   char **ip){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_put_var_string(int ncid, int varid,
-                   const char **op){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_get_var_string(int ncid, int varid,
-                   char **ip){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_put_vara_string(int ncid, int varid, const MPI_Offset *startp,
-                   const MPI_Offset *countp,
-                   const char **op){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_get_vara_string(int ncid, int varid, const MPI_Offset *startp,
-                   const MPI_Offset *countp,
-                   char **ip){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_put_vars_string(int ncid, int varid, const MPI_Offset *startp,
-                   const MPI_Offset *countp, const MPI_Offset *stridep,
-                   const char **op){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_get_vars_string(int ncid, int varid, const MPI_Offset *startp,
-                   const MPI_Offset *countp, const MPI_Offset *stridep,
-                   char **ip){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_put_varm_string(int ncid, int varid, const MPI_Offset *startp,
-                   const MPI_Offset *countp, const MPI_Offset *stridep,
-                   const MPI_Offset * imapp, const char **op){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_get_varm_string(int ncid, int varid, const MPI_Offset *startp,
-                   const MPI_Offset *countp, const MPI_Offset *stridep,
-                   const MPI_Offset * imapp, char **ip){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_put_varn_string(int ncid, int varid, int num, MPI_Offset* const starts[],
-                   MPI_Offset* const count[], const char **op){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_get_varn_string(int ncid, int varid, int num, MPI_Offset* const starts[],
-                   MPI_Offset* const count[], char **ip){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_put_varn_string_all(int ncid, int varid, int num, MPI_Offset* const starts[],
-                   MPI_Offset* const count[], const char **op){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_get_varn_string_all(int ncid, int varid, int num, MPI_Offset* const starts[],
-                   MPI_Offset* const count[], char **ip){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iput_var1_string(int ncid, int varid, const MPI_Offset *indexp, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_bput_var1_string(int ncid, int varid, const MPI_Offset *indexp, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iget_var1_string(int ncid, int varid, const MPI_Offset *indexp, char **ip, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iput_var_string(int ncid, int varid, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_bput_var_string(int ncid, int varid, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iget_var_string(int ncid, int varid, char **ip, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iput_vara_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_bput_vara_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iget_vara_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, char **ip, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iput_vars_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, const MPI_Offset *stridep, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_bput_vars_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, const MPI_Offset *stridep, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iget_vars_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, const MPI_Offset *stridep, char **ip, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iput_varm_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, const MPI_Offset *stridep, const MPI_Offset * imapp, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_bput_varm_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, const MPI_Offset *stridep, const MPI_Offset * imapp, const char **op, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
- int
-ncmpi_iget_varm_string(int ncid, int varid, const MPI_Offset *startp, const MPI_Offset *countp, const MPI_Offset *stridep, const MPI_Offset * imapp, char **ip, int *req){std::cout << __func__ << " not implemented" << std::endl; return NC_EINVAL;}
-
-
diff --git a/src/libcxx/ncmpi_notyet.h b/src/binding/cxx/ncmpi_notyet.h
similarity index 100%
rename from src/libcxx/ncmpi_notyet.h
rename to src/binding/cxx/ncmpi_notyet.h
diff --git a/src/libcxx/pnetcdf.in b/src/binding/cxx/pnetcdf.in
similarity index 100%
rename from src/libcxx/pnetcdf.in
rename to src/binding/cxx/pnetcdf.in
diff --git a/src/binding/f77/Makefile.am b/src/binding/f77/Makefile.am
new file mode 100644
index 0000000..4291878
--- /dev/null
+++ b/src/binding/f77/Makefile.am
@@ -0,0 +1,46 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .a .o .c .h .f .inc
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+
+nodist_include_HEADERS = pnetcdf.inc
+
+C2F_SRCS = issyserrf.c \
+           xstrerrorf.c \
+           xstrerrnof.c \
+           xinq_libversf.c \
+           allf.c
+
+LIB_FSRCS = strerrorf.f \
+            strerrnof.f \
+            inq_libversf.f
+
+noinst_LTLIBRARIES  = libf77.la
+libf77_la_SOURCES = $(LIB_FSRCS) mpinetcdf_impl.h
+nodist_libf77_la_SOURCES = $(C2F_SRCS) mpifnetcdf.h
+
+EXTRA_DIST = buildiface \
+	     defs \
+	     createffiles
+
+CLEANFILES = mpifnetcdf.h $(C2F_SRCS) *.gcno
+
+$(C2F_SRCS): mpifnetcdf.h
+
+PNETCDF_HEADER = $(top_builddir)/src/include/pnetcdf.h
+
+mpifnetcdf.h: defs buildiface $(PNETCDF_HEADER)
+	$(RM) -f $@ allf.c
+	$(srcdir)/buildiface -infile=$(PNETCDF_HEADER) -deffile=$(srcdir)/defs > allf.c
+	@touch $(C2F_SRCS)
+
+tests-local: all
+
diff --git a/src/binding/f77/Makefile.in b/src/binding/f77/Makefile.in
new file mode 100644
index 0000000..b881758
--- /dev/null
+++ b/src/binding/f77/Makefile.in
@@ -0,0 +1,803 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/binding/f77
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES = pnetcdf.inc
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libf77_la_LIBADD =
+am__objects_1 = strerrorf.lo strerrnof.lo inq_libversf.lo
+am_libf77_la_OBJECTS = $(am__objects_1)
+am__objects_2 = issyserrf.lo xstrerrorf.lo xstrerrnof.lo \
+	xinq_libversf.lo allf.lo
+nodist_libf77_la_OBJECTS = $(am__objects_2)
+libf77_la_OBJECTS = $(am_libf77_la_OBJECTS) \
+	$(nodist_libf77_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS)
+LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS)
+AM_V_F77 = $(am__v_F77_ at AM_V@)
+am__v_F77_ = $(am__v_F77_ at AM_DEFAULT_V@)
+am__v_F77_0 = @echo "  F77     " $@;
+am__v_F77_1 = 
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_F77LD = $(am__v_F77LD_ at AM_V@)
+am__v_F77LD_ = $(am__v_F77LD_ at AM_DEFAULT_V@)
+am__v_F77LD_0 = @echo "  F77LD   " $@;
+am__v_F77LD_1 = 
+SOURCES = $(libf77_la_SOURCES) $(nodist_libf77_la_SOURCES)
+DIST_SOURCES = $(libf77_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(nodist_include_HEADERS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/pnetcdf.inc.in \
+	$(top_srcdir)/./scripts/depcomp README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .a .o .c .h .f .inc
+AM_CPPFLAGS = -I$(top_srcdir)/src/include \
+	-I$(top_builddir)/src/include
+nodist_include_HEADERS = pnetcdf.inc
+C2F_SRCS = issyserrf.c \
+           xstrerrorf.c \
+           xstrerrnof.c \
+           xinq_libversf.c \
+           allf.c
+
+LIB_FSRCS = strerrorf.f \
+            strerrnof.f \
+            inq_libversf.f
+
+noinst_LTLIBRARIES = libf77.la
+libf77_la_SOURCES = $(LIB_FSRCS) mpinetcdf_impl.h
+nodist_libf77_la_SOURCES = $(C2F_SRCS) mpifnetcdf.h
+EXTRA_DIST = buildiface \
+	     defs \
+	     createffiles
+
+CLEANFILES = mpifnetcdf.h $(C2F_SRCS) *.gcno
+PNETCDF_HEADER = $(top_builddir)/src/include/pnetcdf.h
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .a .o .c .h .f .inc .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/binding/f77/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/binding/f77/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+pnetcdf.inc: $(top_builddir)/config.status $(srcdir)/pnetcdf.inc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libf77.la: $(libf77_la_OBJECTS) $(libf77_la_DEPENDENCIES) $(EXTRA_libf77_la_DEPENDENCIES) 
+	$(AM_V_F77LD)$(F77LINK)  $(libf77_la_OBJECTS) $(libf77_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/allf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/issyserrf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xinq_libversf.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xstrerrnof.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/xstrerrorf.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.f.o:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ $<
+
+.f.obj:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.f.lo:
+	$(AM_V_F77)$(LTF77COMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-nodist_includeHEADERS: $(nodist_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+	done
+
+uninstall-nodist_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-nodist_includeHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-nodist_includeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags tags-am tests-am tests-local \
+	uninstall uninstall-am uninstall-nodist_includeHEADERS
+
+.PRECIOUS: Makefile
+
+
+$(C2F_SRCS): mpifnetcdf.h
+
+mpifnetcdf.h: defs buildiface $(PNETCDF_HEADER)
+	$(RM) -f $@ allf.c
+	$(srcdir)/buildiface -infile=$(PNETCDF_HEADER) -deffile=$(srcdir)/defs > allf.c
+	@touch $(C2F_SRCS)
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/binding/f77/README b/src/binding/f77/README
new file mode 100644
index 0000000..0519700
--- /dev/null
+++ b/src/binding/f77/README
@@ -0,0 +1,16 @@
+# $Id: README 3341 2017-08-25 22:29:08Z wkliao $
+
+f2c files are now automatically generated in Makefile.
+
+
+The fortran bindings are automatically generated from the C header file.
+The script file, createffiles, that can be run to generate the C interface
+files is borrowed from MPICH. It reads the input file, defs, that defines
+the translation of Fortran arguments to C.
+
+This is nifty, but not flawless.  Compilation under 'gcc -Wall' may produce
+some warning messages.  
+
+To regenerate all C files, run command below:
+   ./createffiles
+
diff --git a/src/libf/buildiface b/src/binding/f77/buildiface
similarity index 99%
rename from src/libf/buildiface
rename to src/binding/f77/buildiface
index 202901e..0fab2e7 100755
--- a/src/libf/buildiface
+++ b/src/binding/f77/buildiface
@@ -1417,7 +1417,7 @@ sub logical_array_ftoc {
 }
 sub logical_array_in_decl {
     my $count = $_[0];
-    print $OUTFD "    int *l$count = (int *)$malloc((size_t)($Array_size) * sizeof(int));\n";
+    print $OUTFD "    int *l$count = (int *)$malloc((size_t)($Array_size) * SIZEOF_INT);\n";
     $clean_up .= "    $free(l$count);\n";
 }
 sub logical_array_in_arg {
@@ -1830,7 +1830,7 @@ sub addnull_ftoc {
         while (*p == ' ' && p > v$count) p--; /* find the last non-blank */
         p++;
         p$count = (char *) $malloc((size_t)(p-v$count) + 1);
-        memcpy(p$count, v$count, p-v$count);
+        memcpy(p$count, v$count, (size_t)(p-v$count));
         p$count\[p-v$count\] = 0; 
     }
 ";
@@ -2081,7 +2081,7 @@ sub intToAintArr_ftoc {
 #ifdef HAVE_AINT_LARGER_THAN_FINT
     if ($Array_size > 0) {
         int li;
-        l$count = (MPI_Aint *)$malloc( (size_t)($Array_size) * sizeof(MPI_Aint) );
+        l$count = (MPI_Aint *)$malloc( (size_t)($Array_size) * SIZEOF_MPI_AINT );
         for (li=0; li<$Array_size; li++) 
             l$count\[li\] = v$count\[li\];
     }
diff --git a/src/libf/createffiles b/src/binding/f77/createffiles
similarity index 92%
rename from src/libf/createffiles
rename to src/binding/f77/createffiles
index 321055b..afc4b36 100755
--- a/src/libf/createffiles
+++ b/src/binding/f77/createffiles
@@ -1,7 +1,7 @@
 #! /bin/sh
 # -*- Mode: shell-script-mode; -*-
 #
-# $Id: createffiles 1162 2013-02-12 20:04:25Z wkliao $
+# $Id: createffiles 3341 2017-08-25 22:29:08Z wkliao $
 
 # This is a simple script that creates the Fortran interface files.
 # Usually, it is MPICH_DISTRIBUTION/src/binding/f77/buildiface
diff --git a/src/libf/defs b/src/binding/f77/defs
similarity index 99%
rename from src/libf/defs
rename to src/binding/f77/defs
index 6970042..f4af4e6 100644
--- a/src/libf/defs
+++ b/src/binding/f77/defs
@@ -2,7 +2,7 @@
 #  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 #  See COPYRIGHT notice in top-level directory.
 #
-# $Id: defs 2727 2016-12-18 06:53:45Z wkliao $
+# $Id: defs 3341 2017-08-25 22:29:08Z wkliao $
 
 $routine_prefix = "ncmpi_";
 $routine_pattern = "[a-z0-9_]*";
@@ -2015,13 +2015,13 @@ sub reorderOffsetArr_ftoc {
     ierr = ncmpi_inq_varndims(*v1, l2, &ndims); /* get number of dimensions */
     if (ierr != NC_NOERR) return ierr;
 
-    l$count = (MPI_Offset*) $malloc((size_t)ndims * sizeof(MPI_Offset));
+    l$count = (MPI_Offset*) $malloc((size_t)ndims * SIZEOF_MPI_OFFSET);
     for (li=0; li<ndims; li++) /* convert Fortran order to C order */
         l$count\[li\] = v$count\[ndims-1-li\] - 1; /* convert 1-based to 0-based */
     \n";
     } else {
         print $OUTFD "
-    l$count = (MPI_Offset*) $malloc((size_t)ndims * sizeof(MPI_Offset));
+    l$count = (MPI_Offset*) $malloc((size_t)ndims * SIZEOF_MPI_OFFSET);
     for (li=0; li<ndims; li++) /* convert Fortran order to C order */
         l$count\[li\] = v$count\[ndims-1-li\];
     \n";
@@ -2063,7 +2063,7 @@ sub reorderOffsetArr1DTo2D_ftoc {
     print $OUTFD "
     if (*v3 > 0) {
         l$count    = (MPI_Offset**) $malloc((size_t)*v3 * sizeof(MPI_Offset*));
-        l$count\[0\] = (MPI_Offset*)  $malloc((size_t)*v3 * (size_t)ndims * sizeof(MPI_Offset));
+        l$count\[0\] = (MPI_Offset*)  $malloc((size_t)*v3 * (size_t)ndims * SIZEOF_MPI_OFFSET);
     }
     for (lj=1; lj<*v3; lj++)
         l$count\[lj\] = l$count\[lj-1\] + ndims;
@@ -2120,7 +2120,7 @@ sub reorderIntArr_ftoc {
     if (ierr != NC_NOERR) return ierr;\n"
     }
     print $OUTFD "
-    l$count = (int*) $malloc((size_t)ndims * sizeof(int));
+    l$count = (int*) $malloc((size_t)ndims * SIZEOF_INT);
     for (li=0; li<ndims; li++) /* convert Fortran order to C order */
         l$count\[li\] = v$count\[ndims-1-li\];
     \n";
@@ -2160,7 +2160,7 @@ sub reorderIntArrOut_out_ftoc {
     ierr = ncmpi_inq_varndims(*v1, l2, &ndims); /* get number of dimensions */
     if (ierr != NC_NOERR) return ierr;
 
-    l$count = (int*) $malloc((size_t)ndims * sizeof(int));
+    l$count = (int*) $malloc((size_t)ndims * SIZEOF_INT);
     \n";
 }
 sub reorderIntArrOut_out_arg {
@@ -2324,7 +2324,7 @@ sub IntIndexInArr_ftoc {
     { ln$count = $Array_size;
     if (ln$count > 0) {
         int li;
-        l$count = (int*) $malloc( (size_t)ln$count * sizeof(int));
+        l$count = (int*) $malloc( (size_t)ln$count * SIZEOF_INT);
         for (li=0; li<ln$count; li++) /* convert Fortran order to C order */
             l$count\[li\] = v$count\[ln$count-li-1\]-1; /* convert 1-based to 0-based */
       }}\n";
@@ -2420,7 +2420,7 @@ sub ncfxstrerror {
     const char *p = ncmpi_strerror( *v1 );
     size_t len = strlen(p);
     /* d2 is the length of the string passed into the routine */
-    if (len > (size_t)d2) len = d2;  /* MIN(len, d2) */
+    if (len > (size_t)d2) len = (size_t)d2;  /* MIN(len, d2) */
     memcpy(v2, p, len);
     /* Blank pad */
     if (len < (size_t)d2) memset(v2+len, ' ', (size_t)d2-len);
@@ -2442,7 +2442,7 @@ sub ncfxstrerrno {
     const char *p = ncmpi_strerrno( *v1 );
     size_t len = strlen(p);
     /* d2 is the length of the string passed into the routine */
-    if (len > (size_t)d2) len = d2;  /* MIN(len, d2) */
+    if (len > (size_t)d2) len = (size_t)d2;  /* MIN(len, d2) */
     memcpy(v2, p, len);
     /* Blank pad */
     if (len < (size_t)d2) memset(v2+len, ' ', (size_t)d2-len);
@@ -2482,7 +2482,7 @@ sub ncfxinqlibvers {
     const char *p = ncmpi_inq_libvers();
     size_t len = strlen(p);
     /* d1 is the length of the string passed into the routine */
-    if (len > (size_t)d1) len = d1;  /* MIN(len, d1) */
+    if (len > (size_t)d1) len = (size_t)d1;  /* MIN(len, d1) */
     memcpy(v1, p, len);
     /* Blank pad */
     if (len < (size_t)d1) memset(v1+len, ' ', (size_t)d1-len);
diff --git a/src/binding/f77/inq_libversf.f b/src/binding/f77/inq_libversf.f
new file mode 100644
index 0000000..c6ad48e
--- /dev/null
+++ b/src/binding/f77/inq_libversf.f
@@ -0,0 +1,6 @@
+      character *80 function nfmpi_inq_libvers()
+      character *(80) tmpstr
+
+      call nfmpi_xinq_libvers(tmpstr)
+      nfmpi_inq_libvers = tmpstr
+      end
diff --git a/src/libf/mpinetcdf_impl.h b/src/binding/f77/mpinetcdf_impl.h
similarity index 92%
rename from src/libf/mpinetcdf_impl.h
rename to src/binding/f77/mpinetcdf_impl.h
index 51786fa..680c412 100644
--- a/src/libf/mpinetcdf_impl.h
+++ b/src/binding/f77/mpinetcdf_impl.h
@@ -3,13 +3,13 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *      See COPYRIGHT in top-level directory.
  */
-/* $Id: mpinetcdf_impl.h 2584 2016-10-27 18:53:05Z wkliao $ */
+/* $Id: mpinetcdf_impl.h 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#ifndef MPINETCDF_IMPL_H
-#define MPINETCDF_IMPL_H
+#ifndef _MPINETCDF_IMPL_H
+#define _MPINETCDF_IMPL_H
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdlib.h>
@@ -71,9 +71,5 @@ extern FORTRAN_API int FORT_CALL nfmpi_issyserr_ ( MPI_Fint *v1 );
 
 /* Fortran logical values */
 
-
 #endif
 
-
-
-
diff --git a/src/libf/pnetcdf.inc.in b/src/binding/f77/pnetcdf.inc.in
similarity index 99%
rename from src/libf/pnetcdf.inc.in
rename to src/binding/f77/pnetcdf.inc.in
index 4c4cf3c..aff84ae 100644
--- a/src/libf/pnetcdf.inc.in
+++ b/src/binding/f77/pnetcdf.inc.in
@@ -124,6 +124,7 @@
       integer nf_format_64bit_offset
       integer nf_format_cdf2
       integer nf_format_cdf5
+      integer nf_format_unknown
 
       parameter (nf_nowrite = 0)
       parameter (nf_write = 1)
@@ -144,6 +145,7 @@
       parameter (nf_format_64bit = nf_format_cdf2)
       parameter (nf_format_64bit_offset = nf_format_cdf2)
       parameter (nf_format_64bit_data = nf_format_cdf5)
+      parameter (nf_format_unknown = -1)
 
 !
 ! size argument for defining an unlimited dimension:
@@ -163,16 +165,18 @@
 !
 ! implementation limits:
 !
+      integer nf_max_name
+      integer nf_max_nfiles
       integer nf_max_dims
       integer nf_max_attrs
       integer nf_max_vars
-      integer nf_max_name
       integer nf_max_var_dims
 
-      parameter (nf_max_dims = 1024)
-      parameter (nf_max_attrs = 8192)
-      parameter (nf_max_vars = 8192)
-      parameter (nf_max_name = 256)
+      parameter (nf_max_name   = 256)
+      parameter (nf_max_nfiles = 1024)
+      parameter (nf_max_dims   = 2147483647)
+      parameter (nf_max_attrs  = 2147483647)
+      parameter (nf_max_vars   = 2147483647)
       parameter (nf_max_var_dims = nf_max_dims)
 
 !
@@ -220,7 +224,9 @@
       integer NF_EDAPSVC
       integer NF_EDAS
       integer NF_EDDS
+      integer NF_EDMR
       integer NF_EDATADDS
+      integer NF_EDATADAP
       integer NF_EDAPURL
       integer NF_EDAPCONSTRAINT
       integer NF_ETRANSLATION
@@ -249,7 +255,7 @@
       PARAMETER (NF_EMAXVARS     = -48)   ! NF_MAX_VARS exceeded
       PARAMETER (NF_ENOTVAR      = -49)   ! Variable not found
       PARAMETER (NF_EGLOBAL      = -50)   ! Action prohibited on NF_GLOBAL varid
-      PARAMETER (NF_ENOTNC       = -51)   ! Not a netcdf file
+      PARAMETER (NF_ENOTNC       = -51)   ! Not a netcdf file (file format violates CDF specification)
       PARAMETER (NF_ESTS         = -52)   ! In Fortran, string too short
       PARAMETER (NF_EMAXNAME     = -53)   ! NF_MAX_NAME exceeded
       PARAMETER (NF_EUNLIMIT     = -54)   ! NFMPI_UNLIMITED size already in use
@@ -273,7 +279,9 @@
       PARAMETER (NF_EDAPSVC      = -70)   ! DAP server error
       PARAMETER (NF_EDAS         = -71)   ! Malformed or inaccessible DAS
       PARAMETER (NF_EDDS         = -72)   ! Malformed or inaccessible DDS
+      PARAMETER (NF_EDMR         = -72)   ! Dap4 alias
       PARAMETER (NF_EDATADDS     = -73)   ! Malformed or inaccessible DATADDS
+      PARAMETER (NF_EDATADAP     = -73)   ! Dap4 alias
       PARAMETER (NF_EDAPURL      = -74)   ! Malformed DAP URL
       PARAMETER (NF_EDAPCONSTRAINT = -75) ! Malformed DAP Constraint
       PARAMETER (NF_ETRANSLATION = -76)   ! Untranslatable construct
diff --git a/src/libf/strerrnof.f b/src/binding/f77/strerrnof.f
similarity index 60%
rename from src/libf/strerrnof.f
rename to src/binding/f77/strerrnof.f
index 54f9109..5eb0f65 100644
--- a/src/libf/strerrnof.f
+++ b/src/binding/f77/strerrnof.f
@@ -1,11 +1,8 @@
       character *80 function nfmpi_strerrno( err )
-      integer err, ierr
+      integer err
       character *(80) tmpstr
 
-      integer nfmpi_xstrerrno
-      external nfmpi_xstrerrno
-
-      ierr = nfmpi_xstrerrno( err, tmpstr )
+      call nfmpi_xstrerrno( err, tmpstr )
       if (tmpstr(1:2) .EQ. 'NC') then
           tmpstr(2:2) = 'F'
       end if
diff --git a/src/binding/f77/strerrorf.f b/src/binding/f77/strerrorf.f
new file mode 100644
index 0000000..67c8c58
--- /dev/null
+++ b/src/binding/f77/strerrorf.f
@@ -0,0 +1,7 @@
+      character *80 function nfmpi_strerror( err )
+      integer err
+      character *(80) tmpstr
+
+      call nfmpi_xstrerror( err, tmpstr )
+      nfmpi_strerror = tmpstr
+      end
diff --git a/src/binding/f90/Makefile.am b/src/binding/f90/Makefile.am
new file mode 100644
index 0000000..71eb83c
--- /dev/null
+++ b/src/binding/f90/Makefile.am
@@ -0,0 +1,58 @@
+#
+# Copyright (C) 2013, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .a .o .mod .f90 .m4 .fh
+
+AM_DEFAULT_SOURCE_EXT = .f90
+
+AM_FCFLAGS = -I. -I$(srcdir)
+
+if UPPER_CASE_MOD
+   PNETCDF_MOD = PNETCDF.$(FC_MODEXT)
+else
+   PNETCDF_MOD = pnetcdf.$(FC_MODEXT)
+endif
+
+M4FFLAGS += -DINTENTV=$(INTENTV)
+
+M4_SRCS = getput_text.m4 \
+          getput_var.m4 \
+          getput_varn.m4 \
+          getput_vard.m4
+
+F90_SRCS = nf90_constants.fh \
+           overloads.fh \
+           visibility.fh \
+           file.fh \
+           dims.fh \
+           attributes.fh \
+           variables.fh
+
+SRCS = $(F90_SRCS) \
+       $(M4_SRCS:.m4=.fh) \
+       api.fh \
+       nfmpi_constants.fh
+
+BUILT_SOURCES = $(M4_SRCS:.m4=.fh)
+
+nodist_include_HEADERS = $(PNETCDF_MOD)
+noinst_LTLIBRARIES = libf90.la
+libf90_la_SOURCES = $(F90_SRCS)
+nodist_libf90_la_SOURCES = pnetcdf.f90 api.fh nfmpi_constants.fh $(M4_SRCS:.m4=.fh)
+
+.m4.fh:
+	$(M4) $(AM_M4FLAGS) $(M4FFLAGS) $< >$@
+
+pnetcdf.lo $(PNETCDF_MOD): pnetcdf.f90 $(SRCS)
+
+EXTRA_DIST = $(M4_SRCS)
+
+CLEANFILES = $(PNETCDF_MOD) $(M4_SRCS:.m4=.fh) *.gcno
+
+tests-local: all
+
diff --git a/src/binding/f90/Makefile.in b/src/binding/f90/Makefile.in
new file mode 100644
index 0000000..2952766
--- /dev/null
+++ b/src/binding/f90/Makefile.in
@@ -0,0 +1,764 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2013, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/binding/f90
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES = pnetcdf.f90 api.fh nfmpi_constants.fh
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libf90_la_LIBADD =
+am__objects_1 =
+am_libf90_la_OBJECTS = $(am__objects_1)
+nodist_libf90_la_OBJECTS = pnetcdf.lo $(am__objects_1)
+libf90_la_OBJECTS = $(am_libf90_la_OBJECTS) \
+	$(nodist_libf90_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+AM_V_FC = $(am__v_FC_ at AM_V@)
+am__v_FC_ = $(am__v_FC_ at AM_DEFAULT_V@)
+am__v_FC_0 = @echo "  FC      " $@;
+am__v_FC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+SOURCES = $(libf90_la_SOURCES) $(nodist_libf90_la_SOURCES)
+DIST_SOURCES = $(libf90_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(nodist_include_HEADERS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/api.fh.in \
+	$(srcdir)/nfmpi_constants.fh.in $(srcdir)/pnetcdf.f90.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@ -DINTENTV=$(INTENTV)
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .a .o .mod .f90 .m4 .fh
+AM_DEFAULT_SOURCE_EXT = .f90
+AM_FCFLAGS = -I. -I$(srcdir)
+ at UPPER_CASE_MOD_FALSE@PNETCDF_MOD = pnetcdf.$(FC_MODEXT)
+ at UPPER_CASE_MOD_TRUE@PNETCDF_MOD = PNETCDF.$(FC_MODEXT)
+M4_SRCS = getput_text.m4 \
+          getput_var.m4 \
+          getput_varn.m4 \
+          getput_vard.m4
+
+F90_SRCS = nf90_constants.fh \
+           overloads.fh \
+           visibility.fh \
+           file.fh \
+           dims.fh \
+           attributes.fh \
+           variables.fh
+
+SRCS = $(F90_SRCS) \
+       $(M4_SRCS:.m4=.fh) \
+       api.fh \
+       nfmpi_constants.fh
+
+BUILT_SOURCES = $(M4_SRCS:.m4=.fh)
+nodist_include_HEADERS = $(PNETCDF_MOD)
+noinst_LTLIBRARIES = libf90.la
+libf90_la_SOURCES = $(F90_SRCS)
+nodist_libf90_la_SOURCES = pnetcdf.f90 api.fh nfmpi_constants.fh $(M4_SRCS:.m4=.fh)
+EXTRA_DIST = $(M4_SRCS)
+CLEANFILES = $(PNETCDF_MOD) $(M4_SRCS:.m4=.fh) *.gcno
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .a .o .mod .f90 .m4 .fh .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/binding/f90/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/binding/f90/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+pnetcdf.f90: $(top_builddir)/config.status $(srcdir)/pnetcdf.f90.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+api.fh: $(top_builddir)/config.status $(srcdir)/api.fh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+nfmpi_constants.fh: $(top_builddir)/config.status $(srcdir)/nfmpi_constants.fh.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libf90.la: $(libf90_la_OBJECTS) $(libf90_la_DEPENDENCIES) $(EXTRA_libf90_la_DEPENDENCIES) 
+	$(AM_V_FCLD)$(FCLINK)  $(libf90_la_OBJECTS) $(libf90_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+.f90.o:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+	$(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-nodist_includeHEADERS: $(nodist_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+	done
+
+uninstall-nodist_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-nodist_includeHEADERS
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-nodist_includeHEADERS \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
+	pdf pdf-am ps ps-am tags tags-am tests-am tests-local \
+	uninstall uninstall-am uninstall-nodist_includeHEADERS
+
+.PRECIOUS: Makefile
+
+
+.m4.fh:
+	$(M4) $(AM_M4FLAGS) $(M4FFLAGS) $< >$@
+
+pnetcdf.lo $(PNETCDF_MOD): pnetcdf.f90 $(SRCS)
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/binding/f90/api.fh.in b/src/binding/f90/api.fh.in
new file mode 100644
index 0000000..7c721a5
--- /dev/null
+++ b/src/binding/f90/api.fh.in
@@ -0,0 +1,4120 @@
+!
+!  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
+!  See COPYRIGHT notice in top-level directory.
+!
+! $Id: api.fh.in 3341 2017-08-25 22:29:08Z wkliao $
+!
+! @configure_input@
+
+INTERFACE
+!
+! Library APIs
+!
+    character(LEN=80) FUNCTION nfmpi_inq_libvers()
+    END               FUNCTION nfmpi_inq_libvers
+
+!
+! Error report APIs
+!
+    character(LEN=80) FUNCTION nfmpi_strerror(ncerr)
+                      INTEGER, INTENT(IN) :: ncerr
+    END               FUNCTION nfmpi_strerror
+
+    logical           FUNCTION nfmpi_issyserr(ncerr)
+                      INTEGER, INTENT(IN) :: ncerr
+    END               FUNCTION nfmpi_issyserr
+
+    character(LEN=80) FUNCTION nfmpi_strerrno(ncerr)
+                      INTEGER, INTENT(IN) :: ncerr
+    END               FUNCTION nfmpi_strerrno
+
+!
+! File APIs
+!
+    INTEGER FUNCTION nfmpi_create(mpi_comm, path, cmode, mpi_info, ncid)
+                     INTEGER,                       INTENT(IN)  :: mpi_comm
+                     CHARACTER(len=*),              INTENT(IN)  :: path
+                     INTEGER,                       INTENT(IN)  :: cmode
+                     INTEGER,                       INTENT(IN)  :: mpi_info
+                     INTEGER,                       INTENT(OUT) :: ncid
+    END     FUNCTION nfmpi_create
+
+    INTEGER FUNCTION nfmpi_open(mpi_comm, path, mode, mpi_info, ncid)
+                     INTEGER,                       INTENT(IN)  :: mpi_comm
+                     CHARACTER(len=*),              INTENT(IN)  :: path
+                     INTEGER,                       INTENT(IN)  :: mode
+                     INTEGER,                       INTENT(IN)  :: mpi_info
+                     INTEGER,                       INTENT(OUT) :: ncid
+    END     FUNCTION nfmpi_open
+
+    INTEGER FUNCTION nfmpi_enddef(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_enddef
+
+    INTEGER FUNCTION nfmpi__enddef(ncid, h_minfree, v_align, v_minfree, r_align)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: h_minfree
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: v_align
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: v_minfree
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: r_align
+    END     FUNCTION nfmpi__enddef
+
+    INTEGER FUNCTION nfmpi_redef(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_redef
+
+    INTEGER FUNCTION nfmpi_sync(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_sync
+
+    INTEGER FUNCTION nfmpi_sync_numrecs(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_sync_numrecs
+
+    INTEGER FUNCTION nfmpi_close(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_close
+
+    INTEGER FUNCTION nfmpi_set_fill(ncid, fillmode, old_mode)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: fillmode
+                     INTEGER,                       INTENT(OUT) :: old_mode
+    END     FUNCTION nfmpi_set_fill
+
+    INTEGER FUNCTION nfmpi_set_default_format(new_fmt, old_fmt)
+                     INTEGER,                       INTENT(IN)  :: new_fmt
+                     INTEGER,                       INTENT(OUT) :: old_fmt
+    END     FUNCTION nfmpi_set_default_format
+
+    INTEGER FUNCTION nfmpi_abort(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_abort
+
+    INTEGER FUNCTION nfmpi_delete(path, mpi_info)
+                     CHARACTER(len=*),              INTENT(IN)  :: path
+                     INTEGER,                       INTENT(IN)  :: mpi_info
+    END     FUNCTION nfmpi_delete
+
+!
+! Entering/exiting independent data mode APIs
+!
+    INTEGER FUNCTION nfmpi_begin_indep_data(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_begin_indep_data
+
+    INTEGER FUNCTION nfmpi_end_indep_data(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_end_indep_data
+
+!
+! Nonblocking I/O control APIs
+!
+    INTEGER FUNCTION nfmpi_wait(ncid, count, req, status)
+                     INTEGER,                       INTENT(IN)   :: ncid
+                     INTEGER,                       INTENT(IN)   :: count
+                     INTEGER,                       INTENT(INOUT):: req(count)
+                     INTEGER,                       INTENT(OUT)  :: status(count)
+    END     FUNCTION nfmpi_wait
+
+    INTEGER FUNCTION nfmpi_wait_all(ncid, count, req, status)
+                     INTEGER,                       INTENT(IN)   :: ncid
+                     INTEGER,                       INTENT(IN)   :: count
+                     INTEGER,                       INTENT(INOUT):: req(count)
+                     INTEGER,                       INTENT(OUT)  :: status(count)
+    END     FUNCTION nfmpi_wait_all
+
+    INTEGER FUNCTION nfmpi_cancel(ncid, count, req, status)
+                     INTEGER,                       INTENT(IN)   :: ncid
+                     INTEGER,                       INTENT(IN)   :: count
+                     INTEGER,                       INTENT(INOUT):: req(count)
+                     INTEGER,                       INTENT(OUT)  :: status(count)
+    END     FUNCTION nfmpi_cancel
+
+!
+! File inquiry APIs
+!
+    INTEGER FUNCTION nfmpi_inq(ncid, ndims, nvars, ngatts, unlimdimid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: ndims
+                     INTEGER,                       INTENT(OUT) :: nvars
+                     INTEGER,                       INTENT(OUT) :: ngatts
+                     INTEGER,                       INTENT(OUT) :: unlimdimid
+    END     FUNCTION nfmpi_inq
+
+    INTEGER FUNCTION nfmpi_inq_ndims(ncid, ndims)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: ndims
+    END     FUNCTION nfmpi_inq_ndims
+
+    INTEGER FUNCTION nfmpi_inq_nvars(ncid, nvars)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: nvars
+    END     FUNCTION nfmpi_inq_nvars
+
+    INTEGER FUNCTION nfmpi_inq_natts(ncid, ngatts)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: ngatts
+    END     FUNCTION nfmpi_inq_natts
+
+    INTEGER FUNCTION nfmpi_inq_unlimdim(ncid, unlimdimid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: unlimdimid
+    END     FUNCTION nfmpi_inq_unlimdim
+
+    INTEGER FUNCTION nfmpi_inq_format(ncid, fmt)
+                     INTEGER,                       INTENT(IN)   :: ncid
+                     INTEGER,                       INTENT(OUT)  :: fmt
+    END     FUNCTION nfmpi_inq_format
+
+    INTEGER FUNCTION nfmpi_inq_file_format(path, fmt)
+                     CHARACTER(len=*),              INTENT(IN)  :: path
+                     INTEGER,                       INTENT(OUT)  :: fmt
+    END     FUNCTION   nfmpi_inq_file_format
+
+    INTEGER FUNCTION nfmpi_inq_default_format(default_fmt)
+                     INTEGER,                       INTENT(OUT) :: default_fmt
+    END     FUNCTION nfmpi_inq_default_format
+
+    INTEGER FUNCTION nfmpi_inq_header_size(ncid, size)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
+    END     FUNCTION nfmpi_inq_header_size
+
+    INTEGER FUNCTION nfmpi_inq_header_extent(ncid, extent)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: extent
+    END     FUNCTION nfmpi_inq_header_extent
+
+    INTEGER FUNCTION nfmpi_inq_files_opened(nfiles, ncids)
+                     INTEGER,                       INTENT(OUT) :: nfiles
+                     INTEGER,                       INTENT(OUT) :: ncids(*)
+    END     FUNCTION nfmpi_inq_files_opened
+
+    INTEGER FUNCTION nfmpi_inq_path(ncid, pathlen, path)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: pathlen
+                     CHARACTER(len=*),              INTENT(OUT) :: path
+    END     FUNCTION nfmpi_inq_path
+
+    INTEGER FUNCTION nfmpi_inq_num_rec_vars(ncid, nvars)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: nvars
+    END     FUNCTION nfmpi_inq_num_rec_vars
+
+    INTEGER FUNCTION nfmpi_inq_num_fix_vars(ncid, nvars)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: nvars
+    END     FUNCTION nfmpi_inq_num_fix_vars
+
+    INTEGER FUNCTION nfmpi_inq_recsize(ncid, recsize)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: recsize
+    END     FUNCTION nfmpi_inq_recsize
+
+    INTEGER FUNCTION nfmpi_inq_file_info(ncid, mpi_info)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: mpi_info
+    END     FUNCTION nfmpi_inq_file_info
+
+    INTEGER FUNCTION nfmpi_get_file_info(ncid, mpi_info)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: mpi_info
+    END     FUNCTION nfmpi_get_file_info
+
+    INTEGER FUNCTION nfmpi_inq_striping(ncid, striping_size, striping_count)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: striping_size
+                     INTEGER,                       INTENT(OUT) :: striping_count
+    END     FUNCTION nfmpi_inq_striping
+
+    INTEGER FUNCTION nfmpi_inq_put_size(ncid, size)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
+    END     FUNCTION nfmpi_inq_put_size
+
+    INTEGER FUNCTION nfmpi_inq_get_size(ncid, size)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
+    END     FUNCTION nfmpi_inq_get_size
+
+    INTEGER FUNCTION nfmpi_inq_nreqs(ncid, nreqs)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(OUT) :: nreqs
+    END     FUNCTION nfmpi_inq_nreqs
+
+    INTEGER FUNCTION nfmpi_inq_malloc_size(size)
+                     @USE_MPIF_HEADER@
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
+    END     FUNCTION nfmpi_inq_malloc_size
+
+    INTEGER FUNCTION nfmpi_inq_malloc_max_size(size)
+                     @USE_MPIF_HEADER@
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
+    END     FUNCTION nfmpi_inq_malloc_max_size
+
+    INTEGER FUNCTION nfmpi_inq_malloc_list()
+    END     FUNCTION nfmpi_inq_malloc_list
+
+!
+! Dimension APIs
+!
+    INTEGER FUNCTION nfmpi_def_dim(ncid, name, len, dimid)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
+                     INTEGER,                       INTENT(OUT) :: dimid
+    END     FUNCTION nfmpi_def_dim
+
+    INTEGER FUNCTION nfmpi_inq_dimid(ncid, name, dimid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(OUT) :: dimid
+    END     FUNCTION nfmpi_inq_dimid
+
+    INTEGER FUNCTION nfmpi_inq_dim(ncid, dimid, name, len)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: dimid
+                     CHARACTER(len=*),              INTENT(OUT) :: name
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: len
+    END     FUNCTION nfmpi_inq_dim
+
+    INTEGER FUNCTION nfmpi_inq_dimname(ncid, dimid, name)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: dimid
+                     CHARACTER(len=*),              INTENT(OUT) :: name
+    END     FUNCTION nfmpi_inq_dimname
+
+    INTEGER FUNCTION nfmpi_inq_dimlen(ncid, dimid, len)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: dimid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: len
+    END     FUNCTION nfmpi_inq_dimlen
+
+    INTEGER FUNCTION nfmpi_rename_dim(ncid, dimid, name)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: dimid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+    END     FUNCTION nfmpi_rename_dim
+
+!
+! Attribute inquiry APIs
+!
+    INTEGER FUNCTION nfmpi_inq_att(ncid, varid, name, xtype, len)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(OUT) :: xtype
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: len
+    END     FUNCTION nfmpi_inq_att
+
+    INTEGER FUNCTION nfmpi_inq_attid(ncid, varid, name, attid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(OUT) :: attid
+    END     FUNCTION nfmpi_inq_attid
+
+    INTEGER FUNCTION nfmpi_inq_atttype(ncid, varid, name, xtype)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(OUT) :: xtype
+    END     FUNCTION nfmpi_inq_atttype
+
+    INTEGER FUNCTION nfmpi_inq_attlen(ncid, varid, name, len)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: len
+    END     FUNCTION nfmpi_inq_attlen
+
+    INTEGER FUNCTION nfmpi_inq_attname(ncid, varid, attid, name)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: attid
+                     CHARACTER(len=*),              INTENT(OUT) :: name
+    END     FUNCTION nfmpi_inq_attname
+
+    INTEGER FUNCTION nfmpi_copy_att(ncid_in, varid_in, name, ncid_out, varid_out)
+                     INTEGER,                       INTENT(IN)  :: ncid_in
+                     INTEGER,                       INTENT(IN)  :: varid_in
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(IN)  :: ncid_out
+                     INTEGER,                       INTENT(IN)  :: varid_out
+    END     FUNCTION nfmpi_copy_att
+
+    INTEGER FUNCTION nfmpi_rename_att(ncid, varid, curname, newname)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: curname
+                     CHARACTER(len=*),              INTENT(IN)  :: newname
+    END     FUNCTION nfmpi_rename_att
+
+    INTEGER FUNCTION nfmpi_del_att(ncid, varid, name)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+    END     FUNCTION nfmpi_del_att
+
+!
+! Attribute put/get APIs
+!
+    INTEGER FUNCTION nfmpi_put_att_text(ncid, varid, name, len, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_att_text
+
+    INTEGER FUNCTION nfmpi_get_att_text(ncid, varid, name, text)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_att_text
+
+    INTEGER FUNCTION nfmpi_put_att_int1(ncid, varid, name, xtype, len, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(IN)  :: xtype
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END     FUNCTION nfmpi_put_att_int1
+
+    INTEGER FUNCTION nfmpi_get_att_int1(ncid, varid, name, i1vals)
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_att_int1
+
+    INTEGER FUNCTION nfmpi_put_att_int2(ncid, varid, name, xtype, len, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(IN)  :: xtype
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
+                     INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
+    END     FUNCTION nfmpi_put_att_int2
+
+    INTEGER FUNCTION nfmpi_get_att_int2(ncid, varid, name, i2vals)
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_att_int2
+
+    INTEGER FUNCTION nfmpi_put_att_int(ncid, varid, name, xtype, len, IVALS)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(IN)  :: xtype
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
+                     INTEGER,                       INTENT(IN)  :: ivals(*)
+    END     FUNCTION nfmpi_put_att_int
+
+    INTEGER FUNCTION nfmpi_get_att_int(ncid, varid, name, IVALS)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_att_int
+
+    INTEGER FUNCTION nfmpi_put_att_real(ncid, varid, name, xtype, len, RVALS)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(IN)  :: xtype
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
+                     REAL,                          INTENT(IN)  :: rvals(*)
+    END     FUNCTION nfmpi_put_att_real
+
+    INTEGER FUNCTION nfmpi_get_att_real(ncid, varid, name, rvals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_att_real
+
+    INTEGER FUNCTION nfmpi_put_att_double(ncid, varid, name, xtype, len, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(IN)  :: xtype
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
+                     DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
+    END     FUNCTION nfmpi_put_att_double
+
+    INTEGER FUNCTION nfmpi_get_att_double(ncid, varid, name, dvals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_att_double
+
+    INTEGER FUNCTION nfmpi_put_att_int8(ncid, varid, name, xtype, len, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(IN)  :: xtype
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
+                     INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
+    END     FUNCTION nfmpi_put_att_int8
+
+    INTEGER FUNCTION nfmpi_get_att_int8(ncid, varid, name, i8vals)
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_att_int8
+
+!
+! General variable APIs
+!
+    INTEGER FUNCTION nfmpi_def_var(ncid, name, datatype, ndims, dimids, varid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(IN)  :: datatype
+                     INTEGER,                       INTENT(IN)  :: ndims
+                     INTEGER,                       INTENT(IN)  :: dimids(ndims)
+                     INTEGER,                       INTENT(OUT) :: varid
+    END     FUNCTION nfmpi_def_var
+
+    INTEGER FUNCTION nfmpi_inq_var(ncid, varid, name, datatype, ndims, dimids, natts)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(OUT) :: name
+                     INTEGER,                       INTENT(OUT) :: datatype
+                     INTEGER,                       INTENT(OUT) :: ndims
+                     INTEGER,                       INTENT(OUT) :: dimids(*)
+                     INTEGER,                       INTENT(OUT) :: natts
+    END     FUNCTION nfmpi_inq_var
+
+    INTEGER FUNCTION nfmpi_inq_varid(ncid, name, varid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+                     INTEGER,                       INTENT(OUT) :: varid
+    END     FUNCTION nfmpi_inq_varid
+
+    INTEGER FUNCTION nfmpi_inq_varname(ncid, varid, name)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(OUT) :: name
+    END     FUNCTION nfmpi_inq_varname
+
+    INTEGER FUNCTION nfmpi_inq_vartype(ncid, varid, xtype)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(OUT) :: xtype
+    END     FUNCTION nfmpi_inq_vartype
+
+    INTEGER FUNCTION nfmpi_inq_varndims(ncid, varid, ndims)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(OUT) :: ndims
+    END     FUNCTION nfmpi_inq_varndims
+
+    INTEGER FUNCTION nfmpi_inq_vardimid(ncid, varid, dimids)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(OUT) :: dimids(*)
+    END     FUNCTION nfmpi_inq_vardimid
+
+    INTEGER FUNCTION nfmpi_inq_varnatts(ncid, varid, natts)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(OUT) :: natts
+    END     FUNCTION nfmpi_inq_varnatts
+
+    INTEGER FUNCTION nfmpi_inq_varoffset(ncid, varid, offset)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: offset
+    END     FUNCTION nfmpi_inq_varoffset
+
+    INTEGER FUNCTION nfmpi_rename_var(ncid, varid, name)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: name
+    END     FUNCTION nfmpi_rename_var
+
+!   INTEGER FUNCTION nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(IN)  :: no_fill
+!                    <type>,                        INTENT(IN)  :: fill_value
+!   END     FUNCTION nfmpi_def_var_fill
+
+!   INTEGER FUNCTION nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(OUT) :: no_fill
+!                    <type>,                        INTENT(OUT) :: fill_value
+!   END     FUNCTION nfmpi_inq_var_fill
+
+    INTEGER FUNCTION nfmpi_fill_var_rec(ncid, varid, recno)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: recno
+    END     FUNCTION nfmpi_fill_var_rec
+
+!
+! Blocking put/get entire variable APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_put_var(ncid, varid, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_var
+
+!   INTEGER FUNCTION nfmpi_get_var(ncid, varid, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_var
+
+!   INTEGER FUNCTION nfmpi_get_var_all (ncid, varid, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_var_all
+
+    INTEGER FUNCTION nfmpi_put_var_text(ncid, varid, text)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_var_text
+
+    INTEGER FUNCTION nfmpi_get_var_text(ncid, varid, text)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_var_text
+
+    INTEGER FUNCTION nfmpi_get_var_text_all(ncid, varid, text)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_var_text_all
+
+    INTEGER FUNCTION nfmpi_put_var_int1(ncid, varid, i1vals)
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END     FUNCTION nfmpi_put_var_int1
+
+    INTEGER FUNCTION nfmpi_get_var_int1(ncid, varid, i1vals)
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_var_int1
+
+    INTEGER FUNCTION nfmpi_get_var_int1_all(ncid, varid, i1vals)
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_var_int1_all
+
+    INTEGER FUNCTION nfmpi_put_var_int2(ncid, varid, i2vals)
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END     FUNCTION nfmpi_put_var_int2
+
+    INTEGER FUNCTION nfmpi_get_var_int2(ncid, varid, i2vals)
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_var_int2
+
+    INTEGER FUNCTION nfmpi_get_var_int2_all(ncid, varid, i2vals)
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_var_int2_all
+
+    INTEGER FUNCTION nfmpi_put_var_int(ncid, varid, ivals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END     FUNCTION nfmpi_put_var_int
+
+    INTEGER FUNCTION nfmpi_get_var_int(ncid, varid, ivals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_var_int
+
+    INTEGER FUNCTION nfmpi_get_var_int_all(ncid, varid, ivals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_var_int_all
+
+    INTEGER FUNCTION nfmpi_put_var_real(ncid, varid, rvals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END     FUNCTION nfmpi_put_var_real
+
+    INTEGER FUNCTION nfmpi_get_var_real(ncid, varid, rvals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_var_real
+
+    INTEGER FUNCTION nfmpi_get_var_real_all(ncid, varid, rvals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_var_real_all
+
+    INTEGER FUNCTION nfmpi_put_var_double(ncid, varid, dvals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END     FUNCTION nfmpi_put_var_double
+
+    INTEGER FUNCTION nfmpi_get_var_double(ncid, varid, dvals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_var_double
+
+    INTEGER FUNCTION nfmpi_get_var_double_all(ncid, varid, dvals)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_var_double_all
+
+    INTEGER FUNCTION nfmpi_put_var_int8(ncid, varid, i8vals)
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END     FUNCTION nfmpi_put_var_int8
+
+    INTEGER FUNCTION nfmpi_get_var_int8(ncid, varid, i8vals)
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_var_int8
+
+    INTEGER FUNCTION nfmpi_get_var_int8_all(ncid, varid, i8vals)
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_var_int8_all
+
+!
+! Blocking put/get a single variable element APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_put_var1(ncid, varid, index, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_var1
+
+!   INTEGER FUNCTION nfmpi_put_var1_all(ncid, varid, index, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_var1_all
+
+!   INTEGER FUNCTION nfmpi_get_var1(ncid, varid, index, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_var1
+
+!   INTEGER FUNCTION nfmpi_get_var1_all(ncid, varid, index, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_var1_all
+
+    INTEGER FUNCTION nfmpi_put_var1_text(ncid, varid, index, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     CHARACTER,                     INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_var1_text
+
+    INTEGER FUNCTION nfmpi_put_var1_text_all(ncid, varid, index, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     CHARACTER,                     INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_var1_text_all
+
+    INTEGER FUNCTION nfmpi_get_var1_text(ncid, varid, index, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     CHARACTER,                     INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_var1_text
+
+    INTEGER FUNCTION nfmpi_get_var1_text_all(ncid, varid, index, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     CHARACTER,                     INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_var1_text_all
+
+    INTEGER FUNCTION nfmpi_put_var1_int1(ncid, varid, index, i1val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1val
+    END     FUNCTION nfmpi_put_var1_int1
+
+    INTEGER FUNCTION nfmpi_put_var1_int1_all(ncid, varid, index, i1val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1val
+    END     FUNCTION nfmpi_put_var1_int1_all
+
+    INTEGER FUNCTION nfmpi_get_var1_int1(ncid, varid, index, i1val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1val
+    END     FUNCTION nfmpi_get_var1_int1
+
+    INTEGER FUNCTION nfmpi_get_var1_int1_all(ncid, varid, index, i1val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1val
+    END     FUNCTION nfmpi_get_var1_int1_all
+
+    INTEGER FUNCTION nfmpi_put_var1_int2(ncid, varid, index, i2val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2val
+    END     FUNCTION nfmpi_put_var1_int2
+
+    INTEGER FUNCTION nfmpi_put_var1_int2_all(ncid, varid, index, i2val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2val
+    END     FUNCTION nfmpi_put_var1_int2_all
+
+    INTEGER FUNCTION nfmpi_get_var1_int2(ncid, varid, index, i2val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2val
+    END     FUNCTION nfmpi_get_var1_int2
+
+    INTEGER FUNCTION nfmpi_get_var1_int2_all(ncid, varid, index, i2val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2val
+    END     FUNCTION nfmpi_get_var1_int2_all
+
+    INTEGER FUNCTION nfmpi_put_var1_int(ncid, varid, index, ival)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ival
+    END     FUNCTION nfmpi_put_var1_int
+
+    INTEGER FUNCTION nfmpi_put_var1_int_all(ncid, varid, index, ival)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ival
+    END     FUNCTION nfmpi_put_var1_int_all
+
+    INTEGER FUNCTION nfmpi_get_var1_int(ncid, varid, index, ival)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER,                       INTENT(OUT) :: ival
+    END     FUNCTION nfmpi_get_var1_int
+
+    INTEGER FUNCTION nfmpi_get_var1_int_all(ncid, varid, index, ival)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER,                       INTENT(OUT) :: ival
+    END     FUNCTION nfmpi_get_var1_int_all
+
+    INTEGER FUNCTION nfmpi_put_var1_real(ncid, varid, index, rval)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     REAL,                          INTENT(@INTENTV@) :: rval
+    END     FUNCTION nfmpi_put_var1_real
+
+    INTEGER FUNCTION nfmpi_put_var1_real_all(ncid, varid, index, rval)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     REAL,                          INTENT(@INTENTV@) :: rval
+    END     FUNCTION nfmpi_put_var1_real_all
+
+    INTEGER FUNCTION nfmpi_get_var1_real(ncid, varid, index, rval)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     REAL,                          INTENT(OUT) :: rval
+    END     FUNCTION nfmpi_get_var1_real
+
+    INTEGER FUNCTION nfmpi_get_var1_real_all(ncid, varid, index, rval)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     REAL,                          INTENT(OUT) :: rval
+    END     FUNCTION nfmpi_get_var1_real_all
+
+    INTEGER FUNCTION nfmpi_put_var1_double(ncid, varid, index, dval)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dval
+    END     FUNCTION nfmpi_put_var1_double
+
+    INTEGER FUNCTION nfmpi_put_var1_double_all(ncid, varid, index, dval)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dval
+    END     FUNCTION nfmpi_put_var1_double_all
+
+    INTEGER FUNCTION nfmpi_get_var1_double(ncid, varid, index, dval)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dval
+    END     FUNCTION nfmpi_get_var1_double
+
+    INTEGER FUNCTION nfmpi_get_var1_double_all(ncid, varid, index, dval)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dval
+    END     FUNCTION nfmpi_get_var1_double_all
+
+    INTEGER FUNCTION nfmpi_put_var1_int8(ncid, varid, index, i8val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8val
+    END     FUNCTION nfmpi_put_var1_int8
+
+    INTEGER FUNCTION nfmpi_put_var1_int8_all(ncid, varid, index, i8val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8val
+    END     FUNCTION nfmpi_put_var1_int8_all
+
+    INTEGER FUNCTION nfmpi_get_var1_int8(ncid, varid, index, i8val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8val
+    END     FUNCTION nfmpi_get_var1_int8
+
+    INTEGER FUNCTION nfmpi_get_var1_int8_all(ncid, varid, index, i8val)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8val
+    END     FUNCTION nfmpi_get_var1_int8_all
+
+!
+! Blocking put/get variable subarray APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_put_vara(ncid, varid, start, count, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_vara
+
+!   INTEGER FUNCTION nfmpi_put_vara_all(ncid, varid, start, count, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_vara_all
+
+!   INTEGER FUNCTION nfmpi_get_vara(ncid, varid, start, count, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_vara
+
+!   INTEGER FUNCTION nfmpi_get_vara_all (ncid, varid, start, count, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_vara_all
+
+    INTEGER FUNCTION nfmpi_put_vara_text(ncid, varid, start, count, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_vara_text
+
+    INTEGER FUNCTION nfmpi_put_vara_text_all(ncid, varid, start, count, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_vara_text_all
+
+    INTEGER FUNCTION nfmpi_get_vara_text(ncid, varid, start, count, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_vara_text
+
+    INTEGER FUNCTION nfmpi_get_vara_text_all(ncid, varid, start, count, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_vara_text_all
+
+    INTEGER FUNCTION nfmpi_put_vara_int1(ncid, varid, start, count, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END     FUNCTION nfmpi_put_vara_int1
+
+    INTEGER FUNCTION nfmpi_put_vara_int1_all(ncid, varid, start, count, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END     FUNCTION nfmpi_put_vara_int1_all
+
+    INTEGER FUNCTION nfmpi_get_vara_int1(ncid, varid, start, count, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_vara_int1
+
+    INTEGER FUNCTION nfmpi_get_vara_int1_all(ncid, varid, start, count, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_vara_int1_all
+
+    INTEGER FUNCTION nfmpi_put_vara_int2(ncid, varid, start, count, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END     FUNCTION nfmpi_put_vara_int2
+
+    INTEGER FUNCTION nfmpi_put_vara_int2_all(ncid, varid, start, count, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END     FUNCTION nfmpi_put_vara_int2_all
+
+    INTEGER FUNCTION nfmpi_get_vara_int2(ncid, varid, start, count, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_vara_int2
+
+    INTEGER FUNCTION nfmpi_get_vara_int2_all(ncid, varid, start, count, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_vara_int2_all
+
+    INTEGER FUNCTION nfmpi_put_vara_int(ncid, varid, start, count, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END     FUNCTION nfmpi_put_vara_int
+
+    INTEGER FUNCTION nfmpi_put_vara_int_all(ncid, varid, start, count, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END     FUNCTION nfmpi_put_vara_int_all
+
+    INTEGER FUNCTION nfmpi_get_vara_int(ncid, varid, start, count, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_vara_int
+
+    INTEGER FUNCTION nfmpi_get_vara_int_all(ncid, varid, start, count, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_vara_int_all
+
+    INTEGER FUNCTION nfmpi_put_vara_real(ncid, varid, start, count, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END     FUNCTION nfmpi_put_vara_real
+
+    INTEGER FUNCTION nfmpi_put_vara_real_all(ncid, varid, start, count, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END     FUNCTION nfmpi_put_vara_real_all
+
+    INTEGER FUNCTION nfmpi_get_vara_real(ncid, varid, start, count, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_vara_real
+
+    INTEGER FUNCTION nfmpi_get_vara_real_all(ncid, varid, start, count, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_vara_real_all
+
+    INTEGER FUNCTION nfmpi_put_vara_double(ncid, varid, start, count, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END     FUNCTION nfmpi_put_vara_double
+
+    INTEGER FUNCTION nfmpi_put_vara_double_all(ncid, varid, start, count, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END     FUNCTION nfmpi_put_vara_double_all
+
+    INTEGER FUNCTION nfmpi_get_vara_double(ncid, varid, start, count, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_vara_double
+
+    INTEGER FUNCTION nfmpi_get_vara_double_all(ncid, varid, start, count, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_vara_double_all
+
+    INTEGER FUNCTION nfmpi_put_vara_int8(ncid, varid, start, count, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END     FUNCTION nfmpi_put_vara_int8
+
+    INTEGER FUNCTION nfmpi_put_vara_int8_all(ncid, varid, start, count, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END     FUNCTION nfmpi_put_vara_int8_all
+
+    INTEGER FUNCTION nfmpi_get_vara_int8(ncid, varid, start, count, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_vara_int8
+
+    INTEGER FUNCTION nfmpi_get_vara_int8_all(ncid, varid, start, count, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_vara_int8_all
+
+!
+! Blocking put/get variable strided subarray APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_put_vars(ncid, varid, start, count, stride, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_vars
+
+!   INTEGER FUNCTION nfmpi_put_vars_all(ncid, varid, start, count, stride, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_vars_all
+
+!   INTEGER FUNCTION nfmpi_get_vars(ncid, varid, start, count, stride, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_vars
+
+!   INTEGER FUNCTION nfmpi_get_vars_all(ncid, varid, start, count, stride, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_vars_all
+
+    INTEGER FUNCTION nfmpi_put_vars_text(ncid, varid, start, count, stride, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_vars_text
+
+    INTEGER FUNCTION nfmpi_put_vars_text_all(ncid, varid, start, count, stride, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_vars_text_all
+
+    INTEGER FUNCTION nfmpi_get_vars_text(ncid, varid, start, count, stride, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_vars_text
+
+    INTEGER FUNCTION nfmpi_get_vars_text_all(ncid, varid, start, count, stride, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_vars_text_all
+
+    INTEGER FUNCTION nfmpi_put_vars_int1(ncid, varid, start, count, stride, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END     FUNCTION nfmpi_put_vars_int1
+
+    INTEGER FUNCTION nfmpi_put_vars_int1_all(ncid, varid, start, count, stride, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END     FUNCTION nfmpi_put_vars_int1_all
+
+    INTEGER FUNCTION nfmpi_get_vars_int1(ncid, varid, start, count, stride, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_vars_int1
+
+    INTEGER FUNCTION nfmpi_get_vars_int1_all(ncid, varid, start, count, stride, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_vars_int1_all
+
+    INTEGER FUNCTION nfmpi_put_vars_int2(ncid, varid, start, count, stride, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END     FUNCTION nfmpi_put_vars_int2
+
+    INTEGER FUNCTION nfmpi_put_vars_int2_all(ncid, varid, start, count, stride, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END     FUNCTION nfmpi_put_vars_int2_all
+
+    INTEGER FUNCTION nfmpi_get_vars_int2(ncid, varid, start, count, stride, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_vars_int2
+
+    INTEGER FUNCTION nfmpi_get_vars_int2_all(ncid, varid, start, count, stride, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_vars_int2_all
+
+    INTEGER FUNCTION nfmpi_put_vars_int(ncid, varid, start, count, stride, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END     FUNCTION nfmpi_put_vars_int
+
+    INTEGER FUNCTION nfmpi_put_vars_int_all(ncid, varid, start, count, stride, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END     FUNCTION nfmpi_put_vars_int_all
+
+    INTEGER FUNCTION nfmpi_get_vars_int(ncid, varid, start, count, stride, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_vars_int
+
+    INTEGER FUNCTION nfmpi_get_vars_int_all(ncid, varid, start, count, stride, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_vars_int_all
+
+    INTEGER FUNCTION nfmpi_put_vars_real(ncid, varid, start, count, stride, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END     FUNCTION nfmpi_put_vars_real
+
+    INTEGER FUNCTION nfmpi_put_vars_real_all(ncid, varid, start, count, stride, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END     FUNCTION nfmpi_put_vars_real_all
+
+    INTEGER FUNCTION nfmpi_get_vars_real(ncid, varid, start, count, stride, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_vars_real
+
+    INTEGER FUNCTION nfmpi_get_vars_real_all(ncid, varid, start, count, stride, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_vars_real_all
+
+    INTEGER FUNCTION nfmpi_put_vars_double(ncid, varid, start, count, stride, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END     FUNCTION nfmpi_put_vars_double
+
+    INTEGER FUNCTION nfmpi_put_vars_double_all(ncid, varid, start, count, stride, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END     FUNCTION nfmpi_put_vars_double_all
+
+    INTEGER FUNCTION nfmpi_get_vars_double(ncid, varid, start, count, stride, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_vars_double
+
+    INTEGER FUNCTION nfmpi_get_vars_double_all(ncid, varid, start, count, stride, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_vars_double_all
+
+    INTEGER FUNCTION nfmpi_put_vars_int8(ncid, varid, start, count, stride, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END     FUNCTION nfmpi_put_vars_int8
+
+    INTEGER FUNCTION nfmpi_put_vars_int8_all(ncid, varid, start, count, stride, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END     FUNCTION nfmpi_put_vars_int8_all
+
+    INTEGER FUNCTION nfmpi_get_vars_int8(ncid, varid, start, count, stride, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_vars_int8
+
+    INTEGER FUNCTION nfmpi_get_vars_int8_all(ncid, varid, start, count, stride, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_vars_int8_all
+
+!
+! Blocking put/get variable mapped and strided subarray APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_put_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_varm
+
+!   INTEGER FUNCTION nfmpi_put_varm_all(ncid, varid, start, count, stride, imap, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_put_varm_all
+
+!   INTEGER FUNCTION nfmpi_get_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_varm
+
+!   INTEGER FUNCTION nfmpi_get_varm_all(ncid, varid, start, count, stride, imap, buf, bufcount, datatype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!   END     FUNCTION nfmpi_get_varm_all
+
+    INTEGER FUNCTION nfmpi_put_varm_text(ncid, varid, start, count, stride, imap, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_varm_text
+
+    INTEGER FUNCTION nfmpi_put_varm_text_all(ncid, varid, start, count, stride, imap, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END     FUNCTION nfmpi_put_varm_text_all
+
+    INTEGER FUNCTION nfmpi_get_varm_text(ncid, varid, start, count, stride, imap, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_varm_text
+
+    INTEGER FUNCTION nfmpi_get_varm_text_all(ncid, varid, start, count, stride, imap, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END     FUNCTION nfmpi_get_varm_text_all
+
+    INTEGER FUNCTION nfmpi_put_varm_int1(ncid, varid, start, count, stride, imap, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END     FUNCTION nfmpi_put_varm_int1
+
+    INTEGER FUNCTION nfmpi_put_varm_int1_all(ncid, varid, start, count, stride, imap, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END     FUNCTION nfmpi_put_varm_int1_all
+
+    INTEGER FUNCTION nfmpi_get_varm_int1(ncid, varid, start, count, stride, imap, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_varm_int1
+
+    INTEGER FUNCTION nfmpi_get_varm_int1_all(ncid, varid, start, count, stride, imap, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END     FUNCTION nfmpi_get_varm_int1_all
+
+    INTEGER FUNCTION nfmpi_put_varm_int2(ncid, varid, start, count, stride, imap, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END     FUNCTION nfmpi_put_varm_int2
+
+    INTEGER FUNCTION nfmpi_put_varm_int2_all(ncid, varid, start, count, stride, imap, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END     FUNCTION nfmpi_put_varm_int2_all
+
+    INTEGER FUNCTION nfmpi_get_varm_int2(ncid, varid, start, count, stride, imap, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_varm_int2
+
+    INTEGER FUNCTION nfmpi_get_varm_int2_all(ncid, varid, start, count, stride, imap, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END     FUNCTION nfmpi_get_varm_int2_all
+
+    INTEGER FUNCTION nfmpi_put_varm_int (ncid, varid, start, count, stride, imap, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END     FUNCTION nfmpi_put_varm_int
+
+    INTEGER FUNCTION nfmpi_put_varm_int_all(ncid, varid, start, count, stride, imap, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END     FUNCTION nfmpi_put_varm_int_all
+
+    INTEGER FUNCTION nfmpi_get_varm_int (ncid, varid, start, count, stride, imap, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_varm_int
+
+    INTEGER FUNCTION nfmpi_get_varm_int_all(ncid, varid, start, count, stride, imap, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END     FUNCTION nfmpi_get_varm_int_all
+
+    INTEGER FUNCTION nfmpi_put_varm_real(ncid, varid, start, count, stride, imap, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END     FUNCTION nfmpi_put_varm_real
+
+    INTEGER FUNCTION nfmpi_put_varm_real_all(ncid, varid, start, count, stride, imap, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END     FUNCTION nfmpi_put_varm_real_all
+
+    INTEGER FUNCTION nfmpi_get_varm_real(ncid, varid, start, count, stride, imap, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_varm_real
+
+    INTEGER FUNCTION nfmpi_get_varm_real_all(ncid, varid, start, count, stride, imap, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END     FUNCTION nfmpi_get_varm_real_all
+
+    INTEGER FUNCTION nfmpi_put_varm_double(ncid, varid, start, count, stride, imap, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END     FUNCTION nfmpi_put_varm_double
+
+    INTEGER FUNCTION nfmpi_put_varm_double_all(ncid, varid, start, count, stride, imap, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END     FUNCTION nfmpi_put_varm_double_all
+
+    INTEGER FUNCTION nfmpi_get_varm_double(ncid, varid, start, count, stride, imap, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_varm_double
+
+    INTEGER FUNCTION nfmpi_get_varm_double_all(ncid, varid, start, count, stride, imap, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END     FUNCTION nfmpi_get_varm_double_all
+
+    INTEGER FUNCTION nfmpi_put_varm_int8(ncid, varid, start, count, stride, imap, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END     FUNCTION nfmpi_put_varm_int8
+
+    INTEGER FUNCTION nfmpi_put_varm_int8_all(ncid, varid, start, count, stride, imap, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END     FUNCTION nfmpi_put_varm_int8_all
+
+    INTEGER FUNCTION nfmpi_get_varm_int8(ncid, varid, start, count, stride, imap, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_varm_int8
+
+    INTEGER FUNCTION nfmpi_get_varm_int8_all(ncid, varid, start, count, stride, imap, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END     FUNCTION nfmpi_get_varm_int8_all
+
+!
+! non-blocking APIs
+!
+
+!
+! Nonblocking iput/iget the entire variable APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_iput_var(ncid, varid, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iput_var
+
+!   INTEGER FUNCTION nfmpi_iget_var(ncid, varid, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iget_var
+
+
+    INTEGER FUNCTION nfmpi_iput_var_text(ncid, varid, text, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var_text
+
+    INTEGER FUNCTION nfmpi_iget_var_text(ncid, varid, text, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var_text
+
+    INTEGER FUNCTION nfmpi_iput_var_int1(ncid, varid, i1vals, req)
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var_int1
+
+    INTEGER FUNCTION nfmpi_iget_var_int1(ncid, varid, i1vals, req)
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var_int1
+
+    INTEGER FUNCTION nfmpi_iput_var_int2(ncid, varid, i2vals, req)
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var_int2
+
+    INTEGER FUNCTION nfmpi_iget_var_int2(ncid, varid, i2vals, req)
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var_int2
+
+    INTEGER FUNCTION nfmpi_iput_var_int(ncid, varid, ivals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var_int
+
+    INTEGER FUNCTION nfmpi_iget_var_int(ncid, varid, ivals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var_int
+
+    INTEGER FUNCTION nfmpi_iput_var_real(ncid, varid, rvals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var_real
+
+    INTEGER FUNCTION nfmpi_iget_var_real(ncid, varid, rvals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     REAL,                          INTENT(OUT) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var_real
+
+    INTEGER FUNCTION nfmpi_iput_var_double(ncid, varid, dvals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var_double
+
+    INTEGER FUNCTION nfmpi_iget_var_double(ncid, varid, dvals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var_double
+
+    INTEGER FUNCTION nfmpi_iput_var_int8(ncid, varid, i8vals, req)
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var_int8
+
+    INTEGER FUNCTION nfmpi_iget_var_int8(ncid, varid, i8vals, req)
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var_int8
+
+!
+! Nonblocking iput/iget a single variable element APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_iput_var1(ncid, varid, index, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iput_var1
+
+!   INTEGER FUNCTION nfmpi_iget_var1(ncid, varid, index, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iget_var1
+
+    INTEGER FUNCTION nfmpi_iput_var1_text(ncid, varid, index, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     CHARACTER,                     INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var1_text
+
+    INTEGER FUNCTION nfmpi_iget_var1_text(ncid, varid, index, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     CHARACTER,                     INTENT(OUT) :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var1_text
+
+    INTEGER FUNCTION nfmpi_iput_var1_int1(ncid, varid, index, i1val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var1_int1
+
+    INTEGER FUNCTION nfmpi_iget_var1_int1(ncid, varid, index, i1val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var1_int1
+
+    INTEGER FUNCTION nfmpi_iput_var1_int2(ncid, varid, index, i2val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var1_int2
+
+    INTEGER FUNCTION nfmpi_iget_var1_int2(ncid, varid, index, i2val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var1_int2
+
+    INTEGER FUNCTION nfmpi_iput_var1_int(ncid, varid, index, ival, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ival
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var1_int
+
+    INTEGER FUNCTION nfmpi_iget_var1_int(ncid, varid, index, ival, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER,                       INTENT(OUT) :: ival
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var1_int
+
+    INTEGER FUNCTION nfmpi_iput_var1_real(ncid, varid, index, rval, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     REAL,                          INTENT(@INTENTV@) :: rval
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var1_real
+
+    INTEGER FUNCTION nfmpi_iget_var1_real(ncid, varid, index, rval, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     REAL,                          INTENT(OUT) :: rval
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var1_real
+
+    INTEGER FUNCTION nfmpi_iput_var1_double(ncid, varid, index, dval, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dval
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var1_double
+
+    INTEGER FUNCTION nfmpi_iget_var1_double(ncid, varid, index, dval, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dval
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var1_double
+
+    INTEGER FUNCTION nfmpi_iput_var1_int8(ncid, varid, index, i8val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_var1_int8
+
+    INTEGER FUNCTION nfmpi_iget_var1_int8(ncid, varid, index, i8val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_var1_int8
+
+!
+! Nonblocking iput/iget a variable subarray APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_iput_vara(ncid, varid, start, count, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iput_vara
+
+!   INTEGER FUNCTION nfmpi_iget_vara(ncid, varid, start, count, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iget_vara
+
+    INTEGER FUNCTION nfmpi_iput_vara_text(ncid, varid, start, count, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vara_text
+
+    INTEGER FUNCTION nfmpi_iget_vara_text(ncid, varid, start, count, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vara_text
+
+    INTEGER FUNCTION nfmpi_iput_vara_int1(ncid, varid, start, count, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vara_int1
+
+    INTEGER FUNCTION nfmpi_iget_vara_int1(ncid, varid, start, count, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vara_int1
+
+    INTEGER FUNCTION nfmpi_iput_vara_int2(ncid, varid, start, count, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vara_int2
+
+    INTEGER FUNCTION nfmpi_iget_vara_int2(ncid, varid, start, count, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vara_int2
+
+    INTEGER FUNCTION nfmpi_iput_vara_int(ncid, varid, start, count, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vara_int
+
+    INTEGER FUNCTION nfmpi_iget_vara_int(ncid, varid, start, count, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vara_int
+
+    INTEGER FUNCTION nfmpi_iput_vara_real(ncid, varid, start, count, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vara_real
+
+    INTEGER FUNCTION nfmpi_iget_vara_real(ncid, varid, start, count, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vara_real
+
+    INTEGER FUNCTION nfmpi_iput_vara_double(ncid, varid, start, count, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vara_double
+
+    INTEGER FUNCTION nfmpi_iget_vara_double(ncid, varid, start, count, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vara_double
+
+    INTEGER FUNCTION nfmpi_iput_vara_int8(ncid, varid, start, count, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vara_int8
+
+    INTEGER FUNCTION nfmpi_iget_vara_int8(ncid, varid, start, count, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vara_int8
+
+!
+! Nonblocking iput/iget a variable strided subarray APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_iput_vars(ncid, varid, start, count, stride, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iput_vars
+
+!   INTEGER FUNCTION nfmpi_iget_vars(ncid, varid, start, count, stride, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iget_vars
+
+    INTEGER FUNCTION nfmpi_iput_vars_text(ncid, varid, start, count, stride, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vars_text
+
+    INTEGER FUNCTION nfmpi_iget_vars_text(ncid, varid, start, count, stride, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vars_text
+
+    INTEGER FUNCTION nfmpi_iput_vars_int1(ncid, varid, start, count, stride, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vars_int1
+
+    INTEGER FUNCTION nfmpi_iget_vars_int1(ncid, varid, start, count, stride, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vars_int1
+
+    INTEGER FUNCTION nfmpi_iput_vars_int2(ncid, varid, start, count, stride, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vars_int2
+
+    INTEGER FUNCTION nfmpi_iget_vars_int2(ncid, varid, start, count, stride, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vars_int2
+
+    INTEGER FUNCTION nfmpi_iput_vars_int(ncid, varid, start, count, stride, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vars_int
+
+    INTEGER FUNCTION nfmpi_iget_vars_int(ncid, varid, start, count, stride, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vars_int
+
+    INTEGER FUNCTION nfmpi_iput_vars_real(ncid, varid, start, count, stride, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vars_real
+
+    INTEGER FUNCTION nfmpi_iget_vars_real(ncid, varid, start, count, stride, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vars_real
+
+    INTEGER FUNCTION nfmpi_iput_vars_double(ncid, varid, start, count, stride, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vars_double
+
+    INTEGER FUNCTION nfmpi_iget_vars_double(ncid, varid, start, count, stride, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vars_double
+
+    INTEGER FUNCTION nfmpi_iput_vars_int8(ncid, varid, start, count, stride, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_vars_int8
+
+    INTEGER FUNCTION nfmpi_iget_vars_int8(ncid, varid, start, count, stride, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_vars_int8
+
+!
+! Nonblocking iput/iget a variable mapped and strided subarray APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_iput_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iput_varm
+
+!   INTEGER FUNCTION nfmpi_iget_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_iget_varm
+
+    INTEGER FUNCTION nfmpi_iput_varm_text(ncid, varid, start, count, stride, imap, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_varm_text
+
+    INTEGER FUNCTION nfmpi_iget_varm_text(ncid, varid, start, count, stride, imap, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_varm_text
+
+    INTEGER FUNCTION nfmpi_iput_varm_int1(ncid, varid, start, count, stride, imap, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_varm_int1
+
+    INTEGER FUNCTION nfmpi_iget_varm_int1(ncid, varid, start, count, stride, imap, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_varm_int1
+
+    INTEGER FUNCTION nfmpi_iput_varm_int2(ncid, varid, start, count, stride, imap, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_varm_int2
+
+    INTEGER FUNCTION nfmpi_iget_varm_int2(ncid, varid, start, count, stride, imap, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_varm_int2
+
+    INTEGER FUNCTION nfmpi_iput_varm_int (ncid, varid, start, count, stride, imap, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_varm_int
+
+    INTEGER FUNCTION nfmpi_iget_varm_int (ncid, varid, start, count, stride, imap, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_varm_int
+
+    INTEGER FUNCTION nfmpi_iput_varm_real(ncid, varid, start, count, stride, imap, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_varm_real
+
+    INTEGER FUNCTION nfmpi_iget_varm_real(ncid, varid, start, count, stride, imap, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_varm_real
+
+    INTEGER FUNCTION nfmpi_iput_varm_double(ncid, varid, start, count, stride, imap, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_varm_double
+
+    INTEGER FUNCTION nfmpi_iget_varm_double(ncid, varid, start, count, stride, imap, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_varm_double
+
+    INTEGER FUNCTION nfmpi_iput_varm_int8(ncid, varid, start, count, stride, imap, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iput_varm_int8
+
+    INTEGER FUNCTION nfmpi_iget_varm_int8(ncid, varid, start, count, stride, imap, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_iget_varm_int8
+
+!
+! Nonblocking buffered put APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_bput_var(ncid, varid, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bput_var
+
+!   INTEGER FUNCTION nfmpi_bget_var(ncid, varid, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bget_var
+
+    INTEGER FUNCTION nfmpi_bput_var_text(ncid, varid, text, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     CHARACTER(len=*),              INTENT(IN)  :: text(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var_text
+
+    INTEGER FUNCTION nfmpi_bput_var_int1(ncid, varid, i1vals, req)
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var_int1
+
+    INTEGER FUNCTION nfmpi_bput_var_int2(ncid, varid, i2vals, req)
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var_int2
+
+    INTEGER FUNCTION nfmpi_bput_var_int(ncid, varid, ivals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var_int
+
+    INTEGER FUNCTION nfmpi_bput_var_real(ncid, varid, rvals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     REAL,                          INTENT(IN)  :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var_real
+
+    INTEGER FUNCTION nfmpi_bput_var_double(ncid, varid, dvals, req)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var_double
+
+    INTEGER FUNCTION nfmpi_bput_var_int8(ncid, varid, i8vals, req)
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var_int8
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_bput_var1(ncid, varid, start, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bput_var1
+
+!   INTEGER FUNCTION nfmpi_bget_var1(ncid, varid, start, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bget_var1
+
+    INTEGER FUNCTION nfmpi_bput_var1_text(ncid, varid, index, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     CHARACTER,                     INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var1_text
+
+    INTEGER FUNCTION nfmpi_bput_var1_int1(ncid, varid, index, i1val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var1_int1
+
+    INTEGER FUNCTION nfmpi_bput_var1_int2(ncid, varid, index, i2val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var1_int2
+
+    INTEGER FUNCTION nfmpi_bput_var1_int(ncid, varid, index, ival, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER,                       INTENT(IN)  :: ival
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var1_int
+
+    INTEGER FUNCTION nfmpi_bput_var1_real(ncid, varid, index, rval, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     REAL,                          INTENT(IN)  :: rval
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var1_real
+
+    INTEGER FUNCTION nfmpi_bput_var1_double(ncid, varid, index, dval, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     DOUBLE PRECISION,              INTENT(IN)  :: dval
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var1_double
+
+    INTEGER FUNCTION nfmpi_bput_var1_int8(ncid, varid, index, i8val, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8val
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_var1_int8
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_bput_vara(ncid, varid, start, count, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bput_vara
+
+!   INTEGER FUNCTION nfmpi_bget_vara(ncid, varid, start, count, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bget_vara
+
+    INTEGER FUNCTION nfmpi_bput_vara_text(ncid, varid, start, count, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vara_text
+
+    INTEGER FUNCTION nfmpi_bput_vara_int1(ncid, varid, start, count, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vara_int1
+
+    INTEGER FUNCTION nfmpi_bput_vara_int2(ncid, varid, start, count, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vara_int2
+
+    INTEGER FUNCTION nfmpi_bput_vara_int(ncid, varid, start, count, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER,                       INTENT(IN)  :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vara_int
+
+    INTEGER FUNCTION nfmpi_bput_vara_real(ncid, varid, start, count, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     REAL,                          INTENT(IN)  :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vara_real
+
+    INTEGER FUNCTION nfmpi_bput_vara_double(ncid, varid, start, count, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vara_double
+
+    INTEGER FUNCTION nfmpi_bput_vara_int8(ncid, varid, start, count, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vara_int8
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_bput_vars(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bput_vars
+
+!   INTEGER FUNCTION nfmpi_bget_vars(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bget_vars
+
+    INTEGER FUNCTION nfmpi_bput_vars_text(ncid, varid, start, count, stride, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vars_text
+
+    INTEGER FUNCTION nfmpi_bput_vars_int1(ncid, varid, start, count, stride, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vars_int1
+
+    INTEGER FUNCTION nfmpi_bput_vars_int2(ncid, varid, start, count, stride, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vars_int2
+
+    INTEGER FUNCTION nfmpi_bput_vars_int(ncid, varid, start, count, stride, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER,                       INTENT(IN)  :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vars_int
+
+    INTEGER FUNCTION nfmpi_bput_vars_real(ncid, varid, start, count, stride, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     REAL,                          INTENT(IN)  :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vars_real
+
+    INTEGER FUNCTION nfmpi_bput_vars_double(ncid, varid, start, count, stride, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vars_double
+
+    INTEGER FUNCTION nfmpi_bput_vars_int8(ncid, varid, start, count, stride, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_vars_int8
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_bput_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bput_varm
+
+!   INTEGER FUNCTION nfmpi_bget_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: datatype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END     FUNCTION nfmpi_bget_varm
+
+    INTEGER FUNCTION nfmpi_bput_varm_text(ncid, varid, start, count, stride, imap, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_varm_text
+
+    INTEGER FUNCTION nfmpi_bput_varm_int1(ncid, varid, start, count, stride, imap, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_varm_int1
+
+    INTEGER FUNCTION nfmpi_bput_varm_int2(ncid, varid, start, count, stride, imap, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_varm_int2
+
+    INTEGER FUNCTION nfmpi_bput_varm_int (ncid, varid, start, count, stride, imap, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER,                       INTENT(IN)  :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_varm_int
+
+    INTEGER FUNCTION nfmpi_bput_varm_real(ncid, varid, start, count, stride, imap, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     REAL,                          INTENT(IN)  :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_varm_real
+
+    INTEGER FUNCTION nfmpi_bput_varm_double(ncid, varid, start, count, stride, imap, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_varm_double
+
+    INTEGER FUNCTION nfmpi_bput_varm_int8(ncid, varid, start, count, stride, imap, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END     FUNCTION nfmpi_bput_varm_int8
+
+    INTEGER FUNCTION nfmpi_buffer_attach(ncid, bufsize)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufsize
+    END     FUNCTION nfmpi_buffer_attach
+
+    INTEGER FUNCTION nfmpi_buffer_detach(ncid)
+                     INTEGER,                       INTENT(IN)  :: ncid
+    END     FUNCTION nfmpi_buffer_detach
+
+    INTEGER FUNCTION nfmpi_inq_buffer_usage(ncid, usage)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: usage
+    END     FUNCTION nfmpi_inq_buffer_usage
+
+    INTEGER FUNCTION nfmpi_inq_buffer_size(ncid, buf_size)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: buf_size
+    END     FUNCTION nfmpi_inq_buffer_size
+
+!
+! Blocking and nonblocking varn APIs
+!
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_get_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(IN)  :: num
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: buftype
+!   END FUNCTION nfmpi_get_varn
+
+!   INTEGER FUNCTION nfmpi_get_varn_all(ncid, varid, num, starts, counts, buf, bufcount, buftype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(IN)  :: num
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: buftype
+!   END FUNCTION nfmpi_get_varn_all
+
+!   INTEGER FUNCTION nfmpi_put_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(IN)  :: num
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: buftype
+!   END FUNCTION nfmpi_put_varn
+
+!   INTEGER FUNCTION nfmpi_put_varn_all(ncid, varid, num, starts, counts, buf, bufcount, buftype)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(IN)  :: num
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: buftype
+!   END FUNCTION nfmpi_put_varn_all
+
+
+    INTEGER FUNCTION nfmpi_get_varn_text(ncid, varid, num, starts, counts, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END FUNCTION nfmpi_get_varn_text
+
+    INTEGER FUNCTION nfmpi_get_varn_int1(ncid, varid, num, starts, counts, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END FUNCTION nfmpi_get_varn_int1
+
+    INTEGER FUNCTION nfmpi_get_varn_int2(ncid, varid, num, starts, counts, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END FUNCTION nfmpi_get_varn_int2
+
+    INTEGER FUNCTION nfmpi_get_varn_int(ncid, varid, num, starts, counts, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END FUNCTION nfmpi_get_varn_int
+
+    INTEGER FUNCTION nfmpi_get_varn_real(ncid, varid, num, starts, counts, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END FUNCTION nfmpi_get_varn_real
+
+    INTEGER FUNCTION nfmpi_get_varn_double(ncid, varid, num, starts, counts, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END FUNCTION nfmpi_get_varn_double
+
+    INTEGER FUNCTION nfmpi_get_varn_int8(ncid, varid, num, starts, counts, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END FUNCTION nfmpi_get_varn_int8
+
+    INTEGER FUNCTION nfmpi_get_varn_text_all(ncid, varid, num, starts, counts, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+    END FUNCTION nfmpi_get_varn_text_all
+
+    INTEGER FUNCTION nfmpi_get_varn_int1_all(ncid, varid, num, starts, counts, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+    END FUNCTION nfmpi_get_varn_int1_all
+
+    INTEGER FUNCTION nfmpi_get_varn_int2_all(ncid, varid, num, starts, counts, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+    END FUNCTION nfmpi_get_varn_int2_all
+
+    INTEGER FUNCTION nfmpi_get_varn_int_all(ncid, varid, num, starts, counts, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+    END FUNCTION nfmpi_get_varn_int_all
+
+    INTEGER FUNCTION nfmpi_get_varn_real_all(ncid, varid, num, starts, counts, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+    END FUNCTION nfmpi_get_varn_real_all
+
+    INTEGER FUNCTION nfmpi_get_varn_double_all(ncid, varid, num, starts, counts, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+    END FUNCTION nfmpi_get_varn_double_all
+
+    INTEGER FUNCTION nfmpi_get_varn_int8_all(ncid, varid, num, starts, counts, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+    END FUNCTION nfmpi_get_varn_int8_all
+
+
+    INTEGER FUNCTION nfmpi_put_varn_text(ncid, varid, num, starts, counts, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END FUNCTION nfmpi_put_varn_text
+
+    INTEGER FUNCTION nfmpi_put_varn_int1(ncid, varid, num, starts, counts, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END FUNCTION nfmpi_put_varn_int1
+
+    INTEGER FUNCTION nfmpi_put_varn_int2(ncid, varid, num, starts, counts, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END FUNCTION nfmpi_put_varn_int2
+
+    INTEGER FUNCTION nfmpi_put_varn_int(ncid, varid, num, starts, counts, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END FUNCTION nfmpi_put_varn_int
+
+    INTEGER FUNCTION nfmpi_put_varn_real(ncid, varid, num, starts, counts, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END FUNCTION nfmpi_put_varn_real
+
+    INTEGER FUNCTION nfmpi_put_varn_double(ncid, varid, num, starts, counts, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END FUNCTION nfmpi_put_varn_double
+
+    INTEGER FUNCTION nfmpi_put_varn_int8(ncid, varid, num, starts, counts, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END FUNCTION nfmpi_put_varn_int8
+
+    INTEGER FUNCTION nfmpi_put_varn_text_all(ncid, varid, num, starts, counts, text)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+    END FUNCTION nfmpi_put_varn_text_all
+
+    INTEGER FUNCTION nfmpi_put_varn_int1_all(ncid, varid, num, starts, counts, i1vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+    END FUNCTION nfmpi_put_varn_int1_all
+
+    INTEGER FUNCTION nfmpi_put_varn_int2_all(ncid, varid, num, starts, counts, i2vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+    END FUNCTION nfmpi_put_varn_int2_all
+
+    INTEGER FUNCTION nfmpi_put_varn_int_all(ncid, varid, num, starts, counts, ivals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+    END FUNCTION nfmpi_put_varn_int_all
+
+    INTEGER FUNCTION nfmpi_put_varn_real_all(ncid, varid, num, starts, counts, rvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+    END FUNCTION nfmpi_put_varn_real_all
+
+    INTEGER FUNCTION nfmpi_put_varn_double_all(ncid, varid, num, starts, counts, dvals)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+    END FUNCTION nfmpi_put_varn_double_all
+
+    INTEGER FUNCTION nfmpi_put_varn_int8_all(ncid, varid, num, starts, counts, i8vals)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+    END FUNCTION nfmpi_put_varn_int8_all
+
+!
+! flexible APIs, not available yet for Fortran 77
+!
+!   INTEGER FUNCTION nfmpi_iget_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(IN)  :: num
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+!                    <type>,                        INTENT(OUT) :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: buftype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END FUNCTION nfmpi_iget_varn
+
+!   INTEGER FUNCTION nfmpi_iput_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(IN)  :: num
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: buftype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END FUNCTION nfmpi_iput_varn
+
+    INTEGER FUNCTION nfmpi_iget_varn_text(ncid, varid, num, starts, counts, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     CHARACTER(len=*),              INTENT(OUT) :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iget_varn_text
+
+    INTEGER FUNCTION nfmpi_iget_varn_int1(ncid, varid, num, starts, counts, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iget_varn_int1
+
+    INTEGER FUNCTION nfmpi_iget_varn_int2(ncid, varid, num, starts, counts, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iget_varn_int2
+
+    INTEGER FUNCTION nfmpi_iget_varn_int(ncid, varid, num, starts, counts, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER,                       INTENT(OUT) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iget_varn_int
+
+    INTEGER FUNCTION nfmpi_iget_varn_real(ncid, varid, num, starts, counts, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     REAL,                          INTENT(OUT) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iget_varn_real
+
+    INTEGER FUNCTION nfmpi_iget_varn_double(ncid, varid, num, starts, counts, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iget_varn_double
+
+    INTEGER FUNCTION nfmpi_iget_varn_int8(ncid, varid, num, starts, counts, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iget_varn_int8
+
+    INTEGER FUNCTION nfmpi_iput_varn_text(ncid, varid, num, starts, counts, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iput_varn_text
+
+    INTEGER FUNCTION nfmpi_iput_varn_int1(ncid, varid, num, starts, counts, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iput_varn_int1
+
+    INTEGER FUNCTION nfmpi_iput_varn_int2(ncid, varid, num, starts, counts, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iput_varn_int2
+
+    INTEGER FUNCTION nfmpi_iput_varn_int(ncid, varid, num, starts, counts, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iput_varn_int
+
+    INTEGER FUNCTION nfmpi_iput_varn_real(ncid, varid, num, starts, counts, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iput_varn_real
+
+    INTEGER FUNCTION nfmpi_iput_varn_double(ncid, varid, num, starts, counts, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iput_varn_double
+
+    INTEGER FUNCTION nfmpi_iput_varn_int8(ncid, varid, num, starts, counts, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_iput_varn_int8
+
+!   INTEGER FUNCTION nfmpi_bput_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype, req)
+!                    INTEGER,                       INTENT(IN)  :: ncid
+!                    INTEGER,                       INTENT(IN)  :: varid
+!                    INTEGER,                       INTENT(IN)  :: num
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+!                    <type>,                        INTENT(IN)  :: buf(*)
+!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
+!                    INTEGER,                       INTENT(IN)  :: buftype
+!                    INTEGER,                       INTENT(OUT) :: req
+!   END FUNCTION nfmpi_bput_varn
+
+    INTEGER FUNCTION nfmpi_bput_varn_text(ncid, varid, num, starts, counts, text, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     CHARACTER(len=*),              INTENT(IN)  :: text
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_bput_varn_text
+
+    INTEGER FUNCTION nfmpi_bput_varn_int1(ncid, varid, num, starts, counts, i1vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: OneByteInt = selected_int_kind(2)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_bput_varn_int1
+
+    INTEGER FUNCTION nfmpi_bput_varn_int2(ncid, varid, num, starts, counts, i2vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: TwoByteInt = selected_int_kind(4)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_bput_varn_int2
+
+    INTEGER FUNCTION nfmpi_bput_varn_int(ncid, varid, num, starts, counts, ivals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_bput_varn_int
+
+    INTEGER FUNCTION nfmpi_bput_varn_real(ncid, varid, num, starts, counts, rvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_bput_varn_real
+
+    INTEGER FUNCTION nfmpi_bput_varn_double(ncid, varid, num, starts, counts, dvals, req)
+                     @USE_MPIF_HEADER@
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_bput_varn_double
+
+    INTEGER FUNCTION nfmpi_bput_varn_int8(ncid, varid, num, starts, counts, i8vals, req)
+                     @USE_MPIF_HEADER@
+                     integer, parameter :: EightByteInt = selected_int_kind(18)
+                     INTEGER,                       INTENT(IN)  :: ncid
+                     INTEGER,                       INTENT(IN)  :: varid
+                     INTEGER,                       INTENT(IN)  :: num
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
+                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
+                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
+                     INTEGER,                       INTENT(OUT) :: req
+    END FUNCTION nfmpi_bput_varn_int8
+
+END INTERFACE
+
+
+! PnetCDF flexible APIs
+      integer, external :: &
+          nfmpi_put_var, &
+          nfmpi_put_var1, &
+          nfmpi_put_vara, &
+          nfmpi_put_vars, &
+          nfmpi_put_varm, &
+          nfmpi_get_var, &
+          nfmpi_get_var1, &
+          nfmpi_get_vara, &
+          nfmpi_get_vars, &
+          nfmpi_get_varm, &
+          nfmpi_put_vard, &
+          nfmpi_get_vard, &
+          nfmpi_def_var_fill, &
+          nfmpi_inq_var_fill
+
+!         nfmpi_put_var_all
+! collective put an entire variable does not make sense
+!
+
+      integer, external :: &
+          nfmpi_put_var1_all, &
+          nfmpi_put_vara_all, &
+          nfmpi_put_vars_all, &
+          nfmpi_put_varm_all, &
+          nfmpi_get_var_all, &
+          nfmpi_get_var1_all, &
+          nfmpi_get_vara_all, &
+          nfmpi_get_vars_all, &
+          nfmpi_get_varm_all, &
+          nfmpi_iput_var, &
+          nfmpi_iput_var1, &
+          nfmpi_iput_vara, &
+          nfmpi_iput_vars, &
+          nfmpi_iput_varm, &
+          nfmpi_iget_var, &
+          nfmpi_iget_var1, &
+          nfmpi_iget_vara, &
+          nfmpi_iget_vars, &
+          nfmpi_iget_varm, &
+          nfmpi_bput_var, &
+          nfmpi_bput_var1, &
+          nfmpi_bput_vara, &
+          nfmpi_bput_vars, &
+          nfmpi_bput_varm, &
+          nfmpi_get_varn, &
+          nfmpi_put_varn, &
+          nfmpi_get_varn_all, &
+          nfmpi_put_varn_all, &
+          nfmpi_iget_varn, &
+          nfmpi_iput_varn, &
+          nfmpi_bput_varn, &
+          nfmpi_put_vard_all, &
+          nfmpi_get_vard_all
+
diff --git a/src/libf90/attributes.f90 b/src/binding/f90/attributes.fh
similarity index 99%
rename from src/libf90/attributes.f90
rename to src/binding/f90/attributes.fh
index 09e274e..33e115c 100644
--- a/src/libf90/attributes.f90
+++ b/src/binding/f90/attributes.fh
@@ -2,10 +2,10 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: attributes.f90 2519 2016-10-06 00:41:33Z wkliao $
+! $Id: attributes.fh 3341 2017-08-25 22:29:08Z wkliao $
 !
 ! This file is taken from netcdf_attributes.f90 with changes for PnetCDF use
-!  
+!
 !
 
   !
diff --git a/src/libf90/dims.f90 b/src/binding/f90/dims.fh
similarity index 96%
rename from src/libf90/dims.f90
rename to src/binding/f90/dims.fh
index 793b1ea..d564d1c 100644
--- a/src/libf90/dims.f90
+++ b/src/binding/f90/dims.fh
@@ -2,10 +2,10 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: dims.f90 2688 2016-12-08 19:57:37Z wkliao $
+! $Id: dims.fh 3341 2017-08-25 22:29:08Z wkliao $
 !
 ! This file is taken from netcdf_dims.f90 with changes for PnetCDF use
-!  
+!
 !
 
   !
@@ -18,7 +18,7 @@
     integer (kind=MPI_OFFSET_KIND), intent( in) :: len
     integer,                        intent(out) :: dimid
     integer                                     :: nf90mpi_def_dim
-  
+
     nf90mpi_def_dim = nfmpi_def_dim(ncid, name, len, dimid)
   end function nf90mpi_def_dim
   ! -----------
@@ -27,7 +27,7 @@
     character (len=*),   intent( in) :: name
     integer,             intent(out) :: dimid
     integer                          :: nf90mpi_inq_dimid
-    
+
     nf90mpi_inq_dimid = nfmpi_inq_dimid(ncid, name, dimid)
   end function nf90mpi_inq_dimid
   ! -----------
@@ -45,10 +45,10 @@
     character (len=*), optional,              intent(out) :: name
     integer (kind=MPI_OFFSET_KIND), optional, intent(out) :: len
     integer                                               :: nf90mpi_inquire_dimension
-    
+
     character (len=nf90_max_name)  :: dimName
     integer (kind=MPI_OFFSET_KIND) :: length
-    
+
     nf90mpi_inquire_dimension = nfmpi_inq_dim(ncid, dimid, dimName, length)
     if (nf90mpi_inquire_dimension .NE. NF90_NOERR) return
     if(present(name)) name = trim(dimName)
diff --git a/src/libf90/file.f90 b/src/binding/f90/file.fh
similarity index 92%
rename from src/libf90/file.f90
rename to src/binding/f90/file.fh
index e888ff0..e650208 100644
--- a/src/libf90/file.f90
+++ b/src/binding/f90/file.fh
@@ -2,19 +2,18 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: file.f90 2658 2016-11-27 22:13:48Z wkliao $
+! $Id: file.fh 3341 2017-08-25 22:29:08Z wkliao $
 !
 ! This file is taken from netcdf_file.f90 with changes for PnetCDF use
-!  
+!
 !
 
-! This is part of the netCDF F90 API, or. Copyright 2006 UCAR. See COPYRIGHT file
+! This is part of the netCDF F90 API. Copyright 2006 UCAR. See COPYRIGHT file
 ! for details.
 
 ! This file contains the netcdf file functions that are shared by
 ! netcdf-3 and netcdf-4.
 
-! $Id: file.f90 2658 2016-11-27 22:13:48Z wkliao $
 ! -------
 function nf90mpi_inq_libvers()
   character(len = 80) :: nf90mpi_inq_libvers
@@ -43,6 +42,13 @@ function nf90mpi_strerrno(ncerr)
   end if
 end function nf90mpi_strerrno
 ! -------
+function nf90mpi_issyserr(ncerr)
+  integer, intent( in) :: ncerr
+  logical              :: nf90mpi_issyserr
+
+  nf90mpi_issyserr = nfmpi_issyserr(ncerr)
+end function nf90mpi_issyserr
+! -------
 !
 ! File level control routines:
 !
@@ -50,14 +56,14 @@ end function nf90mpi_strerrno
 !   integer, intent( in) :: ncid
 !   integer, intent(out) :: pe
 !   integer              :: nf90mpi_inq_base_pe
-! 
+!
 !   nf90mpi_inq_base_pe = nfmpi_inq_base_pe(ncid, pe)
 ! end function nf90mpi_inq_base_pe
 ! -------
 ! function nf90mpi_set_base_pe(ncid, pe)
 !   integer, intent( in) :: ncid, pe
 !   integer              :: nf90mpi_set_base_pe
-! 
+!
 !   nf90mpi_set_base_pe = nfmpi_set_base_pe(ncid, pe)
 ! end function nf90mpi_set_base_pe
 ! -------
@@ -80,7 +86,7 @@ function nf90mpi_open(mpi_comm, path, omode, mpi_info, ncid)
 end function nf90mpi_open
 ! -------
 function nf90mpi_set_fill(ncid, fillmode, old_mode)
-  integer, intent( in) :: ncid, fillmode 
+  integer, intent( in) :: ncid, fillmode
   integer, intent(out) :: old_mode
   integer              :: nf90mpi_set_fill
 
@@ -126,6 +132,13 @@ function nf90mpi_sync(ncid)
   nf90mpi_sync = nfmpi_sync(ncid)
 end function nf90mpi_sync
 ! -------
+function nf90mpi_sync_numrecs(ncid)
+  integer, intent( in) :: ncid
+  integer              :: nf90mpi_sync_numrecs
+
+  nf90mpi_sync_numrecs = nfmpi_sync_numrecs(ncid)
+end function nf90mpi_sync_numrecs
+! -------
 function nf90mpi_abort(ncid)
   integer, intent( in) :: ncid
   integer              :: nf90mpi_abort
@@ -149,8 +162,8 @@ function nf90mpi_delete(name, mpi_info)
 end function nf90mpi_delete
 
 !
-! A single file level inquiry routine 
-! 
+! A single file level inquiry routine
+!
 function nf90mpi_inquire(ncid, nDimensions, nVariables, nAttributes, unlimitedDimId, formatNum)
   integer,           intent( in) :: ncid
   integer, optional, intent(out) :: nDimensions, nVariables, nAttributes, unlimitedDimId, formatNum
@@ -159,7 +172,7 @@ function nf90mpi_inquire(ncid, nDimensions, nVariables, nAttributes, unlimitedDi
   integer :: nDims, nVars, nGAtts, unlimDimId, frmt
 
   nf90mpi_inquire = nfmpi_inq(ncid, nDims, nVars, nGAtts, unlimDimId)
-  if(present(nDimensions))    nDimensions    = nDims 
+  if(present(nDimensions))    nDimensions    = nDims
   if(present(nVariables))     nVariables     = nVars
   if(present(nAttributes))    nAttributes    = nGAtts
   if(present(unlimitedDimId)) unlimitedDimId = unlimDimId
@@ -353,3 +366,12 @@ function nf90mpi_inq_path(ncid, pathlen, path)
   nf90mpi_inq_path = nfmpi_inq_path(ncid, pathlen, path)
 end function nf90mpi_inq_path
 
+! -------
+function nf90mpi_inq_file_format(path, format)
+  character (len = *), intent( in) :: path
+  integer,             intent(out) :: format
+  integer                          :: nf90mpi_inq_file_format
+
+  nf90mpi_inq_file_format = nfmpi_inq_file_format(path, format)
+end function nf90mpi_inq_file_format
+
diff --git a/src/binding/f90/getput_text.m4 b/src/binding/f90/getput_text.m4
new file mode 100644
index 0000000..a9052ba
--- /dev/null
+++ b/src/binding/f90/getput_text.m4
@@ -0,0 +1,355 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+! Do not edit this file. It is produced from the corresponding .m4 source
+dnl
+!
+!  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
+!  See COPYRIGHT notice in top-level directory.
+!
+! $Id: getput_text.m4 3341 2017-08-25 22:29:08Z wkliao $
+!
+
+dnl
+dnl TEXTVAR1(ncid, varid, values, start, count, stride, map)
+dnl
+define(`TEXTVAR1',dnl
+`dnl
+   function nf90mpi_$1_var_text$3(ncid, varid, values, start, count, stride, map)
+     integer,                                          intent(in) :: ncid
+     integer,                                          intent(in) :: varid
+     character (len=*),                                intent($2) :: values
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent(in) :: start(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent(in) :: count(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent(in) :: stride(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent(in) :: map(:)
+
+     integer                                 :: nf90mpi_$1_var_text$3
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStart(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localCount(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStride(:)
+     integer                                 :: numDims
+
+     ! inquire variable dimensionality
+     nf90mpi_$1_var_text$3 = nfmpi_inq_varndims(ncid, varid, numDims)
+     if (nf90mpi_$1_var_text$3 .NE. NF_NOERR) return
+
+     if (.NOT. present(start)) then
+         ! allocate and set default localStart
+         allocate(localStart(numDims))
+         localStart(:) = 1
+     else
+         localStart => start
+     endif
+     if (.NOT. present(count)) then
+         ! allocate and set default localStart
+         allocate(localCount(numDims))
+         localCount (:) = 1
+         if (numDims .GT. 0) localCount (1) = LEN(values)
+     else
+         localCount => count
+     endif
+     if (.NOT. present(stride)) then
+         ! allocate and set default localStride
+         allocate(localStride(numDims))
+         localStride(:) = 1
+     else
+         localStride => stride
+     endif
+
+     if (present(map)) then
+         nf90mpi_$1_var_text$3 = &
+         nfmpi_$1_varm_text$3(ncid, varid, localStart, localCount, localStride, map, values)
+     else
+         nf90mpi_$1_var_text$3 = &
+         nfmpi_$1_vars_text$3(ncid, varid, localStart, localCount, localStride, values)
+     endif
+
+     if (.NOT. present(start))  deallocate(localStart)
+     if (.NOT. present(count))  deallocate(localCount)
+     if (.NOT. present(stride)) deallocate(localStride)
+   end function nf90mpi_$1_var_text$3
+')dnl
+
+!
+! Independent put APIs
+!
+
+TEXTVAR1(put, in)
+TEXTVAR1(get, out)
+
+!
+! Collective put APIs
+!
+
+TEXTVAR1(put, in,  _all)
+TEXTVAR1(get, out, _all)
+
+
+dnl
+dnl TEXTVAR(ncid, varid, values, start, count, stride, map)
+dnl
+define(`TEXTVAR',dnl
+`dnl
+   function nf90mpi_$1_var_$2D_text$6(ncid, varid, values, start, count, stride, map)
+     integer,                                          intent(in) :: ncid
+     integer,                                          intent(in) :: varid
+     character (len=*), dimension($3),                 intent($5) :: values
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent(in) :: start(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent(in) :: count(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent(in) :: stride(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent(in) :: map(:)
+
+     integer                                 :: nf90mpi_$1_var_$2D_text$6
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStart(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localCount(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStride(:)
+     integer                                 :: numDims
+
+     ! inquire variable dimensionality
+     nf90mpi_$1_var_$2D_text$6 = nfmpi_inq_varndims(ncid, varid, numDims)
+     if (nf90mpi_$1_var_$2D_text$6 .NE. NF_NOERR) return
+
+     if (.NOT. present(start)) then
+         ! allocate and set default localStart
+         allocate(localStart(numDims))
+         localStart(:) = 1
+     else
+         localStart => start
+     endif
+     if (.NOT. present(count)) then
+         ! allocate and set default localStart
+         allocate(localCount(numDims))
+         localCount(:) = 0
+         if (numDims .GT. 0) localCount(:$2+1) = (/ LEN(values($4)), shape(values) /)
+     else
+         localCount => count
+     endif
+     if (.NOT. present(stride)) then
+         ! allocate and set default localStride
+         allocate(localStride(numDims))
+         localStride(:) = 1
+     else
+         localStride => stride
+     endif
+
+     if (present(map)) then
+         nf90mpi_$1_var_$2D_text$6 = &
+         nfmpi_$1_varm_text$6(ncid, varid, localStart, localCount, localStride, map, values($4))
+     else
+         nf90mpi_$1_var_$2D_text$6 = &
+         nfmpi_$1_vars_text$6(ncid, varid, localStart, localCount, localStride, values($4))
+     endif
+
+     if (.NOT. present(start))  deallocate(localStart)
+     if (.NOT. present(count))  deallocate(localCount)
+     if (.NOT. present(stride)) deallocate(localStride)
+   end function nf90mpi_$1_var_$2D_text$6
+')dnl
+
+TEXTVAR(put, 1,  :,               1,              in)
+TEXTVAR(put, 2, `:,:',           `1,1',           in)
+TEXTVAR(put, 3, `:,:,:',         `1,1,1',         in)
+TEXTVAR(put, 4, `:,:,:,:',       `1,1,1,1',       in)
+TEXTVAR(put, 5, `:,:,:,:,:',     `1,1,1,1,1',     in)
+TEXTVAR(put, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
+TEXTVAR(put, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
+
+TEXTVAR(get, 1,  :,               1,              out)
+TEXTVAR(get, 2, `:,:',           `1,1',           out)
+TEXTVAR(get, 3, `:,:,:',         `1,1,1',         out)
+TEXTVAR(get, 4, `:,:,:,:',       `1,1,1,1',       out)
+TEXTVAR(get, 5, `:,:,:,:,:',     `1,1,1,1,1',     out)
+TEXTVAR(get, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out)
+TEXTVAR(get, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out)
+
+!
+! Collective APIs
+!
+
+TEXTVAR(put, 1,  :,               1,              in, _all)
+TEXTVAR(put, 2, `:,:',           `1,1',           in, _all)
+TEXTVAR(put, 3, `:,:,:',         `1,1,1',         in, _all)
+TEXTVAR(put, 4, `:,:,:,:',       `1,1,1,1',       in, _all)
+TEXTVAR(put, 5, `:,:,:,:,:',     `1,1,1,1,1',     in, _all)
+TEXTVAR(put, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in, _all)
+TEXTVAR(put, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in, _all)
+
+TEXTVAR(get, 1,  :,               1,              out, _all)
+TEXTVAR(get, 2, `:,:',           `1,1',           out, _all)
+TEXTVAR(get, 3, `:,:,:',         `1,1,1',         out, _all)
+TEXTVAR(get, 4, `:,:,:,:',       `1,1,1,1',       out, _all)
+TEXTVAR(get, 5, `:,:,:,:,:',     `1,1,1,1,1',     out, _all)
+TEXTVAR(get, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out, _all)
+TEXTVAR(get, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out, _all)
+
+!
+! Nonblocking APIs
+!
+
+dnl
+dnl NBTEXTVAR1(ncid, varid, values, req, start, count, stride, map)
+dnl
+define(`NBTEXTVAR1',dnl
+`dnl
+   function nf90mpi_$1_var_text(ncid, varid, values, req, start, count, stride, map)
+     integer,                                          intent( in) :: ncid
+     integer,                                          intent( in) :: varid
+     integer,                                          intent(out) :: req
+     character (len=*),                                intent( $2) :: values
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: start(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: count(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: stride(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: map(:)
+
+     integer                                 :: nf90mpi_$1_var_text
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStart(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localCount(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStride(:)
+     integer                                 :: numDims
+
+     ! inquire variable dimensionality
+     nf90mpi_$1_var_text = nfmpi_inq_varndims(ncid, varid, numDims)
+     if (nf90mpi_$1_var_text .NE. NF_NOERR) return
+
+     if (.NOT. present(start)) then
+         ! allocate and set default localStart
+         allocate(localStart(numDims))
+         localStart(:) = 1
+     else
+         localStart => start
+     endif
+     if (.NOT. present(count)) then
+         ! allocate and set default localStart
+         allocate(localCount(numDims))
+         localCount(:) = 1
+         if (numDims .GT. 0) localCount(1) = LEN(values)
+     else
+         localCount => count
+     endif
+     if (.NOT. present(stride)) then
+         ! allocate and set default localStride
+         allocate(localStride(numDims))
+         localStride(:) = 1
+     else
+         localStride => stride
+     endif
+
+     if (present(map)) then
+         nf90mpi_$1_var_text = &
+         nfmpi_$1_varm_text(ncid, varid, localStart, localCount, localStride, map, values, req)
+     else
+         nf90mpi_$1_var_text = &
+         nfmpi_$1_vars_text(ncid, varid, localStart, localCount, localStride, values, req)
+     endif
+
+     if (.NOT. present(start))  deallocate(localStart)
+     if (.NOT. present(count))  deallocate(localCount)
+     if (.NOT. present(stride)) deallocate(localStride)
+   end function nf90mpi_$1_var_text
+')dnl
+
+!
+! iput APIs
+!
+
+NBTEXTVAR1(iput, in)
+NBTEXTVAR1(iget, out)
+
+!
+! bput APIs
+!
+
+NBTEXTVAR1(bput, in)
+
+
+dnl
+dnl NBTEXTVAR(ncid, varid, values, req, start, count, stride, map)
+dnl
+define(`NBTEXTVAR',dnl
+`dnl
+   function nf90mpi_$1_var_$2D_text(ncid, varid, values, req, start, count, stride, map)
+     integer,                                          intent( in) :: ncid
+     integer,                                          intent( in) :: varid
+     integer,                                          intent(out) :: req
+     character (len=*), dimension($3),                 intent( $5) :: values
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: start(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: count(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: stride(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: map(:)
+
+     integer                                 :: nf90mpi_$1_var_$2D_text
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStart(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localCount(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStride(:)
+     integer                                 :: numDims
+
+     ! inquire variable dimensionality
+     nf90mpi_$1_var_$2D_text = nfmpi_inq_varndims(ncid, varid, numDims)
+     if (nf90mpi_$1_var_$2D_text .NE. NF_NOERR) return
+
+     if (.NOT. present(start)) then
+         ! allocate and set default localStart
+         allocate(localStart(numDims))
+         localStart(:) = 1
+     else
+         localStart => start
+     endif
+     if (.NOT. present(count)) then
+         ! allocate and set default localStart
+         allocate(localCount(numDims))
+         localCount(:) = 0
+         if (numDims .GT. 0) localCount(:$2+1) = (/ LEN(values($4)), shape(values) /)
+     else
+         localCount => count
+     endif
+     if (.NOT. present(stride)) then
+         ! allocate and set default localStride
+         allocate(localStride(numDims))
+         localStride(:) = 1
+     else
+         localStride => stride
+     endif
+
+     if (present(map)) then
+         nf90mpi_$1_var_$2D_text = &
+         nfmpi_$1_varm_text(ncid, varid, localStart, localCount, localStride, map, values($4), req)
+     else
+         nf90mpi_$1_var_$2D_text = &
+         nfmpi_$1_vars_text(ncid, varid, localStart, localCount, localStride, values($4), req)
+     endif
+
+     if (.NOT. present(start))  deallocate(localStart)
+     if (.NOT. present(count))  deallocate(localCount)
+     if (.NOT. present(stride)) deallocate(localStride)
+   end function nf90mpi_$1_var_$2D_text
+')dnl
+
+NBTEXTVAR(iput, 1,  :,               1,              in)
+NBTEXTVAR(iput, 2, `:,:',           `1,1',           in)
+NBTEXTVAR(iput, 3, `:,:,:',         `1,1,1',         in)
+NBTEXTVAR(iput, 4, `:,:,:,:',       `1,1,1,1',       in)
+NBTEXTVAR(iput, 5, `:,:,:,:,:',     `1,1,1,1,1',     in)
+NBTEXTVAR(iput, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
+NBTEXTVAR(iput, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
+
+NBTEXTVAR(iget, 1,  :,               1,              out)
+NBTEXTVAR(iget, 2, `:,:',           `1,1',           out)
+NBTEXTVAR(iget, 3, `:,:,:',         `1,1,1',         out)
+NBTEXTVAR(iget, 4, `:,:,:,:',       `1,1,1,1',       out)
+NBTEXTVAR(iget, 5, `:,:,:,:,:',     `1,1,1,1,1',     out)
+NBTEXTVAR(iget, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out)
+NBTEXTVAR(iget, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out)
+
+!
+! bput APIs
+!
+
+NBTEXTVAR(bput, 1,  :,               1,              in)
+NBTEXTVAR(bput, 2, `:,:',           `1,1',           in)
+NBTEXTVAR(bput, 3, `:,:,:',         `1,1,1',         in)
+NBTEXTVAR(bput, 4, `:,:,:,:',       `1,1,1,1',       in)
+NBTEXTVAR(bput, 5, `:,:,:,:,:',     `1,1,1,1,1',     in)
+NBTEXTVAR(bput, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
+NBTEXTVAR(bput, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
+
diff --git a/src/binding/f90/getput_var.m4 b/src/binding/f90/getput_var.m4
new file mode 100644
index 0000000..6f37614
--- /dev/null
+++ b/src/binding/f90/getput_var.m4
@@ -0,0 +1,750 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+! Do not edit this file. It is produced from the corresponding .m4 source
+dnl
+!
+!  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
+!  See COPYRIGHT notice in top-level directory.
+!
+! $Id: getput_var.m4 3341 2017-08-25 22:29:08Z wkliao $
+!
+
+dnl
+dnl BVAR1, blocking var1 APIs
+dnl
+define(`BVAR1',dnl
+`dnl
+   ! This is the case when the I/O buffer is a scalar
+   function nf90mpi_$1_var_$3$2(ncid, varid, buf, start, bufcount, buftype)
+     integer,                                          intent( in) :: ncid
+     integer,                                          intent( in) :: varid
+     $4 (kind=$3),                                     intent($6)  :: buf
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: start(:)
+     integer (kind=MPI_OFFSET_KIND),         optional, intent( in) :: bufcount
+     integer,                                optional, intent( in) :: buftype
+
+     integer                                 :: nf90mpi_$1_var_$3$2
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStart(:)
+     integer                                 :: numDims
+
+     ! inquire variable dimensionality
+     nf90mpi_$1_var_$3$2 = nfmpi_inq_varndims(ncid, varid, numDims)
+     if (nf90mpi_$1_var_$3$2 .NE. NF_NOERR) return
+
+     if (.NOT. present(start)) then
+         ! allocate and set default localStart
+         allocate(localStart(numDims))
+         localStart(:) = 1
+     else
+         localStart => start
+     endif
+
+     if (present(buftype)) then
+         nf90mpi_$1_var_$3$2 = &
+         nfmpi_$1_var1$2(ncid, varid, localStart, buf, bufcount, buftype)
+     else
+         nf90mpi_$1_var_$3$2 = &
+         nfmpi_$1_var1_$5$2(ncid, varid, localStart, buf)
+     endif
+
+     if (.NOT. present(start)) deallocate(localStart)
+   end function nf90mpi_$1_var_$3$2
+')dnl
+
+BVAR1(put,     , OneByteInt,    integer, int1,   in)
+BVAR1(put,     , TwoByteInt,    integer, int2,   INTENTV)
+BVAR1(put,     , FourByteInt,   integer, int,    INTENTV)
+BVAR1(put,     , FourByteReal,  real,    real,   INTENTV)
+BVAR1(put,     , EightByteReal, real,    double, INTENTV)
+BVAR1(put,     , EightByteInt,  integer, int8,   INTENTV)
+
+BVAR1(put, _all, OneByteInt,    integer, int1,   in)
+BVAR1(put, _all, TwoByteInt,    integer, int2,   INTENTV)
+BVAR1(put, _all, FourByteInt,   integer, int,    INTENTV)
+BVAR1(put, _all, FourByteReal,  real,    real,   INTENTV)
+BVAR1(put, _all, EightByteReal, real,    double, INTENTV)
+BVAR1(put, _all, EightByteInt,  integer, int8,   INTENTV)
+
+BVAR1(get,     , OneByteInt,    integer, int1,   out)
+BVAR1(get,     , TwoByteInt,    integer, int2,   out)
+BVAR1(get,     , FourByteInt,   integer, int,    out)
+BVAR1(get,     , FourByteReal,  real,    real,   out)
+BVAR1(get,     , EightByteReal, real,    double, out)
+BVAR1(get,     , EightByteInt,  integer, int8,   out)
+
+BVAR1(get, _all, OneByteInt,    integer, int1,   out)
+BVAR1(get, _all, TwoByteInt,    integer, int2,   out)
+BVAR1(get, _all, FourByteInt,   integer, int,    out)
+BVAR1(get, _all, FourByteReal,  real,    real,   out)
+BVAR1(get, _all, EightByteReal, real,    double, out)
+BVAR1(get, _all, EightByteInt,  integer, int8,   out)
+
+dnl
+dnl NBVAR1, nonblocking var1 APIs
+dnl
+define(`NBVAR1',dnl
+`dnl
+   ! This is the case when the I/O buffer is a scalar
+   function nf90mpi_$1_var_$2(ncid, varid, buf, req, start, bufcount, buftype)
+     integer,                                          intent( in) :: ncid
+     integer,                                          intent( in) :: varid
+     $3 (kind=$2),                                     intent($5)  :: buf
+     integer,                                          intent(out) :: req
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: start(:)
+     integer (kind=MPI_OFFSET_KIND),         optional, intent( in) :: bufcount
+     integer,                                optional, intent( in) :: buftype
+
+     integer                                 :: nf90mpi_$1_var_$2
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStart(:)
+     integer                                 :: numDims
+
+     ! inquire variable dimensionality
+     nf90mpi_$1_var_$2 = nfmpi_inq_varndims(ncid, varid, numDims)
+     if (nf90mpi_$1_var_$2 .NE. NF_NOERR) return
+
+     if (.NOT. present(start)) then
+         ! allocate and set default localStart
+         allocate(localStart(numDims))
+         localStart(:) = 1
+     else
+         localStart => start
+     endif
+
+     if (present(buftype)) then
+         nf90mpi_$1_var_$2 = &
+         nfmpi_$1_var1(ncid, varid, localStart, buf, bufcount, buftype, req)
+     else
+         nf90mpi_$1_var_$2 = &
+         nfmpi_$1_var1_$4(ncid, varid, localStart, buf, req)
+     endif
+
+     if (.NOT. present(start)) deallocate(localStart)
+   end function nf90mpi_$1_var_$2
+')dnl
+
+!
+! Nonblocking iput APIs
+!
+
+NBVAR1(iput, OneByteInt,    integer, int1,   in)
+NBVAR1(iput, TwoByteInt,    integer, int2,   INTENTV)
+NBVAR1(iput, FourByteInt,   integer, int,    INTENTV)
+NBVAR1(iput, FourByteReal,  real,    real,   INTENTV)
+NBVAR1(iput, EightByteReal, real,    double, INTENTV)
+NBVAR1(iput, EightByteInt,  integer, int8,   INTENTV)
+
+!
+! Nonblocking iget APIs
+!
+
+NBVAR1(iget, OneByteInt,    integer, int1,   out)
+NBVAR1(iget, TwoByteInt,    integer, int2,   out)
+NBVAR1(iget, FourByteInt,   integer, int,    out)
+NBVAR1(iget, FourByteReal,  real,    real,   out)
+NBVAR1(iget, EightByteReal, real,    double, out)
+NBVAR1(iget, EightByteInt,  integer, int8,   out)
+
+!
+! Nonblocking bput APIs
+!
+
+NBVAR1(bput, OneByteInt,    integer, int1,   in)
+NBVAR1(bput, TwoByteInt,    integer, int2,   INTENTV)
+NBVAR1(bput, FourByteInt,   integer, int,    INTENTV)
+NBVAR1(bput, FourByteReal,  real,    real,   INTENTV)
+NBVAR1(bput, EightByteReal, real,    double, INTENTV)
+NBVAR1(bput, EightByteInt,  integer, int8,   INTENTV)
+
+dnl
+dnl VAR(ncid, varid, values, start, count, stride, map)
+dnl
+define(`VAR',dnl
+`dnl
+   function nf90mpi_$1_var_$2D_$3$8(ncid, varid, values, start, count, stride, map, bufcount, buftype)
+     integer,                                          intent( in) :: ncid
+     integer,                                          intent( in) :: varid
+     $4 (kind=$3), dimension($6),                      intent( $7) :: values
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: start(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: count(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: stride(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: map(:)
+     integer (kind=MPI_OFFSET_KIND),         optional, intent( in) :: bufcount
+     integer,                                optional, intent( in) :: buftype
+
+     integer                                 :: nf90mpi_$1_var_$2D_$3$8
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStart(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localCount(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStride(:)
+     integer                                 :: numDims
+
+     ! inquire variable dimensionality
+     nf90mpi_$1_var_$2D_$3$8 = nfmpi_inq_varndims(ncid, varid, numDims)
+     if (nf90mpi_$1_var_$2D_$3$8 .NE. NF_NOERR) return
+
+     if (.NOT. present(start)) then
+         ! allocate and set default localStart
+         allocate(localStart(numDims))
+         localStart(:) = 1
+     else
+         localStart => start
+     endif
+     if (.NOT. present(count)) then
+         ! allocate and set default localStart
+         allocate(localCount(numDims))
+         localCount(:) = 1
+         if (numDims .GT. 0) localCount(:$2) = shape(values)
+     else
+         localCount => count
+     endif
+     if (.NOT. present(stride)) then
+         ! allocate and set default localStride
+         allocate(localStride(numDims))
+         localStride(:) = 1
+     else
+         localStride => stride
+     endif
+
+     if (present(map)) then
+         if (present(buftype)) then
+             nf90mpi_$1_var_$2D_$3$8 = &
+             nfmpi_$1_varm$8(ncid, varid, localStart, localCount, localStride, map, values, bufcount, buftype)
+         else
+             nf90mpi_$1_var_$2D_$3$8 = &
+             nfmpi_$1_varm_$5$8(ncid, varid, localStart, localCount, localStride, map, values)
+         endif
+     else if (present(stride)) then
+         if (present(buftype)) then
+             nf90mpi_$1_var_$2D_$3$8 = &
+             nfmpi_$1_vars$8(ncid, varid, localStart, localCount, localStride, values, bufcount, buftype)
+         else
+             nf90mpi_$1_var_$2D_$3$8 = &
+             nfmpi_$1_vars_$5$8(ncid, varid, localStart, localCount, localStride, values)
+         endif
+     else
+         if (present(buftype)) then
+             nf90mpi_$1_var_$2D_$3$8 = &
+             nfmpi_$1_vara$8(ncid, varid, localStart, localCount, values, bufcount, buftype)
+         else
+             nf90mpi_$1_var_$2D_$3$8 = &
+             nfmpi_$1_vara_$5$8(ncid, varid, localStart, localCount, values)
+         endif
+     endif
+
+     if (.NOT. present(start))  deallocate(localStart)
+     if (.NOT. present(count))  deallocate(localCount)
+     if (.NOT. present(stride)) deallocate(localStride)
+   end function nf90mpi_$1_var_$2D_$3$8
+')dnl
+
+!
+! Independent put APIs
+!
+
+VAR(put, 1, OneByteInt, integer, int1,  :,              in)
+VAR(put, 2, OneByteInt, integer, int1, `:,:',           in)
+VAR(put, 3, OneByteInt, integer, int1, `:,:,:',         in)
+VAR(put, 4, OneByteInt, integer, int1, `:,:,:,:',       in)
+VAR(put, 5, OneByteInt, integer, int1, `:,:,:,:,:',     in)
+VAR(put, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
+VAR(put, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
+
+VAR(put, 1, TwoByteInt, integer, int2,  :,              INTENTV)
+VAR(put, 2, TwoByteInt, integer, int2, `:,:',           INTENTV)
+VAR(put, 3, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
+VAR(put, 4, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
+VAR(put, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
+VAR(put, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
+VAR(put, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
+
+VAR(put, 1, FourByteInt, integer, int,  :,              INTENTV)
+VAR(put, 2, FourByteInt, integer, int, `:,:',           INTENTV)
+VAR(put, 3, FourByteInt, integer, int, `:,:,:',         INTENTV)
+VAR(put, 4, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
+VAR(put, 5, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
+VAR(put, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
+VAR(put, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
+
+VAR(put, 1, FourByteReal, real,   real,  :,              INTENTV)
+VAR(put, 2, FourByteReal, real,   real, `:,:',           INTENTV)
+VAR(put, 3, FourByteReal, real,   real, `:,:,:',         INTENTV)
+VAR(put, 4, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
+VAR(put, 5, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
+VAR(put, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
+VAR(put, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
+
+VAR(put, 1, EightByteReal, real, double,  :,              INTENTV)
+VAR(put, 2, EightByteReal, real, double, `:,:',           INTENTV)
+VAR(put, 3, EightByteReal, real, double, `:,:,:',         INTENTV)
+VAR(put, 4, EightByteReal, real, double, `:,:,:,:',       INTENTV)
+VAR(put, 5, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
+VAR(put, 6, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
+VAR(put, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
+
+VAR(put, 1, EightByteInt, integer, int8,  :,              INTENTV)
+VAR(put, 2, EightByteInt, integer, int8, `:,:',           INTENTV)
+VAR(put, 3, EightByteInt, integer, int8, `:,:,:',         INTENTV)
+VAR(put, 4, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
+VAR(put, 5, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
+VAR(put, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
+VAR(put, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
+
+!
+! Independent get APIs
+!
+
+VAR(get, 1, OneByteInt, integer, int1,  :,              out)
+VAR(get, 2, OneByteInt, integer, int1, `:,:',           out)
+VAR(get, 3, OneByteInt, integer, int1, `:,:,:',         out)
+VAR(get, 4, OneByteInt, integer, int1, `:,:,:,:',       out)
+VAR(get, 5, OneByteInt, integer, int1, `:,:,:,:,:',     out)
+VAR(get, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   out)
+VAR(get, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out)
+
+VAR(get, 1, TwoByteInt, integer, int2,  :,              out)
+VAR(get, 2, TwoByteInt, integer, int2, `:,:',           out)
+VAR(get, 3, TwoByteInt, integer, int2, `:,:,:',         out)
+VAR(get, 4, TwoByteInt, integer, int2, `:,:,:,:',       out)
+VAR(get, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     out)
+VAR(get, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out)
+VAR(get, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out)
+
+VAR(get, 1, FourByteInt, integer, int,  :,              out)
+VAR(get, 2, FourByteInt, integer, int, `:,:',           out)
+VAR(get, 3, FourByteInt, integer, int, `:,:,:',         out)
+VAR(get, 4, FourByteInt, integer, int, `:,:,:,:',       out)
+VAR(get, 5, FourByteInt, integer, int, `:,:,:,:,:',     out)
+VAR(get, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   out)
+VAR(get, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', out)
+
+VAR(get, 1, FourByteReal, real,   real,  :,              out)
+VAR(get, 2, FourByteReal, real,   real, `:,:',           out)
+VAR(get, 3, FourByteReal, real,   real, `:,:,:',         out)
+VAR(get, 4, FourByteReal, real,   real, `:,:,:,:',       out)
+VAR(get, 5, FourByteReal, real,   real, `:,:,:,:,:',     out)
+VAR(get, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   out)
+VAR(get, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', out)
+
+VAR(get, 1, EightByteReal, real, double,  :,              out)
+VAR(get, 2, EightByteReal, real, double, `:,:',           out)
+VAR(get, 3, EightByteReal, real, double, `:,:,:',         out)
+VAR(get, 4, EightByteReal, real, double, `:,:,:,:',       out)
+VAR(get, 5, EightByteReal, real, double, `:,:,:,:,:',     out)
+VAR(get, 6, EightByteReal, real, double, `:,:,:,:,:,:',   out)
+VAR(get, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', out)
+
+VAR(get, 1, EightByteInt, integer, int8,  :,              out)
+VAR(get, 2, EightByteInt, integer, int8, `:,:',           out)
+VAR(get, 3, EightByteInt, integer, int8, `:,:,:',         out)
+VAR(get, 4, EightByteInt, integer, int8, `:,:,:,:',       out)
+VAR(get, 5, EightByteInt, integer, int8, `:,:,:,:,:',     out)
+VAR(get, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   out)
+VAR(get, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out)
+
+!
+! collective put APIs
+!
+
+VAR(put, 1, OneByteInt, integer, int1,  :,              in, _all)
+VAR(put, 2, OneByteInt, integer, int1, `:,:',           in, _all)
+VAR(put, 3, OneByteInt, integer, int1, `:,:,:',         in, _all)
+VAR(put, 4, OneByteInt, integer, int1, `:,:,:,:',       in, _all)
+VAR(put, 5, OneByteInt, integer, int1, `:,:,:,:,:',     in, _all)
+VAR(put, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   in, _all)
+VAR(put, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in, _all)
+
+VAR(put, 1, TwoByteInt, integer, int2,  :,              INTENTV, _all)
+VAR(put, 2, TwoByteInt, integer, int2, `:,:',           INTENTV, _all)
+VAR(put, 3, TwoByteInt, integer, int2, `:,:,:',         INTENTV, _all)
+VAR(put, 4, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV, _all)
+VAR(put, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV, _all)
+VAR(put, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV, _all)
+VAR(put, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV, _all)
+
+VAR(put, 1, FourByteInt, integer, int,  :,              INTENTV, _all)
+VAR(put, 2, FourByteInt, integer, int, `:,:',           INTENTV, _all)
+VAR(put, 3, FourByteInt, integer, int, `:,:,:',         INTENTV, _all)
+VAR(put, 4, FourByteInt, integer, int, `:,:,:,:',       INTENTV, _all)
+VAR(put, 5, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV, _all)
+VAR(put, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV, _all)
+VAR(put, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV, _all)
+
+VAR(put, 1, FourByteReal, real,   real,  :,              INTENTV, _all)
+VAR(put, 2, FourByteReal, real,   real, `:,:',           INTENTV, _all)
+VAR(put, 3, FourByteReal, real,   real, `:,:,:',         INTENTV, _all)
+VAR(put, 4, FourByteReal, real,   real, `:,:,:,:',       INTENTV, _all)
+VAR(put, 5, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV, _all)
+VAR(put, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV, _all)
+VAR(put, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV, _all)
+
+VAR(put, 1, EightByteReal, real, double,  :,              INTENTV, _all)
+VAR(put, 2, EightByteReal, real, double, `:,:',           INTENTV, _all)
+VAR(put, 3, EightByteReal, real, double, `:,:,:',         INTENTV, _all)
+VAR(put, 4, EightByteReal, real, double, `:,:,:,:',       INTENTV, _all)
+VAR(put, 5, EightByteReal, real, double, `:,:,:,:,:',     INTENTV, _all)
+VAR(put, 6, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV, _all)
+VAR(put, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV, _all)
+
+VAR(put, 1, EightByteInt, integer, int8,  :,              INTENTV, _all)
+VAR(put, 2, EightByteInt, integer, int8, `:,:',           INTENTV, _all)
+VAR(put, 3, EightByteInt, integer, int8, `:,:,:',         INTENTV, _all)
+VAR(put, 4, EightByteInt, integer, int8, `:,:,:,:',       INTENTV, _all)
+VAR(put, 5, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV, _all)
+VAR(put, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV, _all)
+VAR(put, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV, _all)
+!
+! collective get APIs
+!
+
+VAR(get, 1, OneByteInt, integer, int1,  :,              out, _all)
+VAR(get, 2, OneByteInt, integer, int1, `:,:',           out, _all)
+VAR(get, 3, OneByteInt, integer, int1, `:,:,:',         out, _all)
+VAR(get, 4, OneByteInt, integer, int1, `:,:,:,:',       out, _all)
+VAR(get, 5, OneByteInt, integer, int1, `:,:,:,:,:',     out, _all)
+VAR(get, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   out, _all)
+VAR(get, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out, _all)
+
+VAR(get, 1, TwoByteInt, integer, int2,  :,              out, _all)
+VAR(get, 2, TwoByteInt, integer, int2, `:,:',           out, _all)
+VAR(get, 3, TwoByteInt, integer, int2, `:,:,:',         out, _all)
+VAR(get, 4, TwoByteInt, integer, int2, `:,:,:,:',       out, _all)
+VAR(get, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     out, _all)
+VAR(get, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out, _all)
+VAR(get, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out, _all)
+
+VAR(get, 1, FourByteInt, integer, int,  :,              out, _all)
+VAR(get, 2, FourByteInt, integer, int, `:,:',           out, _all)
+VAR(get, 3, FourByteInt, integer, int, `:,:,:',         out, _all)
+VAR(get, 4, FourByteInt, integer, int, `:,:,:,:',       out, _all)
+VAR(get, 5, FourByteInt, integer, int, `:,:,:,:,:',     out, _all)
+VAR(get, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   out, _all)
+VAR(get, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', out, _all)
+
+VAR(get, 1, FourByteReal, real,   real,  :,              out, _all)
+VAR(get, 2, FourByteReal, real,   real, `:,:',           out, _all)
+VAR(get, 3, FourByteReal, real,   real, `:,:,:',         out, _all)
+VAR(get, 4, FourByteReal, real,   real, `:,:,:,:',       out, _all)
+VAR(get, 5, FourByteReal, real,   real, `:,:,:,:,:',     out, _all)
+VAR(get, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   out, _all)
+VAR(get, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', out, _all)
+
+VAR(get, 1, EightByteReal, real, double,  :,              out, _all)
+VAR(get, 2, EightByteReal, real, double, `:,:',           out, _all)
+VAR(get, 3, EightByteReal, real, double, `:,:,:',         out, _all)
+VAR(get, 4, EightByteReal, real, double, `:,:,:,:',       out, _all)
+VAR(get, 5, EightByteReal, real, double, `:,:,:,:,:',     out, _all)
+VAR(get, 6, EightByteReal, real, double, `:,:,:,:,:,:',   out, _all)
+VAR(get, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', out, _all)
+
+VAR(get, 1, EightByteInt, integer, int8,  :,              out, _all)
+VAR(get, 2, EightByteInt, integer, int8, `:,:',           out, _all)
+VAR(get, 3, EightByteInt, integer, int8, `:,:,:',         out, _all)
+VAR(get, 4, EightByteInt, integer, int8, `:,:,:,:',       out, _all)
+VAR(get, 5, EightByteInt, integer, int8, `:,:,:,:,:',     out, _all)
+VAR(get, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   out, _all)
+VAR(get, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out, _all)
+
+!
+! Nonblocking APIs
+!
+
+dnl
+dnl NBVAR(ncid, varid, values, start, count, stride, map, req)
+dnl
+define(`NBVAR',dnl
+`dnl
+   function nf90mpi_$1_var_$2D_$3(ncid, varid, values, req, start, count, stride, map, bufcount, buftype)
+     integer,                                          intent( in) :: ncid
+     integer,                                          intent( in) :: varid
+     $4 (kind=$3), dimension($6),                      intent( $7) :: values
+     integer,                                          intent(out) :: req
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: start(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: count(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: stride(:)
+     integer (kind=MPI_OFFSET_KIND), target, optional, intent( in) :: map(:)
+     integer (kind=MPI_OFFSET_KIND),         optional, intent( in) :: bufcount
+     integer,                                optional, intent( in) :: buftype
+
+     integer                                 :: nf90mpi_$1_var_$2D_$3
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStart(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localCount(:)
+     integer (kind=MPI_OFFSET_KIND), pointer :: localStride(:)
+     integer                                 :: numDims
+
+     ! inquire variable dimensionality
+     nf90mpi_$1_var_$2D_$3 = nfmpi_inq_varndims(ncid, varid, numDims)
+     if (nf90mpi_$1_var_$2D_$3 .NE. NF_NOERR) return
+
+     if (.NOT. present(start)) then
+         ! allocate and set default localStart
+         allocate(localStart(numDims))
+         localStart(:) = 1
+     else
+         localStart => start
+     endif
+     if (.NOT. present(count)) then
+         ! allocate and set default localStart
+         allocate(localCount(numDims))
+         localCount(:) = 1
+         if (numDims .GT. 0) localCount(:$2) = shape(values)
+     else
+         localCount => count
+     endif
+     if (.NOT. present(stride)) then
+         ! allocate and set default localStride
+         allocate(localStride(numDims))
+         localStride(:) = 1
+     else
+         localStride => stride
+     endif
+
+     if (present(map)) then
+         if (present(buftype)) then
+             nf90mpi_$1_var_$2D_$3 = &
+             nfmpi_$1_varm(ncid, varid, localStart, localCount, localStride, map, values, bufcount, buftype, req)
+         else
+             nf90mpi_$1_var_$2D_$3 = &
+             nfmpi_$1_varm_$5(ncid, varid, localStart, localCount, localStride, map, values, req)
+         endif
+     else if (present(stride)) then
+         if (present(buftype)) then
+             nf90mpi_$1_var_$2D_$3 = &
+             nfmpi_$1_vars(ncid, varid, localStart, localCount, localStride, values, bufcount, buftype, req)
+         else
+             nf90mpi_$1_var_$2D_$3 = &
+             nfmpi_$1_vars_$5(ncid, varid, localStart, localCount, localStride, values, req)
+         endif
+     else
+         if (present(buftype)) then
+             nf90mpi_$1_var_$2D_$3 = &
+             nfmpi_$1_vara(ncid, varid, localStart, localCount, values, bufcount, buftype, req)
+         else
+             nf90mpi_$1_var_$2D_$3 = &
+             nfmpi_$1_vara_$5(ncid, varid, localStart, localCount, values, req)
+         endif
+     endif
+
+     if (.NOT. present(start))  deallocate(localStart)
+     if (.NOT. present(count))  deallocate(localCount)
+     if (.NOT. present(stride)) deallocate(localStride)
+   end function nf90mpi_$1_var_$2D_$3
+')dnl
+
+!
+! iput APIs
+!
+
+NBVAR(iput, 1, OneByteInt, integer, int1,  :,              in)
+NBVAR(iput, 2, OneByteInt, integer, int1, `:,:',           in)
+NBVAR(iput, 3, OneByteInt, integer, int1, `:,:,:',         in)
+NBVAR(iput, 4, OneByteInt, integer, int1, `:,:,:,:',       in)
+NBVAR(iput, 5, OneByteInt, integer, int1, `:,:,:,:,:',     in)
+NBVAR(iput, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
+NBVAR(iput, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
+
+NBVAR(iput, 1, TwoByteInt, integer, int2,  :,              INTENTV)
+NBVAR(iput, 2, TwoByteInt, integer, int2, `:,:',           INTENTV)
+NBVAR(iput, 3, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
+NBVAR(iput, 4, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
+NBVAR(iput, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
+NBVAR(iput, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
+NBVAR(iput, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
+
+NBVAR(iput, 1, FourByteInt, integer, int,  :,              INTENTV)
+NBVAR(iput, 2, FourByteInt, integer, int, `:,:',           INTENTV)
+NBVAR(iput, 3, FourByteInt, integer, int, `:,:,:',         INTENTV)
+NBVAR(iput, 4, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
+NBVAR(iput, 5, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
+NBVAR(iput, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
+NBVAR(iput, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
+
+NBVAR(iput, 1, FourByteReal, real,   real,  :,              INTENTV)
+NBVAR(iput, 2, FourByteReal, real,   real, `:,:',           INTENTV)
+NBVAR(iput, 3, FourByteReal, real,   real, `:,:,:',         INTENTV)
+NBVAR(iput, 4, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
+NBVAR(iput, 5, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
+NBVAR(iput, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
+NBVAR(iput, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
+
+NBVAR(iput, 1, EightByteReal, real, double,  :,              INTENTV)
+NBVAR(iput, 2, EightByteReal, real, double, `:,:',           INTENTV)
+NBVAR(iput, 3, EightByteReal, real, double, `:,:,:',         INTENTV)
+NBVAR(iput, 4, EightByteReal, real, double, `:,:,:,:',       INTENTV)
+NBVAR(iput, 5, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
+NBVAR(iput, 6, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
+NBVAR(iput, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
+
+NBVAR(iput, 1, EightByteInt, integer, int8,  :,              INTENTV)
+NBVAR(iput, 2, EightByteInt, integer, int8, `:,:',           INTENTV)
+NBVAR(iput, 3, EightByteInt, integer, int8, `:,:,:',         INTENTV)
+NBVAR(iput, 4, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
+NBVAR(iput, 5, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
+NBVAR(iput, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
+NBVAR(iput, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
+
+!
+! iget APIs
+!
+
+NBVAR(iget, 1, OneByteInt, integer, int1,  :,              out)
+NBVAR(iget, 2, OneByteInt, integer, int1, `:,:',           out)
+NBVAR(iget, 3, OneByteInt, integer, int1, `:,:,:',         out)
+NBVAR(iget, 4, OneByteInt, integer, int1, `:,:,:,:',       out)
+NBVAR(iget, 5, OneByteInt, integer, int1, `:,:,:,:,:',     out)
+NBVAR(iget, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   out)
+NBVAR(iget, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out)
+
+NBVAR(iget, 1, TwoByteInt, integer, int2,  :,              out)
+NBVAR(iget, 2, TwoByteInt, integer, int2, `:,:',           out)
+NBVAR(iget, 3, TwoByteInt, integer, int2, `:,:,:',         out)
+NBVAR(iget, 4, TwoByteInt, integer, int2, `:,:,:,:',       out)
+NBVAR(iget, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     out)
+NBVAR(iget, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out)
+NBVAR(iget, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out)
+
+NBVAR(iget, 1, FourByteInt, integer, int,  :,              out)
+NBVAR(iget, 2, FourByteInt, integer, int, `:,:',           out)
+NBVAR(iget, 3, FourByteInt, integer, int, `:,:,:',         out)
+NBVAR(iget, 4, FourByteInt, integer, int, `:,:,:,:',       out)
+NBVAR(iget, 5, FourByteInt, integer, int, `:,:,:,:,:',     out)
+NBVAR(iget, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   out)
+NBVAR(iget, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', out)
+
+NBVAR(iget, 1, FourByteReal, real,   real,  :,              out)
+NBVAR(iget, 2, FourByteReal, real,   real, `:,:',           out)
+NBVAR(iget, 3, FourByteReal, real,   real, `:,:,:',         out)
+NBVAR(iget, 4, FourByteReal, real,   real, `:,:,:,:',       out)
+NBVAR(iget, 5, FourByteReal, real,   real, `:,:,:,:,:',     out)
+NBVAR(iget, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   out)
+NBVAR(iget, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', out)
+
+NBVAR(iget, 1, EightByteReal, real, double,  :,              out)
+NBVAR(iget, 2, EightByteReal, real, double, `:,:',           out)
+NBVAR(iget, 3, EightByteReal, real, double, `:,:,:',         out)
+NBVAR(iget, 4, EightByteReal, real, double, `:,:,:,:',       out)
+NBVAR(iget, 5, EightByteReal, real, double, `:,:,:,:,:',     out)
+NBVAR(iget, 6, EightByteReal, real, double, `:,:,:,:,:,:',   out)
+NBVAR(iget, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', out)
+
+NBVAR(iget, 1, EightByteInt, integer, int8,  :,              out)
+NBVAR(iget, 2, EightByteInt, integer, int8, `:,:',           out)
+NBVAR(iget, 3, EightByteInt, integer, int8, `:,:,:',         out)
+NBVAR(iget, 4, EightByteInt, integer, int8, `:,:,:,:',       out)
+NBVAR(iget, 5, EightByteInt, integer, int8, `:,:,:,:,:',     out)
+NBVAR(iget, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   out)
+NBVAR(iget, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out)
+
+!
+! bput APIs
+!
+
+NBVAR(bput, 1, OneByteInt, integer, int1,  :,              in)
+NBVAR(bput, 2, OneByteInt, integer, int1, `:,:',           in)
+NBVAR(bput, 3, OneByteInt, integer, int1, `:,:,:',         in)
+NBVAR(bput, 4, OneByteInt, integer, int1, `:,:,:,:',       in)
+NBVAR(bput, 5, OneByteInt, integer, int1, `:,:,:,:,:',     in)
+NBVAR(bput, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
+NBVAR(bput, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
+
+NBVAR(bput, 1, TwoByteInt, integer, int2,  :,              INTENTV)
+NBVAR(bput, 2, TwoByteInt, integer, int2, `:,:',           INTENTV)
+NBVAR(bput, 3, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
+NBVAR(bput, 4, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
+NBVAR(bput, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
+NBVAR(bput, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
+NBVAR(bput, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
+
+NBVAR(bput, 1, FourByteInt, integer, int,  :,              INTENTV)
+NBVAR(bput, 2, FourByteInt, integer, int, `:,:',           INTENTV)
+NBVAR(bput, 3, FourByteInt, integer, int, `:,:,:',         INTENTV)
+NBVAR(bput, 4, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
+NBVAR(bput, 5, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
+NBVAR(bput, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
+NBVAR(bput, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
+
+NBVAR(bput, 1, FourByteReal, real,   real,  :,              INTENTV)
+NBVAR(bput, 2, FourByteReal, real,   real, `:,:',           INTENTV)
+NBVAR(bput, 3, FourByteReal, real,   real, `:,:,:',         INTENTV)
+NBVAR(bput, 4, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
+NBVAR(bput, 5, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
+NBVAR(bput, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
+NBVAR(bput, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
+
+NBVAR(bput, 1, EightByteReal, real, double,  :,              INTENTV)
+NBVAR(bput, 2, EightByteReal, real, double, `:,:',           INTENTV)
+NBVAR(bput, 3, EightByteReal, real, double, `:,:,:',         INTENTV)
+NBVAR(bput, 4, EightByteReal, real, double, `:,:,:,:',       INTENTV)
+NBVAR(bput, 5, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
+NBVAR(bput, 6, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
+NBVAR(bput, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
+
+NBVAR(bput, 1, EightByteInt, integer, int8,  :,              INTENTV)
+NBVAR(bput, 2, EightByteInt, integer, int8, `:,:',           INTENTV)
+NBVAR(bput, 3, EightByteInt, integer, int8, `:,:,:',         INTENTV)
+NBVAR(bput, 4, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
+NBVAR(bput, 5, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
+NBVAR(bput, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
+NBVAR(bput, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
+
+!
+! Other nonblocking control APIs
+!
+
+   function nf90mpi_wait(ncid, num, req, st)
+     integer,               intent(in)    :: ncid, num
+     integer, dimension(:), intent(inout) :: req
+     integer, dimension(:), intent(out)   :: st
+     integer                              :: nf90mpi_wait
+
+     nf90mpi_wait = nfmpi_wait(ncid, num, req, st)
+   end function nf90mpi_wait
+
+   function nf90mpi_wait_all(ncid, num, req, st)
+     integer,               intent(in)    :: ncid, num
+     integer, dimension(:), intent(inout) :: req
+     integer, dimension(:), intent(out)   :: st
+     integer                              :: nf90mpi_wait_all
+
+     nf90mpi_wait_all = nfmpi_wait_all(ncid, num, req, st)
+   end function nf90mpi_wait_all
+
+   function nf90mpi_cancel(ncid, num, req, st)
+     integer,               intent(in)    :: ncid, num
+     integer, dimension(:), intent(inout) :: req
+     integer, dimension(:), intent(out)   :: st
+     integer                              :: nf90mpi_cancel
+
+     nf90mpi_cancel = nfmpi_cancel(ncid, num, req, st)
+   end function nf90mpi_cancel
+
+   function nf90mpi_buffer_attach(ncid, bufsize)
+     integer,                        intent( in) :: ncid
+     integer (kind=MPI_OFFSET_KIND), intent( in) :: bufsize
+     integer                                     :: nf90mpi_buffer_attach
+
+     nf90mpi_buffer_attach = nfmpi_buffer_attach(ncid, bufsize)
+   end function nf90mpi_buffer_attach
+
+   function nf90mpi_inq_buffer_usage(ncid, usage)
+     integer,                        intent( in) :: ncid
+     integer (kind=MPI_OFFSET_KIND), intent(out) :: usage
+     integer                                     :: nf90mpi_inq_buffer_usage
+
+     nf90mpi_inq_buffer_usage = nfmpi_inq_buffer_usage(ncid, usage)
+   end function nf90mpi_inq_buffer_usage
+
+   function nf90mpi_inq_buffer_size(ncid, buf_size)
+     integer,                        intent( in) :: ncid
+     integer (kind=MPI_OFFSET_KIND), intent(out) :: buf_size
+     integer                                     :: nf90mpi_inq_buffer_size
+
+     nf90mpi_inq_buffer_size = nfmpi_inq_buffer_usage(ncid, buf_size)
+   end function nf90mpi_inq_buffer_size
+
+   function nf90mpi_buffer_detach(ncid)
+     integer,                       intent( in) :: ncid
+     integer                                    :: nf90mpi_buffer_detach
+
+     nf90mpi_buffer_detach = nfmpi_buffer_detach(ncid)
+   end function nf90mpi_buffer_detach
+
diff --git a/src/libf90/getput_vard.m4 b/src/binding/f90/getput_vard.m4
similarity index 99%
rename from src/libf90/getput_vard.m4
rename to src/binding/f90/getput_vard.m4
index c1810b3..1492aa9 100644
--- a/src/libf90/getput_vard.m4
+++ b/src/binding/f90/getput_vard.m4
@@ -7,7 +7,7 @@ dnl
 !  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: getput_vard.m4 2221 2015-12-12 00:39:15Z wkliao $
+! $Id: getput_vard.m4 3341 2017-08-25 22:29:08Z wkliao $
 !
 
 dnl
diff --git a/src/binding/f90/getput_varn.m4 b/src/binding/f90/getput_varn.m4
new file mode 100644
index 0000000..fb51693
--- /dev/null
+++ b/src/binding/f90/getput_varn.m4
@@ -0,0 +1,694 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+! Do not edit this file. It is produced from the corresponding .m4 source
+dnl
+!
+!  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+!  See COPYRIGHT notice in top-level directory.
+!
+! $Id: getput_varn.m4 3341 2017-08-25 22:29:08Z wkliao $
+!
+
+dnl
+dnl VARN1
+dnl
+define(`VARN1',dnl
+`dnl
+   ! $1 a scalar of type $5 (kind=$4)
+   function nf90mpi_$1_varn_$4$2(ncid, varid, value, start)
+     integer,                                        intent(in) :: ncid, varid
+     $5 (kind=$4),                                   intent($3) :: value
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:), intent(in) :: start
+     integer                                                    :: nf90mpi_$1_varn_$4$2
+
+     nf90mpi_$1_varn_$4$2 = nfmpi_$1_var1_$6$2(ncid, varid, start(:,1), value)
+   end function nf90mpi_$1_varn_$4$2
+')dnl
+
+VARN1(put,     , in,      OneByteInt,    integer, int1)
+VARN1(put,     , INTENTV, TwoByteInt,    integer, int2)
+VARN1(put,     , INTENTV, FourByteInt,   integer, int)
+VARN1(put,     , INTENTV, FourByteReal,  real,    real)
+VARN1(put,     , INTENTV, EightByteReal, real,    double)
+VARN1(put,     , INTENTV, EightByteInt,  integer, int8)
+
+VARN1(put, _all, in,      OneByteInt,    integer, int1)
+VARN1(put, _all, INTENTV, TwoByteInt,    integer, int2)
+VARN1(put, _all, INTENTV, FourByteInt,   integer, int)
+VARN1(put, _all, INTENTV, FourByteReal,  real,    real)
+VARN1(put, _all, INTENTV, EightByteReal, real,    double)
+VARN1(put, _all, INTENTV, EightByteInt,  integer, int8)
+
+VARN1(get,     , out,   OneByteInt,    integer, int1)
+VARN1(get,     , out,   TwoByteInt,    integer, int2)
+VARN1(get,     , out,   FourByteInt,   integer, int)
+VARN1(get,     , out,   FourByteReal,  real,    real)
+VARN1(get,     , out,   EightByteReal, real,    double)
+VARN1(get,     , out,   EightByteInt,  integer, int8)
+
+VARN1(get, _all, out,   OneByteInt,    integer, int1)
+VARN1(get, _all, out,   TwoByteInt,    integer, int2)
+VARN1(get, _all, out,   FourByteInt,   integer, int)
+VARN1(get, _all, out,   FourByteReal,  real,    real)
+VARN1(get, _all, out,   EightByteReal, real,    double)
+VARN1(get, _all, out,   EightByteInt,  integer, int8)
+
+dnl
+dnl VARN(ncid, varid, values, num, start, count)
+dnl
+define(`VARN',dnl
+`dnl
+   function nf90mpi_$1_varn_$2D_$3$8(ncid, varid, values, num, start, count)
+     integer,                                                  intent(in) :: ncid, varid, num
+     $4 (kind=$3),                   dimension($6),            intent($7) :: values
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:),           intent(in) :: start
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:), optional, intent(in) :: count
+     integer                                                              :: nf90mpi_$1_varn_$2D_$3$8
+     integer (kind=MPI_OFFSET_KIND), allocatable                          :: localCount(:,:)
+     integer                                                              :: ndims
+
+     if (present(count)) then
+         nf90mpi_$1_varn_$2D_$3$8 = nfmpi_$1_varn_$5$8(ncid, varid, num, start, &
+                                                       count, values)
+     else
+         ! Set local arguments to default values
+         nf90mpi_$1_varn_$2D_$3$8 = nfmpi_inq_varndims(ncid, varid, ndims)
+         if (nf90mpi_$1_varn_$2D_$3$8 .NE. NF_NOERR) return
+         allocate(localCount(ndims, num))
+         localCount(:,:) = 1
+         nf90mpi_$1_varn_$2D_$3$8 = nfmpi_$1_varn_$5$8(ncid, varid, num, start, &
+                                                       localCount, values)
+         deallocate(localCount)
+     endif
+   end function nf90mpi_$1_varn_$2D_$3$8
+')dnl
+
+!
+! put APIs
+!
+
+VARN(put, 1, OneByteInt, integer, int1,  :,              in)
+VARN(put, 2, OneByteInt, integer, int1, `:,:',           in)
+VARN(put, 3, OneByteInt, integer, int1, `:,:,:',         in)
+VARN(put, 4, OneByteInt, integer, int1, `:,:,:,:',       in)
+VARN(put, 5, OneByteInt, integer, int1, `:,:,:,:,:',     in)
+VARN(put, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
+VARN(put, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
+
+VARN(put, 1, TwoByteInt, integer, int2,  :,              INTENTV)
+VARN(put, 2, TwoByteInt, integer, int2, `:,:',           INTENTV)
+VARN(put, 3, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
+VARN(put, 4, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
+VARN(put, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
+VARN(put, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
+VARN(put, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
+
+VARN(put, 1, FourByteInt, integer, int,  :,              INTENTV)
+VARN(put, 2, FourByteInt, integer, int, `:,:',           INTENTV)
+VARN(put, 3, FourByteInt, integer, int, `:,:,:',         INTENTV)
+VARN(put, 4, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
+VARN(put, 5, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
+VARN(put, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
+VARN(put, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
+
+VARN(put, 1, FourByteReal, real,   real,  :,              INTENTV)
+VARN(put, 2, FourByteReal, real,   real, `:,:',           INTENTV)
+VARN(put, 3, FourByteReal, real,   real, `:,:,:',         INTENTV)
+VARN(put, 4, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
+VARN(put, 5, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
+VARN(put, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
+VARN(put, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
+
+VARN(put, 1, EightByteReal, real, double,  :,              INTENTV)
+VARN(put, 2, EightByteReal, real, double, `:,:',           INTENTV)
+VARN(put, 3, EightByteReal, real, double, `:,:,:',         INTENTV)
+VARN(put, 4, EightByteReal, real, double, `:,:,:,:',       INTENTV)
+VARN(put, 5, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
+VARN(put, 6, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
+VARN(put, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
+
+VARN(put, 1, EightByteInt, integer, int8,  :,              INTENTV)
+VARN(put, 2, EightByteInt, integer, int8, `:,:',           INTENTV)
+VARN(put, 3, EightByteInt, integer, int8, `:,:,:',         INTENTV)
+VARN(put, 4, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
+VARN(put, 5, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
+VARN(put, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
+VARN(put, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
+
+!
+! get APIs
+!
+
+VARN(get, 1, OneByteInt, integer, int1,  :,              out)
+VARN(get, 2, OneByteInt, integer, int1, `:,:',           out)
+VARN(get, 3, OneByteInt, integer, int1, `:,:,:',         out)
+VARN(get, 4, OneByteInt, integer, int1, `:,:,:,:',       out)
+VARN(get, 5, OneByteInt, integer, int1, `:,:,:,:,:',     out)
+VARN(get, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   out)
+VARN(get, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out)
+
+VARN(get, 1, TwoByteInt, integer, int2,  :,              out)
+VARN(get, 2, TwoByteInt, integer, int2, `:,:',           out)
+VARN(get, 3, TwoByteInt, integer, int2, `:,:,:',         out)
+VARN(get, 4, TwoByteInt, integer, int2, `:,:,:,:',       out)
+VARN(get, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     out)
+VARN(get, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out)
+VARN(get, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out)
+
+VARN(get, 1, FourByteInt, integer, int,  :,              out)
+VARN(get, 2, FourByteInt, integer, int, `:,:',           out)
+VARN(get, 3, FourByteInt, integer, int, `:,:,:',         out)
+VARN(get, 4, FourByteInt, integer, int, `:,:,:,:',       out)
+VARN(get, 5, FourByteInt, integer, int, `:,:,:,:,:',     out)
+VARN(get, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   out)
+VARN(get, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', out)
+
+VARN(get, 1, FourByteReal, real,   real,  :,              out)
+VARN(get, 2, FourByteReal, real,   real, `:,:',           out)
+VARN(get, 3, FourByteReal, real,   real, `:,:,:',         out)
+VARN(get, 4, FourByteReal, real,   real, `:,:,:,:',       out)
+VARN(get, 5, FourByteReal, real,   real, `:,:,:,:,:',     out)
+VARN(get, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   out)
+VARN(get, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', out)
+
+VARN(get, 1, EightByteReal, real, double,  :,              out)
+VARN(get, 2, EightByteReal, real, double, `:,:',           out)
+VARN(get, 3, EightByteReal, real, double, `:,:,:',         out)
+VARN(get, 4, EightByteReal, real, double, `:,:,:,:',       out)
+VARN(get, 5, EightByteReal, real, double, `:,:,:,:,:',     out)
+VARN(get, 6, EightByteReal, real, double, `:,:,:,:,:,:',   out)
+VARN(get, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', out)
+
+VARN(get, 1, EightByteInt, integer, int8,  :,              out)
+VARN(get, 2, EightByteInt, integer, int8, `:,:',           out)
+VARN(get, 3, EightByteInt, integer, int8, `:,:,:',         out)
+VARN(get, 4, EightByteInt, integer, int8, `:,:,:,:',       out)
+VARN(get, 5, EightByteInt, integer, int8, `:,:,:,:,:',     out)
+VARN(get, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   out)
+VARN(get, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out)
+
+!
+! collective put APIs
+!
+
+VARN(put, 1, OneByteInt, integer, int1,  :,              in, _all)
+VARN(put, 2, OneByteInt, integer, int1, `:,:',           in, _all)
+VARN(put, 3, OneByteInt, integer, int1, `:,:,:',         in, _all)
+VARN(put, 4, OneByteInt, integer, int1, `:,:,:,:',       in, _all)
+VARN(put, 5, OneByteInt, integer, int1, `:,:,:,:,:',     in, _all)
+VARN(put, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   in, _all)
+VARN(put, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in, _all)
+
+VARN(put, 1, TwoByteInt, integer, int2,  :,              INTENTV, _all)
+VARN(put, 2, TwoByteInt, integer, int2, `:,:',           INTENTV, _all)
+VARN(put, 3, TwoByteInt, integer, int2, `:,:,:',         INTENTV, _all)
+VARN(put, 4, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV, _all)
+VARN(put, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV, _all)
+VARN(put, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV, _all)
+VARN(put, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV, _all)
+
+VARN(put, 1, FourByteInt, integer, int,  :,              INTENTV, _all)
+VARN(put, 2, FourByteInt, integer, int, `:,:',           INTENTV, _all)
+VARN(put, 3, FourByteInt, integer, int, `:,:,:',         INTENTV, _all)
+VARN(put, 4, FourByteInt, integer, int, `:,:,:,:',       INTENTV, _all)
+VARN(put, 5, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV, _all)
+VARN(put, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV, _all)
+VARN(put, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV, _all)
+
+VARN(put, 1, FourByteReal, real,   real,  :,              INTENTV, _all)
+VARN(put, 2, FourByteReal, real,   real, `:,:',           INTENTV, _all)
+VARN(put, 3, FourByteReal, real,   real, `:,:,:',         INTENTV, _all)
+VARN(put, 4, FourByteReal, real,   real, `:,:,:,:',       INTENTV, _all)
+VARN(put, 5, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV, _all)
+VARN(put, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV, _all)
+VARN(put, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV, _all)
+
+VARN(put, 1, EightByteReal, real, double,  :,              INTENTV, _all)
+VARN(put, 2, EightByteReal, real, double, `:,:',           INTENTV, _all)
+VARN(put, 3, EightByteReal, real, double, `:,:,:',         INTENTV, _all)
+VARN(put, 4, EightByteReal, real, double, `:,:,:,:',       INTENTV, _all)
+VARN(put, 5, EightByteReal, real, double, `:,:,:,:,:',     INTENTV, _all)
+VARN(put, 6, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV, _all)
+VARN(put, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV, _all)
+
+VARN(put, 1, EightByteInt, integer, int8,  :,              INTENTV, _all)
+VARN(put, 2, EightByteInt, integer, int8, `:,:',           INTENTV, _all)
+VARN(put, 3, EightByteInt, integer, int8, `:,:,:',         INTENTV, _all)
+VARN(put, 4, EightByteInt, integer, int8, `:,:,:,:',       INTENTV, _all)
+VARN(put, 5, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV, _all)
+VARN(put, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV, _all)
+VARN(put, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV, _all)
+
+!
+! collective get APIs
+!
+
+VARN(get, 1, OneByteInt, integer, int1,  :,              out, _all)
+VARN(get, 2, OneByteInt, integer, int1, `:,:',           out, _all)
+VARN(get, 3, OneByteInt, integer, int1, `:,:,:',         out, _all)
+VARN(get, 4, OneByteInt, integer, int1, `:,:,:,:',       out, _all)
+VARN(get, 5, OneByteInt, integer, int1, `:,:,:,:,:',     out, _all)
+VARN(get, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   out, _all)
+VARN(get, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out, _all)
+
+VARN(get, 1, TwoByteInt, integer, int2,  :,              out, _all)
+VARN(get, 2, TwoByteInt, integer, int2, `:,:',           out, _all)
+VARN(get, 3, TwoByteInt, integer, int2, `:,:,:',         out, _all)
+VARN(get, 4, TwoByteInt, integer, int2, `:,:,:,:',       out, _all)
+VARN(get, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     out, _all)
+VARN(get, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out, _all)
+VARN(get, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out, _all)
+
+VARN(get, 1, FourByteInt, integer, int,  :,              out, _all)
+VARN(get, 2, FourByteInt, integer, int, `:,:',           out, _all)
+VARN(get, 3, FourByteInt, integer, int, `:,:,:',         out, _all)
+VARN(get, 4, FourByteInt, integer, int, `:,:,:,:',       out, _all)
+VARN(get, 5, FourByteInt, integer, int, `:,:,:,:,:',     out, _all)
+VARN(get, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   out, _all)
+VARN(get, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', out, _all)
+
+VARN(get, 1, FourByteReal, real,   real,  :,              out, _all)
+VARN(get, 2, FourByteReal, real,   real, `:,:',           out, _all)
+VARN(get, 3, FourByteReal, real,   real, `:,:,:',         out, _all)
+VARN(get, 4, FourByteReal, real,   real, `:,:,:,:',       out, _all)
+VARN(get, 5, FourByteReal, real,   real, `:,:,:,:,:',     out, _all)
+VARN(get, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   out, _all)
+VARN(get, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', out, _all)
+
+VARN(get, 1, EightByteReal, real, double,  :,              out, _all)
+VARN(get, 2, EightByteReal, real, double, `:,:',           out, _all)
+VARN(get, 3, EightByteReal, real, double, `:,:,:',         out, _all)
+VARN(get, 4, EightByteReal, real, double, `:,:,:,:',       out, _all)
+VARN(get, 5, EightByteReal, real, double, `:,:,:,:,:',     out, _all)
+VARN(get, 6, EightByteReal, real, double, `:,:,:,:,:,:',   out, _all)
+VARN(get, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', out, _all)
+
+VARN(get, 1, EightByteInt, integer, int8,  :,              out, _all)
+VARN(get, 2, EightByteInt, integer, int8, `:,:',           out, _all)
+VARN(get, 3, EightByteInt, integer, int8, `:,:,:',         out, _all)
+VARN(get, 4, EightByteInt, integer, int8, `:,:,:,:',       out, _all)
+VARN(get, 5, EightByteInt, integer, int8, `:,:,:,:,:',     out, _all)
+VARN(get, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   out, _all)
+VARN(get, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out, _all)
+
+!
+! text variable
+!
+
+dnl
+dnl TEXTVARN1(ncid, varid, values, num, start, count)
+dnl
+define(`TEXTVARN1',dnl
+`dnl
+   ! $1 a scalar of type character (len = *)
+   function nf90mpi_$1_varn_text$3(ncid, varid, value, start)
+     integer,                                        intent(in) :: ncid, varid
+     character (len=*),                              intent($2) :: value
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:), intent(in) :: start
+     integer                                                    :: nf90mpi_$1_varn_text$3
+
+     nf90mpi_$1_varn_text$3 = nfmpi_$1_var1_text$3(ncid, varid, start(:,1), value)
+   end function nf90mpi_$1_varn_text$3
+')dnl
+
+TEXTVARN1(put, in)
+TEXTVARN1(get, out)
+TEXTVARN1(put, in,  _all)
+TEXTVARN1(get, out, _all)
+
+dnl
+dnl TEXTVARN(ncid, varid, values, num, start, count)
+dnl
+define(`TEXTVARN',dnl
+`dnl
+   function nf90mpi_$1_varn_$2D_text$6(ncid, varid, values, num, start, count)
+     integer,                                                  intent(in) :: ncid, varid, num
+     character (len=*),              dimension($3),            intent($5) :: values
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:),           intent(in) :: start
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:), optional, intent(in) :: count
+     integer                                                              :: nf90mpi_$1_varn_$2D_text$6
+     integer (kind=MPI_OFFSET_KIND), allocatable                          :: localCount(:,:)
+     integer                                                              :: ndims
+
+     if (present(count)) then
+         nf90mpi_$1_varn_$2D_text$6 = nfmpi_$1_varn_text$6(ncid, varid, num, start, &
+                                                           count, values($4))
+     else
+         ! Set local arguments to default values
+         nf90mpi_$1_varn_$2D_text$6 = nfmpi_inq_varndims(ncid, varid, ndims)
+         if (nf90mpi_$1_varn_$2D_text$6 .NE. NF_NOERR) return
+         allocate(localCount(ndims, num))
+         localCount(:,:) = 1
+         nf90mpi_$1_varn_$2D_text$6 = nfmpi_$1_varn_text$6(ncid, varid, num, start, &
+                                                           localCount, values($4))
+         deallocate(localCount)
+     endif
+   end function nf90mpi_$1_varn_$2D_text$6
+')dnl
+
+TEXTVARN(put, 1,  :,               1,              in)
+TEXTVARN(put, 2, `:,:',           `1,1',           in)
+TEXTVARN(put, 3, `:,:,:',         `1,1,1',         in)
+TEXTVARN(put, 4, `:,:,:,:',       `1,1,1,1',       in)
+TEXTVARN(put, 5, `:,:,:,:,:',     `1,1,1,1,1',     in)
+TEXTVARN(put, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
+TEXTVARN(put, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
+
+TEXTVARN(get, 1,  :,               1,              out)
+TEXTVARN(get, 2, `:,:',           `1,1',           out)
+TEXTVARN(get, 3, `:,:,:',         `1,1,1',         out)
+TEXTVARN(get, 4, `:,:,:,:',       `1,1,1,1',       out)
+TEXTVARN(get, 5, `:,:,:,:,:',     `1,1,1,1,1',     out)
+TEXTVARN(get, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out)
+TEXTVARN(get, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out)
+
+!
+! Collective APIs
+!
+
+TEXTVARN(put, 1,  :,               1,              in, _all)
+TEXTVARN(put, 2, `:,:',           `1,1',           in, _all)
+TEXTVARN(put, 3, `:,:,:',         `1,1,1',         in, _all)
+TEXTVARN(put, 4, `:,:,:,:',       `1,1,1,1',       in, _all)
+TEXTVARN(put, 5, `:,:,:,:,:',     `1,1,1,1,1',     in, _all)
+TEXTVARN(put, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in, _all)
+TEXTVARN(put, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in, _all)
+
+TEXTVARN(get, 1,  :,               1,              out, _all)
+TEXTVARN(get, 2, `:,:',           `1,1',           out, _all)
+TEXTVARN(get, 3, `:,:,:',         `1,1,1',         out, _all)
+TEXTVARN(get, 4, `:,:,:,:',       `1,1,1,1',       out, _all)
+TEXTVARN(get, 5, `:,:,:,:,:',     `1,1,1,1,1',     out, _all)
+TEXTVARN(get, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out, _all)
+TEXTVARN(get, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out, _all)
+
+!
+! Nonblocking APIs
+!
+
+dnl
+dnl IVARN1
+dnl
+define(`IVARN1',dnl
+`dnl
+   ! $1 a scalar of type $4 (kind=$3)
+   function nf90mpi_$1_varn_$3(ncid, varid, value, req, start)
+     integer,                                        intent(in) :: ncid, varid
+     $4 (kind=$3),                                   intent($2) :: value
+     integer,                                        intent(out):: req
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:), intent(in) :: start
+     integer                                                    :: nf90mpi_$1_varn_$3
+
+     nf90mpi_$1_varn_$3 = nfmpi_$1_var1_$5(ncid, varid, start(:,1), value, req)
+   end function nf90mpi_$1_varn_$3
+')dnl
+
+IVARN1(iput, in,    OneByteInt,    integer, int1)
+IVARN1(iput, INTENTV, TwoByteInt,    integer, int2)
+IVARN1(iput, INTENTV, FourByteInt,   integer, int)
+IVARN1(iput, INTENTV, FourByteReal,  real,    real)
+IVARN1(iput, INTENTV, EightByteReal, real,    double)
+IVARN1(iput, INTENTV, EightByteInt,  integer, int8)
+
+IVARN1(iget, out,   OneByteInt,    integer, int1)
+IVARN1(iget, out,   TwoByteInt,    integer, int2)
+IVARN1(iget, out,   FourByteInt,   integer, int)
+IVARN1(iget, out,   FourByteReal,  real,    real)
+IVARN1(iget, out,   EightByteReal, real,    double)
+IVARN1(iget, out,   EightByteInt,  integer, int8)
+
+IVARN1(bput, in,    OneByteInt,    integer, int1)
+IVARN1(bput, INTENTV, TwoByteInt,    integer, int2)
+IVARN1(bput, INTENTV, FourByteInt,   integer, int)
+IVARN1(bput, INTENTV, FourByteReal,  real,    real)
+IVARN1(bput, INTENTV, EightByteReal, real,    double)
+IVARN1(bput, INTENTV, EightByteInt,  integer, int8)
+
+dnl
+dnl IVARN(ncid, varid, values, num, start, count)
+dnl
+define(`IVARN',dnl
+`dnl
+   function nf90mpi_$1_varn_$2D_$3(ncid, varid, values, req, num, start, count)
+     integer,                                                  intent(in) :: ncid, varid, num
+     $4 (kind=$3),                   dimension($6),            intent($7) :: values
+     integer,                                                  intent(out):: req
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:),           intent(in) :: start
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:), optional, intent(in) :: count
+     integer                                                              :: nf90mpi_$1_varn_$2D_$3
+     integer (kind=MPI_OFFSET_KIND), allocatable                          :: localCount(:,:)
+     integer                                                              :: ndims
+
+     if (present(count)) then
+         nf90mpi_$1_varn_$2D_$3 = nfmpi_$1_varn_$5(ncid, varid, num, start, &
+                                                   count, values, req)
+     else
+         ! Set local arguments to default values
+         nf90mpi_$1_varn_$2D_$3 = nfmpi_inq_varndims(ncid, varid, ndims)
+         if (nf90mpi_$1_varn_$2D_$3 .NE. NF_NOERR) return
+         allocate(localCount(ndims, num))
+         localCount(:,:) = 1
+         nf90mpi_$1_varn_$2D_$3 = nfmpi_$1_varn_$5(ncid, varid, num, start, &
+                                                   localCount, values, req)
+         deallocate(localCount)
+     endif
+   end function nf90mpi_$1_varn_$2D_$3
+')dnl
+
+!
+! put APIs
+!
+
+IVARN(iput, 1, OneByteInt, integer, int1,  :,              in)
+IVARN(iput, 2, OneByteInt, integer, int1, `:,:',           in)
+IVARN(iput, 3, OneByteInt, integer, int1, `:,:,:',         in)
+IVARN(iput, 4, OneByteInt, integer, int1, `:,:,:,:',       in)
+IVARN(iput, 5, OneByteInt, integer, int1, `:,:,:,:,:',     in)
+IVARN(iput, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
+IVARN(iput, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
+
+IVARN(iput, 1, TwoByteInt, integer, int2,  :,              INTENTV)
+IVARN(iput, 2, TwoByteInt, integer, int2, `:,:',           INTENTV)
+IVARN(iput, 3, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
+IVARN(iput, 4, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
+IVARN(iput, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
+IVARN(iput, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
+IVARN(iput, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
+
+IVARN(iput, 1, FourByteInt, integer, int,  :,              INTENTV)
+IVARN(iput, 2, FourByteInt, integer, int, `:,:',           INTENTV)
+IVARN(iput, 3, FourByteInt, integer, int, `:,:,:',         INTENTV)
+IVARN(iput, 4, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
+IVARN(iput, 5, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
+IVARN(iput, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
+IVARN(iput, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
+
+IVARN(iput, 1, FourByteReal, real,   real,  :,              INTENTV)
+IVARN(iput, 2, FourByteReal, real,   real, `:,:',           INTENTV)
+IVARN(iput, 3, FourByteReal, real,   real, `:,:,:',         INTENTV)
+IVARN(iput, 4, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
+IVARN(iput, 5, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
+IVARN(iput, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
+IVARN(iput, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
+
+IVARN(iput, 1, EightByteReal, real, double,  :,              INTENTV)
+IVARN(iput, 2, EightByteReal, real, double, `:,:',           INTENTV)
+IVARN(iput, 3, EightByteReal, real, double, `:,:,:',         INTENTV)
+IVARN(iput, 4, EightByteReal, real, double, `:,:,:,:',       INTENTV)
+IVARN(iput, 5, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
+IVARN(iput, 6, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
+IVARN(iput, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
+
+IVARN(iput, 1, EightByteInt, integer, int8,  :,              INTENTV)
+IVARN(iput, 2, EightByteInt, integer, int8, `:,:',           INTENTV)
+IVARN(iput, 3, EightByteInt, integer, int8, `:,:,:',         INTENTV)
+IVARN(iput, 4, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
+IVARN(iput, 5, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
+IVARN(iput, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
+IVARN(iput, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
+
+!
+! get APIs
+!
+
+IVARN(iget, 1, OneByteInt, integer, int1,  :,              out)
+IVARN(iget, 2, OneByteInt, integer, int1, `:,:',           out)
+IVARN(iget, 3, OneByteInt, integer, int1, `:,:,:',         out)
+IVARN(iget, 4, OneByteInt, integer, int1, `:,:,:,:',       out)
+IVARN(iget, 5, OneByteInt, integer, int1, `:,:,:,:,:',     out)
+IVARN(iget, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   out)
+IVARN(iget, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out)
+
+IVARN(iget, 1, TwoByteInt, integer, int2,  :,              out)
+IVARN(iget, 2, TwoByteInt, integer, int2, `:,:',           out)
+IVARN(iget, 3, TwoByteInt, integer, int2, `:,:,:',         out)
+IVARN(iget, 4, TwoByteInt, integer, int2, `:,:,:,:',       out)
+IVARN(iget, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     out)
+IVARN(iget, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out)
+IVARN(iget, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out)
+
+IVARN(iget, 1, FourByteInt, integer, int,  :,              out)
+IVARN(iget, 2, FourByteInt, integer, int, `:,:',           out)
+IVARN(iget, 3, FourByteInt, integer, int, `:,:,:',         out)
+IVARN(iget, 4, FourByteInt, integer, int, `:,:,:,:',       out)
+IVARN(iget, 5, FourByteInt, integer, int, `:,:,:,:,:',     out)
+IVARN(iget, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   out)
+IVARN(iget, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', out)
+
+IVARN(iget, 1, FourByteReal, real,   real,  :,              out)
+IVARN(iget, 2, FourByteReal, real,   real, `:,:',           out)
+IVARN(iget, 3, FourByteReal, real,   real, `:,:,:',         out)
+IVARN(iget, 4, FourByteReal, real,   real, `:,:,:,:',       out)
+IVARN(iget, 5, FourByteReal, real,   real, `:,:,:,:,:',     out)
+IVARN(iget, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   out)
+IVARN(iget, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', out)
+
+IVARN(iget, 1, EightByteReal, real, double,  :,              out)
+IVARN(iget, 2, EightByteReal, real, double, `:,:',           out)
+IVARN(iget, 3, EightByteReal, real, double, `:,:,:',         out)
+IVARN(iget, 4, EightByteReal, real, double, `:,:,:,:',       out)
+IVARN(iget, 5, EightByteReal, real, double, `:,:,:,:,:',     out)
+IVARN(iget, 6, EightByteReal, real, double, `:,:,:,:,:,:',   out)
+IVARN(iget, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', out)
+
+IVARN(iget, 1, EightByteInt, integer, int8,  :,              out)
+IVARN(iget, 2, EightByteInt, integer, int8, `:,:',           out)
+IVARN(iget, 3, EightByteInt, integer, int8, `:,:,:',         out)
+IVARN(iget, 4, EightByteInt, integer, int8, `:,:,:,:',       out)
+IVARN(iget, 5, EightByteInt, integer, int8, `:,:,:,:,:',     out)
+IVARN(iget, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   out)
+IVARN(iget, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out)
+
+!
+! bput APIs
+!
+
+IVARN(bput, 1, OneByteInt, integer, int1,  :,              in)
+IVARN(bput, 2, OneByteInt, integer, int1, `:,:',           in)
+IVARN(bput, 3, OneByteInt, integer, int1, `:,:,:',         in)
+IVARN(bput, 4, OneByteInt, integer, int1, `:,:,:,:',       in)
+IVARN(bput, 5, OneByteInt, integer, int1, `:,:,:,:,:',     in)
+IVARN(bput, 6, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
+IVARN(bput, 7, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
+
+IVARN(bput, 1, TwoByteInt, integer, int2,  :,              INTENTV)
+IVARN(bput, 2, TwoByteInt, integer, int2, `:,:',           INTENTV)
+IVARN(bput, 3, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
+IVARN(bput, 4, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
+IVARN(bput, 5, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
+IVARN(bput, 6, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
+IVARN(bput, 7, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
+
+IVARN(bput, 1, FourByteInt, integer, int,  :,              INTENTV)
+IVARN(bput, 2, FourByteInt, integer, int, `:,:',           INTENTV)
+IVARN(bput, 3, FourByteInt, integer, int, `:,:,:',         INTENTV)
+IVARN(bput, 4, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
+IVARN(bput, 5, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
+IVARN(bput, 6, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
+IVARN(bput, 7, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
+
+IVARN(bput, 1, FourByteReal, real,   real,  :,              INTENTV)
+IVARN(bput, 2, FourByteReal, real,   real, `:,:',           INTENTV)
+IVARN(bput, 3, FourByteReal, real,   real, `:,:,:',         INTENTV)
+IVARN(bput, 4, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
+IVARN(bput, 5, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
+IVARN(bput, 6, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
+IVARN(bput, 7, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
+
+IVARN(bput, 1, EightByteReal, real, double,  :,              INTENTV)
+IVARN(bput, 2, EightByteReal, real, double, `:,:',           INTENTV)
+IVARN(bput, 3, EightByteReal, real, double, `:,:,:',         INTENTV)
+IVARN(bput, 4, EightByteReal, real, double, `:,:,:,:',       INTENTV)
+IVARN(bput, 5, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
+IVARN(bput, 6, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
+IVARN(bput, 7, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
+
+IVARN(bput, 1, EightByteInt, integer, int8,  :,              INTENTV)
+IVARN(bput, 2, EightByteInt, integer, int8, `:,:',           INTENTV)
+IVARN(bput, 3, EightByteInt, integer, int8, `:,:,:',         INTENTV)
+IVARN(bput, 4, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
+IVARN(bput, 5, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
+IVARN(bput, 6, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
+IVARN(bput, 7, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
+
+!
+! text variable
+!
+
+dnl
+dnl ITEXTVARN1
+dnl
+define(`ITEXTVARN1',dnl
+`dnl
+   ! $1 a scalar of type character (len = *)
+   function nf90mpi_$1_varn_text(ncid, varid, value, req, start)
+     integer,                                        intent(in) :: ncid, varid
+     character (len = *),                            intent($2) :: value
+     integer,                                        intent(out):: req
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:), intent(in) :: start
+     integer                                                    :: nf90mpi_$1_varn_text
+
+     nf90mpi_$1_varn_text = nfmpi_$1_var1_text(ncid, varid, start(:,1), value, req)
+   end function nf90mpi_$1_varn_text
+')dnl
+
+ITEXTVARN1(iput, in)
+ITEXTVARN1(iget, out)
+ITEXTVARN1(bput, in)
+
+dnl
+dnl ITEXTVARN(ncid, varid, values, num, start, count)
+dnl
+define(`ITEXTVARN',dnl
+`dnl
+   function nf90mpi_$1_varn_$2D_text(ncid, varid, values, req, num, start, count)
+     integer,                                                  intent(in) :: ncid, varid, num
+     character (len=*),              dimension($3),            intent($5) :: values
+     integer,                                                  intent(out):: req
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:),           intent(in) :: start
+     integer (kind=MPI_OFFSET_KIND), dimension(:,:), optional, intent(in) :: count
+     integer                                                              :: nf90mpi_$1_varn_$2D_text
+     integer (kind=MPI_OFFSET_KIND), allocatable                          :: localCount(:,:)
+     integer                                                              :: ndims
+
+     if (present(count)) then
+         nf90mpi_$1_varn_$2D_text = nfmpi_$1_varn_text(ncid, varid, num, start, &
+                                                       count, values($4), req)
+     else
+         ! Set local arguments to default values
+         nf90mpi_$1_varn_$2D_text = nfmpi_inq_varndims(ncid, varid, ndims)
+         if (nf90mpi_$1_varn_$2D_text .NE. NF_NOERR) return
+         allocate(localCount(ndims, num))
+         localCount(:,:) = 1
+         nf90mpi_$1_varn_$2D_text = nfmpi_$1_varn_text(ncid, varid, num, start, &
+                                                       localCount, values($4), req)
+         deallocate(localCount)
+     endif
+   end function nf90mpi_$1_varn_$2D_text
+')dnl
+
+ITEXTVARN(iput, 1,  :,               1,              in)
+ITEXTVARN(iput, 2, `:,:',           `1,1',           in)
+ITEXTVARN(iput, 3, `:,:,:',         `1,1,1',         in)
+ITEXTVARN(iput, 4, `:,:,:,:',       `1,1,1,1',       in)
+ITEXTVARN(iput, 5, `:,:,:,:,:',     `1,1,1,1,1',     in)
+ITEXTVARN(iput, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
+ITEXTVARN(iput, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
+
+ITEXTVARN(iget, 1,  :,               1,              out)
+ITEXTVARN(iget, 2, `:,:',           `1,1',           out)
+ITEXTVARN(iget, 3, `:,:,:',         `1,1,1',         out)
+ITEXTVARN(iget, 4, `:,:,:,:',       `1,1,1,1',       out)
+ITEXTVARN(iget, 5, `:,:,:,:,:',     `1,1,1,1,1',     out)
+ITEXTVARN(iget, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out)
+ITEXTVARN(iget, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out)
+
+ITEXTVARN(bput, 1,  :,               1,              in)
+ITEXTVARN(bput, 2, `:,:',           `1,1',           in)
+ITEXTVARN(bput, 3, `:,:,:',         `1,1,1',         in)
+ITEXTVARN(bput, 4, `:,:,:,:',       `1,1,1,1',       in)
+ITEXTVARN(bput, 5, `:,:,:,:,:',     `1,1,1,1,1',     in)
+ITEXTVARN(bput, 6, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
+ITEXTVARN(bput, 7, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
+
diff --git a/src/libf90/nf90_constants.f90 b/src/binding/f90/nf90_constants.fh
similarity index 97%
rename from src/libf90/nf90_constants.f90
rename to src/binding/f90/nf90_constants.fh
index 67faaa6..de7eb42 100644
--- a/src/libf90/nf90_constants.f90
+++ b/src/binding/f90/nf90_constants.fh
@@ -2,7 +2,7 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: nf90_constants.f90 2604 2016-11-09 16:10:48Z wkliao $
+! $Id: nf90_constants.fh 3370 2017-09-14 23:54:03Z wkliao $
 !
 ! This file is taken from netcdf_constants.f90 with changes for PnetCDF use
 !
@@ -102,11 +102,12 @@
   ! implementation limits:
   !
   integer, parameter, public :: &
-    nf90_max_dims     = 1024,    &
-    nf90_max_attrs    = 8192,   &
-    nf90_max_vars     = 8192,   &
-    nf90_max_name     = 256,    &
-    nf90_max_var_dims = 1024
+    nf90_max_name     = 256,        &
+    nf90_max_nfiles   = 1024,       &
+    nf90_max_dims     = 2147483647, &
+    nf90_max_attrs    = 2147483647, &
+    nf90_max_vars     = 2147483647, &
+    nf90_max_var_dims = 2147483647
 
   !
   ! error handling modes:
@@ -126,7 +127,8 @@
     nf90_format_cdf5 = 5, &
     nf90_format_64bit = nf90_format_cdf2, &
     nf90_format_64bit_offset = nf90_format_cdf2, &
-    nf90_format_64bit_data = nf90_format_cdf5
+    nf90_format_64bit_data = nf90_format_cdf5, &
+    nf90_format_unknown = -1
 
   !
   ! error codes:
@@ -151,7 +153,7 @@
     NF90_EMAXVARS       = NF_EMAXVARS      , & ! NF_MAX_VARS exceeded
     NF90_ENOTVAR        = NF_ENOTVAR       , & ! Variable not found
     NF90_EGLOBAL        = NF_EGLOBAL       , & ! Action prohibited on NF_GLOBAL varid
-    NF90_ENOTNC         = NF_ENOTNC        , & ! Not a netcdf file
+    NF90_ENOTNC         = NF_ENOTNC        , & ! Not a netcdf file (file format violates CDF specification)
     NF90_ESTS           = NF_ESTS          , & ! In Fortran, string too short
     NF90_EMAXNAME       = NF_EMAXNAME      , & ! NF_MAX_NAME exceeded
     NF90_EUNLIMIT       = NF_EUNLIMIT      , & ! NFMPI_UNLIMITED size already in use
@@ -176,7 +178,9 @@
     NF90_EDAPSVC        = NF_EDAPSVC       , & ! DAP server error
     NF90_EDAS           = NF_EDAS          , & ! Malformed or inaccessible DAS
     NF90_EDDS           = NF_EDDS          , & ! Malformed or inaccessible DDS
+    NF90_EDMR           = NF_EDDS          , & ! Dap4 alias
     NF90_EDATADDS       = NF_EDATADDS      , & ! Malformed or inaccessible DATADDS
+    NF90_EDATADAP       = NF_EDATADDS      , & ! Dap4 alias
     NF90_EDAPURL        = NF_EDAPURL       , & ! Malformed DAP URL
     NF90_EDAPCONSTRAINT = NF_EDAPCONSTRAINT, & ! Malformed DAP Constraint
     NF90_ETRANSLATION   = NF_ETRANSLATION  , & ! Untranslatable construct
diff --git a/src/libf90/nfmpi_constants.f90.in b/src/binding/f90/nfmpi_constants.fh.in
similarity index 93%
rename from src/libf90/nfmpi_constants.f90.in
rename to src/binding/f90/nfmpi_constants.fh.in
index da03ec1..5dbb8c8 100644
--- a/src/libf90/nfmpi_constants.f90.in
+++ b/src/binding/f90/nfmpi_constants.fh.in
@@ -2,7 +2,7 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: nfmpi_constants.f90.in 2614 2016-11-12 19:50:02Z wkliao $
+! $Id: nfmpi_constants.fh.in 3370 2017-09-14 23:54:03Z wkliao $
 !
 ! This file lists the Fortran constants used by PnetCDF
 !
@@ -98,7 +98,8 @@
       nf_format_cdf5 = 5, &
       nf_format_64bit = nf_format_cdf2, &
       nf_format_64bit_offset = nf_format_cdf2, &
-      nf_format_64bit_data = nf_format_cdf5
+      nf_format_64bit_data = nf_format_cdf5, &
+      nf_format_unknown = -1
 
 !
 ! size argument for defining an unlimited dimension:
@@ -119,10 +120,11 @@
 ! implementation limits:
 !
       integer, parameter, public :: &
-      nf_max_dims     = 1024, &
-      nf_max_attrs    = 8192, &
-      nf_max_vars     = 8192, &
-      nf_max_name     = 256, &
+      nf_max_name     = 256,        &
+      nf_max_nfiles   = 1024,       &
+      nf_max_dims     = 2147483647, &
+      nf_max_attrs    = 2147483647, &
+      nf_max_vars     = 2147483647, &
       nf_max_var_dims = nf_max_dims
 
 !
@@ -149,7 +151,7 @@
       NF_EMAXVARS       = -48, & ! NF_MAX_VARS exceeded
       NF_ENOTVAR        = -49, & ! Variable not found
       NF_EGLOBAL        = -50, & ! Action prohibited on NF_GLOBAL varid
-      NF_ENOTNC         = -51, & ! Not a netcdf file
+      NF_ENOTNC         = -51, & ! Not a netcdf file (file format violates CDF specification)
       NF_ESTS           = -52, & ! In Fortran, string too short
       NF_EMAXNAME       = -53, & ! NF_MAX_NAME exceeded
       NF_EUNLIMIT       = -54, & ! NFMPI_UNLIMITED size already in use
@@ -174,7 +176,9 @@
       NF_EDAPSVC        = -70, & ! DAP server error
       NF_EDAS           = -71, & ! Malformed or inaccessible DAS
       NF_EDDS           = -72, & ! Malformed or inaccessible DDS
+      NF_EDMR           = -72, & ! Dap4 alias
       NF_EDATADDS       = -73, & ! Malformed or inaccessible DATADDS
+      NF_EDATADAP       = -73, & ! Dap4 alias
       NF_EDAPURL        = -74, & ! Malformed DAP URL
       NF_EDAPCONSTRAINT = -75, & ! Malformed DAP Constraint
       NF_ETRANSLATION   = -76, & ! Untranslatable construct
@@ -188,28 +192,28 @@
 
 ! netCDF-4 error codes (copied from netCDF release)
       integer, parameter, public :: &
-      NF_EHDFERR        = -101, & ! Error at HDF5 layer. 
-      NF_ECANTREAD      = -102, & ! Can't read. 
-      NF_ECANTWRITE     = -103, & ! Can't write. 
-      NF_ECANTCREATE    = -104, & ! Can't create. 
-      NF_EFILEMETA      = -105, & ! Problem with file metadata. 
-      NF_EDIMMETA       = -106, & ! Problem with dimension metadata. 
-      NF_EATTMETA       = -107, & ! Problem with attribute metadata. 
-      NF_EVARMETA       = -108, & ! Problem with variable metadata. 
-      NF_ENOCOMPOUND    = -109, & ! Not a compound type. 
-      NF_EATTEXISTS     = -110, & ! Attribute already exists. 
-      NF_ENOTNC4        = -111, & ! Attempting netcdf-4 operation on netcdf-3 file.   
-      NF_ESTRICTNC3     = -112, & ! Attempting netcdf-4 operation on strict nc3 netcdf-4 file.   
-      NF_ENOTNC3        = -113, & ! Attempting netcdf-3 operation on netcdf-4 file.   
-      NF_ENOPAR         = -114, & ! Parallel operation on file opened for non-parallel access.   
-      NF_EPARINIT       = -115, & ! Error initializing for parallel access.   
-      NF_EBADGRPID      = -116, & ! Bad group ID.   
-      NF_EBADTYPID      = -117, & ! Bad type ID.   
-      NF_ETYPDEFINED    = -118, & ! Type has already been defined and may not be edited. 
-      NF_EBADFIELD      = -119, & ! Bad field ID.   
-      NF_EBADCLASS      = -120, & ! Bad class.   
-      NF_EMAPTYPE       = -121, & ! Mapped access for atomic types only.   
-      NF_ELATEFILL      = -122, & ! Attempt to define fill value when data already exists. 
+      NF_EHDFERR        = -101, & ! Error at HDF5 layer.
+      NF_ECANTREAD      = -102, & ! Can't read.
+      NF_ECANTWRITE     = -103, & ! Can't write.
+      NF_ECANTCREATE    = -104, & ! Can't create.
+      NF_EFILEMETA      = -105, & ! Problem with file metadata.
+      NF_EDIMMETA       = -106, & ! Problem with dimension metadata.
+      NF_EATTMETA       = -107, & ! Problem with attribute metadata.
+      NF_EVARMETA       = -108, & ! Problem with variable metadata.
+      NF_ENOCOMPOUND    = -109, & ! Not a compound type.
+      NF_EATTEXISTS     = -110, & ! Attribute already exists.
+      NF_ENOTNC4        = -111, & ! Attempting netcdf-4 operation on netcdf-3 file.
+      NF_ESTRICTNC3     = -112, & ! Attempting netcdf-4 operation on strict nc3 netcdf-4 file.
+      NF_ENOTNC3        = -113, & ! Attempting netcdf-3 operation on netcdf-4 file.
+      NF_ENOPAR         = -114, & ! Parallel operation on file opened for non-parallel access.
+      NF_EPARINIT       = -115, & ! Error initializing for parallel access.
+      NF_EBADGRPID      = -116, & ! Bad group ID.
+      NF_EBADTYPID      = -117, & ! Bad type ID.
+      NF_ETYPDEFINED    = -118, & ! Type has already been defined and may not be edited.
+      NF_EBADFIELD      = -119, & ! Bad field ID.
+      NF_EBADCLASS      = -120, & ! Bad class.
+      NF_EMAPTYPE       = -121, & ! Mapped access for atomic types only.
+      NF_ELATEFILL      = -122, & ! Attempt to define fill value when data already exists.
       NF_ELATEDEF       = -123, & ! Attempt to define var properties, like deflate, after enddef.
       NF_EDIMSCALE      = -124, & ! Probem with HDF5 dimscales.
       NF_ENOGRP         = -125, & ! No group found.
diff --git a/src/libf90/overloads.f90 b/src/binding/f90/overloads.fh
similarity index 99%
rename from src/libf90/overloads.f90
rename to src/binding/f90/overloads.fh
index f8b1099..ba05579 100644
--- a/src/libf90/overloads.f90
+++ b/src/binding/f90/overloads.fh
@@ -2,17 +2,17 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: overloads.f90 2002 2015-02-12 07:34:35Z wkliao $
+! $Id: overloads.fh 3341 2017-08-25 22:29:08Z wkliao $
 !
 ! This file is taken from netcdf_overloads.f90 with changes for PnetCDF use
-!  
+!
 !
 
   ! Overloaded variable functions
   interface nf90mpi_def_var
     module procedure nf90mpi_def_var_Scalar, nf90mpi_def_var_oneDim, nf90mpi_def_var_ManyDims
   end interface ! nf90mpi_def_var
-  
+
   ! Overloaded variable fill functions
   interface nf90mpi_def_var_fill
     module procedure nf90mpi_def_var_fill_text,                                            &
diff --git a/src/libf90/pnetcdf.f90.in b/src/binding/f90/pnetcdf.f90.in
similarity index 70%
rename from src/libf90/pnetcdf.f90.in
rename to src/binding/f90/pnetcdf.f90.in
index 0699429..bf8999b 100644
--- a/src/libf90/pnetcdf.f90.in
+++ b/src/binding/f90/pnetcdf.f90.in
@@ -21,19 +21,19 @@
                         FourByteReal = selected_real_kind(P =  6, R =  37), &
                        EightByteReal = selected_real_kind(P = 13, R = 307)
 
-  include "nfmpi_constants.f90"
-  include "nf90_constants.f90"
-  include "api.f90"
-  include "overloads.f90"
-  include "visibility.f90"
+  include "nfmpi_constants.fh"
+  include "nf90_constants.fh"
+  include "api.fh"
+  include "overloads.fh"
+  include "visibility.fh"
 
 contains
-  include "file.f90"
-  include "dims.f90"
-  include "attributes.f90"
-  include "variables.f90"
-  include "getput_text.f90"
-  include "getput_var.f90"
-  include "getput_varn.f90"
-  include "getput_vard.f90"
+  include "file.fh"
+  include "dims.fh"
+  include "attributes.fh"
+  include "variables.fh"
+  include "getput_text.fh"
+  include "getput_var.fh"
+  include "getput_varn.fh"
+  include "getput_vard.fh"
 end module pnetcdf
diff --git a/src/libf90/variables.f90 b/src/binding/f90/variables.fh
similarity index 91%
rename from src/libf90/variables.f90
rename to src/binding/f90/variables.fh
index b6a520f..27b512b 100644
--- a/src/libf90/variables.f90
+++ b/src/binding/f90/variables.fh
@@ -2,28 +2,28 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: variables.f90 2012 2015-02-16 05:52:44Z wkliao $
+! $Id: variables.fh 3341 2017-08-25 22:29:08Z wkliao $
 !
 ! This file is taken from netcdf_variables.f90 with changes for PnetCDF use
-!  
+!
 !
 
-  ! ----- 
+  ! -----
   ! Variable definitions and inquiry
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_Scalar(ncid, name, xtype, varid)
     integer,               intent( in) :: ncid
     character (len = *),   intent( in) :: name
     integer,               intent( in) :: xtype
     integer,               intent(out) :: varid
     integer                            :: nf90mpi_def_var_Scalar
-    
+
     ! Dummy - shouldn't get used
     integer, dimension(1) :: dimids
-    
+
     nf90mpi_def_var_Scalar = nfmpi_def_var(ncid, name, xtype, 0, dimids, varid)
   end function nf90mpi_def_var_Scalar
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_oneDim(ncid, name, xtype, dimids, varid)
     integer,               intent( in) :: ncid
     character (len = *),   intent( in) :: name
@@ -31,12 +31,12 @@
     integer,               intent( in) :: dimids
     integer,               intent(out) :: varid
     integer                            :: nf90mpi_def_var_oneDim
-    
+
     integer, dimension(1) :: dimidsA
     dimidsA(1) = dimids
     nf90mpi_def_var_oneDim = nfmpi_def_var(ncid, name, xtype, 1, dimidsA, varid)
   end function nf90mpi_def_var_oneDim
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_ManyDims(ncid, name, xtype, dimids, varid)
     integer,               intent( in) :: ncid
     character (len = *),   intent( in) :: name
@@ -44,39 +44,43 @@
     integer, dimension(:), intent( in) :: dimids
     integer,               intent(out) :: varid
     integer                            :: nf90mpi_def_var_ManyDims
-    
+
     nf90mpi_def_var_ManyDims = nfmpi_def_var(ncid, name, xtype, size(dimids), dimids, varid)
   end function nf90mpi_def_var_ManyDims
-  ! ----- 
+  ! -----
   function nf90mpi_inq_varid(ncid, name, varid)
     integer,             intent( in) :: ncid
     character (len = *), intent( in) :: name
     integer,             intent(out) :: varid
     integer                          :: nf90mpi_inq_varid
-    
+
     nf90mpi_inq_varid = nfmpi_inq_varid(ncid, name, varid)
   end function nf90mpi_inq_varid
-  ! ----- 
+  ! -----
   function nf90mpi_inquire_variable(ncid, varid, name, xtype, ndims, dimids, nAtts)
     integer,                         intent( in) :: ncid, varid
     character (len = *),   optional, intent(out) :: name
-    integer,               optional, intent(out) :: xtype, ndims 
+    integer,               optional, intent(out) :: xtype, ndims
     integer, dimension(:), optional, intent(out) :: dimids
     integer,               optional, intent(out) :: nAtts
     integer                                      :: nf90mpi_inquire_variable
-    
+
     ! Local variables
-    character (len = nf90_max_name)       :: varName
-    integer                               :: externalType, numDimensions
-    integer, dimension(nf90_max_var_dims) :: dimensionIDs
-    integer                               :: numAttributes
-    
+    character (len = nf90_max_name) :: varName
+    integer                         :: externalType, numDimensions
+    integer, allocatable            :: dimensionIDs(:)
+    integer                         :: numAttributes
+
+    nf90mpi_inquire_variable = nfmpi_inq_varndims(ncid, varid, numDimensions)
+    if (nf90mpi_inquire_variable .NE. NF_NOERR) return
+    allocate(dimensionIDs(numDimensions))
+
     nf90mpi_inquire_variable = nfmpi_inq_var(ncid, varid, varName, externalType, &
                                        numDimensions, dimensionIDs, numAttributes)
     if (nf90mpi_inquire_variable == nf90_noerr) then
-        if(present(name))   name                   = trim(varName)
-        if(present(xtype))  xtype                  = externalType
-        if(present(ndims))  ndims                  = numDimensions
+        if(present(name))   name  = trim(varName)
+        if(present(xtype))  xtype = externalType
+        if(present(ndims))  ndims = numDimensions
         if(present(dimids)) then
             if (size(dimids) .ge. numDimensions) then
                 dimids(:numDimensions) = dimensionIDs(:numDimensions)
@@ -84,146 +88,147 @@
                 nf90mpi_inquire_variable = nf90_einval
             endif
         endif
-        if(present(nAtts))  nAtts                  = numAttributes
+        if(present(nAtts))  nAtts = numAttributes
     endif
+    deallocate(dimensionIDs)
   end function nf90mpi_inquire_variable
-  ! ----- 
+  ! -----
   function nf90mpi_rename_var(ncid, varid, newname)
     integer,             intent( in) :: ncid, varid
     character (len = *), intent( in) :: newname
     integer                          :: nf90mpi_rename_var
-    
+
     nf90mpi_rename_var = nfmpi_rename_var(ncid, varid, newname)
   end function nf90mpi_rename_var
-  ! ----- 
+  ! -----
   ! nf90mpi_def_var_fill
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_fill_text(ncid, varid, no_fill, fill_value)
     integer,             intent( in) :: ncid, varid, no_fill
     character,           intent( in) :: fill_value
     integer                          :: nf90mpi_def_var_fill_text
-    
+
     nf90mpi_def_var_fill_text = nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_def_var_fill_text
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_fill_OneByteInt(ncid, varid, no_fill, fill_value)
     integer,                  intent( in) :: ncid, varid, no_fill
     integer(kind=OneByteInt), intent( in) :: fill_value
     integer                               :: nf90mpi_def_var_fill_OneByteInt
-    
+
     nf90mpi_def_var_fill_OneByteInt = nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_def_var_fill_OneByteInt
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_fill_TwoByteInt(ncid, varid, no_fill, fill_value)
     integer,                  intent( in) :: ncid, varid, no_fill
     integer(kind=TwoByteInt), intent( in) :: fill_value
     integer                               :: nf90mpi_def_var_fill_TwoByteInt
-    
+
     nf90mpi_def_var_fill_TwoByteInt = nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_def_var_fill_TwoByteInt
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_fill_FourByteInt(ncid, varid, no_fill, fill_value)
     integer,                   intent( in) :: ncid, varid, no_fill
     integer(kind=FourByteInt), intent( in) :: fill_value
     integer                                :: nf90mpi_def_var_fill_FourByteInt
-    
+
     nf90mpi_def_var_fill_FourByteInt = nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_def_var_fill_FourByteInt
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_fill_EightByteInt(ncid, varid, no_fill, fill_value)
     integer,                    intent( in) :: ncid, varid, no_fill
     integer(kind=EightByteInt), intent( in) :: fill_value
     integer                                 :: nf90mpi_def_var_fill_EightByteInt
-    
+
     nf90mpi_def_var_fill_EightByteInt = nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_def_var_fill_EightByteInt
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_fill_FourByteReal(ncid, varid, no_fill, fill_value)
     integer,                 intent( in) :: ncid, varid, no_fill
     real(kind=FourByteReal), intent( in) :: fill_value
     integer                              :: nf90mpi_def_var_fill_FourByteReal
-    
+
     nf90mpi_def_var_fill_FourByteReal = nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_def_var_fill_FourByteReal
-  ! ----- 
+  ! -----
   function nf90mpi_def_var_fill_EightByteReal(ncid, varid, no_fill, fill_value)
     integer,                  intent( in) :: ncid, varid, no_fill
     real(kind=EightByteReal), intent( in) :: fill_value
     integer                               :: nf90mpi_def_var_fill_EightByteReal
-    
+
     nf90mpi_def_var_fill_EightByteReal = nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_def_var_fill_EightByteReal
-  ! ----- 
+  ! -----
   ! nf90mpi_inq_var_fill
-  ! ----- 
+  ! -----
   function nf90mpi_inq_var_fill_text(ncid, varid, no_fill, fill_value)
     integer,             intent( in) :: ncid, varid
     integer,             intent(out) :: no_fill
     character,           intent(out) :: fill_value
     integer                          :: nf90mpi_inq_var_fill_text
-    
+
     nf90mpi_inq_var_fill_text = nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_inq_var_fill_text
-  ! ----- 
+  ! -----
   function nf90mpi_inq_var_fill_OneByteInt(ncid, varid, no_fill, fill_value)
     integer,                  intent( in) :: ncid, varid
     integer,                  intent(out) :: no_fill
     integer(kind=OneByteInt), intent(out) :: fill_value
     integer                               :: nf90mpi_inq_var_fill_OneByteInt
-    
+
     nf90mpi_inq_var_fill_OneByteInt = nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_inq_var_fill_OneByteInt
-  ! ----- 
+  ! -----
   function nf90mpi_inq_var_fill_TwoByteInt(ncid, varid, no_fill, fill_value)
     integer,                  intent( in) :: ncid, varid
     integer,                  intent(out) :: no_fill
     integer(kind=TwoByteInt), intent(out) :: fill_value
     integer                               :: nf90mpi_inq_var_fill_TwoByteInt
-    
+
     nf90mpi_inq_var_fill_TwoByteInt = nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_inq_var_fill_TwoByteInt
-  ! ----- 
+  ! -----
   function nf90mpi_inq_var_fill_FourByteInt(ncid, varid, no_fill, fill_value)
     integer,                   intent( in) :: ncid, varid
     integer,                   intent(out) :: no_fill
     integer(kind=FourByteInt), intent(out) :: fill_value
     integer                                :: nf90mpi_inq_var_fill_FourByteInt
-    
+
     nf90mpi_inq_var_fill_FourByteInt = nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_inq_var_fill_FourByteInt
-  ! ----- 
+  ! -----
   function nf90mpi_inq_var_fill_EightByteInt(ncid, varid, no_fill, fill_value)
     integer,                    intent( in) :: ncid, varid
     integer,                    intent(out) :: no_fill
     integer(kind=EightByteInt), intent(out) :: fill_value
     integer                                 :: nf90mpi_inq_var_fill_EightByteInt
-    
+
     nf90mpi_inq_var_fill_EightByteInt = nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_inq_var_fill_EightByteInt
-  ! ----- 
+  ! -----
   function nf90mpi_inq_var_fill_FourByteReal(ncid, varid, no_fill, fill_value)
     integer,                 intent( in) :: ncid, varid
     integer,                 intent(out) :: no_fill
     real(kind=FourByteReal), intent(out) :: fill_value
     integer                              :: nf90mpi_inq_var_fill_FourByteReal
-    
+
     nf90mpi_inq_var_fill_FourByteReal = nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_inq_var_fill_FourByteReal
-  ! ----- 
+  ! -----
   function nf90mpi_inq_var_fill_EightByteReal(ncid, varid, no_fill, fill_value)
     integer,                  intent( in) :: ncid, varid
     integer,                  intent(out) :: no_fill
     real(kind=EightByteReal), intent(out) :: fill_value
     integer                               :: nf90mpi_inq_var_fill_EightByteReal
-    
+
     nf90mpi_inq_var_fill_EightByteReal = nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
   end function nf90mpi_inq_var_fill_EightByteReal
-  ! ----- 
+  ! -----
   function nf90mpi_fill_var_rec(ncid, varid, recno)
     integer,                       intent(in) :: ncid, varid
     integer(kind=MPI_OFFSET_KIND), intent(in) :: recno
     integer                                   :: nf90mpi_fill_var_rec
-    
+
     nf90mpi_fill_var_rec = nfmpi_fill_var_rec(ncid, varid, recno)
   end function nf90mpi_fill_var_rec
-  ! ----- 
+  ! -----
diff --git a/src/libf90/visibility.f90 b/src/binding/f90/visibility.fh
similarity index 97%
rename from src/libf90/visibility.f90
rename to src/binding/f90/visibility.fh
index 4769f57..7d1e002 100644
--- a/src/libf90/visibility.f90
+++ b/src/binding/f90/visibility.fh
@@ -2,31 +2,33 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: visibility.f90 2658 2016-11-27 22:13:48Z wkliao $
+! $Id: visibility.fh 3341 2017-08-25 22:29:08Z wkliao $
 !
 ! This file is taken from netcdf_visibility.f90 with changes for PnetCDF use
 !
 !
 
   ! Library version, error string
-  public :: nf90mpi_inq_libvers, nf90mpi_strerror, nf90mpi_strerrno
-  
-  ! Control routines 
+  public :: nf90mpi_inq_libvers, nf90mpi_strerror, nf90mpi_strerrno, &
+            nf90mpi_issyserr
+
+  ! Control routines
   public :: nf90mpi_create,   nf90mpi_open, &
             nf90mpi_set_fill, nf90mpi_redef, &
             nf90mpi_enddef,   nf90mpi_sync, &
             nf90mpi_abort,    nf90mpi_close, &
-            nf90mpi_delete,   nf90mpi_set_default_format
-            
+            nf90mpi_delete,   nf90mpi_set_default_format, &
+            nf90mpi_sync_numrecs
+
   ! File level inquiry
   public :: nf90mpi_inquire,          nf90mpi_inq_striping, &
             nf90mpi_inq_num_rec_vars, nf90mpi_inq_num_fix_vars, &
             nf90mpi_inq_path,         nf90mpi_inq_default_format
-  
+
   ! Dimension routines
   public :: nf90mpi_def_dim,    nf90mpi_inq_dimid, &
             nf90mpi_rename_dim, nf90mpi_inquire_dimension
-  
+
   ! attribute routines
   public :: nf90mpi_copy_att,          nf90mpi_rename_att, &
             nf90mpi_del_att,           nf90mpi_inq_attname, &
@@ -34,10 +36,10 @@
 
   ! overloaded functions
   public :: nf90mpi_put_att, nf90mpi_get_att
-  
+
   ! Variable routines
   public :: nf90mpi_def_var,      nf90mpi_inq_varid, &
-            nf90mpi_rename_var,   nf90mpi_inquire_variable, & 
+            nf90mpi_rename_var,   nf90mpi_inquire_variable, &
             nf90mpi_def_var_fill, nf90mpi_inq_var_fill, &
             nf90mpi_fill_var_rec
 
@@ -76,6 +78,7 @@
     public :: &
         nfmpi_inq_libvers, &
         nfmpi_strerror, &
+        nfmpi_strerrno, &
         nfmpi_issyserr
 !
 ! control subroutines:
@@ -94,6 +97,7 @@
         nfmpi_set_default_format, &
         nfmpi_inq_default_format, &
         nfmpi_sync, &
+        nfmpi_sync_numrecs, &
         nfmpi_abort, &
         nfmpi_close, &
         nfmpi_set_fill
@@ -134,8 +138,9 @@
 !
 ! attribute put/get subroutines:
 !
-    integer nfmpi_put_att, nfmpi_get_att
-    external nfmpi_put_att, nfmpi_get_att
+    ! Below two subroutines are of no use in nf90mpi subroutines
+    ! integer nfmpi_put_att, nfmpi_get_att
+    ! external nfmpi_put_att, nfmpi_get_att
 
     public :: &
         nfmpi_put_att_text, &
diff --git a/src/dispatchers/Makefile.am b/src/dispatchers/Makefile.am
new file mode 100644
index 0000000..e555564
--- /dev/null
+++ b/src/dispatchers/Makefile.am
@@ -0,0 +1,49 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2847 2017-01-17 07:40:16Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c .h .m4
+
+AM_CPPFLAGS  = -I${top_srcdir}/src/include
+AM_CPPFLAGS += -I${top_builddir}/src/include
+AM_CPPFLAGS += -I${top_srcdir}/src/drivers/include
+
+if PNETCDF_DEBUG
+   AM_CPPFLAGS += -DPNETCDF_DEBUG
+endif
+
+noinst_LTLIBRARIES = libdispatchers.la
+
+M4FLAGS += -I${top_srcdir}/m4
+
+M4_SRCS  = attr_getput.m4 \
+           var_getput.m4
+
+C_SRCS = lib_version.c \
+         file.c \
+         dimension.c \
+         variable.c \
+         attribute.c \
+         error_codes.c
+
+libdispatchers_la_SOURCES = $(C_SRCS)
+
+nodist_libdispatchers_la_SOURCES = $(M4_SRCS:.m4=.c)
+
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+
+CLEANFILES = $(M4_SRCS:.m4=.c) *.gcno
+
+EXTRA_DIST = $(M4_SRCS)
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+tests-local: all
+
diff --git a/src/dispatchers/Makefile.in b/src/dispatchers/Makefile.in
new file mode 100644
index 0000000..2225420
--- /dev/null
+++ b/src/dispatchers/Makefile.in
@@ -0,0 +1,726 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2847 2017-01-17 07:40:16Z wkliao $
+#
+# @configure_input@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at PNETCDF_DEBUG_TRUE@am__append_1 = -DPNETCDF_DEBUG
+subdir = src/dispatchers
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libdispatchers_la_LIBADD =
+am__objects_1 = lib_version.lo file.lo dimension.lo variable.lo \
+	attribute.lo error_codes.lo
+am_libdispatchers_la_OBJECTS = $(am__objects_1)
+am__objects_2 = attr_getput.lo var_getput.lo
+nodist_libdispatchers_la_OBJECTS = $(am__objects_2)
+libdispatchers_la_OBJECTS = $(am_libdispatchers_la_OBJECTS) \
+	$(nodist_libdispatchers_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libdispatchers_la_SOURCES) \
+	$(nodist_libdispatchers_la_SOURCES)
+DIST_SOURCES = $(libdispatchers_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c .h .m4
+AM_CPPFLAGS = -I${top_srcdir}/src/include \
+	-I${top_builddir}/src/include \
+	-I${top_srcdir}/src/drivers/include $(am__append_1)
+noinst_LTLIBRARIES = libdispatchers.la
+M4_SRCS = attr_getput.m4 \
+           var_getput.m4
+
+C_SRCS = lib_version.c \
+         file.c \
+         dimension.c \
+         variable.c \
+         attribute.c \
+         error_codes.c
+
+libdispatchers_la_SOURCES = $(C_SRCS)
+nodist_libdispatchers_la_SOURCES = $(M4_SRCS:.m4=.c)
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+CLEANFILES = $(M4_SRCS:.m4=.c) *.gcno
+EXTRA_DIST = $(M4_SRCS)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .h .m4 .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/dispatchers/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/dispatchers/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libdispatchers.la: $(libdispatchers_la_OBJECTS) $(libdispatchers_la_DEPENDENCIES) $(EXTRA_libdispatchers_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(LINK)  $(libdispatchers_la_OBJECTS) $(libdispatchers_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/attr_getput.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/attribute.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dimension.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/error_codes.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/file.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/lib_version.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/var_getput.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/variable.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/dispatchers/attr_getput.m4 b/src/dispatchers/attr_getput.m4
new file mode 100644
index 0000000..09bacdc
--- /dev/null
+++ b/src/dispatchers/attr_getput.m4
@@ -0,0 +1,284 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: attribute.m4 2873 2017-02-14 02:58:34Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <pnetcdf.h>
+#include <dispatch.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/*----< sanity_check_get() >-------------------------------------------------*/
+/* This is an independent subroutine. Sanity check for attribute get APIs is
+ * simpler, as attribute get APIs are independent subroutines.
+ */
+static int
+sanity_check_get(PNC        *pncp,
+                 int         varid,
+                 const char *name)
+{
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars))
+        DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* sanity check for name */
+    if (name == NULL || *name == 0) DEBUG_RETURN_ERROR(NC_EBADNAME)
+
+    if (strlen(name) > NC_MAX_NAME) DEBUG_RETURN_ERROR(NC_EMAXNAME)
+
+    return NC_NOERR;
+}
+
+/*----< sanity_check_put() >-------------------------------------------------*/
+/* This is a collective subroutine. */
+static int
+sanity_check_put(PNC        *pncp,
+                 int         varid,
+                 const char *name,
+                 MPI_Offset  nelems,
+                 const void *buf)
+{
+    int err=NC_NOERR;
+
+    /* file should be opened with writable permission */
+    if (pncp->flag & NC_MODE_RDONLY)
+        DEBUG_RETURN_ERROR(NC_EPERM)
+
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars))
+        DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    if (name == NULL || *name == 0) /* name cannot be NULL or NULL string */
+        DEBUG_RETURN_ERROR(NC_EBADNAME)
+
+#ifdef NO_NC_GLOBAL_FILLVALUE
+    /* See r3403 and RELEASE_NOTES 1.9.0 */
+    if (varid == NC_GLOBAL && !strcmp(name, _FillValue))
+        DEBUG_RETURN_ERROR(NC_EGLOBAL) /* global _FillValue is not allowed */
+#endif
+
+    if (strlen(name) > NC_MAX_NAME) /* name length */
+        DEBUG_RETURN_ERROR(NC_EMAXNAME)
+
+    /* check if the name string is legal for netcdf format */
+    err = ncmpii_check_name(name, pncp->format);
+    if (err != NC_NOERR) return err;
+
+    /* nelems can be zero, i.e. an attribute with only its name */
+    if (nelems > 0 && buf == NULL)
+        DEBUG_RETURN_ERROR(NC_EINVAL) /* Null arg */
+
+    if (nelems < 0 || (nelems > NC_MAX_INT && pncp->format <= NC_FORMAT_CDF2))
+        DEBUG_RETURN_ERROR(NC_EINVAL) /* Invalid nelems */
+
+    return NC_NOERR;
+}
+
+/*----< check_EBADTYPE_ECHAR() >---------------------------------------------*/
+static int
+check_EBADTYPE_ECHAR(PNC *pncp, MPI_Datatype itype, nc_type xtype)
+{
+    int err;
+
+    /* the max external data type supported by CDF-5 is NC_UINT64 */
+    if (xtype <= 0 || xtype > NC_UINT64)
+        DEBUG_RETURN_ERROR(NC_EBADTYPE)
+
+    /* For CDF-1 and CDF-2 files, only classic types are allowed. */
+    if (pncp->format < NC_FORMAT_CDF5 && xtype > NC_DOUBLE)
+        DEBUG_RETURN_ERROR(NC_ESTRICTCDF2)
+
+    /* No character conversions are allowed. */
+    err = (((xtype == NC_CHAR) == (itype != MPI_CHAR)) ? NC_ECHAR : NC_NOERR);
+    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+
+    return NC_NOERR;
+}
+
+/*----< check_consistency_put() >--------------------------------------------*/
+/* This is a collective subroutine and to be called in safe mode. */
+static int
+check_consistency_put(MPI_Comm      comm,
+                      int           varid,
+                      const char   *name,
+                      nc_type       xtype,
+                      MPI_Offset    nelems,
+                      const void   *buf,
+                      MPI_Datatype  itype,
+                      int           err)
+{
+    int root_name_len, root_varid, minE, rank, mpireturn;
+    char *root_name=NULL;
+    nc_type root_xtype;
+    MPI_Offset root_nelems;
+
+    /* first check the error code, err, across processes */
+    TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+    if (minE != NC_NOERR) return minE;
+
+    MPI_Comm_rank(comm, &rank);
+
+    /* check if attribute name is consistent among all processes */
+    assert(name != NULL);
+    root_name_len = strlen(name) + 1;
+    TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+    root_name = (char*) NCI_Malloc((size_t)root_name_len);
+    if (rank == 0) strcpy(root_name, name);
+    TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0, comm);
+    if (mpireturn != MPI_SUCCESS) {
+        NCI_Free(root_name);
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+    }
+    if (err == NC_NOERR && strcmp(root_name, name))
+        DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
+    NCI_Free(root_name);
+
+    /* check if varid is consistent across all processes */
+    root_varid = varid;
+    TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+    if (err == NC_NOERR && root_varid != varid)
+        DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+    /* check if xtype is consistent across all processes */
+    root_xtype = xtype;
+    TRACE_COMM(MPI_Bcast)(&root_xtype, 1, MPI_INT, 0, comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+    if (err == NC_NOERR && root_xtype != xtype)
+        DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_TYPE)
+
+    /* check if nelems is consistent across all processes */
+    root_nelems = nelems;
+    TRACE_COMM(MPI_Bcast)(&root_nelems, 1, MPI_OFFSET, 0, comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+    if (err == NC_NOERR && root_nelems != nelems)
+        DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_LEN)
+
+    /* check if buf contents is consistent across all processes */
+    if (root_nelems > 0) { /* non-scalar attribute */
+        /* note xsz is aligned, thus must use the exact size of buf */
+        int itype_size, rank, buf_size;
+        void *root_buf;
+
+        MPI_Comm_rank(comm, &rank);
+        MPI_Type_size(itype, &itype_size);
+        buf_size = (int)root_nelems * itype_size;
+        if (rank > 0) root_buf = (void*) NCI_Malloc(buf_size);
+        else          root_buf = (void*)buf;
+
+        TRACE_COMM(MPI_Bcast)(root_buf, root_nelems, itype, 0, comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR &&
+            (root_nelems != nelems || memcmp(root_buf, buf, buf_size)))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
+        if (rank > 0) NCI_Free(root_buf);
+    }
+
+    /* find min error code across processes */
+    TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+    if (minE != NC_NOERR) return minE;
+
+    return err;
+}
+
+include(`foreach.m4')dnl
+include(`utils.m4')dnl
+
+dnl
+define(`APINAME',`ifelse(`$2',`',`ncmpi_$1_att$2',`ncmpi_$1_att_$2')')dnl
+dnl
+dnl
+dnl GETPUT_ATT(get/put, iType)
+dnl
+define(`GETPUT_ATT',dnl
+`dnl
+/*----< APINAME($1,$2)() >---------------------------------------------------*/
+/* ifelse(`$1',`get',`This is an independent subroutine.',`
+ * This is a collective subroutine, all arguments should be consistent among
+ * all processes.
+ *
+ * If attribute name has already existed, it means to overwrite the attribute.
+ * In this case, if the new attribute is larger than the old one, this API
+ * must be called when the file is in define mode. (This check should be done
+ * at the driver.)
+ *
+ * Note from netCDF user guide:
+ * Attributes are always single values or one-dimensional arrays. This works
+ * out well for a string, which is a one-dimensional array of ASCII characters.
+ *')
+ifelse(`$2',`',` * The user buffer data type matches the external type defined in file.',
+`$2',`text',` * This API never returns NC_ERANGE error, as text is not convertible to numerical types',` *')
+ */
+int
+APINAME($1,$2)(int         ncid,
+               int         varid,
+               const char *name,
+               ifelse(`$1',`put',`ifelse(`$2',`text',,`nc_type xtype,')
+               MPI_Offset  nelems,   /* number of elements in buf */')
+               ifelse(`$1',`put',`const') ifelse(`$2',`','void`,NC2ITYPE($2)) *buf)
+{
+    int err=NC_NOERR;
+    PNC *pncp;
+    ifelse(`$2',`text',`ifelse(`$1',`put',`nc_type xtype=NC_CHAR;')')
+ifelse(`$2',`',`
+    MPI_Datatype itype='ifelse(`$1',`get',`MPI_DATATYPE_NULL;',`ncmpii_nc2mpitype(xtype);'),
+`$2',`long',`#if SIZEOF_LONG == SIZEOF_INT
+    MPI_Datatype itype=MPI_INT;
+#elif SIZEOF_LONG == SIZEOF_LONG_LONG
+    MPI_Datatype itype=MPI_LONG_LONG_INT;
+#endif',`    MPI_Datatype itype=ITYPE2MPI($2);')
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* sanity check for arguments */
+    ifelse(`$1',`get',
+    `err = sanity_check_get(pncp, varid, name);
+    if (err != NC_NOERR) return err;',
+    `err = sanity_check_put(pncp, varid, name, nelems, buf);')
+
+    ifelse(`$1',`put',`ifelse(`$2',`text',`',`/* check NC_EBADTYPE/NC_ECHAR */
+    if (err == NC_NOERR) err = check_EBADTYPE_ECHAR(pncp, itype, xtype);')
+
+    if (pncp->flag & NC_MODE_SAFE) /* put APIs are collective */
+        err = check_consistency_put(pncp->comm, varid, name, xtype, nelems,
+                                    buf, itype, err);
+    if (err != NC_NOERR) return err;')
+
+    /* calling the subroutine that implements APINAME($1,$2)() */
+    return pncp->driver->`$1'_att(pncp->ncp, varid, name,
+           ifelse(`$1',`put',`xtype, nelems,') buf, itype);
+}
+')dnl
+
+foreach(`putget', (get, put),
+        `foreach(`iType', (,text,schar,uchar,short,ushort,int,uint,long,float,double,longlong,ulonglong),
+                 `GETPUT_ATT(putget, iType)
+')')
+
diff --git a/src/dispatchers/attribute.c b/src/dispatchers/attribute.c
new file mode 100644
index 0000000..61d5994
--- /dev/null
+++ b/src/dispatchers/attribute.c
@@ -0,0 +1,449 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: attribute.c 3396 2017-09-21 23:16:07Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <pnetcdf.h>
+#include <dispatch.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/*----< ncmpi_inq_att() >----------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_att(int         ncid,
+              int         varid,
+              const char *name, /* input, attribute name */
+              nc_type    *xtypep,
+              MPI_Offset *lenp)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars))
+        DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    if (name == NULL || *name == 0) DEBUG_RETURN_ERROR(NC_EBADNAME)
+
+    if (strlen(name) > NC_MAX_NAME) DEBUG_RETURN_ERROR(NC_EMAXNAME)
+
+    /* calling the subroutine that implements ncmpi_inq_att() */
+    return pncp->driver->inq_att(pncp->ncp, varid, name, xtypep, lenp);
+}
+
+/*----< ncmpi_inq_atttype() >------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_atttype(int         ncid,
+                  int         varid,
+                  const char *name, /* input, attribute name */
+                  nc_type    *xtypep)
+{
+    return ncmpi_inq_att(ncid, varid, name, xtypep, NULL);
+}
+
+/*----< ncmpi_inq_attlen() >-------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_attlen(int         ncid,
+                 int         varid,
+                 const char *name, /* input, attribute name */
+                 MPI_Offset *lenp)
+{
+    return ncmpi_inq_att(ncid, varid, name, NULL, lenp);
+}
+
+/*----< ncmpi_inq_attid() >--------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_attid(int         ncid,
+                int         varid,
+                const char *name,
+                int        *attnump)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars))
+        DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    if (name == NULL || *name == 0) DEBUG_RETURN_ERROR(NC_EBADNAME)
+
+    if (strlen(name) > NC_MAX_NAME) DEBUG_RETURN_ERROR(NC_EMAXNAME)
+
+    /* calling the subroutine that implements ncmpi_inq_attid() */
+    return pncp->driver->inq_attid(pncp->ncp, varid, name, attnump);
+}
+
+/*----< ncmpi_inq_attname() >------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_attname(int   ncid,
+                  int   varid,
+                  int   attnum,
+                  char *name) /* output, attribute name */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars))
+        DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_attname() */
+    return pncp->driver->inq_attname(pncp->ncp, varid, attnum, name);
+}
+
+/*----< ncmpi_copy_att() >---------------------------------------------------*/
+/* This is a collective subroutine.
+ * ncid_out must be in define mode. If varid_in's attribute name has alreay
+ * existed in varid_out, it means to overwrite the attribute in varid_out.
+ * In this case, if the space used by varid_in's attribute is larger than
+ * varid_out's, then this API must be called when the file is in define mode.
+ */
+int
+ncmpi_copy_att(int         ncid_in,
+               int         varid_in,
+               const char *name,
+               int         ncid_out,
+               int         varid_out)
+{
+    int err;
+    PNC *pncp_in, *pncp_out;
+
+    /* check if ncid_in is valid */
+    err = PNC_check_id(ncid_in, &pncp_in);
+    if (err != NC_NOERR) return err;
+
+    /* check if ncid_out is valid */
+    err = PNC_check_id(ncid_out, &pncp_out);
+    if (err != NC_NOERR) return err;
+
+    if (pncp_out->flag & NC_MODE_RDONLY) { /* cannot be read-only */
+        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
+        goto err_check;
+    }
+
+    /* check whether variable ID is valid */
+    if (varid_in != NC_GLOBAL &&
+        (varid_in < 0 || varid_in >= pncp_in->nvars)) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    /* check whether variable ID is valid */
+    if (varid_out != NC_GLOBAL &&
+        (varid_out < 0 || varid_out >= pncp_out->nvars)) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    if (name == NULL || *name == 0) {
+        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
+        goto err_check;
+    }
+
+    if (strlen(name) > NC_MAX_NAME) {
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXNAME)
+        goto err_check;
+    }
+
+err_check:
+    if (pncp_out->flag & NC_MODE_SAFE) {
+        int root_ids[2], root_name_len, minE, rank, mpireturn;
+        char *root_name=NULL;
+
+        /* check the error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN,
+                                  pncp_out->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+
+        MPI_Comm_rank(pncp_out->comm, &rank);
+
+        /* check if name is consistent among all processes */
+        assert(name != NULL);
+        root_name_len = strlen(name) + 1;
+        TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, pncp_out->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+        root_name = (char*) NCI_Malloc((size_t)root_name_len);
+        if (rank == 0) strcpy(root_name, name);
+        TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0,
+                              pncp_out->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(root_name);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        }
+        if (err == NC_NOERR && strcmp(root_name, name))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
+        NCI_Free(root_name);
+
+        /* check if varid_in, varid_out, are consistent across all
+         * processes */
+        root_ids[0] = varid_in;
+        root_ids[1] = varid_out;
+        TRACE_COMM(MPI_Bcast)(&root_ids, 2, MPI_INT, 0, pncp_out->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && (root_ids[0] != varid_in ||
+            root_ids[1] != varid_out))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN,
+                                  pncp_out->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_copy_att() */
+    return pncp_in->driver->copy_att(pncp_in->ncp,  varid_in, name,
+                                     pncp_out->ncp, varid_out);
+}
+
+/*----< ncmpi_rename_att() >-------------------------------------------------*/
+/* This is a collective subroutine. If the new name is longer than the old
+ * name, this API must be called in define mode.
+ */
+int
+ncmpi_rename_att(int         ncid,
+                 int         varid,
+                 const char *name,
+                 const char *newname)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (pncp->flag & NC_MODE_RDONLY) { /* cannot be read-only */
+        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
+        goto err_check;
+    }
+
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars)) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    if (name == NULL || *name == 0) {
+        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
+        goto err_check;
+    }
+
+    if (strlen(name) > NC_MAX_NAME) {
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXNAME)
+        goto err_check;
+    }
+
+    if (newname == NULL || *newname == 0) {
+        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
+        goto err_check;
+    }
+
+    if (strlen(newname) > NC_MAX_NAME) { /* newname length */
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXNAME)
+        goto err_check;
+    }
+
+    /* check if the newname string is legal for the netcdf format */
+    err = ncmpii_check_name(newname, pncp->format);
+    if (err != NC_NOERR) {
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int root_name_len, root_varid, minE, rank, mpireturn;
+        char *root_name=NULL;
+
+        /* First check error code so far across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+
+        MPI_Comm_rank(pncp->comm, &rank);
+
+        /* check if name is consistent among all processes */
+        assert(name != NULL);
+        root_name_len = strlen(name) + 1;
+        TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+        root_name = (char*) NCI_Malloc((size_t)root_name_len);
+        if (rank == 0) strcpy(root_name, name);
+        TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0,pncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(root_name);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        }
+        if (err == NC_NOERR && strcmp(root_name, name))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
+        NCI_Free(root_name);
+
+        /* check if newname is consistent among all processes */
+        assert(newname != NULL);
+        root_name_len = strlen(newname) + 1;
+        TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+        root_name = (char*) NCI_Malloc((size_t)root_name_len);
+        strcpy(root_name, newname);
+        TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0,pncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(root_name);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        }
+        if (err == NC_NOERR && strcmp(root_name, newname))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
+        NCI_Free(root_name);
+
+        /* check if varid is consistent across all processes */
+        root_varid = varid;
+        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_varid != varid)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_rename_att() */
+    return pncp->driver->rename_att(pncp->ncp, varid, name, newname);
+}
+
+/*----< ncmpi_del_att() >----------------------------------------------------*/
+/* This is a collective subroutine.
+ * This API must be called in define mode.
+ */
+int
+ncmpi_del_att(int         ncid,
+              int         varid,
+              const char *name)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (pncp->flag & NC_MODE_RDONLY) { /* cannot be read-only */
+        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
+        goto err_check;
+    }
+
+    if (!(pncp->flag & NC_MODE_DEF)) { /* must be called in define mode */
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars))
+        DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    if (name == NULL || *name == 0) {
+        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
+        goto err_check;
+    }
+
+    if (strlen(name) > NC_MAX_NAME) {
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXNAME)
+        goto err_check;
+    }
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int root_varid, root_name_len, minE, rank, mpireturn;
+        char *root_name=NULL;
+
+        /* first check the error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+
+        MPI_Comm_rank(pncp->comm, &rank);
+
+        /* check if name is consistent among all processes */
+        assert(name != NULL);
+        root_name_len = strlen(name) + 1;
+        TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+        root_name = (char*) NCI_Malloc((size_t)root_name_len);
+        if (rank == 0) strcpy(root_name, name);
+        TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0,pncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(root_name);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        }
+        if (err == NC_NOERR && strcmp(root_name, name))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
+        NCI_Free(root_name);
+
+        /* check if varid is consistent across all processes */
+        root_varid = varid;
+        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_varid != varid)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN,pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_del_att() */
+    return pncp->driver->del_att(pncp->ncp, varid, name);
+}
+
diff --git a/src/dispatchers/dimension.c b/src/dispatchers/dimension.c
new file mode 100644
index 0000000..f66c819
--- /dev/null
+++ b/src/dispatchers/dimension.c
@@ -0,0 +1,334 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: dimension.c 3397 2017-09-21 23:16:53Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include <pnetcdf.h>
+#include <dispatch.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/*----< ncmpi_def_dim() >----------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_def_dim(int         ncid,    /* IN:  file ID */
+              const char *name,    /* IN:  name of dimension */
+              MPI_Offset  size,    /* IN:  dimension size */
+              int        *dimidp)  /* OUT: dimension ID */
+{
+    int err=NC_NOERR;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (!(pncp->flag & NC_MODE_DEF)) { /* must be called in define mode */
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+    if (name == NULL || *name == 0) { /* name cannot be NULL or NULL string */
+        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
+        goto err_check;
+    }
+
+    if (strlen(name) > NC_MAX_NAME) { /* name length */
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXNAME)
+        goto err_check;
+    }
+
+    /* check if the name string is legal for the netcdf format */
+    err = ncmpii_check_name(name, pncp->format);
+    if (err != NC_NOERR) {
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+
+    /* MPI_Offset is usually a signed value, but serial netcdf uses size_t.
+     * In 1999 ISO C standard, size_t is an unsigned integer type of at least
+     * 16 bit. */
+    if (pncp->format == NC_FORMAT_CDF2) { /* CDF-2 format, max is 2^32-4 */
+        if (size > NC_MAX_UINT - 3 || (size < 0))
+            /* "-3" handles rounded-up size */
+            err = NC_EDIMSIZE;
+    } else if (pncp->format == NC_FORMAT_CDF5) { /* CDF-5 format*/
+        if (size < 0)
+            err = NC_EDIMSIZE;
+    } else { /* CDF-1 format, max is 2^31-4 */
+        if (size > NC_MAX_INT - 3 || (size < 0))
+            /* "-3" handles rounded-up size */
+            err = NC_EDIMSIZE;
+    }
+    if (err != NC_NOERR) {
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+
+    if (size == NC_UNLIMITED && pncp->unlimdimid != -1) {
+        /* netcdf allows one unlimited dimension defined per file */
+        DEBUG_ASSIGN_ERROR(err, NC_EUNLIMIT) /* already defined */
+        goto err_check;
+    }
+
+    /* Note we no longer limit the number of dimensions, as CDF file formats
+     * impose no such limit. Thus, the value of NC_MAX_DIMS has been changed
+     * to NC_MAX_INT, as argument ndims in ncmpi_inq_varndims() is of type
+     * signed int.
+     */
+    if (pncp->ndims == NC_MAX_DIMS) {
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXDIMS)
+        goto err_check;
+    }
+
+    /* check if the name string is previously used */
+    err = pncp->driver->inq_dimid(pncp->ncp, name, NULL);
+    if (err != NC_EBADDIM) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
+        goto err_check;
+    }
+    else err = NC_NOERR;
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int root_name_len, minE, rank, mpireturn;
+        char *root_name=NULL;
+        MPI_Offset root_size;
+
+        /* check the error so far across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR)
+            return minE;
+
+        MPI_Comm_rank(pncp->comm, &rank);
+
+        /* check if name is consistent among all processes */
+        assert(name != NULL);
+        root_name_len = strlen(name) + 1;
+        TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+        root_name = (char*) NCI_Malloc((size_t)root_name_len);
+        if (rank == 0) strcpy(root_name, name);
+        TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0,pncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(root_name);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        }
+        if (err == NC_NOERR && strcmp(root_name, name))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_NAME)
+        NCI_Free(root_name);
+
+        /* check if sizes are consistent across all processes */
+        root_size = size;
+        TRACE_COMM(MPI_Bcast)(&root_size, 1, MPI_OFFSET, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_size != size)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_SIZE)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR)
+            return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+    
+    /* calling the subroutine that implements ncmpi_def_dim() */
+    err = pncp->driver->def_dim(pncp->ncp, name, size, dimidp);
+    if (err != NC_NOERR) return err;
+
+    if (size == NC_UNLIMITED && pncp->unlimdimid == -1)
+        pncp->unlimdimid = *dimidp;
+
+    pncp->ndims++;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq_dimid() >--------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_dimid(int         ncid,    /* IN:  file ID */
+                const char *name,    /* IN:  name of dimension */
+                int        *dimidp)  /* OUT: dimension ID */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (name == NULL || *name == 0) DEBUG_RETURN_ERROR(NC_EBADNAME)
+
+    if (strlen(name) > NC_MAX_NAME) DEBUG_RETURN_ERROR(NC_EMAXNAME)
+
+    /* calling the subroutine that implements ncmpi_inq_dimid() */
+    return pncp->driver->inq_dimid(pncp->ncp, name, dimidp);
+}
+
+/*----< ncmpi_inq_dim() >----------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_dim(int         ncid,    /* IN:  file ID */
+              int         dimid,   /* IN:  dimension ID */
+              char       *name,    /* OUT: name of dimension */
+              MPI_Offset *lengthp) /* OUT: length of dimension */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (dimid < 0 || dimid >= pncp->ndims) DEBUG_RETURN_ERROR(NC_EBADDIM)
+
+    /* calling the subroutine that implements ncmpi_inq_dim() */
+    return pncp->driver->inq_dim(pncp->ncp, dimid, name, lengthp);
+}
+
+/*----< ncmpi_inq_dimname() >------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_dimname(int   ncid,    /* IN:  file ID */
+                  int   dimid,   /* IN:  dimension ID */
+                  char *name)    /* OUT: name of dimension */
+{
+    return ncmpi_inq_dim(ncid, dimid, name, NULL);
+}
+
+/*----< ncmpi_inq_dimlen() >-------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_dimlen(int         ncid,
+                 int         dimid,
+                 MPI_Offset *lenp)
+{
+    return ncmpi_inq_dim(ncid, dimid, NULL, lenp);
+}
+
+/*----< ncmpi_rename_dim() >-------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_rename_dim(int         ncid,    /* IN: file ID */
+                 int         dimid,   /* IN: dimension ID */
+                 const char *newname) /* IN: name of dimension */
+{
+    int err=NC_NOERR, inq_id, skip_rename=0;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (pncp->flag & NC_MODE_RDONLY) { /* cannot be read-only */
+        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
+        goto err_check;
+    }
+
+    if (newname == NULL || *newname == 0) { /* cannot be NULL or NULL string */
+        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
+        goto err_check;
+    }
+
+    if (strlen(newname) > NC_MAX_NAME) { /* newname length */
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXNAME)
+        goto err_check;
+    }
+
+    /* check if the newname string is legal for the netcdf format */
+    err = ncmpii_check_name(newname, pncp->format);
+    if (err != NC_NOERR) {
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+
+    /* check NC_EBADDIM for whether dimid is valid */
+    if (dimid < 0 || dimid >= pncp->ndims) {
+        DEBUG_ASSIGN_ERROR(err, NC_EBADDIM)
+        goto err_check;
+    }
+
+    /* check if the name string is previously used */
+    err = pncp->driver->inq_dimid(pncp->ncp, newname, &inq_id);
+    if (err == NC_NOERR) { /* name already exist */
+        if (inq_id == dimid) /* same name, same dimid, skip rename */
+            skip_rename = 1;
+        else
+            DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
+    }
+    else if (err == NC_EBADDIM) { /* cannot find dimid with this name */
+        err = NC_NOERR;
+    }
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int root_name_len, root_dimid, minE, rank, mpireturn;
+        char *root_name=NULL;
+
+        /* check the error so far across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+
+        MPI_Comm_rank(pncp->comm, &rank);
+
+        /* check if name is consistent among all processes */
+        assert(newname != NULL);
+        root_name_len = strlen(newname) + 1;
+        TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+        root_name = (char*) NCI_Malloc((size_t)root_name_len);
+        if (rank == 0) strcpy(root_name, newname);
+        TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0,pncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(root_name);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        }
+        if (err == NC_NOERR && strcmp(root_name, newname))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_NAME)
+        NCI_Free(root_name);
+
+        /* check if dimid is consistent across all processes */
+        root_dimid = dimid;
+        TRACE_COMM(MPI_Bcast)(&root_dimid, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_dimid != dimid)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+
+    if (skip_rename) return NC_NOERR;
+
+    /* calling the subroutine that implements ncmpi_rename_dim() */
+    return pncp->driver->rename_dim(pncp->ncp, dimid, newname);
+}
+
diff --git a/src/lib/error.c b/src/dispatchers/error_codes.c
similarity index 84%
rename from src/lib/error.c
rename to src/dispatchers/error_codes.c
index ff92284..3210f27 100644
--- a/src/lib/error.c
+++ b/src/dispatchers/error_codes.c
@@ -1,13 +1,11 @@
 /*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: error.c 2639 2016-11-18 15:06:10Z wkliao $ */
+/* $Id: error_codes.c 3419 2017-09-24 18:56:39Z wkliao $ */
 
-/*LINTLIBRARY*/
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdio.h>
@@ -16,10 +14,6 @@
 #include <stdlib.h>
 #endif
 
-#include <mpi.h>
-
-#include "nc.h"
-
 #ifdef HAVE_STRERROR
 #include <string.h> /* contains prototype for ansi libc function strerror() */
 #else
@@ -36,6 +30,7 @@ strerror(int errnum)
 }
 #endif /* HAVE_STRERROR */
 
+#include <pnetcdf.h>
 
 #ifdef vms
 /* UNTESTED */
@@ -81,22 +76,14 @@ ncmpi_strerror(int err)
     sprintf(nc_unknown_err_msg,"Unknown Error: Unrecognized error code %5d\n",err);
 
 #ifdef vms
-    if(err == EVMSERR)
-    {
-        return vms_strerror(err);
-    }
-    /* else */
+    if (err == EVMSERR) return vms_strerror(err);
 #endif /* vms */
 
-    if(NC_ISSYSERR(err))
-    {
+    if (NC_ISSYSERR(err)) {
         const char *cp = (const char *) strerror(err);
-        if(cp == NULL)
-            return nc_unknown_err_msg;
-        /* else */
+        if (cp == NULL) return nc_unknown_err_msg;
         return cp;
     }
-    /* else */
 
     switch (err) {
         /* PnetCDF errors */
@@ -122,21 +109,21 @@ ncmpi_strerror(int err)
              * accompany with additional MPI error messages
              */
         case NC_EREAD:
-            return "Unknow error occurs in reading file";
+            return "Unknown error occurs in reading file";
             /* this error is caused by an unsuccessful call to MPI_File_read or
              * MPI_File_read_all and usually accompany with additional MPI
              * error messages
              */
         case NC_EWRITE:
-            return "Unknow error occurs in writting file";
+            return "Unknown error occurs in writing file";
             /* this error is caused by an unsuccessful call to MPI_File_write or
              * MPI_File_write_all and usually accompany with additional MPI
              * error messages
              */
         case NC_EOFILE:
-            return "Can not open/create file";
+            return "Fail to open/create file";
         case NC_EMULTITYPES:
-            return "Multiple types used in memory data";
+            return "Multiple etypes used in MPI datatype";
             /* when using flexible APIs, the argument MPI derived datatype is
              * not allowed to contain more than one basic data type
              */
@@ -153,7 +140,7 @@ ncmpi_strerror(int err)
              * error code.
              */
         case NC_EUNSPTETYPE:
-            return "Unsupported etype is used in MPI datatype for memory data";
+            return "Unsupported etype in the MPI datatype describing the I/O buffer";
             /* when using flexible APIs, the argument MPI derived datatype is
              * only allowed to be constructed from the MPI basic data types
              * known to PnetCDF
@@ -169,7 +156,7 @@ ncmpi_strerror(int err)
         case NC_ENOTSUPPORT:
             return "Feature is not yet supported.";
         case NC_ENULLBUF:
-            return "Trying to attach a NULL buffer or the buffer size is <= 0.";
+            return "Trying to attach a NULL buffer or the buffer size is negative.";
             /* an error returned from ncmpi_buffer_attach()
              */
         case NC_EPREVATTACHBUF:
@@ -182,7 +169,7 @@ ncmpi_strerror(int err)
             /* an error when calling bput APIs and no buffer has been attached
              */
         case NC_EPENDINGBPUT:
-            return "Cannot detach buffer as a pending bput request is found.";
+            return "Cannot detach buffer due to pending bput request is found.";
             /* an error returned from ncmpi_buffer_detach()
              */
         case NC_EINSUFFBUF:
@@ -190,19 +177,19 @@ ncmpi_strerror(int err)
             /* an error when calling bput APIs
              */
         case NC_ENOENT:
-            return "The specified netCDF file does not exist.";
+            return "Specified netCDF file does not exist.";
             /* this error code corresponds to MPI error class
              * MPI_ERR_NO_SUCH_FILE, an error generated from MPI_File_open(),
              * MPI_File_delete() or others
              */
         case NC_EINTOVERFLOW:
-            return "Overflow when type cast to 4-byte integer.";
+            return "Integer type casting overflow.";
             /* this usually happens on 32-bit machines where MPI_Offset is a
              * 4-byte integer and when the I/O request amount or accessing
              * file offset is > 2GB.
              */
         case NC_ENOTENABLED:
-            return "feature is not enabled at configure time.";
+            return "Feature is not enabled at configure time.";
             /* Some APIs require a specific feature enabled at the configure
              * time, for example, ncmpi_inq_malloc_size() works only
              * --enable-debug is used when configuring PnetCDF
@@ -223,29 +210,29 @@ ncmpi_strerror(int err)
              * MPI_ERR_QUOTA, an error generated from MPI_File_open()
              */
         case NC_ENULLSTART:
-            return "argument start is a NULL pointer";
+            return "Argument start is a NULL pointer";
             /* Some APIs require argument start not be a NULL pointer
              */
         case NC_ENULLCOUNT:
-            return "argument count is a NULL pointer";
+            return "Argument count is a NULL pointer";
             /* Some APIs require argument count cannot be a NULL pointer
              */
         case NC_EINVAL_CMODE:
             return "Invalid file create mode";
         case NC_ETYPESIZE:
-            return "MPI derived data type size error (bigger than the variable size)";
+            return "MPI datatype size error (bigger than the variable size)";
         case NC_ETYPE_MISMATCH:
-            return "element type of the MPI derived data type mismatches the variable data type";
+            return "etype of the MPI datatype mismatches the variable data type";
         case NC_ETYPESIZE_MISMATCH:
-            return "filetype's size mismatches buftype's size * bufcount";
+            return "MPI filetype size mismatches buftype size * bufcount";
         case NC_ESTRICTCDF2:
             return "Attempting CDF-5 operation on strict CDF or CDF-2 file";
         case NC_ENOTRECVAR:
             return "Attempting operation only for record variables";
         case NC_ENOTFILL:
-            return "Attempting to fill a variable when its fill mode is off";
+            return "Attempting to fill a record when its variable fill mode is off";
         case NC_EINVAL_OMODE:
-            return "Invalid file open mode";
+            return "Invalid or unsupported file open mode";
         case NC_EPENDING:
             return "Pending nonblocking request is found at file close";
         case NC_EMULTIDEFINE:
@@ -291,13 +278,13 @@ ncmpi_strerror(int err)
         case NC_EMULTIDEFINE_ATTR_VAL:
             return "Attribute value is inconsistent among processes.";
         case NC_EMULTIDEFINE_FNC_ARGS:
-            return "inconsistent function arguments used in collective API.";
+            return "Arguments in collective API are inconsistent among processes.";
         case NC_EMULTIDEFINE_FILL_MODE:
-            return "Dataset's file mode is inconsistent among processes.";
+            return "File fill mode is inconsistent among processes.";
         case NC_EMULTIDEFINE_VAR_FILL_MODE:
-            return "Variable's fill mode is inconsistent among processes.";
+            return "Variable fill mode is inconsistent among processes.";
         case NC_EMULTIDEFINE_VAR_FILL_VALUE:
-            return "Variable's fill value is inconsistent among processes.";
+            return "Variable fill value is inconsistent among processes.";
         case NC_EMULTIDEFINE_CMODE:
             return "File create mode is inconsistent among processes.";
 
@@ -307,81 +294,6 @@ ncmpi_strerror(int err)
     }
 }
 
-/*----< ncmpii_handle_error() ------------------------------------------------*/
-/* translate MPI error codes to PnetCDF/netCDF error codes */
-int ncmpii_handle_error(int   mpi_errorcode, /* returned value from MPI call */
-                        char *err_msg)       /* extra error message */
-{
-    int errorclass, errorStringLen;
-    char errorString[MPI_MAX_ERROR_STRING];
-
-    /* check for specific error codes understood by PnetCDF */
-
-    /* When NC_NOCLOBBER is used in ioflags(cmode) for open to create,
-     * netCDF requires NC_EEXIST returned if the file already exists.
-     * In MPI 2.1, if MPI_File_open uses MPI_MODE_EXCL and the file has
-     * already existed, the error class MPI_ERR_FILE_EXISTS should be returned.
-     * For opening an existing file but the file does not exist, MPI 2.1
-     * will return MPI_ERR_NO_SUCH_FILE
-     * Note for MPI 2.1 and prior, we return MPI_ERR_IO, as these error class
-     * have not been defined.
-     */
-    MPI_Error_class(mpi_errorcode, &errorclass);
-#ifdef HAVE_MPI_ERR_FILE_EXISTS
-    if (errorclass == MPI_ERR_FILE_EXISTS) return NC_EEXIST;
-#endif
-#ifdef HAVE_MPI_ERR_NO_SUCH_FILE
-    if (errorclass == MPI_ERR_NO_SUCH_FILE) return NC_ENOENT;
-#endif
-#ifdef HAVE_MPI_ERR_NOT_SAME
-    /* MPI-IO should return MPI_ERR_NOT_SAME when one or more arguments of a
-     * collective MPI call are different. However, MPI-IO may not report this
-     * error code correctly. For instance, some MPI-IO returns MPI_ERR_AMODE
-     * instead when amode is found inconsistent. MPI_ERR_NOT_SAME can also
-     * report inconsistent file name. */
-    if (errorclass == MPI_ERR_NOT_SAME) return NC_EMULTIDEFINE_FNC_ARGS;
-#endif
-#ifdef HAVE_MPI_ERR_AMODE
-    /* MPI-IO may or may not report MPI_ERR_AMODE if inconsistent amode is
-     * detected. MPI_ERR_AMODE can also indicate other conflict amode used
-     * on each process. But in PnetCDF, MPI_ERR_AMODE can only be caused by
-     * inconsistent file open/create mode. So, if MPI-IO returns this error
-     * we are sure it is because of the inconsistent mode */
-    if (errorclass == MPI_ERR_AMODE) return NC_EMULTIDEFINE_OMODE;
-#endif
-#ifdef HAVE_MPI_ERR_READ_ONLY
-    if (errorclass == MPI_ERR_READ_ONLY) return NC_EPERM;
-#endif
-#ifdef HAVE_MPI_ERR_ACCESS
-    if (errorclass == MPI_ERR_ACCESS) return NC_EACCESS;
-#endif
-#ifdef HAVE_MPI_ERR_BAD_FILE
-    if (errorclass == MPI_ERR_BAD_FILE) return NC_EBAD_FILE;
-#endif
-#ifdef HAVE_MPI_ERR_NO_SPACE
-    if (errorclass == MPI_ERR_NO_SPACE) return NC_ENO_SPACE;
-#endif
-#ifdef HAVE_MPI_ERR_QUOTA
-    if (errorclass == MPI_ERR_QUOTA) return NC_EQUOTA;
-#endif
-
-    /* other errors that currently have no corresponding PnetCDF error codes */
-
-    MPI_Error_string(mpi_errorcode, errorString, &errorStringLen);
-    if (err_msg == NULL) err_msg = "";
-#ifdef PNETCDF_DEBUG
-    /* report the world rank */
-    int rank;
-    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-    printf("rank %d: MPI error (%s) : %s\n", rank, err_msg, errorString);
-#else
-    printf("MPI error (%s) : %s\n", err_msg, errorString);
-#endif
-
-    return NC_EFILE; /* other unknown file I/O error */
-}
-
-
 /*-----------------------------------------------------------------------------
  *     Copy nc_strerror() from netCDF release to ensure the same error
  *     message is returned.
@@ -477,7 +389,7 @@ nc_strerror(int ncerr1)
       case NC_EINVALCOORDS:
 	 return "NetCDF: Index exceeds dimension bound";
       case NC_EMAXDIMS:
-	 return "NetCDF: NC_MAX_DIMS exceeded";
+	 return "NetCDF: NC_MAX_DIMS or NC_MAX_VAR_DIMS exceeded";
       case NC_ENAMEINUSE:
 	 return "NetCDF: String match to name in use";
       case NC_ENOTATT:
@@ -497,7 +409,7 @@ nc_strerror(int ncerr1)
       case NC_EGLOBAL:
 	 return "NetCDF: Action prohibited on NC_GLOBAL varid";
       case NC_ENOTNC:
-	 return "NetCDF: Unknown file format";
+	 return "NetCDF: Unknown file format (file format violates CDF specification)";
       case NC_ESTS:
 	 return "NetCDF: In Fortran, string too short";
       case NC_EMAXNAME:
@@ -605,7 +517,7 @@ nc_strerror(int ncerr1)
       case NC_ELATEDEF:
 	 return "NetCDF: Attempt to define var properties, like deflate, after enddef.";
       case NC_EDIMSCALE:
-	 return "NetCDF: Probem with HDF5 dimscales.";
+	 return "NetCDF: Problem with HDF5 dimscales.";
       case NC_ENOGRP:
 	 return "NetCDF: No group found.";
       case NC_ESTORAGE:
diff --git a/src/dispatchers/file.c b/src/dispatchers/file.c
new file mode 100644
index 0000000..44b7934
--- /dev/null
+++ b/src/dispatchers/file.c
@@ -0,0 +1,1501 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: file.c 3483 2017-10-25 21:02:50Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>  /* getenv() */
+#include <string.h>  /* strtok(), strtok_r(), strchr(), strdup(), strcpy() */
+#include <fcntl.h>   /* open() */
+#include <unistd.h>  /* read(), close() */
+#include <assert.h>  /* assert() */
+#include <errno.h>   /* errno */
+
+#include <pnetcdf.h>
+#include <dispatch.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/* TODO: the following 3 global variables make PnetCDF not thread safe */
+
+/* static variables are initialized to NULLs */
+static PNC *pnc_filelist[NC_MAX_NFILES];
+static int  pnc_numfiles;
+
+/* This is the default create format for ncmpi_create and nc__create.
+ * The use of this file scope variable is not thread-safe.
+ */
+static int ncmpi_default_create_format = NC_FORMAT_CLASSIC;
+
+#define NCMPII_HANDLE_ERROR(func) \
+    if (mpireturn != MPI_SUCCESS) { \
+        int errorStringLen; \
+        char errorString[MPI_MAX_ERROR_STRING]; \
+        MPI_Error_string(mpireturn, errorString, &errorStringLen); \
+        printf("%s error at line %d file %s (%s)\n", func, __LINE__, __FILE__, errorString); \
+    }
+
+/*----< new_id_PNCList() >---------------------------------------------------*/
+/* get a new ID from the PNC list */
+static int
+new_id_PNCList(int *new_id)
+{   
+    int i;
+
+    *new_id = -1;
+    for (i=0; i<NC_MAX_NFILES; i++) { /* find the first unused element */
+        if (pnc_filelist[i] == NULL) {
+            *new_id = i;
+            break;
+        }
+    }
+    if (*new_id == -1) /* Too many files open */
+        DEBUG_RETURN_ERROR(NC_ENFILE)
+
+    return NC_NOERR;
+}
+
+/*----< add_to_PNCList() >---------------------------------------------------*/
+static int
+add_to_PNCList(PNC *pncp,
+               int  new_id)
+{   
+    /* these checks below are redundant */
+    assert(pncp != NULL);
+    assert(new_id >= 0);
+    if (new_id >= NC_MAX_NFILES) return NC_ENFILE;
+
+    pnc_filelist[new_id] = pncp;  /* store the pointer */
+    pnc_numfiles++;               /* increment number of files opened */
+    return NC_NOERR;
+}
+
+/*----< del_from_PNCList() >-------------------------------------------------*/
+static void
+del_from_PNCList(int ncid)
+{
+    /* validity of ncid should have been checked already */
+    pnc_filelist[ncid] = NULL;
+    pnc_numfiles--;
+}
+
+#if 0 /* refer to netCDF library's USE_REFCOUNT */
+static PNC*
+find_in_PNCList_by_name(const char* path)
+{
+    int i;
+    PNC* pncp = NULL;
+    for (i=0; i<NC_MAX_NFILES; i++) {
+         if (pnc_filelist[i] == NULL) continue;
+         if (strcmp(pnc_filelist[i]->path, path) == 0) {
+             pncp = pnc_filelist[i];
+             break;
+         }
+    }
+    return pncp;
+}
+#endif
+
+/*----< PNC_check_id() >-----------------------------------------------------*/
+int
+PNC_check_id(int ncid, PNC **pncp)
+{
+    assert(pncp != NULL);
+
+    if (pnc_numfiles == 0 || ncid < 0 || ncid >= NC_MAX_NFILES)
+        DEBUG_RETURN_ERROR(NC_EBADID)
+
+    *pncp = pnc_filelist[ncid];
+
+    return NC_NOERR;
+}
+
+/*----< construct_info() >---------------------------------------------------*/
+static void
+combine_env_hints(MPI_Info  user_info,
+                  MPI_Info *new_info)
+{
+    char *warn_str="Warning: skip ill-formed hint set in PNETCDF_HINTS";
+    char *env_str;
+
+    /* take hints from the environment variable PNETCDF_HINTS, a string of
+     * hints separated by ";" and each hint is in the form of hint=value. E.g.
+     * "cb_nodes=16;cb_config_list=*:6". If this environment variable is set,
+     * it overrides the same hints that were set by MPI_Info_set() called in
+     * the application program.
+     */
+    if (user_info != MPI_INFO_NULL)
+        MPI_Info_dup(user_info, new_info); /* ignore error */
+    else
+        *new_info = MPI_INFO_NULL;
+
+    /* get environment variable PNETCDF_HINTS */
+    if ((env_str = getenv("PNETCDF_HINTS")) != NULL) {
+#ifdef USE_STRTOK_R
+        char *env_str_cpy, *env_str_saved, *hint, *key;
+        env_str_cpy = strdup(env_str);
+        env_str_saved = env_str_cpy;
+        hint = strtok_r(env_str_cpy, ";", &env_str_saved);
+        while (hint != NULL) {
+            char *hint_saved = strdup(hint);
+            char *val = strchr(hint, '=');
+            if (val == NULL) { /* ill-formed hint */
+                if (NULL != strtok(hint, " \t"))
+                    printf("%s: '%s'\n", warn_str, hint_saved);
+                /* else case: ignore white-spaced hints */
+                NCI_Free(hint_saved);
+                hint = strtok_r(NULL, ";", &env_str_saved); /* get next hint */
+                continue;
+            }
+            key = strtok(hint, "= \t");
+            val = strtok(NULL, "= \t");
+            if (NULL != strtok(NULL, "= \t")) /* expect no more token */
+                printf("%s: '%s'\n", warn_str, hint_saved);
+            else {
+                if (*new_info == MPI_INFO_NULL)
+                    MPI_Info_create(new_info); /* ignore error */
+                MPI_Info_set(*new_info, key, val); /* override or add */
+            }
+            /* printf("env hint: key=%s val=%s\n",key,val); */
+            hint = strtok_r(NULL, ";", &env_str_saved);
+            NCI_Free(hint_saved);
+        }
+        NCI_Free(env_str_cpy);
+#else
+        char *env_str_cpy, *hint, *next_hint, *key, *val, *deli;
+        char *hint_saved=NULL;
+
+        env_str_cpy = strdup(env_str);
+        next_hint = env_str_cpy;
+
+        do {
+            hint = next_hint;
+            deli = strchr(hint, ';');
+            if (deli != NULL) {
+                *deli = '\0'; /* add terminate char */
+                next_hint = deli + 1;
+            }
+            else next_hint = "\0";
+            if (hint_saved != NULL) NCI_Free(hint_saved);
+
+            /* skip all-blank hint */
+            hint_saved = strdup(hint);
+            if (strtok(hint, " \t") == NULL) continue;
+
+            NCI_Free(hint_saved);
+            hint_saved = strdup(hint); /* save hint for error message */
+
+            deli = strchr(hint, '=');
+            if (deli == NULL) { /* ill-formed hint */
+                printf("%s: '%s'\n", warn_str, hint_saved);
+                continue;
+            }
+            *deli = '\0';
+
+            /* hint key */
+            key = strtok(hint, "= \t");
+            if (key == NULL || NULL != strtok(NULL, "= \t")) {
+                /* expect one token before = */
+                printf("%s: '%s'\n", warn_str, hint_saved);
+                continue;
+            }
+
+            /* hint value */
+            val = strtok(deli+1, "= \t");
+            if (NULL != strtok(NULL, "= \t")) { /* expect one token before = */
+                printf("%s: '%s'\n", warn_str, hint_saved);
+                continue;
+            }
+            if (*new_info == MPI_INFO_NULL)
+                MPI_Info_create(new_info); /* ignore error */
+            MPI_Info_set(*new_info, key, val); /* override or add */
+
+        } while (*next_hint != '\0');
+
+        if (hint_saved != NULL) NCI_Free(hint_saved);
+        NCI_Free(env_str_cpy);
+#endif
+    }
+    /* return no error as all hints are advisory */
+}
+
+/*----< ncmpi_create() >-----------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_create(MPI_Comm    comm,
+             const char *path,
+             int         cmode,
+             MPI_Info    info,
+             int        *ncidp)
+{
+    int default_format, rank, status=NC_NOERR, err;
+    int safe_mode=0, mpireturn, root_cmode;
+    char *env_str;
+    MPI_Info combined_info;
+    void *ncp;
+    PNC *pncp;
+    PNC_driver *driver;
+#ifdef BUILD_DRIVER_FOO
+    int enable_foo_driver=0;
+#endif
+
+    MPI_Comm_rank(comm, &rank);
+
+#ifdef PNETCDF_DEBUG
+    safe_mode = 1;
+    /* this configure time setting will be overwritten by the run-time
+     * environment variable PNETCDF_SAFE_MODE */
+#endif
+    /* get environment variable PNETCDF_SAFE_MODE
+     * if it is set to 1, then we perform a strict parameter consistent test
+     */
+    if ((env_str = getenv("PNETCDF_SAFE_MODE")) != NULL) {
+        if (*env_str == '0') safe_mode = 0;
+        else                 safe_mode = 1;
+        /* if PNETCDF_SAFE_MODE is set but without a value, *env_str can
+         * be '\0' (null character). In this case, safe_mode is enabled */
+    }
+
+    /* path's validity is checked in MPI-IO with error code MPI_ERR_BAD_FILE
+     * path consistency is checked in MPI-IO with error code MPI_ERR_NOT_SAME
+     */
+    if (path == NULL || *path == '\0') DEBUG_RETURN_ERROR(NC_EBAD_FILE)
+
+    /* Check cmode consistency */
+    root_cmode = cmode; /* only root's matters */
+    TRACE_COMM(MPI_Bcast)(&root_cmode, 1, MPI_INT, 0, comm);
+    NCMPII_HANDLE_ERROR("MPI_Bcast")
+
+    /* Overwrite cmode with root's cmode */
+    if (root_cmode != cmode) {
+        cmode = root_cmode;
+        DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_CMODE)
+    }
+
+    if (safe_mode) { /* sync status among all processes */
+        err = status;
+        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, comm);
+        NCMPII_HANDLE_ERROR("MPI_Allreduce")
+    }
+    /* continue to use root's cmode to create the file, but will report cmode
+     * inconsistency error, if there is any */
+
+    /* combine user's info and PNETCDF_HINTS env variable */
+    combine_env_hints(info, &combined_info);
+
+#ifdef BUILD_DRIVER_FOO
+    /* check if nc_foo_driver is enabled */
+    if (combined_info != MPI_INFO_NULL) {
+        char value[MPI_MAX_INFO_VAL];
+        int flag;
+
+        MPI_Info_get(combined_info, "nc_foo_driver", MPI_MAX_INFO_VAL-1,
+                     value, &flag);
+        if (flag && strcasecmp(value, "enable") == 0)
+            enable_foo_driver = 1;
+    }
+
+    if (enable_foo_driver)
+        driver = ncfoo_inq_driver();
+    else
+#endif
+        /* TODO: Use environment variable and cmode to tell the file format
+         * which is later used to select the right driver. For now, we have
+         * only one driver, ncmpio.
+         */
+        driver = ncmpio_inq_driver();
+
+#if 0 /* refer to netCDF library's USE_REFCOUNT */
+    /* check whether this path is already opened */
+    pncp = find_in_PNCList_by_name(path);
+    if (pncp != NULL) return NC_ENFILE;
+#endif
+
+    /* get a new ID from NCPList */
+    err = new_id_PNCList(ncidp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the create subroutine */
+    err = driver->create(comm, path, cmode, *ncidp, combined_info, &ncp);
+    if (status == NC_NOERR) status = err;
+    if (combined_info != MPI_INFO_NULL) MPI_Info_free(&combined_info);
+    if (status != NC_NOERR && status != NC_EMULTIDEFINE_CMODE) {
+        *ncidp = -1;
+        return status;
+    }
+
+    /* Create a PNC object and save the driver pointer */
+    pncp = (PNC*) NCI_Malloc(sizeof(PNC));
+    if (pncp == NULL) {
+        driver->close(ncp); /* close file and ignore error */
+        *ncidp = -1;
+        DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    pncp->path = (char*) NCI_Malloc(strlen(path)+1);
+    if (pncp->path == NULL) {
+        driver->close(ncp); /* close file and ignore error */
+        *ncidp = -1;
+        NCI_Free(pncp);
+        DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    strcpy(pncp->path, path);
+    pncp->mode       = cmode;
+    pncp->driver     = driver;
+    pncp->ndims      = 0;
+    pncp->unlimdimid = -1;
+    pncp->nvars      = 0;
+    pncp->vars       = NULL;
+    pncp->flag       = NC_MODE_DEF | NC_MODE_CREATE;
+    pncp->ncp        = ncp;
+
+    if (safe_mode)         pncp->flag |= NC_MODE_SAFE;
+    /* if (enable_foo_driver) pncp->flag |= NC_MODE_BB; */
+    MPI_Comm_dup(comm, &pncp->comm);
+
+    /* set the file format version based on the create mode, cmode */
+    ncmpi_inq_default_format(&default_format);
+    if (cmode & NC_64BIT_DATA) {
+        pncp->format = NC_FORMAT_CDF5;
+    } else if (cmode & NC_64BIT_OFFSET) {
+        pncp->format = NC_FORMAT_CDF2;
+    } else {
+        pncp->format = default_format;
+    }
+
+    /* add to PNCList */
+    err = add_to_PNCList(pncp, *ncidp);
+    if (err != NC_NOERR) {
+        driver->close(ncp); /* close file and ignore error */
+        *ncidp = -1;
+        MPI_Comm_free(&pncp->comm);
+        NCI_Free(pncp->path);
+        NCI_Free(pncp);
+        return err;
+    }
+    return status;
+}
+
+/*----< ncmpi_open() >-------------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_open(MPI_Comm    comm,
+           const char *path,
+           int         omode,
+           MPI_Info    info,
+           int        *ncidp)  /* OUT */
+{
+    int i, nalloc, rank, format, msg[2], status=NC_NOERR, err;
+    int safe_mode=0, mpireturn, root_omode;
+    char *env_str;
+    MPI_Info combined_info;
+    void *ncp;
+    PNC *pncp;
+    PNC_driver *driver;
+#ifdef BUILD_DRIVER_FOO
+    int enable_foo_driver=0;
+#endif
+
+    MPI_Comm_rank(comm, &rank);
+
+#ifdef PNETCDF_DEBUG
+    safe_mode = 1;
+    /* this configure time setting will be overwritten by the run-time
+     * environment variable PNETCDF_SAFE_MODE */
+#endif
+    /* get environment variable PNETCDF_SAFE_MODE
+     * if it is set to 1, then we perform a strict parameter consistent test
+     */
+    if ((env_str = getenv("PNETCDF_SAFE_MODE")) != NULL) {
+        if (*env_str == '0') safe_mode = 0;
+        else                 safe_mode = 1;
+        /* if PNETCDF_SAFE_MODE is set but without a value, *env_str can
+         * be '\0' (null character). In this case, safe_mode is enabled */
+    }
+
+    /* path's validity is checked in MPI-IO with error code MPI_ERR_BAD_FILE
+     * path consistency is checked in MPI-IO with error code MPI_ERR_NOT_SAME
+     */
+    if (path == NULL || *path == '\0') DEBUG_RETURN_ERROR(NC_EBAD_FILE)
+
+    /* Check the file signature to tell the file format which is later used to
+     * select the right driver.
+     */
+    format = NC_FORMAT_UNKNOWN;
+    if (rank == 0) {
+        err = ncmpi_inq_file_format(path, &format);
+        if (err != NC_NOERR) format = err;
+        else if (format == NC_FORMAT_UNKNOWN) format = NC_ENOTNC;
+    }
+    msg[0] = format; /* only root's matters */
+
+    /* Check omode consistency:
+     * Note if omode contains NC_NOWRITE, it is equivalent to NC_CLOBBER.
+     * In pnetcdf.h, they both are defined the same value, 0.
+     * Only root's omode matters.
+     */
+    msg[1] = omode; /* only root's matters */
+
+    TRACE_COMM(MPI_Bcast)(&msg, 2, MPI_INT, 0, comm);
+    NCMPII_HANDLE_ERROR("MPI_Bcast")
+
+    /* check format error (a fatal error, must return now) */
+    format = msg[0];
+    if (format < 0) return format; /* all netCDF errors are negative */
+
+    /* check omode consistency */
+    root_omode = msg[1];
+    if (root_omode != omode) {
+        omode = root_omode;
+        DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_OMODE)
+    }
+
+    if (safe_mode) { /* sync status among all processes */
+        err = status;
+        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, comm);
+        NCMPII_HANDLE_ERROR("MPI_Allreduce")
+    }
+    /* continue to use root's omode to open the file, but will report omode
+     * inconsistency error, if there is any */
+
+    /* combine user's info and PNETCDF_HINTS env variable */
+    combine_env_hints(info, &combined_info);
+
+#ifdef BUILD_DRIVER_FOO
+    /* check if nc_foo_driver is enabled */
+    if (combined_info != MPI_INFO_NULL) {
+        char value[MPI_MAX_INFO_VAL];
+        int flag;
+
+        MPI_Info_get(combined_info, "nc_foo_driver", MPI_MAX_INFO_VAL-1,
+                     value, &flag);
+        if (flag && strcasecmp(value, "enable") == 0)
+            enable_foo_driver = 1;
+    }
+
+    if (enable_foo_driver)
+        driver = ncfoo_inq_driver();
+    else
+#endif
+        /* TODO: currently we only have ncmpio driver. Need to add other
+         * drivers once they are available
+         */
+        if (format == NC_FORMAT_CLASSIC ||
+            format == NC_FORMAT_CDF2 ||
+            format == NC_FORMAT_CDF5) {
+        driver = ncmpio_inq_driver();
+    }
+    else if (format == NC_FORMAT_NETCDF4_CLASSIC) {
+        fprintf(stderr,"NC_FORMAT_NETCDF4_CLASSIC is not yet supported\n");
+        DEBUG_RETURN_ERROR(NC_ENOTSUPPORT)
+    }
+    else if (format == NC_FORMAT_NETCDF4) {
+        fprintf(stderr,"NC_FORMAT_NETCDF4 is not yet supported\n");
+        DEBUG_RETURN_ERROR(NC_ENOTSUPPORT)
+    }
+    else { /* unrecognized file format */
+        DEBUG_RETURN_ERROR(NC_ENOTNC)
+    }
+
+    /* get a new ID from NCPList */
+    err = new_id_PNCList(ncidp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the open subroutine */
+    err = driver->open(comm, path, omode, *ncidp, combined_info, &ncp);
+    if (status == NC_NOERR) status = err;
+    if (combined_info != MPI_INFO_NULL) MPI_Info_free(&combined_info);
+    if (status != NC_NOERR && status != NC_EMULTIDEFINE_OMODE) {
+        *ncidp = -1;
+        return status;
+    }
+
+    /* Create a PNC object and save its driver pointer */
+    pncp = (PNC*) NCI_Malloc(sizeof(PNC));
+    if (pncp == NULL) {
+        driver->close(ncp); /* close file and ignore error */
+        *ncidp = -1;
+        DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    pncp->path = (char*) NCI_Malloc(strlen(path)+1);
+    if (pncp->path == NULL) {
+        driver->close(ncp); /* close file and ignore error */
+        *ncidp = -1;
+        NCI_Free(pncp);
+        DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    strcpy(pncp->path, path);
+    pncp->mode       = omode;
+    pncp->driver     = driver;
+    pncp->ndims      = 0;
+    pncp->unlimdimid = -1;
+    pncp->nvars      = 0;
+    pncp->vars       = NULL;
+    pncp->flag       = 0;
+    pncp->ncp        = ncp;
+    pncp->format     = format;
+    if (!fIsSet(omode, NC_WRITE)) pncp->flag |= NC_MODE_RDONLY;
+    if (safe_mode)                pncp->flag |= NC_MODE_SAFE;
+    /* if (enable_foo_driver)        pncp->flag |= NC_MODE_BB; */
+    MPI_Comm_dup(comm, &pncp->comm);
+
+    /* add to the PNCList */
+    err = add_to_PNCList(pncp, *ncidp);
+    if (err != NC_NOERR) goto fn_exit;
+
+    /* construct pncp->vars[] */
+
+    /* inquire number of dimensions, variables defined and rec dim ID */
+    err = driver->inq(pncp->ncp, &pncp->ndims, &pncp->nvars, NULL,
+                      &pncp->unlimdimid);
+    if (err != NC_NOERR) goto fn_exit;
+
+    if (pncp->nvars == 0) return status; /* no variable defined */
+
+    /* allocate chunk size for pncp->vars[] */
+    nalloc = _RNDUP(pncp->nvars, PNC_VARS_CHUNK);
+    pncp->vars = NCI_Malloc(nalloc * sizeof(PNC_var));
+    if (pncp->vars == NULL) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
+        goto fn_exit;
+    }
+
+    /* construct array of PNC_var for all variables */
+    for (i=0; i<pncp->nvars; i++) {
+        nc_type xtype;
+        int ndims;
+        err = driver->inq_var(pncp->ncp, i, NULL, &xtype, &ndims,
+                              NULL, NULL, NULL, NULL, NULL);
+        if (err != NC_NOERR) return err;
+        pncp->vars[i].xtype  = xtype;
+        pncp->vars[i].ndims  = ndims;
+        pncp->vars[i].recdim = -1;   /* if fixed-size variable */
+        pncp->vars[i].shape  = NULL;
+        if (ndims > 0) {
+            int j, *dimids;
+            pncp->vars[i].shape = (MPI_Offset*)
+                                   NCI_Malloc(ndims * SIZEOF_MPI_OFFSET);
+            dimids = (int*) NCI_Malloc(ndims * SIZEOF_INT);
+            err = driver->inq_var(pncp->ncp, i, NULL, NULL, NULL,
+                                  dimids, NULL, NULL, NULL, NULL);
+            if (err != NC_NOERR) goto fn_exit;
+            if (dimids[0] == pncp->unlimdimid)
+                pncp->vars[i].recdim = pncp->unlimdimid;
+            for (j=0; j<ndims; j++) {
+                /* obtain size of dimension j */
+                err = driver->inq_dim(pncp->ncp, dimids[j], NULL,
+                                      pncp->vars[i].shape+j);
+                if (err != NC_NOERR) goto fn_exit;
+            }
+            NCI_Free(dimids);
+        }
+    }
+
+fn_exit:
+    if (err != NC_NOERR) {
+        driver->close(ncp); /* close file and ignore error */
+        *ncidp = -1;
+        MPI_Comm_free(&pncp->comm);
+        NCI_Free(pncp->path);
+        NCI_Free(pncp);
+        if (status == NC_NOERR) status = err;
+    }
+
+    return status;
+}
+
+/*----< ncmpi_close() >------------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_close(int ncid)
+{
+    int i, err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_close() */
+    err = pncp->driver->close(pncp->ncp);
+
+    /* Remove from the PNCList, even if err != NC_NOERR */
+    del_from_PNCList(ncid);
+
+    /* free the PNC object */
+    MPI_Comm_free(&pncp->comm);
+    NCI_Free(pncp->path);
+    for (i=0; i<pncp->nvars; i++)
+        if (pncp->vars[i].shape != NULL)
+            NCI_Free(pncp->vars[i].shape);
+    if (pncp->vars != NULL)
+        NCI_Free(pncp->vars);
+    NCI_Free(pncp);
+
+    return err;
+}
+
+/*----< ncmpi_enddef() >-----------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_enddef(int ncid) {
+    int err=NC_NOERR;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (!(pncp->flag & NC_MODE_DEF)) DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+
+    if (pncp->flag & NC_MODE_SAFE) {
+        int minE, mpireturn;
+        /* check the error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+    else if (err != NC_NOERR) return err; /* fatal error */
+
+    /* calling the subroutine that implements ncmpi_enddef() */
+    err = pncp->driver->enddef(pncp->ncp);
+    if (err != NC_NOERR) return err;
+
+    fClr(pncp->flag, NC_MODE_INDEP); /* default enters collective data mode */
+    fClr(pncp->flag, NC_MODE_DEF);
+    return NC_NOERR;
+}
+
+/*----< ncmpi__enddef() >----------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi__enddef(int        ncid,
+              MPI_Offset h_minfree,
+              MPI_Offset v_align,
+              MPI_Offset v_minfree,
+              MPI_Offset r_align)
+{   
+    int err=NC_NOERR;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (!(pncp->flag & NC_MODE_DEF)) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+    if (h_minfree < 0 || v_align < 0 || v_minfree < 0 || r_align < 0) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINVAL)
+        goto err_check;
+    }
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int minE, mpireturn;
+        MPI_Offset root_args[4];
+
+        /* first check the error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+
+        /* check if h_minfree, v_align, v_minfree, and r_align are consistent
+         * among all processes */
+        root_args[0] = h_minfree;
+        root_args[1] = v_align;
+        root_args[2] = v_minfree;
+        root_args[3] = r_align;
+        TRACE_COMM(MPI_Bcast)(&root_args, 4, MPI_OFFSET, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+
+        if (root_args[0] != h_minfree ||
+            root_args[1] != v_align   ||
+            root_args[2] != v_minfree ||
+            root_args[3] != r_align)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+    else if (err != NC_NOERR) return err; /* fatal error */
+
+    /* calling the subroutine that implements ncmpi__enddef() */
+    err = pncp->driver->_enddef(pncp->ncp, h_minfree, v_align,
+                                           v_minfree, r_align);
+    if (err != NC_NOERR) return err;
+
+    fClr(pncp->flag, NC_MODE_INDEP); /* default enters collective data mode */
+    fClr(pncp->flag, NC_MODE_DEF);
+    return NC_NOERR;
+}
+
+/*----< ncmpi_redef() >------------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_redef(int ncid)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (fIsSet(pncp->flag, NC_MODE_RDONLY)) /* read-only */
+        DEBUG_RETURN_ERROR(NC_EPERM)
+    /* if open mode is inconsistent, then this return might cause parallel
+     * program to hang */
+    
+    /* cannot be in define mode, must enter from data mode */
+    if (fIsSet(pncp->flag, NC_MODE_DEF)) DEBUG_RETURN_ERROR(NC_EINDEFINE)
+    
+    /* calling the subroutine that implements ncmpi_redef() */
+    err = pncp->driver->redef(pncp->ncp);
+    if (err != NC_NOERR) return err;
+
+    fSet(pncp->flag, NC_MODE_DEF);
+    return NC_NOERR;
+}
+
+/*----< ncmpi_sync() >-------------------------------------------------------*/
+/* This API is a collective subroutine, and must be called in data mode, no
+ * matter if it is in collective or independent data mode.
+ */
+int
+ncmpi_sync(int ncid)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_sync() */
+    return pncp->driver->sync(pncp->ncp);
+}
+
+/*----< ncmpi_abort() >------------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_abort(int ncid)
+{
+    int i, err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_abort() */
+    err = pncp->driver->abort(pncp->ncp);
+
+    /* Remove from the PNCList, even if err != NC_NOERR */
+    del_from_PNCList(ncid);
+
+    /* free the PNC object */
+    MPI_Comm_free(&pncp->comm);
+    NCI_Free(pncp->path);
+    for (i=0; i<pncp->nvars; i++)
+        if (pncp->vars[i].shape != NULL)
+            NCI_Free(pncp->vars[i].shape);
+    if (pncp->vars != NULL)
+        NCI_Free(pncp->vars);
+    NCI_Free(pncp);
+
+    return err;
+}
+
+/*----< ncmpi_set_fill() >---------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_set_fill(int  ncid,
+               int  fill_mode,
+               int *old_fill_mode)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_set_fill() */
+    err = pncp->driver->set_fill(pncp->ncp, fill_mode, old_fill_mode);
+    if (err != NC_NOERR) return err;
+
+    fSet(pncp->flag, NC_MODE_FILL);
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq_format() >-------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_format(int  ncid,
+                 int *formatp)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    *formatp = pncp->format;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq_file_format() >--------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_file_format(const char *filename,
+                      int        *formatp) /* out */
+{
+    const char *cdf_signature="CDF";
+    const char *hdf5_signature="\211HDF\r\n\032\n";
+    const char *path;
+    char signature[8];
+    int fd;
+    ssize_t rlen;
+
+    *formatp = NC_FORMAT_UNKNOWN;
+
+    /* remove the file system type prefix name if there is any.
+     * For example, when filename = "lustre:/home/foo/testfile.nc", remove
+     * "lustre:" to make path = "/home/foo/testfile.nc" in open() below
+     */
+    path = strchr(filename, ':');
+    if (path == NULL) path = filename; /* no prefix */
+    else              path++;
+
+    /* must include config.h on 32-bit machines, as AC_SYS_LARGEFILE is called
+     * at the configure time and it defines _FILE_OFFSET_BITS to 64 if large
+     * file feature is supported.
+     */
+    if ((fd = open(path, O_RDONLY, 00400)) == -1) { /* open for read */
+             if (errno == ENOENT)       DEBUG_RETURN_ERROR(NC_ENOENT)
+        else if (errno == EACCES)       DEBUG_RETURN_ERROR(NC_EACCESS)
+        else if (errno == ENAMETOOLONG) DEBUG_RETURN_ERROR(NC_EBAD_FILE)
+        else {
+            fprintf(stderr,"Error on opening file %s (%s)\n",
+                    filename,strerror(errno));
+            DEBUG_RETURN_ERROR(NC_EFILE)
+        }
+    }
+    /* get first 8 bytes of file */
+    rlen = read(fd, signature, 8);
+    if (rlen != 8) {
+        close(fd); /* ignore error */
+        DEBUG_RETURN_ERROR(NC_EFILE)
+    }
+    if (close(fd) == -1) {
+        DEBUG_RETURN_ERROR(NC_EFILE)
+    }
+
+    if (memcmp(signature, hdf5_signature, 8) == 0) {
+        /* TODO: whether the file is NC_FORMAT_NETCDF4_CLASSIC is determined by
+         * HDF5 attribute "_nc3_strict" which requires a call to H5Aget_name().
+         * For now, we do not distinguish NC_CLASSIC_MODEL, but simply return
+         * NETCDF4 format.
+         */
+        *formatp = NC_FORMAT_NETCDF4;
+    }
+    else if (memcmp(signature, cdf_signature, 3) == 0) {
+             if (signature[3] == 5)  *formatp = NC_FORMAT_CDF5;
+        else if (signature[3] == 2)  *formatp = NC_FORMAT_CDF2;
+        else if (signature[3] == 1)  *formatp = NC_FORMAT_CLASSIC;
+    }
+
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq_version() >------------------------------------------------*/
+int
+ncmpi_inq_version(int ncid, int *nc_mode)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (pncp->format == 5) {
+        *nc_mode = NC_64BIT_DATA;
+    } else if (pncp->format == 2) {
+        *nc_mode = NC_64BIT_OFFSET;
+    } else if (pncp->format == 1) {
+        *nc_mode = NC_CLASSIC_MODEL;
+    }
+
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq() >--------------------------------------------------------*/
+int
+ncmpi_inq(int  ncid,
+          int *ndimsp,
+          int *nvarsp,
+          int *nattsp,
+          int *xtendimp)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq() */
+    return pncp->driver->inq(pncp->ncp, ndimsp, nvarsp, nattsp, xtendimp);
+}
+
+/*----< ncmpi_inq_ndims() >--------------------------------------------------*/
+int
+ncmpi_inq_ndims(int  ncid,
+                int *ndimsp)
+{
+    return ncmpi_inq(ncid, ndimsp, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_nvars() >--------------------------------------------------*/
+int
+ncmpi_inq_nvars(int  ncid,
+                int *nvarsp)
+{
+    return ncmpi_inq(ncid, NULL, nvarsp, NULL, NULL);
+}
+
+/*----< ncmpi_inq_natts() >--------------------------------------------------*/
+int
+ncmpi_inq_natts(int  ncid,
+                int *nattsp)
+{
+    return ncmpi_inq(ncid, NULL, NULL, nattsp, NULL);
+}
+
+/*----< ncmpi_inq_unlimdim() >-----------------------------------------------*/
+int
+ncmpi_inq_unlimdim(int  ncid,
+                   int *unlimdimidp)
+{
+    return ncmpi_inq(ncid, NULL, NULL, NULL, unlimdimidp);
+}
+
+/*----< ncmpi_inq_path() >---------------------------------------------------*/
+/* Get the file pathname which was used to open/create the ncid's file.
+ * This is an independent subroutine.
+ */
+int
+ncmpi_inq_path(int   ncid,
+               int  *pathlen,/* Ignored if NULL */
+               char *path)   /*  must already be allocated. Ignored if NULL */
+{        
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+#if 0
+    /* calling the subroutine that implements ncmpi_inq_path() */
+    return pncp->driver->inq_misc(pncp->ncp, pathlen, path, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL);
+#endif
+    /* Get the file pathname which was used to open/create the ncid's file.
+     * path must already be allocated. Ignored if NULL */
+    if (pncp->path == NULL) {
+        if (pathlen != NULL) *pathlen = 0;
+        if (path    != NULL) *path = '\0';
+    } else {
+        if (pathlen != NULL) *pathlen = (int)strlen(pncp->path);
+        if (path    != NULL) strcpy(path, pncp->path);
+    }
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq_num_fix_vars() >-------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_num_fix_vars(int ncid, int *num_fix_varsp)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_num_fix_vars() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, num_fix_varsp, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_num_rec_vars() >-------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_num_rec_vars(int ncid, int *num_rec_varsp)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_num_rec_vars() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, num_rec_varsp,
+                                  NULL, NULL, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_striping() >-----------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_striping(int ncid, int *striping_size, int *striping_count)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_striping() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  striping_size, striping_count, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_header_size() >--------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_header_size(int ncid, MPI_Offset *header_size)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_header_size() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, header_size, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_header_extent() >------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_header_extent(int ncid, MPI_Offset *header_extent)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_header_extent() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, header_extent, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_recsize() >------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_recsize(int ncid, MPI_Offset *recsize)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_recsize() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, recsize, NULL,
+                                  NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_put_size() >-----------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_put_size(int ncid, MPI_Offset *put_size)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_put_size() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, put_size,
+                                  NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_get_size() >-----------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_get_size(int ncid, MPI_Offset *get_size)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_get_size() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, NULL,
+                                  get_size, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_file_info() >----------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_file_info(int ncid, MPI_Info *info)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_inq_file_info() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, NULL,
+                                  NULL, info, NULL, NULL, NULL);
+}
+
+/* ncmpi_get_file_info() is now deprecated, replaced by ncmpi_inq_file_info() */
+int
+ncmpi_get_file_info(int ncid, MPI_Info *info)
+{
+    return ncmpi_inq_file_info(ncid, info);
+}
+
+/*----< ncmpi_begin_indep_data() >-------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_begin_indep_data(int ncid)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_begin_indep_data() */
+    err = pncp->driver->begin_indep_data(pncp->ncp);
+    if (err != NC_NOERR) return err;
+
+    fSet(pncp->flag, NC_MODE_INDEP);
+    return NC_NOERR;
+}
+
+/*----< ncmpi_end_indep_data() >---------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpi_end_indep_data(int ncid)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_end_indep_data() */
+    err = pncp->driver->end_indep_data(pncp->ncp);
+    if (err != NC_NOERR) return err;
+
+    fClr(pncp->flag, NC_MODE_INDEP);
+    return NC_NOERR;
+}
+
+/*----< ncmpi_sync_numrecs() >-----------------------------------------------*/
+/* this API is collective, but can be called in independent data mode.
+ * Note numrecs (number of records) is always sync-ed in memory and file in
+ * collective data mode.
+ */
+int
+ncmpi_sync_numrecs(int ncid)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_sync_numrecs() */
+    return pncp->driver->sync_numrecs(pncp->ncp);
+}
+
+/*----< ncmpi_set_default_format() >-----------------------------------------*/
+/* This function sets a default create file format.
+ * Valid formats are NC_FORMAT_CLASSIC, NC_FORMAT_CDF2, and NC_FORMAT_CDF5
+ * This API is NOT collective, as there is no way to check against an MPI
+ * communicator. It should be called by all MPI processes that intend to
+ * create a file later. Consistency check will have to be done in other APIs.
+ */
+int
+ncmpi_set_default_format(int format, int *old_formatp)
+{
+    /* Return existing format if desired. */
+    if (old_formatp != NULL)
+        *old_formatp = ncmpi_default_create_format;
+
+    /* Make sure only valid format is set. */
+    if (format != NC_FORMAT_CLASSIC &&
+        format != NC_FORMAT_CDF2 &&
+        format != NC_FORMAT_CDF5) {
+        DEBUG_RETURN_ERROR(NC_EINVAL)
+    }
+    ncmpi_default_create_format = format;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq_default_format() >-----------------------------------------*/
+/* returns a value suitable for a create flag.  Will return one or more of the
+ * following values OR-ed together:
+ * NC_64BIT_OFFSET, NC_CLOBBER, NC_LOCK, NC_SHARE */
+int
+ncmpi_inq_default_format(int *formatp)
+{
+    if (formatp == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
+
+    *formatp = ncmpi_default_create_format;
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq_files_opened() >-------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_files_opened(int *num,    /* cannot be NULL */
+                       int *ncids)  /* can be NULL */
+{
+    int i;
+
+    if (num == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
+
+    *num = pnc_numfiles;
+
+    if (ncids != NULL) { /* ncids can be NULL */
+        *num = 0;
+        for (i=0; i<NC_MAX_NFILES; i++) {
+            if (pnc_filelist[i] != NULL) {
+                ncids[*num] = i;
+                (*num)++;
+            }
+        }
+        assert(*num == pnc_numfiles);
+    }
+    return NC_NOERR;
+}
+
+/*----< ncmpi_inq_nreqs() >--------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_nreqs(int  ncid,
+                int *nreqs) /* number of pending nonblocking requests */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (nreqs == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
+
+    /* calling the subroutine that implements ncmpi_inq_nreqs() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, nreqs, NULL, NULL);
+}
+
+/*----< ncmpi_inq_buffer_usage() >-------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_buffer_usage(int         ncid,
+                       MPI_Offset *usage) /* amount of space used so far */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (usage == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
+
+    /* calling the subroutine that implements ncmpi_inq_buffer_usage() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, usage, NULL);
+}
+
+/*----< ncmpi_inq_buffer_size() >--------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_inq_buffer_size(int         ncid,
+                      MPI_Offset *buf_size) /* amount of space attached */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (buf_size == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
+
+    /* calling the subroutine that implements ncmpi_inq_buffer_size() */
+    return pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, NULL, NULL,
+                                  NULL, NULL, NULL, NULL, buf_size);
+}
+
+/*----< ncmpi_buffer_attach() >----------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_buffer_attach(int        ncid,
+                    MPI_Offset bufsize) /* amount of memory space allowed for
+                                           PnetCDF library to buffer the
+                                           nonblocking requests */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_buffer_attach() */
+    return pncp->driver->buffer_attach(pncp->ncp, bufsize);
+}
+
+/*----< ncmpi_buffer_detach() >----------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpi_buffer_detach(int ncid)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_buffer_detach() */
+    return pncp->driver->buffer_detach(pncp->ncp);
+}
+
+/*----< ncmpi_delete() >-----------------------------------------------------*/
+/* 
+ * filename: the name of the file we will remove.
+ * info: MPI info object, in case underlying file system needs hints.
+ *
+ * This API is implemented in src/driver/ncmpio/ncmpio_file.c
+ *
+ */
+
+/*----< ncmpi_wait() >-------------------------------------------------------*/
+/* This API is an independent subroutine. */
+int
+ncmpi_wait(int  ncid,
+           int  num_reqs, /* number of requests */
+           int *req_ids,  /* [num_reqs]: IN/OUT */
+           int *statuses) /* [num_reqs], can be NULL */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_wait() */
+    return pncp->driver->wait(pncp->ncp, num_reqs, req_ids, statuses,
+                              NC_REQ_INDEP);
+}
+
+/*----< ncmpi_wait_all() >---------------------------------------------------*/
+/* This API is a collective subroutine. */
+int
+ncmpi_wait_all(int  ncid,
+               int  num_reqs, /* number of requests */
+               int *req_ids,  /* [num_reqs]: IN/OUT */
+               int *statuses) /* [num_reqs], can be NULL */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_wait_all() */
+    return pncp->driver->wait(pncp->ncp, num_reqs, req_ids, statuses,
+                              NC_REQ_COLL);
+}
+
+/*----< ncmpi_cancel() >-----------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_cancel(int  ncid,
+             int  num_reqs, /* number of requests */
+             int *req_ids,  /* [num_reqs]: IN/OUT */
+             int *statuses) /* [num_reqs], can be NULL */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_cancel() */
+    return pncp->driver->cancel(pncp->ncp, num_reqs, req_ids, statuses);
+}
+
diff --git a/src/dispatchers/lib_version.c b/src/dispatchers/lib_version.c
new file mode 100644
index 0000000..e51c06d
--- /dev/null
+++ b/src/dispatchers/lib_version.c
@@ -0,0 +1,56 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: lib_version.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <pnetcdf.h>
+
+/* The const string below is for the RCS ident(1) command to find a string like
+ * "\044Id: \100(#) PnetCDF library version 1.4.0 of 16 Nov 2013 $"
+ * in the library file (libpnetcdf.a).
+ *
+ * This string must be made a global variable. Otherwise, it won't work
+ * when compiled with optimization options, e.g. -O2
+ */
+char const pnetcdf_libvers[] =
+        "\044Id: \100(#) PnetCDF library version "PNETCDF_VERSION" of "PNETCDF_RELEASE_DATE" $";
+
+/* a cleaner version for running command "strings", e.g.
+ * % strings libpnetcdf.a | grep "PnetCDF library version"
+ * or
+ * % strings a.out | grep "PnetCDF library version"
+ */
+char const pnetcdf_lib_vers[] = "PnetCDF library version "PNETCDF_VERSION" of "PNETCDF_RELEASE_DATE;
+
+/* pnetcdf_libvers is slightly different from the one returned from
+ * ncmpi_inq_libvers(). The string pnetcdf_libvers is for command "ident" to
+ * use. People can run command ident libpnetcdf.a to obtain the version of a
+ * library (or an executable built from that library). In PnetCDF case, the
+ * command will print the string of pnetcdf_libvers. Command "ident' looks for
+ * a specific keyword pattern and print it. See man page of ident.
+ *
+ * The API ncmpi_inq_libvers() below on the other hand returns a string to be
+ * used by the utility tools like ncmpidump, ncmpigen, etc. Check the last line
+ * of output from command "ncmpidump -v".
+ */
+
+/*----< ncmpi_inq_libvers() >------------------------------------------------*/
+const char*
+ncmpi_inq_libvers(void) {
+
+    /* match the style used by netCDF API nc_inq_libvers()
+     * for example, "4.3.0 of Jun 16 2013 12:11:30 $"
+     * we need some silly operation so the compiler will emit the otherwise
+     * unused pnetcdf_libvers
+     */
+    if ((void *)pnetcdf_libvers != (void *)ncmpi_inq_libvers) {
+	; /* do nothing */
+    }
+    return PNETCDF_VERSION " of " PNETCDF_RELEASE_DATE;
+}
+
diff --git a/src/dispatchers/var_getput.m4 b/src/dispatchers/var_getput.m4
new file mode 100644
index 0000000..9b60b86
--- /dev/null
+++ b/src/dispatchers/var_getput.m4
@@ -0,0 +1,798 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id$ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+
+#include <pnetcdf.h>
+#include <dispatch.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+include(`foreach.m4')dnl
+include(`utils.m4')dnl
+dnl
+define(`GOTO_CHECK',`{ DEBUG_ASSIGN_ERROR(err, $1) goto err_check; }')dnl
+
+#define GET_ONE_COUNT(ndims, count) {                                    \
+    int _i;                                                              \
+    count = (MPI_Offset*) NCI_Malloc((size_t)ndims * SIZEOF_MPI_OFFSET); \
+    for (_i=0; _i<ndims; _i++)                                           \
+        count[_i] = 1;                                                   \
+}
+
+#define GET_FULL_DIMENSIONS(pncp, varp, start, count) {                       \
+    int _i=0;                                                                 \
+    start = (MPI_Offset*) NCI_Malloc((size_t)varp.ndims*2*SIZEOF_MPI_OFFSET); \
+    count = start + varp.ndims;                                               \
+                                                                              \
+    if (varp.recdim >= 0) { /* find current numrec if varp is record var */   \
+        MPI_Offset numrecs;                                                   \
+        err = pncp->driver->inq_dim(pncp->ncp, varp.recdim, NULL, &numrecs);  \
+        if (err != NC_NOERR) return err;                                      \
+        count[0] = numrecs;                                                   \
+        start[0] = 0;                                                         \
+        _i = 1;                                                               \
+    }                                                                         \
+    for (; _i<varp.ndims; _i++) {                                             \
+        count[_i] = varp.shape[_i];                                           \
+        start[_i] = 0;                                                        \
+    }                                                                         \
+}
+
+
+/*----< check_EINVALCOORDS() >-----------------------------------------------*/
+static
+int check_EINVALCOORDS(MPI_Offset start,
+                       MPI_Offset count,
+                       MPI_Offset shape)
+{
+#ifdef RELAX_COORD_BOUND
+    if (start < 0 || start > shape)
+        DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
+    if (start == shape && count > 0)
+        DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
+#else
+    if (start < 0 || start >= shape)
+        DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
+#endif
+    return NC_NOERR;
+}
+
+
+typedef enum {
+    API_GET,
+    API_PUT,
+    API_IGET,
+    API_IPUT,
+    API_BPUT 
+} IO_type;
+
+/*----< check_EEDGE() >------------------------------------------------------*/
+static
+int check_EEDGE(const MPI_Offset *start,
+                const MPI_Offset *count,
+                const MPI_Offset *stride,
+                const MPI_Offset *shape)
+{
+    if (*count > *shape || *start + *count > *shape)
+        DEBUG_RETURN_ERROR(NC_EEDGE);
+    if (stride == NULL) { /* vars APIs but stride is NULL */
+        if (*count > *shape || *start + *count > *shape)
+            DEBUG_RETURN_ERROR(NC_EEDGE)
+    }
+    else { /* for vars/varm APIs */
+        if (*count > 0 && *start + (*count - 1) * (*stride) >= *shape)
+            DEBUG_RETURN_ERROR(NC_EEDGE)
+    }
+    return NC_NOERR;
+}
+
+/*----< check_start_count_stride() >-----------------------------------------*/
+static
+int check_start_count_stride(PNC              *pncp,
+                             int               varid,
+                             int               isRead,
+                             NC_api            api_kind, /* var1/vara/vars */
+                             const MPI_Offset *start,
+                             const MPI_Offset *count,
+                             const MPI_Offset *stride)
+{
+    /* only var1, vara, vars, and varm APIs will reach here */
+    int i, err, ndims, firstDim;
+    MPI_Offset *shape=NULL;
+
+    shape = pncp->vars[varid].shape;
+    /* if record variable, obtain the current size of record dimension */
+    if (pncp->vars[varid].recdim >= 0) {
+        err = pncp->driver->inq_dim(pncp->ncp, pncp->vars[varid].recdim, NULL,
+                                    &shape[0]);
+        if (err != NC_NOERR) return err;
+    }
+
+    /* Check NC_EINVALCOORDS error for argument start[]
+     * for API var1/vara/vars/varm, start cannot be NULL, except for scalars
+     * and negative start[] is illegal */
+    if (start == NULL || start[0] < 0) DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
+
+    firstDim = 0;
+    /* check NC_EINVALCOORDS for record dimension */
+    if (pncp->vars[varid].recdim >= 0) {
+        if (pncp->format < NC_FORMAT_CDF5 && start[0] > NC_MAX_UINT)
+            DEBUG_RETURN_ERROR(NC_EINVALCOORDS) /* CDF-1 and 2 */
+
+        /* for record variable, [0] is the NC_UNLIMITED dimension */
+        /* read cannot go beyond current numrecs */
+        if (isRead) {
+            MPI_Offset len = (count == NULL) ? 1 : count[0];
+            err = check_EINVALCOORDS(start[0], len, shape[0]);
+            if (err != NC_NOERR) return err;
+        }
+        firstDim = 1; /* done for checking the record dimension */
+    }
+
+    /* continue to check NC_EINVALCOORDS for the rest dimensions */
+    ndims = pncp->vars[varid].ndims;
+    for (i=firstDim; i<ndims; i++) {
+        MPI_Offset len = (count == NULL) ? 1 : count[i];
+        err = check_EINVALCOORDS(start[i], len, shape[i]);
+        if (err != NC_NOERR) return err;
+    }
+
+    /* check NC_EEDGE error for argument count[] */
+
+    if (count == NULL) {
+        if (api_kind == API_VARA || api_kind == API_VARS ||
+            api_kind == API_VARM)
+            /* vara/vars/varm, count cannot be NULL */
+            DEBUG_RETURN_ERROR(NC_EEDGE)
+    }
+    else {
+        firstDim = 0;
+        /* check record dimension */
+        if (pncp->vars[varid].recdim >= 0) {
+            if (count[0] < 0)  /* no negative count[] */
+                DEBUG_RETURN_ERROR(NC_ENEGATIVECNT)
+
+            /* for record variable, [0] is the NC_UNLIMITED dimension */
+            /* read cannot go beyond current numrecs */
+            if (isRead) {
+                err = check_EEDGE(start, count, stride, shape);
+                if (err != NC_NOERR) return err;
+            }
+            firstDim = 1; /* skip checking the record dimension */
+        }
+
+        /* continue to check NC_EEDGE for the rest dimensions */
+        for (i=firstDim; i<ndims; i++) {
+            if (shape[i] < 0) DEBUG_RETURN_ERROR(NC_EEDGE)
+            if (count[i] < 0) /* no negative count[] */
+                DEBUG_RETURN_ERROR(NC_ENEGATIVECNT)
+            if (stride == NULL)
+                err = check_EEDGE(start+i, count+i, NULL, shape+i);
+            else
+                err = check_EEDGE(start+i, count+i, stride+i, shape+i);
+            if (err != NC_NOERR) return err;
+        }
+
+        /* Check NC_ESTRIDE for non-positive values. We did not check
+         * stride[i] >= shape[i], as it is caught as NC_EEDGE error above */
+        if (stride != NULL) {
+            for (i=0; i<ndims; i++) {
+                if (stride[i] <= 0) DEBUG_RETURN_ERROR(NC_ESTRIDE)
+            }
+        }
+    }
+    return NC_NOERR;
+}
+
+/*----< sanity_check() >-----------------------------------------------------*/
+static
+int sanity_check(PNC          *pncp,
+                 int           varid,
+                 IO_type       io,       /* get/put/iget/iput/bput */
+                 MPI_Datatype  itype,    /* internal data type */
+                 int           isColl)   /* collective or indepdnent API */
+{
+    /* check file write permission for put APIs */
+    if (io == API_PUT || io == API_IPUT || io == API_BPUT)
+        if (pncp->flag & NC_MODE_RDONLY) DEBUG_RETURN_ERROR(NC_EPERM)
+
+    /* blocking get/put APIs must be called in data mode */
+    if (io == API_PUT || io == API_GET)
+        if (pncp->flag & NC_MODE_DEF) DEBUG_RETURN_ERROR(NC_EINDEFINE)
+
+    /* for blocking APIs, check if in collective or independent mode */
+    if (io == API_PUT || io == API_GET) {
+        if (isColl) { /* check if file is currently in collective data mode */
+            if (pncp->flag & NC_MODE_INDEP) DEBUG_RETURN_ERROR(NC_EINDEP)
+        }
+        else { /* check if file is currently in independent data mode */
+            if (!(pncp->flag & NC_MODE_INDEP)) DEBUG_RETURN_ERROR(NC_ENOTINDEP)
+        }
+    }
+
+    /* variable NC_GLOBAL is illegal in get/put APIs */
+    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* MPI_DATATYPE_NULL in this case represent a flexible API */
+    if (itype == MPI_DATATYPE_NULL) return NC_NOERR;
+
+    /* check itype against xtype for NC_ECHAR */
+    if (itype == MPI_CHAR) {
+        if (pncp->vars[varid].xtype != NC_CHAR) DEBUG_RETURN_ERROR(NC_ECHAR)
+    }
+    else {
+        if (pncp->vars[varid].xtype == NC_CHAR) DEBUG_RETURN_ERROR(NC_ECHAR)
+    }
+    return NC_NOERR;
+}
+
+/*----< allreduce_error() >--------------------------------------------------*/
+/* This subroutine is for safe mode to check errors across all processes */
+static
+int allreduce_error(PNC *pncp, int err)
+{
+    int minE, mpireturn;
+    TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+    return minE;
+}
+
+define(`IO_TYPE', `ifelse(`$1',  `get', `API_GET',
+                          `$1',  `put', `API_PUT',
+                          `$1', `iget', `API_IGET',
+                          `$1', `iput', `API_IPUT',
+                          `$1', `bput', `API_BPUT')')dnl
+dnl
+define(`IS_COLL', `ifelse(`$1',`_all',`1',`0')')dnl
+define(`IS_READ', `ifelse(`$1',`get',`1',`$1',`iget',`1',`0')')dnl
+define(`IndexArgs', `ifelse(`$1', `',  `NULL, NULL, NULL',
+                            `$1', `1', `start, NULL, NULL',
+                            `$1', `a', `start, count, NULL',
+                            `$1', `s', `start, count, stride',
+                            `$1', `m', `start, count, stride')')dnl
+dnl
+define(`FLEX_ARG',`ifelse(`$1',`',`bufcount, buftype',`-1, ITYPE2MPI($1)')')dnl
+dnl
+define(`IO_MODE',`ifelse(`$1', `get',`NC_REQ_RD',`$1', `put',`NC_REQ_WR',
+                         `$1',`iget',`NC_REQ_RD',`$1',`iput',`NC_REQ_WR',
+                         `$1',`bput',`NC_REQ_WR')')dnl
+dnl
+define(`NB_MODE',`ifelse(`$1', `get',`NC_REQ_BLK',`$1', `put',`NC_REQ_BLK',
+                         `$1',`iget',`NC_REQ_NBI',`$1',`iput',`NC_REQ_NBI',
+                         `$1',`bput',`NC_REQ_NBB')')dnl
+dnl
+define(`FLEX_MODE',`ifelse(`$1',`',`NC_REQ_FLEX',`NC_REQ_HL')')dnl
+define(`COLL_MODE',`ifelse(`$1',`',`NC_REQ_INDEP',`NC_REQ_COLL')')dnl
+dnl
+dnl
+define(`APINAME',`ifelse(`$3',`',`ncmpi_$1_var$2$4',`ncmpi_$1_var$2_$3$4')')dnl
+dnl
+dnl GETPUT_API(get/put, `'/1/a/s/m, `'/itype, `'/_all)
+dnl
+define(`GETPUT_API',dnl
+`dnl
+/*----< APINAME($1,$2,$3,$4)() >---------------------------------------------*/
+/* This API is ifelse(`$4',`',`an independent',`a collective') subroutine. */
+int
+APINAME($1,$2,$3,$4)(int ncid,
+                     int varid,
+                     ArgKind($2)
+                     BufArgs($1,$3))
+{
+    int status, err, reqMode=0;
+    PNC *pncp;
+    ifelse(`$2',`',`',`NC_api api_kind=API_KIND($2);')
+    ifelse(`$2',`',`MPI_Offset *start=NULL, *count=NULL;',
+           `$2',`1',`MPI_Offset *count=NULL;')
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    err = sanity_check(pncp, varid, IO_TYPE($1), ITYPE2MPI($3), IS_COLL($4));
+    
+    ifelse(`$2',`m',`if (imap == NULL && stride != NULL) api_kind = API_VARS;
+    else if (imap == NULL && stride == NULL) api_kind = API_VARA;',
+           `$2',`s',`if (stride == NULL) api_kind = API_VARA;')
+
+    ifelse(`$2',`',`',`/* not-scalar variable checks start, count, stride */
+    if (err == NC_NOERR && pncp->vars[varid].ndims > 0)
+        err = check_start_count_stride(pncp, varid, IS_READ($1), api_kind,
+                                       IndexArgs($2));')
+
+    ifelse(`$4',`',`/* for independent API, return now if error encountered */
+    if (err != NC_NOERR) return err;
+    ifelse(`$3',`',`
+    /* independent flexible API, return now if zero-length request */
+    if (bufcount == 0) return NC_NOERR;')',`
+    /* collective APIs and safe mode enabled, check errors across all procs */
+    if (pncp->flag & NC_MODE_SAFE) {
+        err = allreduce_error(pncp, err);
+        if (err != NC_NOERR) return err;
+    }
+    else if (err == NC_EPERM || err == NC_EINDEFINE || err == NC_EINDEP ||
+             err == NC_ENOTINDEP) /* cannot continue if fatal errors */
+        return err;
+    else if (err != NC_NOERR) /* other errors, participate collective call */
+        reqMode |= NC_REQ_ZERO;')
+
+    reqMode |= IO_MODE($1) | NB_MODE($1) | FLEX_MODE($3) | COLL_MODE($4);
+
+    ifelse(`$2',`',`if (err == NC_NOERR)
+        GET_FULL_DIMENSIONS(pncp, pncp->vars[varid], start, count)',
+           `$2',`1',`if (err == NC_NOERR)
+        GET_ONE_COUNT(pncp->vars[varid].ndims, count)')
+
+    /* call the subroutine that implements APINAME($1,$2,$3,$4)() */
+    status = pncp->driver->`$1'_var(pncp->ncp, varid, start, count,
+                                    ArgStrideMap($2), buf,
+                                    FLEX_ARG($3), reqMode);
+
+    ifelse(`$2',`',`if (err == NC_NOERR) NCI_Free(start);',
+           `$2',`1',`if (err == NC_NOERR) NCI_Free(count);')
+
+    return ifelse(`$4',`',`status;',`(err != NC_NOERR) ? err : status; /* first error encountered */')
+}
+')dnl
+dnl
+dnl
+foreach(`kind', (, 1, a, s, m),
+        `foreach(`putget', (put, get),
+                 `foreach(`collindep', (, _all),
+                          `foreach(`iType', (`',ITYPE_LIST),
+                                   `GETPUT_API(putget,kind,iType,collindep)'
+)')')')dnl
+dnl
+/* ncmpi_get/put_varn_<type>_<mode> API:
+ *    type:   data type of I/O buffer, buf
+ *    mode:   independent (<nond>) or collective (_all)
+ *
+ * arguments:
+ *    num:    number of start and count pairs
+ *    starts: an 2D array of size [num][ndims]. Each starts[i][*] indicates
+ *            the starting array indices for a subarray request. ndims is
+ *            the number of dimensions of the defined netCDF variable.
+ *    counts: an 2D array of size [num][ndims]. Each counts[i][*] indicates
+ *            the number of array elements to be accessed. This argument
+ *            can be NULL, equivalent to counts with all 1s.
+ *    bufcount and buftype: these 2 arguments are only available for flexible
+ *            APIs, indicating the I/O buffer memory layout. When buftype is
+ *            MPI_DATATYPE_NULL, bufcount is ignored and the data type of buf
+ *            is considered matched the variable data type defined in the file.
+ */
+dnl
+define(`NAPINAME',`ifelse(`$2',`',`ncmpi_$1_varn$3',`ncmpi_$1_varn_$2$3')')dnl
+dnl
+dnl VARN(get/put, `'/iType, `'/_all)
+dnl
+define(`VARN',dnl
+`dnl
+/*----< NAPINAME($1,$2,$3)() >-----------------------------------------------*/
+/* This API is ifelse(`$3',`',`an independent',`a collective') subroutine. */
+int
+NAPINAME($1,$2,$3)(int                ncid,
+                   int                varid,
+                   int                num,
+                   MPI_Offset* const *starts,
+                   MPI_Offset* const *counts,
+                   BufArgs($1,$2))
+{
+    int i, err, status, reqMode=0;
+    PNC *pncp;
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    err = sanity_check(pncp, varid, IO_TYPE($1), ITYPE2MPI($2), IS_COLL($3));
+
+    if (num > 0 && starts == NULL) DEBUG_ASSIGN_ERROR(err, NC_ENULLSTART)
+
+    if (err == NC_NOERR && pncp->vars[varid].ndims > 0) {
+        NC_api api = (counts == NULL) ? API_VAR1 : API_VARA;
+        for (i=0; i<num; i++) {
+            MPI_Offset *len = (counts == NULL) ? NULL : counts[i];
+            err = check_start_count_stride(pncp, varid, IS_READ($1),
+                                           api, starts[i], len, NULL);
+            if (err != NC_NOERR) break;
+        }
+    }
+
+    ifelse(`$3',`',`/* for independent API, return now if error encountered */
+    if (err != NC_NOERR) return err;
+    /* for independent API, return now if zero-length request */
+    if (num == 0) return NC_NOERR;',`
+    /* In safe mode, check errors across all processes */
+    if (pncp->flag & NC_MODE_SAFE) {
+        err = allreduce_error(pncp, err);
+        if (err != NC_NOERR) return err;
+    }
+    else if (err == NC_EPERM || err == NC_EINDEFINE || err == NC_EINDEP ||
+             err == NC_ENOTINDEP) /* cannot continue if fatal errors */
+        return err;
+    else if (err != NC_NOERR) /* other errors, participate collective call */
+        reqMode |= NC_REQ_ZERO;')
+
+    reqMode |= IO_MODE($1) | NB_MODE($1) | FLEX_MODE($2) | COLL_MODE($3);
+
+    /* calling the subroutine that implements NAPINAME($1,$2,$3)() */
+    status = pncp->driver->`$1'_varn(pncp->ncp, varid, num, starts, counts,
+                                     buf, FLEX_ARG($2), reqMode);
+
+    return ifelse(`$3',`',`status;',`(err != NC_NOERR) ? err : status; /* first error encountered */')
+}
+')dnl
+dnl
+foreach(`putget', (put, get),
+        `foreach(`iType', (`',ITYPE_LIST),
+                 `foreach(`collindep', (, _all),
+                          `VARN(putget,iType,collindep)'
+)')')dnl
+dnl
+define(`MStartCount',`ifelse(`$1', `',  `NULL, NULL',
+                             `$1', `1', `starts[i], NULL',
+                             `$1', `a', `starts[i], counts[i]',
+                             `$1', `s', `starts[i], counts[i]',
+                             `$1', `m', `starts[i], counts[i]')')dnl
+dnl
+define(`MAPINAME',`ifelse(`$3',`',`ncmpi_m$1_var$2$4',`ncmpi_m$1_var$2_$3$4')')dnl
+dnl MVAR(put/get, `'/1/a/s/m, `'/iType, `'/_all)
+dnl
+define(`MVAR',dnl
+`dnl
+/*----< MAPINAME($1,$2,$3,$4)() >--------------------------------------------*/
+/* This API is ifelse(`$4',`',`an independent',`a collective') subroutine. */
+int
+MAPINAME($1,$2,$3,$4)(int                ncid,
+                      int                nvars,
+                      int               *varids,
+   ifelse(`$2', `1', `MPI_Offset* const *starts,',
+          `$2', `a', `MPI_Offset* const *starts,
+                      MPI_Offset* const *counts,',
+          `$2', `s', `MPI_Offset* const *starts,
+                      MPI_Offset* const *counts,
+                      MPI_Offset* const *strides,',
+          `$2', `m', `MPI_Offset* const *starts,
+                      MPI_Offset* const *counts,
+                      MPI_Offset* const *strides,
+                      MPI_Offset* const *imaps,')
+   ifelse(`$3', `',
+    `ifelse($1,`get',`void **bufs,',`void* const *bufs,')
+                      const MPI_Offset *bufcounts,
+                      const MPI_Datatype *buftypes',
+    `ifelse($1,`get',`NC2ITYPE($3) **bufs',
+                     `NC2ITYPE($3)* const *bufs')'))
+{
+    int i, reqMode=0, status=NC_NOERR, err, *reqs;
+    PNC *pncp;
+    ifelse(`$2',`',`',`NC_api api_kind=API_KIND($2);')
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    ifelse(`$4',`',`/* for independent API, return now if zero-length request */
+    if (nvars == 0) return NC_NOERR;')
+
+    ifelse(`$2',`m',`if (imaps == NULL && strides != NULL) api_kind = API_VARS;
+    else if (imaps == NULL && strides == NULL) api_kind = API_VARA;',
+           `$2',`s',`if (strides == NULL) api_kind = API_VARA;')
+
+    for (i=0; i<nvars; i++) {
+        err = sanity_check(pncp, varids[i], IO_TYPE($1), ITYPE2MPI($3), IS_COLL($4));
+        if (err != NC_NOERR) break;
+
+        ifelse(`$2',`',`',`/* checks start, count, stride for non-scalars */
+        if (pncp->vars[varids[i]].ndims > 0) {
+            MPI_Offset *stride=NULL;
+            ifelse(`$2',`m',`if (strides != NULL) stride = strides[i];',
+                   `$2',`s',`if (strides != NULL) stride = strides[i];')
+            err = check_start_count_stride(pncp, varids[i], IS_READ($1),
+                                           api_kind, MStartCount($2), stride);
+            if (err != NC_NOERR) break;
+        }')
+    }
+
+    reqMode |= IO_MODE($1) | NC_REQ_NBI | FLEX_MODE($3) | COLL_MODE($4);
+
+    ifelse(`$4',`',`/* for independent API, return now if error encountered */
+    if (err != NC_NOERR) return err;',`
+    /* In safe mode, check errors across all processes */
+    if (pncp->flag & NC_MODE_SAFE) {
+        err = allreduce_error(pncp, err);
+        if (err != NC_NOERR) return err;
+    }
+    else if (err == NC_EPERM || err == NC_EINDEFINE || err == NC_EINDEP ||
+             err == NC_ENOTINDEP) /* cannot continue if fatal errors */
+        return err;
+    else if (err != NC_NOERR) { /* other errors, participate collective call */
+        status = pncp->driver->wait(pncp->ncp, 0, NULL, NULL, reqMode);
+        return err;
+    }')
+
+    reqs = (int*) NCI_Malloc((size_t)nvars * SIZEOF_INT);
+    for (i=0; i<nvars; i++) {
+        MPI_Offset *start, *count, *stride=NULL, *imap=NULL;
+
+        /* call the nonblocking subroutines */
+        ifelse(`$2',`',`GET_FULL_DIMENSIONS(pncp, pncp->vars[varids[i]], start, count)',
+               `$2',`1',`GET_ONE_COUNT(pncp->vars[varids[i]].ndims, count)
+        start = starts[i];',`start = starts[i]; count = counts[i];')
+        ifelse(`$2',`s',`if (strides != NULL) stride = strides[i];',
+               `$2',`m',`if (strides != NULL) stride = strides[i];
+        if (imaps != NULL) imap = imaps[i];')
+
+        err = pncp->driver->i`$1'_var(pncp->ncp, varids[i], start, count,
+                                      stride, imap, bufs[i],
+                                      ifelse(`$3',`',`bufcounts[i],buftypes[i]',
+                                                     `-1, ITYPE2MPI($3)'),
+                                      &reqs[i], reqMode);
+        ifelse(`$2',`',`NCI_Free(start);',`$2',`1',`NCI_Free(count);')
+        if (err != NC_NOERR) break;
+    }
+    status = pncp->driver->wait(pncp->ncp, i, reqs, NULL, reqMode);
+    NCI_Free(reqs);
+
+    return (err != NC_NOERR) ? err : status;
+}
+')dnl
+dnl
+foreach(`kind', (, 1, a, s, m),
+        `foreach(`putget', (put, get),
+                 `foreach(`collindep', (, _all),
+                          `foreach(`iType', (`',ITYPE_LIST),
+                                   `MVAR(putget,kind,iType,collindep)'
+)')')')dnl
+dnl
+define(`IAPINAME',`ifelse(`$3',`',`ncmpi_$1_var$2',`ncmpi_$1_var$2_$3')')dnl
+dnl
+dnl IGETPUT_API(iget/iput/bput, `'/1/a/s/m, `'/iType)
+dnl
+define(`IGETPUT_API',dnl
+`dnl
+/*----< IAPINAME($1,$2,$3)() >-----------------------------------------------*/
+/* This API is an independent subroutine, which can be called in either
+ * collective or independent data mode or even in define mode.
+ */
+int
+IAPINAME($1,$2,$3)(int ncid,
+                   int varid,
+                   ArgKind($2)
+                   BufArgs(substr($1,1),$3),
+                   int *reqid)
+{   
+    int err, reqMode;
+    PNC *pncp;
+    ifelse(`$2',`',`',`NC_api api_kind=API_KIND($2);')
+    ifelse(`$2',`',`MPI_Offset *start, *count;',`$2',`1',`MPI_Offset *count;')
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (reqid != NULL) *reqid = NC_REQ_NULL;
+
+    err = sanity_check(pncp, varid, IO_TYPE($1), ITYPE2MPI($3), 0);
+    if (err != NC_NOERR) return err;
+
+    ifelse(`$1',`bput',`/* check if buffer has been attached */
+    MPI_Offset buf_size;
+    err = pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                 NULL, NULL, NULL, NULL, NULL, NULL,
+                                 NULL, NULL, NULL, NULL, &buf_size);
+    if (err != NC_NOERR) return err;')
+
+    ifelse(`$2',`m',`if (imap == NULL && stride != NULL) api_kind = API_VARS;
+    else if (imap == NULL && stride == NULL) api_kind = API_VARA;',
+           `$2',`s',`if (stride == NULL) api_kind = API_VARA;')
+
+    ifelse(`$2',`',`',`/* not-scalar variable checks start, count, stride */
+    if (pncp->vars[varid].ndims > 0) {
+        err = check_start_count_stride(pncp, varid, IS_READ($1), api_kind,
+                                       IndexArgs($2));
+        if (err != NC_NOERR) return err;
+    }')
+
+    ifelse(`$3',`',`if (bufcount == 0) return NC_NOERR;')
+
+    reqMode = IO_MODE($1) | NB_MODE($1) | FLEX_MODE($3);
+
+    ifelse(`$2',`',`GET_FULL_DIMENSIONS(pncp, pncp->vars[varid], start, count)',
+           `$2',`1',`GET_ONE_COUNT(pncp->vars[varid].ndims, count)')
+
+    /* calling the subroutine that implements IAPINAME($1,$2,$3)() */
+    err = pncp->driver->`$1'_var(pncp->ncp, varid, start, count,
+                                 ArgStrideMap($2), buf,
+                                 FLEX_ARG($3), reqid, reqMode);
+
+    ifelse(`$2',`',`NCI_Free(start);',`$2',`1',`NCI_Free(count);')
+    return err;
+}
+')dnl
+dnl
+foreach(`kind', (, 1, a, s, m),
+        `foreach(`putget', (iput, iget, bput),
+                 `foreach(`iType', (`',ITYPE_LIST),
+                          `IGETPUT_API(putget,kind,iType)'
+)')')dnl
+dnl
+/* ncmpi_iget/iput_varn_<type>_<mode> API:
+ *    type:   data type of I/O buffer, buf
+ *    mode:   indpendent (<nond>) or collective (_all)
+ *
+ * arguments:
+ *    num:    number of start and count pairs
+ *    starts: an 2D array of size [num][ndims]. Each starts[i][*] indicates
+ *            the starting array indices for a subarray request. ndims is
+ *            the number of dimensions of the defined netCDF variable.
+ *    counts: an 2D array of size [num][ndims]. Each counts[i][*] indicates
+ *            the number of array elements to be accessed. This argument
+ *            can be NULL, equivalent to counts with all 1s.
+ *    bufcount and buftype: these 2 arguments are only available for flexible
+ *            APIs, indicating the I/O buffer memory layout. When buftype is
+ *            MPI_DATATYPE_NULL, bufcount is ignored and the data type of buf
+ *            is considered matched the variable data type defined in the file.
+ *    reqid:  request ID returned to user
+ */
+dnl
+define(`INAPINAME',`ifelse(`$2',`',`ncmpi_$1_varn',`ncmpi_$1_varn_$2')')dnl
+dnl
+dnl IVARN(iget/iput/bput, `'/iType)
+dnl
+define(`IVARN',dnl
+`dnl
+/*----< INAPINAME($1,$2)() >--------------------------------------------------*/
+/* This API is an independent subroutine, which can be called in either
+ * collective or independent data mode or even in define mode.
+ */
+int
+INAPINAME($1,$2)(int                ncid,
+                 int                varid,
+                 int                num,
+                 MPI_Offset* const *starts,
+                 MPI_Offset* const *counts,
+                 BufArgs(substr($1,1),$2),
+                 int               *reqid)
+{
+    int i, err, reqMode;
+    PNC *pncp;
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (reqid != NULL) *reqid = NC_REQ_NULL;
+
+    err = sanity_check(pncp, varid, IO_TYPE($1), ITYPE2MPI($2), 0);
+    if (err != NC_NOERR) return err;
+
+    if (num == 0) return NC_NOERR;
+
+    ifelse(`$1',`bput',`/* check if buffer has been attached */
+    MPI_Offset buf_size;
+    err = pncp->driver->inq_misc(pncp->ncp, NULL, NULL, NULL, NULL,
+                                 NULL, NULL, NULL, NULL, NULL, NULL,
+                                 NULL, NULL, NULL, NULL, &buf_size);
+    if (err != NC_NOERR) return err;')
+
+    if (num > 0 && starts == NULL) DEBUG_RETURN_ERROR(NC_ENULLSTART)
+
+    if (pncp->vars[varid].ndims > 0) {
+        NC_api api = (counts == NULL) ? API_VAR1 : API_VARA;
+        for (i=0; i<num; i++) {
+            MPI_Offset *len = (counts == NULL) ? NULL : counts[i];
+            err = check_start_count_stride(pncp, varid, IS_READ($1),
+                                           api, starts[i], len, NULL);
+            if (err != NC_NOERR) return err;
+        }
+    }
+
+    ifelse(`$2',`',`if (bufcount == 0) return NC_NOERR;')
+
+    reqMode = IO_MODE($1) | NB_MODE($1) | FLEX_MODE($2);
+
+    /* calling the subroutine that implements INAPINAME($1,$2)() */
+    return pncp->driver->`$1'_varn(pncp->ncp, varid, num, starts, counts,
+                                   buf, FLEX_ARG($2), reqid, reqMode);
+}
+')dnl
+dnl
+foreach(`putget', (iget, iput, bput),
+        `foreach(`iType', (`',ITYPE_LIST),
+                 `IVARN(putget,iType)'
+)')dnl
+dnl
+dnl VARD(get/put, `'/_all)
+dnl
+define(`VARD',dnl
+`dnl
+/*----< ncmpi_$1_vard$2() >--------------------------------------------------*/
+/* This API is ifelse(`$4',`',`an independent',`a collective') subroutine. */
+int
+ncmpi_$1_vard$2(int           ncid,
+                int           varid,
+                MPI_Datatype  filetype,  /* access layout to the variable in file */
+                ifelse($1, `get', `void *buf', `const void *buf'),
+                MPI_Offset    bufcount,
+                MPI_Datatype  buftype)   /* data type of the buffer */
+{
+    int err, status, reqMode=0;
+    PNC *pncp;
+
+    /* check if ncid is valid.
+     * For invalid ncid, we must return error now, as there is no way to
+     * continue with invalid ncp. However, collective APIs might hang if this
+     * error occurs only on a subset of processes
+     */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    err = sanity_check(pncp, varid, IO_TYPE($1), MPI_DATATYPE_NULL, IS_COLL($2));
+
+    ifelse(`$2',`',
+    `/* for independent API, return now if error encountered or zero request */
+    if (err != NC_NOERR) return err;
+    if (bufcount == 0) return NC_NOERR;',
+    `/* In safe mode, check errors across all processes */
+    if (pncp->flag & NC_MODE_SAFE) {
+        err = allreduce_error(pncp, err);
+        if (err != NC_NOERR) return err;
+    }
+    else if (err == NC_EPERM || err == NC_EINDEFINE || err == NC_EINDEP ||
+             err == NC_ENOTINDEP) /* cannot continue if fatal errors */
+        return err;
+    else if (err != NC_NOERR) /* other errors, participate collective call */
+        reqMode |= NC_REQ_ZERO;')
+
+    reqMode |= IO_MODE($1) | NC_REQ_BLK | NC_REQ_FLEX | COLL_MODE($2);
+
+    /* calling the subroutine that implements ncmpi_$1_vard$2() */
+    status = pncp->driver->$1_vard(pncp->ncp, varid, filetype, buf,
+                                   bufcount, buftype, reqMode);
+
+    return ifelse(`$2',`',`status;',`(err != NC_NOERR) ? err : status; /* first error encountered */')
+}
+')
+dnl
+foreach(`putget', (put, get),
+        `foreach(`collindep', (, _all),
+                 `VARD(putget,collindep)'
+)')dnl
+dnl
diff --git a/src/dispatchers/variable.c b/src/dispatchers/variable.c
new file mode 100644
index 0000000..b873496
--- /dev/null
+++ b/src/dispatchers/variable.c
@@ -0,0 +1,686 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: variable.c 3398 2017-09-21 23:17:34Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <limits.h> /* INT_MAX */
+
+#include <pnetcdf.h>
+#include <dispatch.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/*----< ncmpi_def_var() >----------------------------------------------------*/
+/* this API is collective, and must be called in define mode */
+int
+ncmpi_def_var(int         ncid,    /* IN:  file ID */
+              const char *name,    /* IN:  name of variable */
+              nc_type     type,
+              int         ndims,
+              const int  *dimids,
+              int        *varidp)
+{
+    int i, err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (!(pncp->flag & NC_MODE_DEF)) { /* must be called in define mode */
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+    if (name == NULL || *name == 0) { /* name cannot be NULL or NULL string */
+        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
+        goto err_check;
+    }
+
+    if (strlen(name) > NC_MAX_NAME) { /* name length */
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXNAME)
+        goto err_check;
+    }
+
+    /* check if the name string is legal for netcdf format */
+    err = ncmpii_check_name(name, pncp->format);
+    if (err != NC_NOERR) {
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+
+    /* the max data type supported by CDF-5 is NC_UINT64 */
+    if (type <= 0 || type > NC_UINT64) {
+        DEBUG_ASSIGN_ERROR(err, NC_EBADTYPE)
+        goto err_check;
+    }
+
+    /* For CDF-1 and CDF-2 files, only classic types are allowed. */
+    if (pncp->format < NC_FORMAT_CDF5 && type > NC_DOUBLE) {
+        DEBUG_ASSIGN_ERROR(err, NC_ESTRICTCDF2)
+        goto err_check;
+    }
+
+    /* Argument ndims is of type "int". Its max value will be less than
+     * INT_MAX. Thus if NC_MAX_VAR_DIMS == INT_MAX, then there is no need to
+     * check whether or not ndims > NC_MAX_VAR_DIMS.
+     *
+     * When checking against NC_MAX_VAR_DIMS, because there is no error code
+     * corresponding to this, we use NC_EMAXDIMS
+     */
+#if NC_MAX_VAR_DIMS < INT_MAX
+    if (ndims > NC_MAX_VAR_DIMS) {
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXDIMS)
+        goto err_check;
+    }
+#endif
+    if (ndims < 0) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINVAL)
+        goto err_check;
+    }
+
+    /* Note we no longer limit the number of variables, as CDF file formats
+     * impose no such limit. Thus, the value of NC_MAX_VARS has been changed
+     * to NC_MAX_INT, as argument nvars is of type signed int in API
+     * ncmpi_inq_nvars()
+     */
+    if (pncp->nvars == NC_MAX_VARS) {
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXVARS)
+        goto err_check;
+    }
+
+    /* check whether new name is already in use, for this API (def_var) the
+     * name should NOT already exist */
+    err = pncp->driver->inq_varid(pncp->ncp, name, NULL);
+    if (err != NC_ENOTVAR) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
+        goto err_check;
+    }
+    else
+        err = NC_NOERR;
+
+    /* check dimids[] */
+    if (ndims > 0 && dimids == NULL) { /* for non-scalar variable */
+        DEBUG_ASSIGN_ERROR(err, NC_EINVAL)
+        goto err_check;
+    }
+    for (i=0; i<ndims; i++) {
+        if (dimids[i] < 0 || pncp->ndims == 0 || dimids[i] >= pncp->ndims) {
+            DEBUG_ASSIGN_ERROR(err, NC_EBADDIM)
+            goto err_check;
+        }
+    }
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int root_name_len, root_ndims, minE, rank, mpireturn;
+        char *root_name=NULL;
+
+        /* first check the error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+
+        MPI_Comm_rank(pncp->comm, &rank);
+
+        /* check if name is consistent among all processes */
+        assert(name != NULL);
+        root_name_len = strlen(name) + 1;
+        TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+        root_name = (char*) NCI_Malloc((size_t)root_name_len);
+        if (rank == 0) strcpy(root_name, name);
+        TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0,pncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(root_name);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        }
+        if (err == NC_NOERR && strcmp(root_name, name))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_NAME)
+        NCI_Free(root_name);
+
+        /* check if type is consistent among all processes */
+        nc_type root_type=type;
+        TRACE_COMM(MPI_Bcast)(&root_type, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_type != type)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_TYPE)
+
+        /* check if ndims is consistent among all processes */
+        root_ndims=ndims;
+        TRACE_COMM(MPI_Bcast)(&root_ndims, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_ndims != ndims)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_NDIMS)
+
+        /* check if dimids is consistent among all processes */
+        if (root_ndims > 0) {
+            int *root_dimids = (int*)NCI_Malloc((size_t)root_ndims *SIZEOF_INT);
+            if (dimids != NULL)
+                memcpy(root_dimids, dimids, (size_t)root_ndims*SIZEOF_INT);
+            else
+                memset(root_dimids, 0, (size_t)root_ndims*SIZEOF_INT);
+            TRACE_COMM(MPI_Bcast)(root_dimids, root_ndims,MPI_INT,0,pncp->comm);
+            if (mpireturn != MPI_SUCCESS) {
+                NCI_Free(root_dimids);
+                return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+            }
+            if (err == NC_NOERR && dimids != NULL &&
+                memcmp(root_dimids, dimids, (size_t)root_ndims*SIZEOF_INT))
+                DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_DIMIDS)
+            NCI_Free(root_dimids);
+        }
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_def_var() */
+    err = pncp->driver->def_var(pncp->ncp, name, type, ndims, dimids, varidp);
+    if (err != NC_NOERR) return err;
+
+    assert(*varidp == pncp->nvars);
+
+    /* add new variable into pnc-vars[] */
+    if (pncp->nvars % PNC_VARS_CHUNK == 0)
+        pncp->vars = NCI_Realloc(pncp->vars,
+                                 (pncp->nvars+PNC_VARS_CHUNK)*sizeof(PNC_var));
+
+    pncp->vars[*varidp].ndims  = ndims;
+    pncp->vars[*varidp].xtype  = type;
+    pncp->vars[*varidp].recdim = -1;   /* if fixed-size variable */
+    pncp->vars[*varidp].shape  = NULL;
+    if (ndims > 0) {
+        if (dimids[0] == pncp->unlimdimid) /* record variable */
+            pncp->vars[*varidp].recdim = pncp->unlimdimid;
+
+        pncp->vars[*varidp].shape = (MPI_Offset*)
+                                    NCI_Malloc(ndims * SIZEOF_MPI_OFFSET);
+        for (i=0; i<ndims; i++) {
+            /* obtain size of dimension i */
+            err = pncp->driver->inq_dim(pncp->ncp, dimids[i], NULL,
+                                        pncp->vars[*varidp].shape+i);
+            if (err != NC_NOERR) return err;
+        }
+    }
+    pncp->nvars++;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpi_def_var_fill() >-----------------------------------------------*/
+/* this API is collective, and must be called in define mode */
+int
+ncmpi_def_var_fill(int         ncid,    /* IN:  file ID */
+                   int         varid,
+                   int         nofill,
+                   const void *fill_value)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (!(pncp->flag & NC_MODE_DEF)) { /* must be called in define mode */
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+    if (varid == NC_GLOBAL) {
+        /* setting global _FillValue through this API is not allowed */
+        DEBUG_ASSIGN_ERROR(err, NC_EGLOBAL)
+        goto err_check;
+    }
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int minE, mpireturn;
+        /* check error code so far across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_def_var_fill() */
+    return pncp->driver->def_var_fill(pncp->ncp, varid, nofill, fill_value);
+}
+
+/*----< ncmpi_inq_varid() >--------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_inq_varid(int         ncid,    /* IN:  file ID */
+                const char *name,    /* IN:  name of variable */
+                int        *varidp)  /* OUT: variable ID */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (name == NULL || *name == 0) DEBUG_RETURN_ERROR(NC_EBADNAME)
+
+    if (strlen(name) > NC_MAX_NAME) DEBUG_RETURN_ERROR(NC_EMAXNAME)
+
+    /* calling the subroutine that implements ncmpi_inq_varid() */
+    return pncp->driver->inq_varid(pncp->ncp, name, varidp);
+}
+
+/*----< ncmpi_inq_var() >----------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_inq_var(int      ncid,    /* IN:  file ID */
+              int      varid,   /* IN:  variable ID */
+              char    *name,    /* OUT: name of variable */
+              nc_type *xtypep,
+              int     *ndimsp,
+              int     *dimids,
+              int     *nattsp)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* using NC_GLOBAL in varid is illegal for this API. See
+     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
+     */
+    if (varid == NC_GLOBAL &&
+        (name != NULL || xtypep != NULL || ndimsp != NULL || dimids != NULL))
+        DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars))
+        DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_var() */
+    return pncp->driver->inq_var(pncp->ncp, varid, name, xtypep, ndimsp,
+                                 dimids, nattsp, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_varname() >------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_inq_varname(int   ncid,    /* IN:  file ID */
+                  int   varid,   /* IN:  variable ID */
+                  char *name)    /* OUT: name of variable */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* using NC_GLOBAL in varid is illegal for this API. See
+     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
+     */
+    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_varname() */
+    return pncp->driver->inq_var(pncp->ncp, varid, name, NULL, NULL,
+                                 NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_vartype() >------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_inq_vartype(int      ncid,    /* IN:  file ID */
+                  int      varid,   /* IN:  variable ID */
+                  nc_type *xtypep)  /* OUT: external type of variable */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* using NC_GLOBAL in varid is illegal for this API. See
+     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
+     */
+    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_vartype() */
+    return pncp->driver->inq_var(pncp->ncp, varid, NULL, xtypep, NULL,
+                                 NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_varndims() >-----------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_inq_varndims(int  ncid,    /* IN:  file ID */
+                   int  varid,   /* IN:  variable ID */
+                   int *ndimsp)  /* OUT: number of dimensions of variable */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* using NC_GLOBAL in varid is illegal for this API. See
+     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
+     */
+    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_varndims() */
+    return pncp->driver->inq_var(pncp->ncp, varid, NULL, NULL, ndimsp,
+                                 NULL, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_vardimid() >-----------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_inq_vardimid(int  ncid,    /* IN:  file ID */
+                   int  varid,   /* IN:  variable ID */
+                   int *dimids)  /* OUT: dimension IDs of variable */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* using NC_GLOBAL in varid is illegal for this API. See
+     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
+     */
+    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_vardimid() */
+    return pncp->driver->inq_var(pncp->ncp, varid, NULL, NULL, NULL,
+                                 dimids, NULL, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_varnatts() >-----------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_inq_varnatts(int  ncid,    /* IN:  file ID */
+                   int  varid,   /* IN:  variable ID */
+                   int *nattsp)  /* OUT: number of attributes of variable */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* check whether variable ID is valid */
+    if (varid != NC_GLOBAL && (varid < 0 || varid >= pncp->nvars))
+         DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_varnatts() */
+    return pncp->driver->inq_var(pncp->ncp, varid, NULL, NULL, NULL,
+                                 NULL, nattsp, NULL, NULL, NULL);
+}
+
+/*----< ncmpi_inq_varoffset() >----------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpi_inq_varoffset(int         ncid,   /* IN: file ID */
+                    int         varid,  /* IN: variable ID */
+                    MPI_Offset *offset) /* OUT: starting file offset */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* using NC_GLOBAL in varid is illegal for this API. See
+     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
+     */
+    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_varoffset() */
+    return pncp->driver->inq_var(pncp->ncp, varid, NULL, NULL, NULL,
+                                 NULL, NULL, offset, NULL, NULL);
+}
+
+/*----< ncmpi_inq_var_fill() >-----------------------------------------------*/
+/* this API can be called independently and in both data and define mode */
+int
+ncmpi_inq_var_fill(int   ncid,
+                   int   varid,
+                   int  *no_fill,    /* OUT: 1 not fill mode, 0 fill mode */
+                   void *fill_value) /* OUT: user-defined or default fill value */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    /* using NC_GLOBAL in varid is illegal for this API. See
+     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
+     */
+    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* calling the subroutine that implements ncmpi_inq_var_fill() */
+    return pncp->driver->inq_var(pncp->ncp, varid, NULL, NULL, NULL,
+                                 NULL, NULL, NULL, no_fill, fill_value);
+}
+
+/*----< ncmpi_fill_var_rec() >-----------------------------------------------*/
+/* this API is collective and can only be called in collective data mode */
+int
+ncmpi_fill_var_rec(int        ncid,
+                   int        varid,
+                   MPI_Offset recno)
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (pncp->flag & NC_MODE_RDONLY) { /* cannot be read-only */
+        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
+        goto err_check;
+    }
+
+    if (pncp->flag & NC_MODE_DEF) { /* must be called in data mode */
+        DEBUG_ASSIGN_ERROR(err, NC_EINDEFINE)
+        goto err_check;
+    }
+
+    /* using NC_GLOBAL in varid is illegal for this API */
+    if (varid == NC_GLOBAL) {
+         DEBUG_ASSIGN_ERROR(err, NC_EGLOBAL)
+        goto err_check;
+    }
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    if (pncp->vars[varid].recdim == -1) { /* not a record variable */
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTRECVAR)
+        goto err_check;
+    }
+
+    if (pncp->flag & NC_MODE_INDEP) { /* must be called in collective mode */
+        DEBUG_ASSIGN_ERROR(err, NC_EINDEP)
+        goto err_check;
+    }
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int minE, mpireturn;
+        /* check error code so far across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    /* calling the subroutine that implements ncmpi_fill_var_rec() */
+    return pncp->driver->fill_var_rec(pncp->ncp, varid, recno);
+}
+
+/*----< ncmpi_rename_var() >-------------------------------------------------*/
+/* This is a collective subroutine */
+int
+ncmpi_rename_var(int         ncid,    /* IN: file ID */
+                 int         varid,   /* IN: variable ID */
+                 const char *newname) /* IN: name of variable */
+{
+    int err;
+    PNC *pncp;
+
+    /* check if ncid is valid */
+    err = PNC_check_id(ncid, &pncp);
+    if (err != NC_NOERR) return err;
+
+    if (pncp->flag & NC_MODE_RDONLY) { /* cannot be read-only */
+        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
+        goto err_check;
+    }
+
+    if (varid == NC_GLOBAL) { /* Global is error in this context */
+        DEBUG_ASSIGN_ERROR(err, NC_EGLOBAL)
+        goto err_check;
+    }
+
+    /* check whether variable ID is valid */
+    if (varid < 0 || varid >= pncp->nvars) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    if (newname == NULL || *newname == 0) { /* cannot be NULL or NULL string */
+        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
+        goto err_check;
+    }
+
+    if (strlen(newname) > NC_MAX_NAME) { /* newname length */
+        DEBUG_ASSIGN_ERROR(err, NC_EMAXNAME)
+        goto err_check;
+    }
+
+    /* check whether new name is legal */
+    err = ncmpii_check_name(newname, pncp->format);
+    if (err != NC_NOERR) {
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+
+    /* check whether new name is already in use, for this API (rename) the
+     * name should NOT already exist */
+    err = pncp->driver->inq_varid(pncp->ncp, newname, NULL);
+    if (err != NC_ENOTVAR) { /* expecting NC_ENOTVAR */
+        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
+        goto err_check;
+    }
+    else err = NC_NOERR;  /* reset err */
+
+err_check:
+    if (pncp->flag & NC_MODE_SAFE) {
+        int root_name_len, root_varid, minE, rank, mpireturn;
+        char *root_name=NULL;
+
+        /* First check error code so far across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+
+        MPI_Comm_rank(pncp->comm, &rank);
+
+        /* check if newname is consistent among all processes */
+        assert(newname != NULL);
+        root_name_len = strlen(newname) + 1;
+        TRACE_COMM(MPI_Bcast)(&root_name_len, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast root_name_len");
+
+        root_name = (char*) NCI_Malloc((size_t)root_name_len);
+        if (rank == 0) strcpy(root_name, newname);
+        TRACE_COMM(MPI_Bcast)(root_name, root_name_len, MPI_CHAR, 0,pncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(root_name);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        }
+        if (err == NC_NOERR && strcmp(root_name, newname))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_NAME)
+        NCI_Free(root_name);
+
+        /* check if varid is consistent across all processes */
+        root_varid = varid;
+        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_varid != varid)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, pncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+
+    /* calling the subroutine that implements ncmpi_rename_var() */
+    return pncp->driver->rename_var(pncp->ncp, varid, newname);
+}
+
diff --git a/src/drivers/Makefile.am b/src/drivers/Makefile.am
new file mode 100644
index 0000000..f306c5e
--- /dev/null
+++ b/src/drivers/Makefile.am
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2749 2016-12-28 17:51:37Z wkliao $
+#
+# @configure_input@
+
+SUBDIRS = include common ncmpio
+
+if BUILD_DRIVER_FOO
+   SUBDIRS += ncfoo
+endif
+
+DIST_SUBDIRS = include common ncmpio ncfoo
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
diff --git a/src/drivers/Makefile.in b/src/drivers/Makefile.in
new file mode 100644
index 0000000..63d2234
--- /dev/null
+++ b/src/drivers/Makefile.in
@@ -0,0 +1,725 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2749 2016-12-28 17:51:37Z wkliao $
+#
+# @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at BUILD_DRIVER_FOO_TRUE@am__append_1 = ncfoo
+subdir = src/drivers
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = include common ncmpio $(am__append_1)
+DIST_SUBDIRS = include common ncmpio ncfoo
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/drivers/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+tests: tests-recursive
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-generic distclean-libtool \
+	distclean-local distclean-tags distdir dvi dvi-am html html-am \
+	info info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/drivers/common/Makefile.am b/src/drivers/common/Makefile.am
new file mode 100644
index 0000000..a7ba76b
--- /dev/null
+++ b/src/drivers/common/Makefile.am
@@ -0,0 +1,59 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id$
+#
+# @configure_input@
+
+SUFFIXES = .a .o .c .m4 .h
+
+AM_CPPFLAGS  = -I${top_srcdir}/src/include
+AM_CPPFLAGS += -I${top_srcdir}/src/drivers/include
+AM_CPPFLAGS += -I${top_builddir}/src/drivers/include
+
+if PNETCDF_DEBUG
+   AM_CPPFLAGS += -DPNETCDF_DEBUG
+endif
+
+noinst_LTLIBRARIES = libcommon.la
+
+H_SRCS = utf8proc_data.h \
+         utf8proc.h
+
+M4FLAGS += -I${top_srcdir}/m4
+if ENABLE_ERANGE_FILL
+M4FLAGS += -DERANGE_FILL
+endif
+
+M4_SRCS   = ncx.m4 \
+            convert_swap.m4
+
+C_SRCS    = utf8proc.c \
+            mem_alloc.c \
+            dtype_decode.c \
+            create_imaptype.c \
+            error_mpi2nc.c \
+            check_name.c \
+            pack_unpack.c \
+            utils.c
+
+libcommon_la_SOURCES = $(C_SRCS) $(H_SRCS)
+nodist_libcommon_la_SOURCES = $(M4_SRCS:.m4=.c)
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# and 'make install'. This means you cannot build a specific target (e.g.,
+# 'make foo') in a clean tree if it depends on a built source."
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+
+EXTRA_DIST = $(M4_SRCS)
+
+CLEANFILES = $(M4_SRCS:.m4=.c) *.gcno
+
+tests-local: all
+
diff --git a/src/drivers/common/Makefile.in b/src/drivers/common/Makefile.in
new file mode 100644
index 0000000..ea8e6c3
--- /dev/null
+++ b/src/drivers/common/Makefile.in
@@ -0,0 +1,739 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id$
+#
+# @configure_input@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at PNETCDF_DEBUG_TRUE@am__append_1 = -DPNETCDF_DEBUG
+ at ENABLE_ERANGE_FILL_TRUE@am__append_2 = -DERANGE_FILL
+subdir = src/drivers/common
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libcommon_la_LIBADD =
+am__objects_1 = utf8proc.lo mem_alloc.lo dtype_decode.lo \
+	create_imaptype.lo error_mpi2nc.lo check_name.lo \
+	pack_unpack.lo utils.lo
+am__objects_2 =
+am_libcommon_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+am__objects_3 = ncx.lo convert_swap.lo
+nodist_libcommon_la_OBJECTS = $(am__objects_3)
+libcommon_la_OBJECTS = $(am_libcommon_la_OBJECTS) \
+	$(nodist_libcommon_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libcommon_la_SOURCES) $(nodist_libcommon_la_SOURCES)
+DIST_SOURCES = $(libcommon_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4 $(am__append_2)
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .a .o .c .m4 .h
+AM_CPPFLAGS = -I${top_srcdir}/src/include \
+	-I${top_srcdir}/src/drivers/include \
+	-I${top_builddir}/src/drivers/include $(am__append_1)
+noinst_LTLIBRARIES = libcommon.la
+H_SRCS = utf8proc_data.h \
+         utf8proc.h
+
+M4_SRCS = ncx.m4 \
+            convert_swap.m4
+
+C_SRCS = utf8proc.c \
+            mem_alloc.c \
+            dtype_decode.c \
+            create_imaptype.c \
+            error_mpi2nc.c \
+            check_name.c \
+            pack_unpack.c \
+            utils.c
+
+libcommon_la_SOURCES = $(C_SRCS) $(H_SRCS)
+nodist_libcommon_la_SOURCES = $(M4_SRCS:.m4=.c)
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# and 'make install'. This means you cannot build a specific target (e.g.,
+# 'make foo') in a clean tree if it depends on a built source."
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+EXTRA_DIST = $(M4_SRCS)
+CLEANFILES = $(M4_SRCS:.m4=.c) *.gcno
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .a .o .c .m4 .h .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers/common/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/drivers/common/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libcommon.la: $(libcommon_la_OBJECTS) $(libcommon_la_DEPENDENCIES) $(EXTRA_libcommon_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(LINK)  $(libcommon_la_OBJECTS) $(libcommon_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_name.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/convert_swap.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/create_imaptype.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dtype_decode.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/error_mpi2nc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mem_alloc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncx.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pack_unpack.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/utf8proc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/utils.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/lib/string.c b/src/drivers/common/check_name.c
similarity index 70%
rename from src/lib/string.c
rename to src/drivers/common/check_name.c
index aba6589..ca3f084 100644
--- a/src/lib/string.c
+++ b/src/drivers/common/check_name.c
@@ -1,11 +1,11 @@
 /*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: string.c 2495 2016-09-26 06:42:18Z wkliao $ */
+/* $Id: check_name.c 3440 2017-10-15 18:46:02Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdio.h>
@@ -13,84 +13,13 @@
 #include <stdlib.h>
 #endif
 #include <string.h>
-#include <ctype.h>
+#include <ctype.h>  /* isspace() */
 #include <assert.h>
-
 #include <mpi.h>
 
-#include "nc.h"
-#include "ncx.h"
-#include "rnd.h"
-#include "macro.h"
-
-
-/*----< ncmpii_free_NC_string() >--------------------------------------------*/
-/*
- * Free string, and, if needed, its values.
- * Formerly
-NC_free_string()
- */
-inline void
-ncmpii_free_NC_string(NC_string *ncstrp)
-{
-    if (ncstrp==NULL) return;
-    /* ncstrp->cp is allocated as part of ncstrp object */
-    NCI_Free(ncstrp);
-}
-
-#ifdef _CONFORM_NETCDF_3_5_1
-/*
- * For CDF-1, Verify that a name string is valid
- * CDL syntax, eg, all the characters are
- * alphanumeric, '-', '_', or '.'.
- * Also permit ':', '@', '(', or ')' in names for chemists currently making
- * use of these characters, but don't document until ncgen and ncdump can
- * also handle these characters in names.
- */
-static int
-ncmpii_NC_check_name_CDF1(const char *name)
-{
-    const char *cp = name;
-    assert(name != NULL);
-
-    if (*name == 0)
-        DEBUG_RETURN_ERROR(NC_EBADNAME) /* empty names disallowed */
-
-    for (; *cp != 0; cp++) {
-        int ch = *cp;
-        if (!isalnum(ch)) {
-            if (ch != '_' && ch != '-' && ch != '+' && ch != '.' &&
-                ch != ':' && ch != '@' && ch != '(' && ch != ')')
-                DEBUG_RETURN_ERROR(NC_EBADNAME)
-        }
-    }
-    if (cp - name > NC_MAX_NAME)
-        DEBUG_RETURN_ERROR(NC_EMAXNAME)
-
-    return NC_NOERR;
-}
-#endif
-
-static int ncmpii_NC_check_name_CDF2(const char *name);
-
-/*----< ncmpii_NC_check_name() >---------------------------------------------*/
-int
-ncmpii_NC_check_name(const char *name,
-                     int         file_ver) /* CDF version: 1, 2, or 5 */
-{
-    /* NetCDF4 has made CDF-1 no different from CDF-2 except the size of
-     * OFFSET (i.e. 32-bit vs. 64-bit integer. Both formats support extended
-     * names now.
-     */
-#ifdef _CONFORM_NETCDF_3_5_1
-    if (file_ver == 1)
-        return ncmpii_NC_check_name_CDF1(name);
-#endif
-
-    return ncmpii_NC_check_name_CDF2(name);
-}
-
-#include "utf8proc.h"
+#include <pnetcdf.h>
+#include <pnc_debug.h>
+#include <common.h>
 
 /* There are 3 levels of UTF8 checking: 1=> (exact)validating 2=>relaxed
    and 3=>very relaxed
@@ -216,6 +145,39 @@ nextUTF8(const char* cp)
 }
 
 
+#ifdef _CONFORM_NETCDF_3_5_1
+/*
+ * For CDF-1, Verify that a name string is valid
+ * CDL syntax, eg, all the characters are
+ * alphanumeric, '-', '_', or '.'.
+ * Also permit ':', '@', '(', or ')' in names for chemists currently making
+ * use of these characters, but don't document until ncgen and ncdump can
+ * also handle these characters in names.
+ */
+static int
+check_name_CDF1(const char *name)
+{
+    const char *cp = name;
+    assert(name != NULL);
+
+    if (*name == 0)
+        DEBUG_RETURN_ERROR(NC_EBADNAME) /* empty names disallowed */
+
+    for (; *cp != 0; cp++) {
+        int ch = *cp;
+        if (!isalnum(ch)) {
+            if (ch != '_' && ch != '-' && ch != '+' && ch != '.' &&
+                ch != ':' && ch != '@' && ch != '(' && ch != ')')
+                DEBUG_RETURN_ERROR(NC_EBADNAME)
+        }
+    }
+    if (cp - name > NC_MAX_NAME)
+        DEBUG_RETURN_ERROR(NC_EMAXNAME)
+
+    return NC_NOERR;
+}
+#endif
+
 /*
  * Verify that a name string is valid syntax.  The allowed name
  * syntax (in RE form) is:
@@ -231,12 +193,10 @@ nextUTF8(const char* cp)
  * normalize UTF-8 strings to NFC to facilitate matching and queries.
  */
 static int
-ncmpii_NC_check_name_CDF2(const char *name)
+check_name_CDF2(const char *name)
 {
-	int skip;
-	int ch;
+	int skip, ch, err;
 	const char *cp = name;
-	ssize_t utf8_stat;
 
 	assert(name != NULL);
 
@@ -245,9 +205,8 @@ ncmpii_NC_check_name_CDF2(const char *name)
 		DEBUG_RETURN_ERROR(NC_EBADNAME)
 
 	/* check validity of any UTF-8 */
-	utf8_stat = ncmpii_utf8proc_check((const unsigned char *)name);
-	if (utf8_stat < 0)
-	    DEBUG_RETURN_ERROR(NC_EBADNAME)
+        err = ncmpii_utf8_validate(name);
+	if (err != NC_NOERR) return err;
 
 	/* First char must be [a-z][A-Z][0-9]_ | UTF8 */
 	ch = (uchar)*cp;
@@ -283,70 +242,21 @@ ncmpii_NC_check_name_CDF2(const char *name)
 	return NC_NOERR;
 }
 
-/*----< ncmpii_new_NC_string() >---------------------------------------------*/
-/*
- * Allocate a NC_string structure large enough
- * to hold slen characters.
- * Formerly
-NC_new_string(count, str)
- */
-NC_string *
-ncmpii_new_NC_string(size_t      slen,
-                     const char *str)  /* must be already normalized */
+/*----< ncmpii_check_name() >------------------------------------------------*/
+int
+ncmpii_check_name(const char *name,
+                  int         file_ver) /* CDF version: NC_FORMAT_CLASSIC,
+                                           NC_FORMAT_CDF2, or NC_FORMAT_CDF5 */
 {
-    /* str may not be NULL terminated */
-    NC_string *ncstrp;
-    size_t sizeof_NC_string = M_RNDUP(sizeof(NC_string));
-    size_t sz = slen + sizeof_NC_string + 1;
-    /* one char more space for NULL terminate char */
-
-#if 0
-    sz = _RNDUP(sz, X_ALIGN);
+    /* NetCDF4 has made CDF-1 no different from CDF-2 except the size of
+     * OFFSET (i.e. 32-bit vs. 64-bit integer. Both formats support extended
+     * names now.
+     */
+#ifdef _CONFORM_NETCDF_3_5_1
+    if (file_ver == NC_FORMAT_CLASSIC)
+        return check_name_CDF1(name);
 #endif
 
-    ncstrp = (NC_string *) NCI_Calloc(sz, sizeof(char));
-    if (ncstrp == NULL) return NULL;
-
-    /* make space occupied by ncstrp->cp part of ncstrp */
-    ncstrp->nchars = (MPI_Offset)slen;
-    ncstrp->cp = (char *)ncstrp + sizeof_NC_string;
-
-    /* in PnetCDF, we want to make name->cp always NULL character terminated */
-    if (str != NULL && *str != '\0') {
-        strncpy(ncstrp->cp, str, slen);
-        ncstrp->cp[slen] = '\0';  /* NULL terminated */
-    }
-
-    return(ncstrp);
+    return check_name_CDF2(name);
 }
 
-
-/*----< ncmpii_set_NC_string() >---------------------------------------------*/
-/*
- * If possible, change the value of an NC_string to 'str'.
- *
- * Formerly
-NC_re_string()
- */
-int
-ncmpii_set_NC_string(NC_string  *ncstrp,
-                     const char *str)
-{
-    size_t slen;
-
-    assert(str != NULL && *str != '\0');
-
-    slen = strlen(str);
-
-    if (ncstrp->nchars < (MPI_Offset)slen) DEBUG_RETURN_ERROR(NC_ENOTINDEFINE)
-
-    memcpy(ncstrp->cp, str, slen);
-
-    /* in PnetCDF, we want to make name->cp always NULL character terminated */
-    if (ncstrp->nchars > (MPI_Offset)slen)
-        memset(ncstrp->cp + slen, 0, (size_t)ncstrp->nchars - slen);
-
-    ncstrp->nchars = (MPI_Offset)slen;
-
-    return NC_NOERR;
-}
diff --git a/src/drivers/common/convert_swap.m4 b/src/drivers/common/convert_swap.m4
new file mode 100644
index 0000000..e4153de
--- /dev/null
+++ b/src/drivers/common/convert_swap.m4
@@ -0,0 +1,520 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: convert_swap.m4 3483 2017-10-25 21:02:50Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h> /* memcpy() */
+
+#include <unistd.h>
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h> /* uint16_t, uint32_t, uint64_t */
+#elif defined(HAVE_STDINT_H)
+#include <stdint.h>   /* uint16_t, uint32_t, uint64_t */
+#endif
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnetcdf.h>
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+
+/*
+ * The NetCDF CDF formats define external NC data types and describe their
+ * intents of use, also shown below.
+ *
+ *   External type   No. Bits   Intent of use
+ *   -------------   --------   ---------------------------------
+ *   NC_CHAR          8         text data (only non-numerical type in NetCDF)
+ *   NC_BYTE          8         1-byte integer
+ *   NC_SHORT        16         2-byte signed integer
+ *   NC_INT          32         4-byte signed integer
+ *   NC_FLOAT        32         4-byte floating point number
+ *   NC_DOUBLE       64         8-byte real number in double precision
+ *   NC_UBYTE         8         unsigned 1-byte integer
+ *   NC_USHORT       16         unsigned 2-byte integer
+ *   NC_UINT         32         unsigned 4-byte integer
+ *   NC_INT64        64         signed 8-byte integer
+ *   NC_UINT64       64         unsigned 8-byte integer
+ *
+ *
+ * Datatype Mapping between in-memory types and MPI datatypes:
+ *
+ *   Internal type of
+ *   I/O buffer argument   Example API              MPI datatype
+ *   -------------------   ----------------------   -----------------
+ *   char*                 ncmpi_put_var_text       MPI_CHAR
+ *   signed char*          ncmpi_put_var_schar      MPI_SIGNED_CHAR
+ *   unsigned char*        ncmpi_put_var_uchar      MPI_UNSIGNED_CHAR
+ *   short*                ncmpi_put_var_short      MPI_SHORT
+ *   unsigned short*       ncmpi_put_var_ushort     MPI_UNSIGNED_SHORT
+ *   int*                  ncmpi_put_var_int        MPI_INT
+ *   unsigned int*         ncmpi_put_var_uint       MPI_UNSIGNED
+ *   long*                 ncmpi_put_var_long       MPI_LONG
+ *   float*                ncmpi_put_var_float      MPI_FLOAT
+ *   double*               ncmpi_put_var_double     MPI_DOUBLE
+ *   long long*            ncmpi_put_var_longlong   MPI_LONG_LONG_INT
+ *   unsigned long long*   ncmpi_put_var_ulonglong  MPI_UNSIGNED_LONG_LONG
+ *
+ *
+ * Note NC_CHAR is the only non-numerical data type available in NetCDF realm.
+ * All other external types are considered numerical, which are illegal to be
+ * converted (type-casted) to and from a variable defined in NC_CHAR type. The
+ * only legal APIs to read/write a variable of type NC_CHAR are "_text" APIs.
+ *
+ */
+
+/*----< ncmpii_need_convert() >----------------------------------------------*/
+/* netCDF specification makes a special case for type conversion between
+ * uchar and NC_BYTE: do not check for range error. See
+ * http://www.unidata.ucar.edu/software/netcdf/docs/data_type.html#type_conversion
+ */
+int
+ncmpii_need_convert(int          format, /* 1, 2, or 5 (CDF format number) */
+                    nc_type      xtype,  /* external NC type */
+                    MPI_Datatype itype)  /* internal MPI type */
+{
+    if (xtype == NC_CHAR) { /* NC_ECHAR is already checked before here */
+        assert(itype == MPI_CHAR);
+        return 0;
+    }
+
+    if (format < NC_FORMAT_CDF5 &&
+        xtype == NC_BYTE && itype == MPI_UNSIGNED_CHAR) return 0;
+
+    if (itype == MPI_LONG && SIZEOF_LONG == SIZEOF_INT) itype = MPI_INT;
+
+    return !( (xtype == NC_BYTE   && itype == MPI_SIGNED_CHAR)    ||
+              (xtype == NC_SHORT  && itype == MPI_SHORT)          ||
+              (xtype == NC_INT    && itype == MPI_INT)            ||
+              (xtype == NC_FLOAT  && itype == MPI_FLOAT)          ||
+              (xtype == NC_DOUBLE && itype == MPI_DOUBLE)         ||
+              (xtype == NC_UBYTE  && itype == MPI_UNSIGNED_CHAR)  ||
+              (xtype == NC_USHORT && itype == MPI_UNSIGNED_SHORT) ||
+              (xtype == NC_UINT   && itype == MPI_UNSIGNED)       ||
+              (xtype == NC_INT64  && itype == MPI_LONG_LONG_INT)  ||
+              (xtype == NC_UINT64 && itype == MPI_UNSIGNED_LONG_LONG)
+            );
+}
+
+/*----< ncmpii_need_swap() >-------------------------------------------------*/
+int
+ncmpii_need_swap(nc_type      xtype,  /* external NC type */
+                 MPI_Datatype itype)  /* internal MPI type */
+{
+#ifdef WORDS_BIGENDIAN
+    return 0;
+#else
+    if ((xtype == NC_CHAR  && itype == MPI_CHAR)           ||
+        (xtype == NC_BYTE  && itype == MPI_SIGNED_CHAR)    ||
+        (xtype == NC_UBYTE && itype == MPI_UNSIGNED_CHAR))
+        return 0;
+
+    return 1;
+#endif
+}
+
+/* Other options to in-place byte-swap
+htonl() is for 4-byte swap
+htons() is for 2-byte swap
+
+#include <arpa/inet.h>
+    dest[i] = htonl(dest[i]);
+    dest[i] = htons(dest[i]);
+
+Or
+
+#include <byteswap.h>
+
+        for (i=0; i<nelems; i++)
+            dest[i] = __bswap_32(dest[i]);
+
+*/
+
+/*----< ncmpii_in_swapn() >--------------------------------------------------*/
+/* in-place byte swap */
+void
+ncmpii_in_swapn(void       *buf,
+                MPI_Offset  nelems,  /* number of elements in buf[] */
+                int         esize)   /* byte size of each element */
+{
+#ifdef WORDS_BIGENDIAN
+    return;
+#else
+    size_t i;
+
+    if (esize <= 1 || nelems <= 0) return;  /* no need */
+
+    if (esize == 4) { /* this is the most common case */
+        uint32_t *dest = (uint32_t*) buf;
+        for (i=0; i<nelems; i++)
+            dest[i] =  ((dest[i]) << 24)
+                    | (((dest[i]) & 0x0000ff00) << 8)
+                    | (((dest[i]) & 0x00ff0000) >> 8)
+                    | (((dest[i]) >> 24));
+    }
+    else if (esize == 8) {
+        uint64_t *dest = (uint64_t*) buf;
+        for (i=0; i<nelems; i++)
+            dest[i] = ((dest[i] & 0x00000000000000FFULL) << 56) | 
+                      ((dest[i] & 0x000000000000FF00ULL) << 40) | 
+                      ((dest[i] & 0x0000000000FF0000ULL) << 24) | 
+                      ((dest[i] & 0x00000000FF000000ULL) <<  8) | 
+                      ((dest[i] & 0x000000FF00000000ULL) >>  8) | 
+                      ((dest[i] & 0x0000FF0000000000ULL) >> 24) | 
+                      ((dest[i] & 0x00FF000000000000ULL) >> 40) | 
+                      ((dest[i] & 0xFF00000000000000ULL) >> 56);
+    }
+    else if (esize == 2) {
+        uint16_t *dest = (uint16_t*) buf;
+        for (i=0; i<nelems; i++)
+            dest[i] = (uint16_t)(((dest[i] & 0xff) << 8) |
+                                 ((dest[i] >> 8) & 0xff));
+    }
+    else {
+        uchar tmp, *op = (uchar*)buf;
+        /* for esize is not 1, 2, or 4 */
+        while (nelems-- > 0) {
+            for (i=0; i<esize/2; i++) {
+                tmp           = op[i];
+                op[i]         = op[esize-1-i];
+                op[esize-1-i] = tmp;
+            }
+            op += esize;
+        }
+    }
+#endif
+}
+
+dnl
+dnl PUTN_XTYPE(xtype)
+dnl
+define(`PUTN_XTYPE',dnl
+`dnl
+/*----< ncmpii_putn_$1() >---------------------------------------------------*/
+/* Only xtype and itype do not match and type casting is required will call
+ * this subroutine.
+ */
+int
+ncmpii_putn_$1(ifelse(`$1',`NC_BYTE',`int cdf_ver,/* 1,2,or 5 CDF format */')
+               void         *xp,     /* buffer of external type $1 */
+               const void   *buf,    /* user buffer of internal type, itype */
+               MPI_Offset    nelems,
+               MPI_Datatype  itype,  /* internal data type (MPI_Datatype) */
+               void         *fillp)  /* in internal representation */
+{
+    assert(itype != MPI_CHAR); /* ECHAR should have been checked already */
+
+    if (itype == MPI_UNSIGNED_CHAR) {
+        ifelse(`$1',`NC_BYTE',
+       `if (cdf_ver < 5)
+            return ncmpix_putn_NC_UBYTE_uchar(&xp, nelems,(const uchar*)buf, fillp);
+        else')
+            return ncmpix_putn_$1_uchar(&xp, nelems, (const uchar*)     buf, fillp);
+    }
+    else if (itype == MPI_SIGNED_CHAR) /* This is for 1-byte integer */
+        return ncmpix_putn_$1_schar    (&xp, nelems, (const schar*)     buf, fillp);
+    else if (itype == MPI_SHORT)
+        return ncmpix_putn_$1_short    (&xp, nelems, (const short*)     buf, fillp);
+    else if (itype == MPI_UNSIGNED_SHORT)
+        return ncmpix_putn_$1_ushort   (&xp, nelems, (const ushort*)    buf, fillp);
+    else if (itype == MPI_INT)
+        return ncmpix_putn_$1_int      (&xp, nelems, (const int*)       buf, fillp);
+    else if (itype == MPI_UNSIGNED)
+        return ncmpix_putn_$1_uint     (&xp, nelems, (const uint*)      buf, fillp);
+    else if (itype == MPI_LONG)
+        return ncmpix_putn_$1_long     (&xp, nelems, (const long*)      buf, fillp);
+    else if (itype == MPI_FLOAT)
+        return ncmpix_putn_$1_float    (&xp, nelems, (const float*)     buf, fillp);
+    else if (itype == MPI_DOUBLE)
+        return ncmpix_putn_$1_double   (&xp, nelems, (const double*)    buf, fillp);
+    else if (itype == MPI_LONG_LONG_INT)
+        return ncmpix_putn_$1_longlong (&xp, nelems, (const longlong*)  buf, fillp);
+    else if (itype == MPI_UNSIGNED_LONG_LONG)
+        return ncmpix_putn_$1_ulonglong(&xp, nelems, (const ulonglong*) buf, fillp);
+    DEBUG_RETURN_ERROR(NC_EBADTYPE)
+}
+')dnl
+
+PUTN_XTYPE(NC_UBYTE)
+PUTN_XTYPE(NC_SHORT)
+PUTN_XTYPE(NC_USHORT)
+PUTN_XTYPE(NC_INT)
+PUTN_XTYPE(NC_UINT)
+PUTN_XTYPE(NC_FLOAT)
+PUTN_XTYPE(NC_DOUBLE)
+PUTN_XTYPE(NC_INT64)
+PUTN_XTYPE(NC_UINT64)
+
+/* In CDF-2, NC_BYTE is considered a signed 1-byte integer in signed APIs, and
+ * unsigned 1-byte integer in unsigned APIs. In CDF-5, NC_BYTE is always a
+ * signed 1-byte integer. See
+ * http://www.unidata.ucar.edu/software/netcdf/docs/data_type.html#type_conversion
+ */
+PUTN_XTYPE(NC_BYTE)
+
+
+dnl
+dnl GETN_XTYPE(xtype)
+dnl
+define(`GETN_XTYPE',dnl
+`dnl
+/*----< ncmpii_getn_$1() >---------------------------------------------------*/
+/* Only xtype and itype do not match and type casting is required will call
+ * this subroutine.
+ */
+int
+ncmpii_getn_$1(ifelse(`$1',`NC_BYTE',`int cdf_ver,/* NC_FORMAT_CDF5 etc. */')
+        const void   *xp,     /* buffer of external type $1 */
+        void         *ip,     /* user buffer of internal type, itype */
+        MPI_Offset    nelems,
+        MPI_Datatype  itype)  /* internal data type (MPI_Datatype) */
+{
+    assert(itype != MPI_CHAR); /* ECHAR should have been checked already */
+
+    if (itype == MPI_UNSIGNED_CHAR) {
+        ifelse(`$1',`NC_BYTE',`if (cdf_ver < 5)
+            return ncmpix_getn_NC_UBYTE_uchar(&xp, nelems,(uchar*)ip);
+        else')
+            return ncmpix_getn_$1_uchar(&xp, nelems,      (uchar*)ip);
+    }
+    else if (itype == MPI_SIGNED_CHAR)
+        return ncmpix_getn_$1_schar    (&xp, nelems,      (schar*)ip);
+    else if (itype == MPI_SHORT)
+        return ncmpix_getn_$1_short    (&xp, nelems,      (short*)ip);
+    else if (itype == MPI_UNSIGNED_SHORT)
+        return ncmpix_getn_$1_ushort   (&xp, nelems,     (ushort*)ip);
+    else if (itype == MPI_INT)
+        return ncmpix_getn_$1_int      (&xp, nelems,        (int*)ip);
+    else if (itype == MPI_UNSIGNED)
+        return ncmpix_getn_$1_uint     (&xp, nelems,       (uint*)ip);
+    else if (itype == MPI_LONG)
+        return ncmpix_getn_$1_long     (&xp, nelems,       (long*)ip);
+    else if (itype == MPI_FLOAT)
+        return ncmpix_getn_$1_float    (&xp, nelems,      (float*)ip);
+    else if (itype == MPI_DOUBLE)
+        return ncmpix_getn_$1_double   (&xp, nelems,     (double*)ip);
+    else if (itype == MPI_LONG_LONG_INT)
+        return ncmpix_getn_$1_longlong (&xp, nelems,   (longlong*)ip);
+    else if (itype == MPI_UNSIGNED_LONG_LONG)
+        return ncmpix_getn_$1_ulonglong(&xp, nelems,  (ulonglong*)ip);
+    DEBUG_RETURN_ERROR(NC_EBADTYPE)
+}
+')dnl
+
+GETN_XTYPE(NC_UBYTE)
+GETN_XTYPE(NC_SHORT)
+GETN_XTYPE(NC_USHORT)
+GETN_XTYPE(NC_INT)
+GETN_XTYPE(NC_UINT)
+GETN_XTYPE(NC_FLOAT)
+GETN_XTYPE(NC_DOUBLE)
+GETN_XTYPE(NC_INT64)
+GETN_XTYPE(NC_UINT64)
+
+/* In CDF-2, NC_BYTE is considered a signed 1-byte integer in signed APIs, and
+ * unsigned 1-byte integer in unsigned APIs. In CDF-5, NC_BYTE is always a
+ * signed 1-byte integer. See
+ * http://www.unidata.ucar.edu/software/netcdf/docs/data_type.html#type_conversion
+ */
+GETN_XTYPE(NC_BYTE)
+
+#if 0
+/*----< ncmpii_put_cast_swap() >---------------------------------------------*/
+/* This subroutine type-casts and byte-swaps ibuf (in the internal data
+ * representation) into xbuf (in the external data representation), if
+ * necessary. xbuf is set to ibuf only if type-casting is not required (i.e.
+ * data types of itype and xtype match) or the put size is bigger than
+ * NC_BYTE_SWAP_BUFFER_SIZE when byte-swap is required. In this case, ibuf is
+ * byte-swapped in-place if running on a little Endian machine. Otherwise,
+ * xbuf is malloc-ed first and type-casted and byte-swapped into xbuf.
+ */
+int
+ncmpii_put_cast_swap(int            format, /* NC_FORMAT_CDF2/NC_FORMAT_CDF5 */
+                     MPI_Offset     nelems,   /* number of data elements */
+                     nc_type        xtype,    /* external data type */
+                     MPI_Datatype   itype,    /* internal data type */
+                     void          *fillp,    /* pointer to fill value */
+                     void          *ibuf,     /* buffer in internal type */
+                     int            isNewBuf, /* whether ibuf != user buf */
+                     void         **xbuf)     /* OUT: buffer in external type */
+{
+    int err=NC_NOERR, xsz=0, need_cast, need_swap;
+    size_t nbytes;
+
+    /* check if type casting and Endianness byte swap are needed */
+    need_cast = ncmpii_need_convert(format, xtype, itype);
+    need_swap = ncmpii_need_swap(xtype, itype);
+
+    ncmpii_xlen_nc_type(xtype, &xsz);
+    nbytes = (size_t)(nelems * xsz);
+
+    /* allocate xbuf if necessary */
+    if (need_cast || (need_swap && !isNewBuf
+#ifndef DISABLE_IN_PLACE_SWAP
+        && nbytes <= NC_BYTE_SWAP_BUFFER_SIZE
+#endif
+        )) {
+        *xbuf = NCI_Malloc(nbytes);
+        if (*xbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    else
+        *xbuf = ibuf;
+
+    /* pack ibuf to xbuf. The contents of xbuf will be in the external
+     * representation, ready to be written to file.
+     */
+    if (need_cast) { /* user buf type mismatches NC var type */
+        /* datatype conversion + byte-swap from ibuf to xbuf */
+        switch(xtype) {
+            case NC_BYTE:
+                err = ncmpii_putn_NC_BYTE(format,*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_UBYTE:
+                err = ncmpii_putn_NC_UBYTE      (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_SHORT:
+                err = ncmpii_putn_NC_SHORT      (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_USHORT:
+                err = ncmpii_putn_NC_USHORT     (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_INT:
+                err = ncmpii_putn_NC_INT        (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_UINT:
+                err = ncmpii_putn_NC_UINT       (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_FLOAT:
+                err = ncmpii_putn_NC_FLOAT      (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_DOUBLE:
+                err = ncmpii_putn_NC_DOUBLE     (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_INT64:
+                err = ncmpii_putn_NC_INT64      (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            case NC_UINT64:
+                err = ncmpii_putn_NC_UINT64     (*xbuf,ibuf,nelems,itype,fillp);
+                break;
+            default:
+                err = NC_EBADTYPE;
+                break;
+        }
+
+        /* NC_ERANGE can be caused by some elements in ibuf that is out of
+         * range of the external data type, it is not considered a fatal error
+         * and the request must continue to finish.
+         */
+        if (err != NC_NOERR && err != NC_ERANGE) {
+            NCI_Free(*xbuf);
+            *xbuf = NULL;
+            return err;
+        }
+    }
+    else if (need_swap) { /* no casting, just byte swap */
+        if (*xbuf != ibuf) memcpy(*xbuf, ibuf, nbytes);
+
+        /* perform array in-place byte-swap on xbuf */
+        ncmpii_in_swapn(*xbuf, nelems, xsz);
+    }
+    return err;
+}
+
+/*----< ncmpii_get_cast_swap() >---------------------------------------------*/
+/* type casting and Endianness byte swap if needed */
+int
+ncmpii_get_cast_swap(int            format, /* NC_FORMAT_CDF2/NC_FORMAT_CDF5 */
+                     MPI_Offset     nelems, /* number of data elements */
+                     nc_type        xtype,  /* external data type */
+                     MPI_Datatype   itype,  /* internal data type */
+                     void          *buf,    /* user buffer */
+                     void          *xbuf,   /* buffer in external type */
+                     void         **ibuf)   /* OUT: buffer in internal type */
+{
+    /* xbuf contains the data read from file and in external data type */
+    int err=NC_NOERR, xsz=0;
+    size_t nbytes;
+
+    MPI_Type_size(itype, &xsz);
+    nbytes = (size_t)(nelems * xsz);
+
+    if (ncmpii_need_convert(format, xtype, itype)) {
+        /* user buf type mismatches NC var type */
+
+        /* xbuf cannot be buf, but ibuf can */
+        if (buf == NULL) { /* meaning ibuf cannot be buf */
+            *ibuf = NCI_Malloc(nbytes);
+            if (*ibuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+        }
+        else
+            *ibuf = buf; /* both imap buftype are contiguous */
+
+        /* type conversion + byte-swap from xbuf to ibuf */
+        switch(xtype) {
+            case NC_BYTE:
+                err = ncmpii_getn_NC_BYTE(format,xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_UBYTE:
+                err = ncmpii_getn_NC_UBYTE      (xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_SHORT:
+                err = ncmpii_getn_NC_SHORT      (xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_USHORT:
+                err = ncmpii_getn_NC_USHORT     (xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_INT:
+                err = ncmpii_getn_NC_INT        (xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_UINT:
+                err = ncmpii_getn_NC_UINT       (xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_FLOAT:
+                err = ncmpii_getn_NC_FLOAT      (xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_DOUBLE:
+                err = ncmpii_getn_NC_DOUBLE     (xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_INT64:
+                err = ncmpii_getn_NC_INT64      (xbuf,*ibuf,nelems,itype);
+                break;
+            case NC_UINT64:
+                err = ncmpii_getn_NC_UINT64     (xbuf,*ibuf,nelems,itype);
+                break;
+            default:
+                err = NC_EBADTYPE;
+                break;
+        }
+        /* NC_ERANGE can be caused by some elements in xbuf that is out of
+         * range of the internal data type, it is not considered a fatal error
+         * and the request must continue to finish.
+         */
+        if (err != NC_NOERR && err != NC_ERANGE) {
+            if (*ibuf != buf) NCI_Free(*ibuf);
+            *ibuf = NULL;
+            return err;
+        }
+    }
+    else { /* no need to convert */
+        if (ncmpii_need_swap(xtype, itype)) /* check if need byte swap */
+            ncmpii_in_swapn(xbuf, nelems, xsz);
+        *ibuf = xbuf;
+    }
+
+    return err;
+}
+#endif
diff --git a/src/drivers/common/create_imaptype.c b/src/drivers/common/create_imaptype.c
new file mode 100644
index 0000000..c5104a9
--- /dev/null
+++ b/src/drivers/common/create_imaptype.c
@@ -0,0 +1,119 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: create_imaptype.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <mpi.h>
+
+#include <pnetcdf.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/*----< ncmpii_create_imaptype() >-------------------------------------------*/
+/* Check if a request is a true varm call. If yes, create an MPI derived
+ * data type, imaptype, using imap[]
+ */
+int
+ncmpii_create_imaptype(int               ndims,
+                       const MPI_Offset *count,   /* [ndims] */
+                       const MPI_Offset *imap,    /* [ndims] */
+                       MPI_Datatype      ptype,   /* element type in buftype */
+                       MPI_Datatype     *imaptype)/* out */
+{
+    int dim, el_size, mpireturn;
+    MPI_Offset bnelems, imap_contig_blocklen;
+
+    /* check if this is a vars call or a true varm call */
+    *imaptype = MPI_DATATYPE_NULL;
+
+    if (imap == NULL) /* no mapping, same as vars */
+        return NC_NOERR;
+
+    if (ndims == 0) /* scalar var, only one value at one fixed place */
+        return NC_NOERR;
+
+    for (bnelems=1, dim=0; dim<ndims; dim++) bnelems *= count[dim];
+    if (bnelems == 1) return NC_NOERR;
+
+    /* test each dim's contiguity in imap[] until the 1st non-contiguous
+     * dim is reached */
+    imap_contig_blocklen = 1;
+    dim = ndims;
+    while (--dim >= 0 && imap_contig_blocklen == imap[dim])
+        imap_contig_blocklen *= count[dim];
+
+    if (dim == -1) /* imap is a contiguous layout */
+        return NC_NOERR;
+
+    MPI_Type_size(ptype, &el_size);
+
+    /* We have a true varm call, as imap gives non-contiguous layout.
+     * User buffer will be packed (write case) or unpacked (read case)
+     * to/from a contiguous buffer based on imap[], before/after MPI-IO.
+     * First, we construct a derived data type, imaptype, based on
+     * imap[], and use it to pack lbuf to cbuf (for write), or unpack
+     * cbuf to lbuf (for read).
+     * dim is the first dimension (C order, eg. ZYX) that has
+     * non-contiguous imap.
+     */
+    if (imap_contig_blocklen != (int)imap_contig_blocklen)
+        DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+    if (count[dim] != (int)count[dim] || imap[dim] != (int)imap[dim])
+        DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+    mpireturn = MPI_Type_vector((int)count[dim], (int)imap_contig_blocklen,
+                                (int)imap[dim], ptype, imaptype);
+    if (mpireturn != MPI_SUCCESS) {
+        ncmpii_error_mpi2nc(mpireturn,"MPI_Type_vector");
+        DEBUG_RETURN_ERROR(NC_EMPI)
+    }
+    mpireturn = MPI_Type_commit(imaptype);
+    if (mpireturn != MPI_SUCCESS) {
+        ncmpii_error_mpi2nc(mpireturn,"MPI_Type_commit");
+        DEBUG_RETURN_ERROR(NC_EMPI)
+    }
+
+    for (dim--; dim>=0; dim--) {
+        MPI_Datatype tmptype;
+        if (count[dim] != (int)count[dim])
+            DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+#ifdef HAVE_MPI_TYPE_CREATE_HVECTOR
+        mpireturn = MPI_Type_create_hvector((int)count[dim], 1,
+                    imap[dim]*el_size, *imaptype, &tmptype);
+        if (mpireturn != MPI_SUCCESS) {
+            ncmpii_error_mpi2nc(mpireturn,"MPI_Type_create_hvector");
+            DEBUG_RETURN_ERROR(NC_EMPI)
+        }
+#else
+        mpireturn = MPI_Type_hvector((int)count[dim], 1, imap[dim]*el_size,
+                    *imaptype, &tmptype);
+        if (mpireturn != MPI_SUCCESS) {
+            ncmpii_error_mpi2nc(mpireturn,"MPI_Type_hvector");
+            DEBUG_RETURN_ERROR(NC_EMPI)
+        }
+#endif
+        mpireturn = MPI_Type_free(imaptype);
+        if (mpireturn != MPI_SUCCESS) {
+            ncmpii_error_mpi2nc(mpireturn,"MPI_Type_free");
+            DEBUG_RETURN_ERROR(NC_EMPI)
+        }
+        mpireturn = MPI_Type_commit(&tmptype);
+        if (mpireturn != MPI_SUCCESS) {
+            ncmpii_error_mpi2nc(mpireturn,"MPI_Type_commit");
+            DEBUG_RETURN_ERROR(NC_EMPI)
+        }
+        *imaptype = tmptype;
+    }
+    return NC_NOERR;
+}
+
diff --git a/src/drivers/common/dtype_decode.c b/src/drivers/common/dtype_decode.c
new file mode 100644
index 0000000..b05844b
--- /dev/null
+++ b/src/drivers/common/dtype_decode.c
@@ -0,0 +1,571 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: dtype_decode.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+
+#include <mpi.h>
+
+#include <pnetcdf.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/*@
+  dtype_filter - Map a basic MPI datatype into one of the eight
+  that we process natively.
+
+  We unfortunately need to wrap all these types in case they aren't defined.
+
+  Return:
+  On success, one of MPI_CHAR, MPI_SIGNED_CHAR, MPI_UNSIGNED_CHAR, MPI_BYTE,
+  MPI_SHORT, MPI_INT, MPI_LONG, MPI_FLOAT, and MPI_DOUBLE.
+  On failure, MPI_DATATYPE_NULL.
+@*/
+static MPI_Datatype
+dtype_filter(MPI_Datatype type)
+{
+    /* char types */
+#ifdef HAVE_DECL_MPI_CHARACTER
+    if (type == MPI_CHARACTER)
+        return  MPI_CHAR;
+#endif
+    if (type == MPI_CHAR)
+        return  MPI_CHAR;
+
+    /* unsigned char types */
+    if (type == MPI_UNSIGNED_CHAR)
+        return  MPI_UNSIGNED_CHAR;
+
+    /* signed char types */
+    if (type == MPI_SIGNED_CHAR)
+        return  MPI_SIGNED_CHAR;
+
+#ifdef HAVE_DECL_MPI_INTEGER1
+    if (type == MPI_INTEGER1)
+        return  MPI_SIGNED_CHAR;
+#endif
+    if (type == MPI_BYTE)
+        return  MPI_BYTE;
+
+    /* 2-byte integer types (only supported if MPI_SHORT is 2-bytes). */
+#if (SIZEOF_SHORT == 2)
+  #ifdef HAVE_DECL_MPI_INTEGER2
+    if (type == MPI_INTEGER2)
+        return  MPI_SHORT;
+  #endif
+    if (type == MPI_SHORT)
+        return  MPI_SHORT;
+
+    if (type == MPI_UNSIGNED_SHORT)
+        return  MPI_UNSIGNED_SHORT;
+#endif
+
+    /* 4-byte integer types */
+  {
+    MPI_Datatype int_4byte;
+#if (SIZEOF_LONG == 4)
+    MPI_Datatype uint_4byte;
+#endif
+#if (SIZEOF_INT == 4)
+     int_4byte = MPI_INT;
+#if (SIZEOF_LONG == 4)
+    uint_4byte = MPI_UNSIGNED;
+#endif
+#elif (SIZEOF_SHORT == 4)
+     int_4byte = MPI_SHORT;
+#if (SIZEOF_LONG == 4)
+    uint_4byte = MPI_UNSIGNED_SHORT;
+#endif
+#else
+     int_4byte = MPI_DATATYPE_NULL; /* no 4-byte type? */
+#if (SIZEOF_LONG == 4)
+    uint_4byte = MPI_DATATYPE_NULL;
+#endif
+#endif
+
+#ifdef HAVE_DECL_MPI_INTEGER
+    if (type == MPI_INTEGER)
+        return int_4byte;
+#endif
+#ifdef HAVE_DECL_MPI_INTEGER4
+    if (type == MPI_INTEGER4)
+        return int_4byte;
+#endif
+#if (SIZEOF_LONG == 4)
+    if (type == MPI_LONG)
+        return int_4byte;
+    if (type == MPI_UNSIGNED_LONG)
+        return uint_4byte;
+#endif
+#if (SIZEOF_INT == 4)
+    if (type == MPI_INT)
+        return  MPI_INT;
+    if (type == MPI_UNSIGNED)
+        return  MPI_UNSIGNED;
+#elif (SIZEOF_SHORT == 4)
+    if (type == MPI_SHORT)
+        return  MPI_SHORT;
+    if (type == MPI_UNSIGNED_SHORT)
+        return  MPI_UNSIGNED_SHORT;
+#endif
+  }
+
+     /* 8-byte integer types (only supported if MPI_INT or MPI_LONG
+      * is 8-bytes).
+      */
+#if (SIZEOF_INT == 8) || (SIZEOF_LONG == 8)
+  #ifdef HAVE_DECL_MPI_INTEGER8
+    if (type == MPI_INTEGER8)
+      #if (SIZEOF_INT == 8)
+        return MPI_INT;
+      #else
+        return MPI_LONG;
+      #endif
+  #endif
+  #ifdef HAVE_DECL_MPI_UNSIGNED_INTEGER8
+    if (type == MPI_UNSIGNED_INTEGER8)
+      #if (SIZEOF_UINT == 8)
+        return MPI_UNSIGNED;
+      #else
+        return MPI_UNSIGNED_LONG;
+      #endif
+  #endif
+
+  #if (SIZEOF_INT == 8)
+    if (type == MPI_INT)
+        return  MPI_INT;
+    if (type == MPI_UNSIGNED)
+        return  MPI_UNSIGNED;
+  #endif
+  #if (SIZEOF_LONG == 8)
+    if (type == MPI_LONG)
+      #if (SIZEOF_INT == 8)
+        return MPI_INT;
+      #else
+        return MPI_LONG;
+      #endif
+    if (type == MPI_UNSIGNED_LONG)
+      #if (SIZEOF_UINT == 8)
+        return MPI_UNSIGNED;
+      #else
+        return MPI_UNSIGNED_LONG;
+      #endif
+  #endif
+#endif
+
+    /* 4-byte float types (we assume float is 4-bytes). */
+#ifdef HAVE_DECL_MPI_REAL
+    if (type == MPI_REAL)
+        return  MPI_FLOAT;
+#endif
+#ifdef HAVE_DECL_MPI_REAL4
+    if (type == MPI_REAL4)
+        return  MPI_FLOAT;
+#endif
+    if (type == MPI_FLOAT)
+        return  MPI_FLOAT;
+
+    /* 8-byte float types (we assume double is 8-bytes). */
+#ifdef HAVE_DECL_MPI_REAL8
+    if (type == MPI_REAL8)
+        return MPI_DOUBLE;
+#endif
+#ifdef HAVE_DECL_MPI_DOUBLE_PRECISION
+    if (type == MPI_DOUBLE_PRECISION)
+        return  MPI_DOUBLE;
+#endif
+    if (type == MPI_DOUBLE)
+        return  MPI_DOUBLE;
+
+    if (type == MPI_LONG_LONG_INT)
+        return  MPI_LONG_LONG_INT;
+
+    if (type == MPI_UNSIGNED_LONG_LONG)
+        return  MPI_UNSIGNED_LONG_LONG;
+
+/* HP-MPI for example needs to handle MPI_LB and MPI_UB */
+#ifdef HAVE_DECL_MPI_LB
+    if (type == MPI_LB) {
+#if SIZEOF_SIZE_T == 8
+        return MPI_DOUBLE;
+#elif SIZEOF_SIZE_T == 4
+        return MPI_DOUBLE;
+#endif
+    }
+#endif
+#ifdef HAVE_DECL_MPI_UB
+    if (type == MPI_UB) {
+#if SIZEOF_SIZE_T == 8
+        return MPI_DOUBLE;
+#elif SIZEOF_SIZE_T == 4
+        return MPI_DOUBLE;
+#endif
+    }
+#endif
+
+/* default */
+    return MPI_DATATYPE_NULL;
+}
+
+/*@
+  ncmpi_darray_get_totalblock - Count the total number of blocks assigned
+  to the calling process by the darray datatype.
+
+  Input:
+. rank - rank of calling process
+. ndims - number of dimensions for the array and process grid
+. array_of_gsizes - Number of elements of type oldtype in each dimension
+                    of global array (array of positive integers)
+. array_of_distribs - Distribution of array in each dimension (array of state)
+. array_of_dargs - Distribution argument in each dimension
+                   (array of positive integers)
+. array_of_psizes - Size of process grid in each dimension
+                    (array of positive integers)
+
+  Return:
+. total number of blocks assigned from the distributed array
+@*/
+#ifdef HAVE_DECL_MPI_COMBINER_DARRAY
+static int
+darray_get_totalblks(int rank,
+                     MPI_Offset ndims,
+                     int array_of_gsizes[],
+                     int array_of_distribs[],
+                     int array_of_dargs[],
+                     int array_of_psizes[])
+{
+  int total_blocks = 1;
+  int subblocks, cycle, remain_cycle;
+  int i;
+  int pcoord;
+
+  /* Process Grid ranking is always in C ORDER,
+     so compute proc coordinates from last dim */
+
+  for (i=(int)ndims-1; i>=0; i--) {
+    if ( array_of_distribs[i] == MPI_DISTRIBUTE_NONE ) {
+      total_blocks *= array_of_gsizes[i];
+    } else {
+
+      pcoord = rank % array_of_psizes[i];
+      rank /= array_of_psizes[i];
+      if ( array_of_dargs[i] == MPI_DISTRIBUTE_DFLT_DARG ) {
+        subblocks = array_of_gsizes[i]/array_of_psizes[i];
+        if ( subblocks*array_of_psizes[i]+pcoord < array_of_gsizes[i] )
+          subblocks++;
+      } else {
+        cycle = array_of_dargs[i]*array_of_psizes[i];
+        remain_cycle = array_of_gsizes[i] % cycle;
+
+        subblocks = remain_cycle - pcoord*array_of_dargs[i];
+        if (subblocks > array_of_dargs[i])
+          subblocks = array_of_dargs[i];
+        else if (subblocks < 0)
+          subblocks = 0;
+
+        subblocks += array_of_gsizes[i]/cycle * array_of_dargs[i];
+      }
+
+      if (subblocks == 0)
+        return 0;
+      total_blocks *= subblocks;
+
+    }
+  }
+
+  return total_blocks;
+}
+#endif
+
+
+/*----< ncmpii_dtype_decode() >----------------------------------------------*/
+/*@
+  ncmpii_dtype_decode - Decode the MPI derived datatype to get the bottom
+  level primitive datatype information.
+
+  Input:
+. dtype - The MPI derived datatype to be decoded (can be predefined type).
+
+  Output:
+. ptype - The bottom level primitive datatype (only one allowed) in buftype
+. el_size - The size of the ptype
+. nelems - Number of elements/entries of such ptype in one buftype object
+. iscontig_of_ptypes - Whether dtype is a contiguous number of ptype
+@*/
+int ncmpii_dtype_decode(MPI_Datatype  dtype,
+                        MPI_Datatype *ptype,
+                        int          *el_size,
+                        MPI_Offset   *nelems,
+                        int          *isderived,
+                        int          *iscontig_of_ptypes)
+{
+    int i, ndims, status=NC_NOERR, tmpel_size;
+    int num_ints, num_adds, num_dtypes, combiner;
+    int *array_of_ints;
+    MPI_Offset count, tmpnelems, total_blocks;
+    MPI_Datatype tmpptype, *array_of_dtypes;
+    MPI_Aint *array_of_adds;
+
+    *isderived = 0;
+
+    /* Note to PnetCDF developers. High-level APIs should never reach this
+     * subroutine. Check whether it is a high-level of flexible API should
+     * be done before entering here.
+     */
+    if (dtype == MPI_DATATYPE_NULL) {
+        *nelems = 0;
+        *ptype = dtype;
+        *el_size = 0;
+        *iscontig_of_ptypes = 1;
+        return NC_NOERR;
+    }
+
+    MPI_Type_get_envelope(dtype, &num_ints, &num_adds, &num_dtypes, &combiner);
+
+    if (
+#ifdef HAVE_DECL_MPI_COMBINER_F90_INTEGER
+        combiner == MPI_COMBINER_F90_INTEGER ||
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_F90_REAL
+        combiner == MPI_COMBINER_F90_REAL ||
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_F90_COMPLEX
+        combiner == MPI_COMBINER_F90_COMPLEX ||
+#endif
+        0) {
+        fprintf(stderr, "FIXME: F90_INTEGER, F90_REAL or F90_COMPLEX are not supported.\n");
+        DEBUG_RETURN_ERROR(NC_EUNSPTETYPE)
+    }
+
+    if (combiner == MPI_COMBINER_NAMED) { /* Predefined datatype */
+        *nelems = 1;
+        *ptype = dtype_filter(dtype);
+        if (*ptype == MPI_DATATYPE_NULL)
+            DEBUG_RETURN_ERROR(NC_EUNSPTETYPE)
+        MPI_Type_size(dtype, el_size);
+        *iscontig_of_ptypes = 1;
+        return NC_NOERR;
+    }
+
+    array_of_ints = (int *) NCI_Malloc((size_t)num_ints * SIZEOF_INT);
+    array_of_adds = (MPI_Aint *) NCI_Malloc((size_t)num_adds * SIZEOF_MPI_AINT);
+    array_of_dtypes = (MPI_Datatype *) NCI_Malloc((size_t)num_dtypes * sizeof(MPI_Datatype));
+
+    MPI_Type_get_contents(dtype, num_ints, num_adds, num_dtypes,
+                          array_of_ints, array_of_adds, array_of_dtypes);
+
+    switch (combiner) {
+        /* single etype */
+        case MPI_COMBINER_CONTIGUOUS:
+        case MPI_COMBINER_HVECTOR:
+        case MPI_COMBINER_VECTOR:
+        case MPI_COMBINER_HINDEXED:
+        case MPI_COMBINER_INDEXED:
+#ifdef HAVE_DECL_MPI_COMBINER_DUP
+        case MPI_COMBINER_DUP:
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_HVECTOR_INTEGER
+        case MPI_COMBINER_HVECTOR_INTEGER:
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_INDEXED_BLOCK
+        case MPI_COMBINER_INDEXED_BLOCK:
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_HINDEXED_INTEGER
+        case MPI_COMBINER_HINDEXED_INTEGER:
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_SUBARRAY
+        case MPI_COMBINER_SUBARRAY:
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_DARRAY
+        case MPI_COMBINER_DARRAY:
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_RESIZED
+        case MPI_COMBINER_RESIZED:
+#endif
+            status = ncmpii_dtype_decode(array_of_dtypes[0], ptype, el_size,
+                                         nelems, isderived, iscontig_of_ptypes);
+            if (*isderived) MPI_Type_free(array_of_dtypes);
+            break;
+
+        /* multiple etypes */
+        case MPI_COMBINER_STRUCT:
+#ifdef HAVE_DECL_MPI_COMBINER_STRUCT_INTEGER
+        case MPI_COMBINER_STRUCT_INTEGER:
+#endif
+            count = array_of_ints[0];
+            *el_size = 0;
+            for (i=0; i<count && *el_size==0; i++) {
+                /* need to skip null/marker types */
+                status = ncmpii_dtype_decode(array_of_dtypes[i], ptype,
+                                             el_size, nelems, isderived,
+                                             iscontig_of_ptypes);
+                if (status != NC_NOERR) return status;
+                if (*isderived) MPI_Type_free(array_of_dtypes+i);
+                if (*el_size > 0) *nelems *= array_of_ints[1+i];
+            }
+            for ( ; i<count; i++) {
+                status = ncmpii_dtype_decode(array_of_dtypes[i], &tmpptype,
+                                             &tmpel_size, &tmpnelems,
+                                             isderived, iscontig_of_ptypes);
+                if (status != NC_NOERR) return status;
+                if (*isderived) MPI_Type_free(array_of_dtypes+i);
+                if (tmpel_size > 0) {
+                    if (tmpptype != *ptype)
+                        DEBUG_RETURN_ERROR(NC_EMULTITYPES)
+                    *nelems += tmpnelems*array_of_ints[1+i];
+                }
+            }
+            *iscontig_of_ptypes = 0;
+            break;
+        default: break;
+    }
+    *isderived = 1;
+
+    switch (combiner) {
+        /* single etype */
+        case MPI_COMBINER_CONTIGUOUS:
+            total_blocks = array_of_ints[0];
+            break;
+        case MPI_COMBINER_HVECTOR:
+        case MPI_COMBINER_VECTOR:
+#ifdef HAVE_DECL_MPI_COMBINER_HVECTOR_INTEGER
+        case MPI_COMBINER_HVECTOR_INTEGER:
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_INDEXED_BLOCK
+        case MPI_COMBINER_INDEXED_BLOCK:
+#endif
+            *iscontig_of_ptypes = 0;
+            total_blocks = (MPI_Offset)array_of_ints[0]*array_of_ints[1];
+            break;
+        case MPI_COMBINER_HINDEXED:
+        case MPI_COMBINER_INDEXED:
+#ifdef HAVE_DECL_MPI_COMBINER_HINDEXED_INTEGER
+        case MPI_COMBINER_HINDEXED_INTEGER:
+#endif
+            *iscontig_of_ptypes = 0;
+            for (i=0, total_blocks=0; i<array_of_ints[0]; i++)
+                total_blocks += array_of_ints[1+i];
+            break;
+#ifdef HAVE_DECL_MPI_COMBINER_SUBARRAY
+        case MPI_COMBINER_SUBARRAY:
+            *iscontig_of_ptypes = 0;
+            ndims = array_of_ints[0];
+            for (i=0, total_blocks=1; i<ndims; i++)
+                total_blocks *= array_of_ints[1+ndims+i];
+            break;
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_DARRAY
+        case MPI_COMBINER_DARRAY:
+            *iscontig_of_ptypes = 0;
+            ndims = array_of_ints[2];
+            /* seldom reached, so put it in a separate function */
+            total_blocks = darray_get_totalblks(array_of_ints[1],
+                                                ndims,
+                                                array_of_ints+3,
+                                                array_of_ints+3+ndims,
+                                                array_of_ints+3+2*ndims,
+                                                array_of_ints+3+3*ndims);
+            break;
+#endif
+#ifdef HAVE_DECL_MPI_COMBINER_RESIZED
+        case MPI_COMBINER_RESIZED:
+            *iscontig_of_ptypes = 0;
+            total_blocks = 1;
+            break;
+#endif
+        default: /* DUP etc. */
+            total_blocks = 1;
+            break;
+    }
+    *nelems *= total_blocks;
+
+    NCI_Free(array_of_ints);
+    NCI_Free(array_of_adds);
+    NCI_Free(array_of_dtypes);
+
+    return status;
+}
+
+/*----< ncmpii_buftype_decode() >--------------------------------------------*/
+/* Obtain the following metadata about buftype:
+ * etype:    element data type (MPI primitive type) in buftype
+ * bufcount: If it is -1, then this is called from a high-level API and in
+ *           this case buftype will be an MPI primitive data type.
+ *           If bufcount is not -1, then this is called from a flexible API.
+ * nelems:   number of etypes in user buffer
+ * xnbytes:  number of bytes (in external data representation) to read/write
+ *           from/to the file
+ * esize:    byte size of etype
+ * isContig: whether buftype is contiguous
+ */
+int
+ncmpii_buftype_decode(int               ndims,
+                      nc_type           xtype,
+                      const MPI_Offset *count,
+                      MPI_Offset        bufcount,
+                      MPI_Datatype      buftype,
+                      MPI_Datatype     *etype,    /* out */
+                      int              *esize,    /* out */
+                      MPI_Offset       *nelems,   /* out */
+                      MPI_Offset       *xnbytes,  /* out */
+                      int              *isContig) /* out */
+{
+    int i, xsz, err;
+    MPI_Offset fnelems;
+
+    err = ncmpii_xlen_nc_type(xtype, &xsz);
+    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err);
+
+    /* fnelems is the total number of nc_type elements calculated from
+     * count[]. count[] is the access count to the variable defined in
+     * the netCDF file.
+     */
+    fnelems = 1;
+    for (i=0; i<ndims; i++)
+        fnelems *= count[i];
+
+    if (bufcount == -1) { /* the subroutine is called from a high-level API */
+        *nelems   = fnelems;
+        *etype    = buftype; /* buftype is an MPI primitive data type */
+        MPI_Type_size(buftype, esize);
+        *xnbytes  = *nelems * xsz;
+        *isContig = 1;
+    }
+    else if (buftype == MPI_DATATYPE_NULL) {
+        /* This is called from a flexible API and buftype is set by user to
+         * MPI_DATATYPE_NULL. In this case, bufcount is ignored and set by
+         * this subroutine to a number match count[], and etype to match the
+         * variable's external NC data type.
+         */
+        *nelems   = fnelems;
+        *etype    = ncmpii_nc2mpitype(xtype);
+        *esize    = xsz;
+        *xnbytes  = *nelems * xsz;
+        *isContig = 1;
+    }
+    else { /* This is called from a flexible API */
+        int isderived;
+        /* check some metadata of the MPI derived datatype */
+        err = ncmpii_dtype_decode(buftype, etype, esize, nelems, &isderived,
+                                  isContig);
+        if (err != NC_NOERR) return err;
+
+        /* make nelems the number of etype in the whole user buf */
+        *nelems  *= bufcount;
+        *xnbytes  = *nelems * xsz;
+
+        /* check mismatch between nelems and fnelems */
+        if (fnelems != *nelems) DEBUG_RETURN_ERROR(NC_EIOMISMATCH)
+    }
+    return NC_NOERR;
+}
+
diff --git a/src/drivers/common/error_mpi2nc.c b/src/drivers/common/error_mpi2nc.c
new file mode 100644
index 0000000..37a693f
--- /dev/null
+++ b/src/drivers/common/error_mpi2nc.c
@@ -0,0 +1,95 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: error_mpi2nc.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+
+#include <mpi.h>
+
+#include <pnetcdf.h>
+#include <common.h>
+
+/*----< ncmpii_error_mpi2nc() -----------------------------------------------*/
+/* translate MPI error codes to PnetCDF/netCDF error codes */
+int ncmpii_error_mpi2nc(int   mpi_errorcode, /* returned value from MPI call */
+                        char *err_msg)       /* extra error message */
+{
+    int errorclass, errorStringLen;
+    char errorString[MPI_MAX_ERROR_STRING];
+
+    /* check for specific error codes understood by PnetCDF */
+
+    /* When NC_NOCLOBBER is used in ioflags(cmode) for open to create,
+     * netCDF requires NC_EEXIST returned if the file already exists.
+     * In MPI 2.1, if MPI_File_open uses MPI_MODE_EXCL and the file has
+     * already existed, the error class MPI_ERR_FILE_EXISTS should be returned.
+     * For opening an existing file but the file does not exist, MPI 2.1
+     * will return MPI_ERR_NO_SUCH_FILE
+     * Note for MPI 2.1 and prior, we return MPI_ERR_IO, as these error class
+     * have not been defined.
+     */
+    MPI_Error_class(mpi_errorcode, &errorclass);
+#ifdef HAVE_DECL_MPI_ERR_FILE_EXISTS
+    if (errorclass == MPI_ERR_FILE_EXISTS) return NC_EEXIST;
+#endif
+#ifdef HAVE_DECL_MPI_ERR_NO_SUCH_FILE
+    if (errorclass == MPI_ERR_NO_SUCH_FILE) return NC_ENOENT;
+#endif
+#ifdef HAVE_DECL_MPI_ERR_NOT_SAME
+    /* MPI-IO should return MPI_ERR_NOT_SAME when one or more arguments of a
+     * collective MPI call are different. However, MPI-IO may not report this
+     * error code correctly. For instance, some MPI-IO returns MPI_ERR_AMODE
+     * instead when amode is found inconsistent. MPI_ERR_NOT_SAME can also
+     * report inconsistent file name. */
+    if (errorclass == MPI_ERR_NOT_SAME) return NC_EMULTIDEFINE_FNC_ARGS;
+#endif
+#ifdef HAVE_DECL_MPI_ERR_AMODE
+    /* MPI-IO may or may not report MPI_ERR_AMODE if inconsistent amode is
+     * detected. MPI_ERR_AMODE can also indicate other conflict amode used
+     * on each process. But in PnetCDF, MPI_ERR_AMODE can only be caused by
+     * inconsistent file open/create mode. So, if MPI-IO returns this error
+     * we are sure it is because of the inconsistent mode */
+    if (errorclass == MPI_ERR_AMODE) return NC_EMULTIDEFINE_OMODE;
+#endif
+#ifdef HAVE_DECL_MPI_ERR_READ_ONLY
+    if (errorclass == MPI_ERR_READ_ONLY) return NC_EPERM;
+#endif
+#ifdef HAVE_DECL_MPI_ERR_ACCESS
+    if (errorclass == MPI_ERR_ACCESS) return NC_EACCESS;
+#endif
+#ifdef HAVE_DECL_MPI_ERR_BAD_FILE
+    if (errorclass == MPI_ERR_BAD_FILE) return NC_EBAD_FILE;
+#endif
+#ifdef HAVE_DECL_MPI_ERR_NO_SPACE
+    if (errorclass == MPI_ERR_NO_SPACE) return NC_ENO_SPACE;
+#endif
+#ifdef HAVE_DECL_MPI_ERR_QUOTA
+    if (errorclass == MPI_ERR_QUOTA) return NC_EQUOTA;
+#endif
+
+    /* other errors that currently have no corresponding PnetCDF error codes */
+
+    MPI_Error_string(mpi_errorcode, errorString, &errorStringLen);
+    if (err_msg == NULL) err_msg = "";
+#ifdef PNETCDF_DEBUG
+    /* report the world rank */
+    int rank;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    printf("rank %d: MPI error (%s) : %s\n", rank, err_msg, errorString);
+#else
+    printf("MPI error (%s) : %s\n", err_msg, errorString);
+#endif
+
+    return NC_EFILE; /* other unknown file I/O error */
+}
+
+
diff --git a/src/lib/malloc.c b/src/drivers/common/mem_alloc.c
similarity index 73%
rename from src/lib/malloc.c
rename to src/drivers/common/mem_alloc.c
index c1e1bb4..686dc58 100644
--- a/src/lib/malloc.c
+++ b/src/drivers/common/mem_alloc.c
@@ -2,37 +2,48 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: malloc.c 2721 2016-12-18 06:19:50Z wkliao $ */
+/* $Id: mem_alloc.c 3413 2017-09-24 01:37:28Z wkliao $ */
 
-/* These are routines for allocating and deallocating memory.
-   They should be called as NCI_Malloc(size) and
-   NCI_Free(ptr). In macro.h, they are macro-replaced to
-   NCI_Malloc_fn(size,__LINE__,__FILE__) and
-   NCI_Free_fn(ptr,__LINE__,__FILE__).
+/* These are routines for allocating and deallocating heap memory dynamically.
+   They should be called as
+       NCI_Malloc(size)
+       NCI_Calloc(nelems, esize)
+       NCI_Realloc(ptr, size)
+       NCI_Free(ptr)
+
+   In macro.h, they are macro-replaced to
+       NCI_Malloc_fn(size, __LINE__, __FILE__) and
+       NCI_Calloc_fn(nelems, esize, __LINE__, __FILE__) and
+       NCI_Realloc_fn(ptr, size, __LINE__, __func__, __FILE__)
+       NCI_Free_fn(ptr,__LINE__,__FILE__).
  */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h> /* strcpy(), strlen() */
+#include <assert.h>
 
-#include <mpi.h>
-#include "nc.h"
+#include <pnetcdf.h>
+#include <pnc_debug.h>
+#include <common.h>
 
+/* PNC_MALLOC_TRACE is set at the configure time when --enable-debug is used */
 #ifdef PNC_MALLOC_TRACE
 
 #ifdef HAVE_SEARCH_H
 #include <search.h> /* tfind(), tsearch() and tdelete() */
 #endif
 
-/* global variables for malloc tracing */
-static void       *ncmpii_mem_root;
-static MPI_Offset  ncmpii_mem_alloc;
-static MPI_Offset  ncmpii_max_mem_alloc;
+/* static variables for malloc tracing (initialized to 0s) */
+static void   *ncmpii_mem_root;
+static size_t  ncmpii_mem_alloc;
+static size_t  ncmpii_max_mem_alloc;
 
+#if 0
 /*----< ncmpii_init_malloc_tracing() >----------------------------------------*/
 void ncmpii_init_malloc_tracing(void)
 {
@@ -42,39 +53,6 @@ void ncmpii_init_malloc_tracing(void)
 }
 #endif
 
-/*----< ncmpii_inq_malloc_size() >--------------------------------------------*/
-/* get the current aggregate size allocated by malloc */
-int ncmpii_inq_malloc_size(MPI_Offset *size)
-{
-#ifdef PNC_MALLOC_TRACE
-    *size = ncmpii_mem_alloc;
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-/*----< ncmpii_inq_malloc_max_size() >----------------------------------------*/
-/* get the max watermark ever researched by malloc */
-int ncmpii_inq_malloc_max_size(MPI_Offset *size)
-{
-#ifdef PNC_MALLOC_TRACE
-    *size = ncmpii_max_mem_alloc;
-    return 1;
-#else
-    return 0;
-#endif
-}
-
-#ifdef PNC_MALLOC_TRACE
-
-#ifndef MAX
-#define MAX(a,b) (((a) > (b)) ? (a) : (b))
-#endif
-#ifndef MIN
-#define MIN(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
 typedef struct {
     void   *self;
     void   *buf;
@@ -101,22 +79,7 @@ void walker(const void *node, const VISIT which, const int depth) {
     if (which == preorder || which == leaf)
         printf("Warning: malloc yet to be freed (buf=%p size=%zd filename=%s func=%s line=%d)\n", f->buf, f->size, f->filename, f->func, f->lineno);
 }
-#endif
-
-/* check if there is any malloc residue */
-int ncmpii_inq_malloc_list(void)
-{
-#ifdef PNC_MALLOC_TRACE
-    /* check if malloc tree is empty */
-    if (ncmpii_mem_root != NULL)
-        twalk(ncmpii_mem_root, walker);
-    return 1;
-#else
-    return 0;
-#endif
-}
 
-#ifdef PNC_MALLOC_TRACE
 /*----< ncmpii_add_mem_entry() >----------------------------------------------*/
 /* add a new malloc entry to the table */
 static
@@ -145,11 +108,11 @@ void ncmpii_add_mem_entry(void       *buf,
         printf("Error: tsearch()\n");
         return;
     }
-    ncmpii_mem_alloc += (MPI_Offset)size;
+    ncmpii_mem_alloc += size;
     ncmpii_max_mem_alloc = MAX(ncmpii_max_mem_alloc, ncmpii_mem_alloc);
 }
 
-/*----< ncmpii_del_mem_entry() >----------------------------------------------*/
+/*----< ncmpii_del_mem_entry() >---------------------------------------------*/
 /* delete a malloc entry from the table */
 static
 void ncmpii_del_mem_entry(void *buf)
@@ -161,7 +124,8 @@ void ncmpii_del_mem_entry(void *buf)
         void *ret = tfind(&node, &ncmpii_mem_root, ncmpii_cmp);
         ncmpii_mem_entry **found = (ncmpii_mem_entry**) ret;
         if (ret == NULL) {
-            printf("Error: tfind() buf=%p\n", buf);
+            printf("Error at line %d file %s: tfind() buf=%p\n",
+                   __LINE__,__FILE__,buf);
             return;
         }
         /* free space for func and filename */
@@ -169,11 +133,12 @@ void ncmpii_del_mem_entry(void *buf)
         free((*found)->filename);
 
         /* subtract the space amount to be freed */
-        ncmpii_mem_alloc -= (MPI_Offset)((*found)->size);
+        ncmpii_mem_alloc -= (*found)->size;
         void *tmp = (*found)->self;
         ret = tdelete(&node, &ncmpii_mem_root, ncmpii_cmp);
         if (ret == NULL) {
-            printf("Error: tdelete() buf=%p\n", buf);
+            printf("Error at line %d file %s: tdelete() buf=%p\n",
+                   __LINE__,__FILE__,buf);
             return;
         }
         free(tmp);
@@ -193,12 +158,11 @@ void *NCI_Malloc_fn(size_t      size,
 #endif
     if (size == 0) return NULL;
     void *buf = malloc(size);
-    if (!buf) {
+    if (!buf)
 	fprintf(stderr, "malloc(%zd) failed in file %s func %s line %d\n", size, filename, func, lineno);
 #ifdef PNETCDF_DEBUG
-	MPI_Abort(MPI_COMM_WORLD, 1);
+    assert(buf != NULL);
 #endif
-    }
 #ifdef PNC_MALLOC_TRACE
     ncmpii_add_mem_entry(buf, size, lineno, func, filename);
 #endif
@@ -219,12 +183,11 @@ void *NCI_Calloc_fn(size_t      nelem,
 #endif
     if (nelem == 0 || elsize == 0) return NULL;
     void *buf =calloc(nelem, elsize);
-    if (!buf) {
+    if (!buf)
 	fprintf(stderr, "calloc(%zd, %zd) failed in file %s func %s line %d\n", nelem, elsize, filename, func, lineno);
 #ifdef PNETCDF_DEBUG
-	MPI_Abort(MPI_COMM_WORLD, 1);
+    assert(buf != NULL);
 #endif
-    }
 #ifdef PNC_MALLOC_TRACE
     ncmpii_add_mem_entry(buf, nelem * elsize, lineno, func, filename);
 #endif
@@ -248,12 +211,11 @@ void *NCI_Realloc_fn(void       *ptr,
 #endif
     if (size == 0) return NULL;
     void *buf = (void *) realloc(ptr, size);
-    if (!buf) {
+    if (!buf)
 	fprintf(stderr, "realloc failed in file %s func %s line %d\n", filename, func, lineno);
 #ifdef PNETCDF_DEBUG
-	MPI_Abort(MPI_COMM_WORLD, 1);
+    assert(buf != NULL);
 #endif
-    }
 #ifdef PNC_MALLOC_TRACE
     ncmpii_add_mem_entry(buf, size, lineno, func, filename);
 #endif
@@ -279,3 +241,44 @@ void NCI_Free_fn(void       *ptr,
 }
 
 
+/*----< ncmpi_inq_malloc_size() >--------------------------------------------*/
+/* This is an independent subroutine.
+ * report the current aggregate size allocated by malloc, yet to be freed */
+int ncmpi_inq_malloc_size(MPI_Offset *size)
+{
+#ifdef PNC_MALLOC_TRACE
+    *size = (MPI_Offset)ncmpii_mem_alloc;
+    return NC_NOERR;
+#else
+    DEBUG_RETURN_ERROR(NC_ENOTENABLED)
+#endif
+}
+
+/*----< ncmpi_inq_malloc_max_size() >----------------------------------------*/
+/* This is an independent subroutine.
+ * get the max watermark ever researched by malloc (aggregated amount) */
+int ncmpi_inq_malloc_max_size(MPI_Offset *size)
+{
+#ifdef PNC_MALLOC_TRACE
+    *size = (MPI_Offset)ncmpii_max_mem_alloc;
+    return NC_NOERR;
+#else
+    DEBUG_RETURN_ERROR(NC_ENOTENABLED)
+#endif
+}
+
+/*----< ncmpi_inq_malloc_list() >--------------------------------------------*/
+/* This is an independent subroutine.
+ * walk the malloc tree and print yet-to-be-freed malloc residues */
+int ncmpi_inq_malloc_list(void)
+{
+#ifdef PNC_MALLOC_TRACE
+    /* check if malloc tree is empty */
+    if (ncmpii_mem_root != NULL)
+        twalk(ncmpii_mem_root, walker);
+    return NC_NOERR;
+#else
+    DEBUG_RETURN_ERROR(NC_ENOTENABLED)
+#endif
+}
+
diff --git a/src/lib/ncx.m4 b/src/drivers/common/ncx.m4
similarity index 90%
rename from src/lib/ncx.m4
rename to src/drivers/common/ncx.m4
index 3d1cd75..3c71e35 100644
--- a/src/lib/ncx.m4
+++ b/src/drivers/common/ncx.m4
@@ -9,7 +9,7 @@ dnl
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: ncx.m4 2601 2016-11-07 04:54:42Z wkliao $ */
+/* $Id: ncx.m4 3407 2017-09-22 18:26:27Z wkliao $ */
 
 #ifdef __GNUC__
 #pragma GCC diagnostic ignored "-Wunused-parameter"
@@ -29,10 +29,9 @@ dnl (MPI_Offset vs. size_t), and function name substrings for external data
 dnl types.
 dnl
 
-ifdef(`PNETCDF',`
-`#'if HAVE_CONFIG_H
-`#'include <ncconfig.h>
-`#'endif')
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -40,10 +39,11 @@ ifdef(`PNETCDF',`
 #include <limits.h>
 
 ifdef(`PNETCDF',`
-`#'include "ncx.h"
-`#'include "macro.h"',`
+`#'include <pnetcdf.h>
+`#'include <pnc_debug.h>
+`#'include <ncx.h>',`
 `#'pragma GCC diagnostic ignored "-Wdeprecated"
-`#'include "ncx.h"
+`#'include <ncx.h>
 `#'include "nc3dispatch.h"')
 
 define(`IntType',  `ifdef(`PNETCDF', `MPI_Offset', `size_t')')dnl
@@ -487,6 +487,7 @@ swap8b(void *dst, const void *src)
 inline static void
 swapn8b(void *dst, const void *src, IntType nn)
 {
+#if 0
 #ifdef FLOAT_WORDS_BIGENDIAN
     int i;
     uint64_t *dst_p = (uint64_t*) dst;
@@ -506,11 +507,14 @@ swapn8b(void *dst, const void *src, IntType nn)
     for (i=0; i<nn; i++) {
         /* copy over, make the below swap in-place */
         op[i] = ip[i];
-        op[i] = SWAP8(op[i]);
+        op[i] = SWAP8(op[i]); /* Using gcc/clang -fsanitize=undefined causes:
+                                 runtime error: store to misaligned address
+                                 for type 'uint64_t', which requires 8 byte
+                                 alignment */
     }
 #endif
 
-#if 0
+#else
 	char *op = dst;
 	const char *ip = src;
 
@@ -622,7 +626,12 @@ define(`GETF_CheckBND',
             ifdef(`ERANGE_FILL',`*ip = FillDefaultValue($1);')
             DEBUG_RETURN_ERROR(NC_ERANGE)
         }
-	*ip = ($1)xx;')dnl
+        dnl Below handle special case: (double)LONG_MAX will be > LONG_MAX
+        dnl Otherwise, "outside the range" runtime error appears when compiled
+        dnl with option -fsanitize=undefined
+        ifelse(`$1',`long',`if (xx == (double)LONG_MAX) *ip = LONG_MAX; else')
+        *ip = ($1)xx;
+')dnl
 
 dnl
 dnl For GET APIs boudnary check for when $1 is either 'longlong' or 'ulonglong'
@@ -808,7 +817,7 @@ static void
 get_ix_short(const void *xp, ix_short *ip)
 {
 	const uchar *cp = (const uchar *) xp;
-	*ip = (ix_short)(*cp++ << 8);
+	*ip = (ix_short)(*cp++) << 8;
 #if SIZEOF_IX_SHORT > X_SIZEOF_SHORT
 	if (*ip & 0x8000)
 	{
@@ -823,8 +832,8 @@ static void
 put_ix_short(void *xp, const ix_short *ip)
 {
 	uchar *cp = (uchar *) xp;
-	*cp++ = (uchar)((*ip) >> 8);
-	*cp   = (uchar)((*ip) & 0xff);
+	*cp++ = (uchar)(*ip >> 8);
+	*cp   = (uchar)(*ip & 0xff);
 }
 
 NCX_GET1I(short, schar,     0)
@@ -896,7 +905,7 @@ static void
 get_ix_ushort(const void *xp, ix_ushort *ip)
 {
 	const uchar *cp = (const uchar *) xp;
-	*ip = (ix_ushort)(*cp++ << 8);
+	*ip = (ix_ushort)(*cp++) << 8;
 #if SIZEOF_IX_SHORT > X_SIZEOF_SHORT
 	if (*ip & 0x8000)
 	{
@@ -911,8 +920,8 @@ static void
 put_ix_ushort(void *xp, const ix_ushort *ip)
 {
 	uchar *cp = (uchar *) xp;
-	*cp++ = (uchar)((*ip) >> 8);
-	*cp   = (uchar)((*ip) & 0xff);
+	*cp++ = (uchar)(*ip >> 8);
+	*cp   = (uchar)(*ip & 0xff);
 }
 
 NCX_GET1I(ushort, schar,     0)
@@ -995,7 +1004,7 @@ get_ix_int(const void *xp, ix_int *ip)
 {
 	const uchar *cp = (const uchar *) xp;
 
-	*ip = *cp++ << 24;
+	*ip = (ix_int)(*cp++) << 24;
 #if SIZEOF_IX_INT > X_SIZEOF_INT
 	if (*ip & 0x80000000)
 	{
@@ -1003,9 +1012,9 @@ get_ix_int(const void *xp, ix_int *ip)
 		*ip |= (~(0xffffffff)); /* N.B. Assumes "twos complement" */
 	}
 #endif
-	*ip |= (*cp++ << 16);
-	*ip |= (*cp++ << 8);
-	*ip |= *cp;
+	*ip |= (ix_int)(*cp++) << 16;
+	*ip |= (ix_int)(*cp++) << 8;
+	*ip |= (ix_int)*cp;
 }
 
 static void
@@ -1013,10 +1022,10 @@ put_ix_int(void *xp, const ix_int *ip)
 {
 	uchar *cp = (uchar *) xp;
 
-	*cp++ = (uchar)( (*ip) >> 24);
-	*cp++ = (uchar)(((*ip) & 0x00ff0000) >> 16);
-	*cp++ = (uchar)(((*ip) & 0x0000ff00) >>  8);
-	*cp   = (uchar)( (*ip) & 0x000000ff);
+	*cp++ = (uchar) (*ip               >> 24);
+	*cp++ = (uchar)((*ip & 0x00ff0000) >> 16);
+	*cp++ = (uchar)((*ip & 0x0000ff00) >>  8);
+	*cp   = (uchar) (*ip & 0x000000ff);
 }
 
 #if X_SIZEOF_INT != SIZEOF_INT
@@ -1101,10 +1110,10 @@ get_ix_uint(const void *xp, ix_uint *ip)
 {
 	const uchar *cp = (const uchar *) xp;
 
-	*ip = (ix_uint)(*cp++ << 24);
-	*ip = (ix_uint)(*ip | (ix_uint)(*cp++ << 16));
-	*ip = (ix_uint)(*ip | (ix_uint)(*cp++ << 8));
-	*ip = (ix_uint)(*ip | *cp);
+	*ip  = (ix_uint)(*cp++) << 24;
+	*ip |= (ix_uint)(*cp++) << 16;
+	*ip |= (ix_uint)(*cp++) <<  8;
+	*ip |= (ix_uint)*cp;
 }
 
 static void
@@ -1112,10 +1121,10 @@ put_ix_uint(void *xp, const ix_uint *ip)
 {
 	uchar *cp = (uchar *) xp;
 
-	*cp++ = (uchar)((*ip) >> 24);
-	*cp++ = (uchar)(((*ip) & 0x00ff0000) >> 16);
-	*cp++ = (uchar)(((*ip) & 0x0000ff00) >>  8);
-	*cp   = (uchar)( (*ip) & 0x000000ff);
+	*cp++ = (uchar) (*ip               >> 24);
+	*cp++ = (uchar)((*ip & 0x00ff0000) >> 16);
+	*cp++ = (uchar)((*ip & 0x0000ff00) >>  8);
+	*cp   = (uchar) (*ip & 0x000000ff);
 }
 
 #if X_SIZEOF_UINT != SIZEOF_UINT
@@ -1491,7 +1500,6 @@ define(`PUT_IX_FLOAT_Body',dnl
 static void
 get_ix_float(const void *xp, float *ip)
 {
-
 	if (word_align(xp) == 0)
 	{
 		const ieee_single_hi *isp = (const ieee_single_hi *) xp;
@@ -1524,7 +1532,6 @@ PUT_IX_FLOAT_Body
 static void
 get_ix_float(const void *xp, float *ip)
 {
-
 	ieee_double *idp = (ieee_double *) ip;
 
 	if (word_align(xp) == 0)
@@ -2031,14 +2038,14 @@ get_ix_int64(const void *xp, ix_int64 *ip)
 {
     const uchar *cp = (const uchar *) xp;
 
-    *ip  = ((ix_int64)(*cp++) << 56);
-    *ip |= ((ix_int64)(*cp++) << 48);
-    *ip |= ((ix_int64)(*cp++) << 40);
-    *ip |= ((ix_int64)(*cp++) << 32);
-    *ip |= ((ix_int64)(*cp++) << 24);
-    *ip |= ((ix_int64)(*cp++) << 16);
-    *ip |= ((ix_int64)(*cp++) <<  8);
-    *ip |=  (ix_int64)*cp;
+    *ip  = (ix_int64)(*cp++) << 56;
+    *ip |= (ix_int64)(*cp++) << 48;
+    *ip |= (ix_int64)(*cp++) << 40;
+    *ip |= (ix_int64)(*cp++) << 32;
+    *ip |= (ix_int64)(*cp++) << 24;
+    *ip |= (ix_int64)(*cp++) << 16;
+    *ip |= (ix_int64)(*cp++) <<  8;
+    *ip |= (ix_int64)*cp;
 }
 
 static void
@@ -2046,14 +2053,14 @@ put_ix_int64(void *xp, const ix_int64 *ip)
 {
     uchar *cp = (uchar *) xp;
 
-    *cp++ = (uchar)((*ip) >> 56);
-    *cp++ = (uchar)(((*ip) & 0x00ff000000000000LL) >> 48);
-    *cp++ = (uchar)(((*ip) & 0x0000ff0000000000LL) >> 40);
-    *cp++ = (uchar)(((*ip) & 0x000000ff00000000LL) >> 32);
-    *cp++ = (uchar)(((*ip) & 0x00000000ff000000LL) >> 24);
-    *cp++ = (uchar)(((*ip) & 0x0000000000ff0000LL) >> 16);
-    *cp++ = (uchar)(((*ip) & 0x000000000000ff00LL) >>  8);
-    *cp   = (uchar)( (*ip) & 0x00000000000000ffLL);
+    *cp++ = (uchar) (*ip                         >> 56);
+    *cp++ = (uchar)((*ip & 0x00ff000000000000LL) >> 48);
+    *cp++ = (uchar)((*ip & 0x0000ff0000000000LL) >> 40);
+    *cp++ = (uchar)((*ip & 0x000000ff00000000LL) >> 32);
+    *cp++ = (uchar)((*ip & 0x00000000ff000000LL) >> 24);
+    *cp++ = (uchar)((*ip & 0x0000000000ff0000LL) >> 16);
+    *cp++ = (uchar)((*ip & 0x000000000000ff00LL) >>  8);
+    *cp   = (uchar) (*ip & 0x00000000000000ffLL);
 }
 
 #if X_SIZEOF_INT64 != SIZEOF_LONGLONG
@@ -2109,14 +2116,14 @@ get_ix_uint64(const void *xp, ix_uint64 *ip)
 {
     const uchar *cp = (const uchar *) xp;
 
-    *ip  = ((ix_uint64)(*cp++) << 56);
-    *ip |= ((ix_uint64)(*cp++) << 48);
-    *ip |= ((ix_uint64)(*cp++) << 40);
-    *ip |= ((ix_uint64)(*cp++) << 32);
-    *ip |= ((ix_uint64)(*cp++) << 24);
-    *ip |= ((ix_uint64)(*cp++) << 16);
-    *ip |= ((ix_uint64)(*cp++) <<  8);
-    *ip |=  (ix_uint64)*cp;
+    *ip  = (ix_uint64)(*cp++) << 56;
+    *ip |= (ix_uint64)(*cp++) << 48;
+    *ip |= (ix_uint64)(*cp++) << 40;
+    *ip |= (ix_uint64)(*cp++) << 32;
+    *ip |= (ix_uint64)(*cp++) << 24;
+    *ip |= (ix_uint64)(*cp++) << 16;
+    *ip |= (ix_uint64)(*cp++) <<  8;
+    *ip |= (ix_uint64)*cp;
 }
 
 static void
@@ -2124,14 +2131,14 @@ put_ix_uint64(void *xp, const ix_uint64 *ip)
 {
     uchar *cp = (uchar *) xp;
 
-    *cp++ = (uchar)((*ip) >> 56);
-    *cp++ = (uchar)(((*ip) & 0x00ff000000000000ULL) >> 48);
-    *cp++ = (uchar)(((*ip) & 0x0000ff0000000000ULL) >> 40);
-    *cp++ = (uchar)(((*ip) & 0x000000ff00000000ULL) >> 32);
-    *cp++ = (uchar)(((*ip) & 0x00000000ff000000ULL) >> 24);
-    *cp++ = (uchar)(((*ip) & 0x0000000000ff0000ULL) >> 16);
-    *cp++ = (uchar)(((*ip) & 0x000000000000ff00ULL) >>  8);
-    *cp   = (uchar)( (*ip) & 0x00000000000000ffULL);
+    *cp++ = (uchar) (*ip                          >> 56);
+    *cp++ = (uchar)((*ip & 0x00ff000000000000ULL) >> 48);
+    *cp++ = (uchar)((*ip & 0x0000ff0000000000ULL) >> 40);
+    *cp++ = (uchar)((*ip & 0x000000ff00000000ULL) >> 32);
+    *cp++ = (uchar)((*ip & 0x00000000ff000000ULL) >> 24);
+    *cp++ = (uchar)((*ip & 0x0000000000ff0000ULL) >> 16);
+    *cp++ = (uchar)((*ip & 0x000000000000ff00ULL) >>  8);
+    *cp   = (uchar) (*ip & 0x00000000000000ffULL);
 }
 
 #if X_SIZEOF_UINT64 != SIZEOF_ULONGLONG
@@ -2172,15 +2179,23 @@ NCX_PUT1F(uint64, double)
 
 int
 APIPrefix`x_put_size_t'(void **xpp, const size_t *ulp)
+/* This subroutine is used only in NetCDF, not PnetCDF, and only used for
+ * classic CDF-1 and 2 file formats where external int is 32-bit in files.
+ * The name of this function is misleading, as size_t is an interanl memory
+ * type whose size may be 4 or 8 byte, depending on the systems. The usage
+ * of this function (i.e. in v1hpg.c) is actually to write a 32-bit unsigned
+ * integer from ulp to xpp. Thus, more accurate function is to call
+ * APIPrefix`x_put_uint32'()
+ */
 {
 	/* similar to put_ix_int() */
 	uchar *cp = (uchar *) *xpp;
 	assert(*ulp <= X_SIZE_MAX);
 
-	*cp++ = (uchar)((*ulp) >> 24);
-	*cp++ = (uchar)(((*ulp) & 0x00ff0000) >> 16);
-	*cp++ = (uchar)(((*ulp) & 0x0000ff00) >>  8);
-	*cp   = (uchar)((*ulp) & 0x000000ff);
+	*cp++ = (uchar) (*ulp               >> 24);
+	*cp++ = (uchar)((*ulp & 0x00ff0000) >> 16);
+	*cp++ = (uchar)((*ulp & 0x0000ff00) >>  8);
+	*cp   = (uchar) (*ulp & 0x000000ff);
 
 	*xpp = (void *)((char *)(*xpp) + X_SIZEOF_SIZE_T);
 	return NC_NOERR;
@@ -2188,23 +2203,39 @@ APIPrefix`x_put_size_t'(void **xpp, const size_t *ulp)
 
 int
 APIPrefix`x_get_size_t'(const void **xpp,  size_t *ulp)
+/* This subroutine is used only in NetCDF, not PnetCDF, and only used for
+ * classic CDF-1 and 2 file formats where external int is 32-bit in files.
+ * The name of this function is misleading, as size_t is an interanl memory
+ * type whose size may be 4 or 8 byte, depending on the systems. The usage
+ * of this function (i.e. in v1hpg.c) is actually to read a 32-bit unsigned
+ * integer from xpp to ulp. Thus, more accurate function is to call
+ * APIPrefix`x_get_uint32'()
+ */
 {
-	/* similar to get_ix_int */
-	const uchar *cp = (const uchar *) *xpp;
+    /* similar to get_ix_int */
+    const uchar *cp = (const uchar *) *xpp;
 
-	*ulp  = (size_t)(*cp++ << 24);
-	*ulp |= (size_t)(*cp++ << 16);
-	*ulp |= (size_t)(*cp++ << 8);
-	*ulp |= *cp;
+    /* X_SIZEOF_SIZE_T is always 4 bytes in CDF-1 and 2 files, while size_t
+     * in memory may be 4 or 8 bytes, thus we must read xpp into an unsigned
+     * int (4 bytes) and then type cast it to size_t */
+    uint32_t u32;
+ 
+    u32  = (uint32_t)(*cp++) << 24;
+    u32 |= (uint32_t)(*cp++) << 16;
+    u32 |= (uint32_t)(*cp++) <<  8;
+    u32 |= (uint32_t)*cp;
 
-	*xpp = (const void *)((const char *)(*xpp) + X_SIZEOF_SIZE_T);
-	return NC_NOERR;
+    *ulp = (size_t)u32;
+
+    *xpp = (const void *)((const char *)(*xpp) + X_SIZEOF_SIZE_T);
+    return NC_NOERR;
 }
 
 /* x_off_t */
 
 int
 APIPrefix`x_put_off_t'(void **xpp, const off_t *lp, size_t sizeof_off_t)
+/* This subroutine is used only in NetCDF. not PnetCDF */
 {
 	/* No negative offsets stored in netcdf */
 	if (*lp < 0) {
@@ -2218,10 +2249,10 @@ APIPrefix`x_put_off_t'(void **xpp, const off_t *lp, size_t sizeof_off_t)
 	uchar *cp = (uchar *) *xpp;
 
 	if (sizeof_off_t == 4) {
-		*cp++ = (uchar) ((*lp)               >> 24);
-		*cp++ = (uchar)(((*lp) & 0x00ff0000) >> 16);
-		*cp++ = (uchar)(((*lp) & 0x0000ff00) >>  8);
-		*cp   = (uchar)( (*lp) & 0x000000ff);
+		*cp++ = (uchar) (*lp               >> 24);
+		*cp++ = (uchar)((*lp & 0x00ff0000) >> 16);
+		*cp++ = (uchar)((*lp & 0x0000ff00) >>  8);
+		*cp   = (uchar) (*lp & 0x000000ff);
 	} else {
 #if SIZEOF_OFF_T == 4
 /* Write a 64-bit offset on a system with only a 32-bit offset */
@@ -2230,19 +2261,19 @@ APIPrefix`x_put_off_t'(void **xpp, const off_t *lp, size_t sizeof_off_t)
 		*cp++ = (uchar)0;
 		*cp++ = (uchar)0;
 
-		*cp++ = (uchar)(((*lp) & 0xff000000) >> 24);
-		*cp++ = (uchar)(((*lp) & 0x00ff0000) >> 16);
-		*cp++ = (uchar)(((*lp) & 0x0000ff00) >>  8);
-		*cp   = (uchar)( (*lp) & 0x000000ff);
+		*cp++ = (uchar)((*lp & 0xff000000) >> 24);
+		*cp++ = (uchar)((*lp & 0x00ff0000) >> 16);
+		*cp++ = (uchar)((*lp & 0x0000ff00) >>  8);
+		*cp   = (uchar) (*lp & 0x000000ff);
 #else
-		*cp++ = (uchar) ((*lp)                          >> 56);
-		*cp++ = (uchar)(((*lp) & 0x00ff000000000000LL) >> 48);
-		*cp++ = (uchar)(((*lp) & 0x0000ff0000000000LL) >> 40);
-		*cp++ = (uchar)(((*lp) & 0x000000ff00000000LL) >> 32);
-		*cp++ = (uchar)(((*lp) & 0x00000000ff000000LL) >> 24);
-		*cp++ = (uchar)(((*lp) & 0x0000000000ff0000LL) >> 16);
-		*cp++ = (uchar)(((*lp) & 0x000000000000ff00LL) >>  8);
-		*cp   = (uchar)( (*lp) & 0x00000000000000ffLL);
+		*cp++ = (uchar) (*lp                         >> 56);
+		*cp++ = (uchar)((*lp & 0x00ff000000000000LL) >> 48);
+		*cp++ = (uchar)((*lp & 0x0000ff0000000000LL) >> 40);
+		*cp++ = (uchar)((*lp & 0x000000ff00000000LL) >> 32);
+		*cp++ = (uchar)((*lp & 0x00000000ff000000LL) >> 24);
+		*cp++ = (uchar)((*lp & 0x0000000000ff0000LL) >> 16);
+		*cp++ = (uchar)((*lp & 0x000000000000ff00LL) >>  8);
+		*cp   = (uchar) (*lp & 0x00000000000000ffLL);
 #endif
 	}
 	*xpp = (void *)((char *)(*xpp) + sizeof_off_t);
@@ -2251,24 +2282,25 @@ APIPrefix`x_put_off_t'(void **xpp, const off_t *lp, size_t sizeof_off_t)
 
 int
 APIPrefix`x_get_off_t'(const void **xpp, off_t *lp, size_t sizeof_off_t)
+/* This subroutine is used only in NetCDF. not PnetCDF */
 {
 	/* similar to get_ix_int() */
 	const uchar *cp = (const uchar *) *xpp;
 	assert(sizeof_off_t == 4 || sizeof_off_t == 8);
 
  	if (sizeof_off_t == 4) {
-		*lp =  (off_t)(*cp++ << 24);
-		*lp |= (off_t)(*cp++ << 16);
-		*lp |= (off_t)(*cp++ <<  8);
+		*lp =  (off_t)(*cp++) << 24;
+		*lp |= (off_t)(*cp++) << 16;
+		*lp |= (off_t)(*cp++ )<<  8;
 		*lp |= (off_t)*cp;
 	} else {
 #if SIZEOF_OFF_T == 4
 /* Read a 64-bit offset on a system with only a 32-bit offset */
 /* If the offset overflows, set an error code and return */
-		*lp =  ((off_t)(*cp++) << 24);
-		*lp |= ((off_t)(*cp++) << 16);
-		*lp |= ((off_t)(*cp++) <<  8);
-		*lp |= ((off_t)(*cp++));
+		*lp =  (off_t)(*cp++) << 24;
+		*lp |= (off_t)(*cp++) << 16;
+		*lp |= (off_t)(*cp++) <<  8;
+		*lp |= (off_t)(*cp++);
 /*
  * lp now contains the upper 32-bits of the 64-bit offset.  if lp is
  * not zero, then the dataset is larger than can be represented
@@ -2278,10 +2310,10 @@ APIPrefix`x_get_off_t'(const void **xpp, off_t *lp, size_t sizeof_off_t)
 		  DEBUG_RETURN_ERROR(NC_ERANGE)
 		}
 
-		*lp  = ((off_t)(*cp++) << 24);
-		*lp |= ((off_t)(*cp++) << 16);
-		*lp |= ((off_t)(*cp++) <<  8);
-		*lp |=  (off_t)*cp;
+		*lp  = (off_t)(*cp++) << 24;
+		*lp |= (off_t)(*cp++) << 16;
+		*lp |= (off_t)(*cp++) <<  8;
+		*lp |= (off_t)*cp;
 
 		if (*lp < 0) {
 		  /*
@@ -2292,14 +2324,14 @@ APIPrefix`x_get_off_t'(const void **xpp, off_t *lp, size_t sizeof_off_t)
 		  DEBUG_RETURN_ERROR(NC_ERANGE)
 		}
 #else
-		*lp =  ((off_t)(*cp++) << 56);
-		*lp |= ((off_t)(*cp++) << 48);
-		*lp |= ((off_t)(*cp++) << 40);
-		*lp |= ((off_t)(*cp++) << 32);
-		*lp |= ((off_t)(*cp++) << 24);
-		*lp |= ((off_t)(*cp++) << 16);
-		*lp |= ((off_t)(*cp++) <<  8);
-		*lp |=  (off_t)*cp;
+		*lp =  (off_t)(*cp++) << 56;
+		*lp |= (off_t)(*cp++) << 48;
+		*lp |= (off_t)(*cp++) << 40;
+		*lp |= (off_t)(*cp++) << 32;
+		*lp |= (off_t)(*cp++) << 24;
+		*lp |= (off_t)(*cp++) << 16;
+		*lp |= (off_t)(*cp++) <<  8;
+		*lp |= (off_t)*cp;
 #endif
 	}
 	*xpp = (const void *)((const char *)(*xpp) + sizeof_off_t);
@@ -2313,14 +2345,14 @@ APIPrefix`x_get_uint32'(const void **xpp, uint *ip)
 #ifdef WORDS_BIGENDIAN
     /* use memcpy instead of assignment to avoid BUS_ADRALN alignment error on
      * some system, such as HPUX */
-    (void) memcpy(ip, *xpp, SIZEOF_UINT);
+    (void) memcpy(ip, *xpp, 4);
 #else
     const uchar *cp = (const uchar *) *xpp;
 
-    *ip = (uint)(*cp++ << 24);
-    *ip = (uint)(*ip | (uint)(*cp++ << 16));
-    *ip = (uint)(*ip | (uint)(*cp++ <<  8));
-    *ip = (uint)(*ip | *cp);
+    *ip  = (uint)(*cp++) << 24;
+    *ip |= (uint)(*cp++) << 16;
+    *ip |= (uint)(*cp++) <<  8;
+    *ip |= (uint)(*cp);
 #endif
     /* advance *xpp 4 bytes */
     *xpp = (void *)((const char *)(*xpp) + 4);
@@ -2328,6 +2360,23 @@ APIPrefix`x_get_uint32'(const void **xpp, uint *ip)
     return NC_NOERR;
 }
 
+/*----< APIPrefix`x_getn_uint32'() >-----------------------------------------*/
+int
+APIPrefix`x_getn_uint32'(const void **xpp, uint *ip, int nelems)
+{
+#ifdef WORDS_BIGENDIAN
+    /* use memcpy instead of assignment to avoid BUS_ADRALN alignment error on
+     * some system, such as HPUX */
+    (void) memcpy(ip, *xpp, (size_t)4 * nelems);
+#else
+    swapn4b(ip, *xpp, nelems);
+#endif
+    /* advance 4*nelems bytes for *xpp */
+    *xpp = (void *)((const char *)(*xpp) + 4 * nelems);
+
+    return NC_NOERR;
+}
+
 /*----< APIPrefix`x_get_uint64'() >------------------------------------------*/
 int
 APIPrefix`x_get_uint64'(const void **xpp, unsigned long long *ullp)
@@ -2335,19 +2384,19 @@ APIPrefix`x_get_uint64'(const void **xpp, unsigned long long *ullp)
 #ifdef WORDS_BIGENDIAN
     /* use memcpy instead of assignment to avoid BUS_ADRALN alignment error on
      * some system, such as HPUX */
-    (void) memcpy(ullp, *xpp, SIZEOF_UINT64);
+    (void) memcpy(ullp, *xpp, 8);
 #else
     const uchar *cp = (const uchar *) *xpp;
 
     /* below is the same as calling swap8b(ullp, *xpp) */
-    *ullp = (unsigned long long)(*cp++) << 56;
-    *ullp = (unsigned long long)(*ullp | (unsigned long long)(*cp++) << 48);
-    *ullp = (unsigned long long)(*ullp | (unsigned long long)(*cp++) << 40);
-    *ullp = (unsigned long long)(*ullp | (unsigned long long)(*cp++) << 32);
-    *ullp = (unsigned long long)(*ullp | (unsigned long long)(*cp++) << 24);
-    *ullp = (unsigned long long)(*ullp | (unsigned long long)(*cp++) << 16);
-    *ullp = (unsigned long long)(*ullp | (unsigned long long)(*cp++) <<  8);
-    *ullp = (unsigned long long)(*ullp | (unsigned long long)(*cp));
+    *ullp  = (unsigned long long)(*cp++) << 56;
+    *ullp |= (unsigned long long)(*cp++) << 48;
+    *ullp |= (unsigned long long)(*cp++) << 40;
+    *ullp |= (unsigned long long)(*cp++) << 32;
+    *ullp |= (unsigned long long)(*cp++) << 24;
+    *ullp |= (unsigned long long)(*cp++) << 16;
+    *ullp |= (unsigned long long)(*cp++) <<  8;
+    *ullp |= (unsigned long long)(*cp);
 #endif
     /* advance *xpp 8 bytes */
     *xpp = (void *)((const char *)(*xpp) + 8);
@@ -2355,6 +2404,23 @@ APIPrefix`x_get_uint64'(const void **xpp, unsigned long long *ullp)
     return NC_NOERR;
 }
 
+/*----< APIPrefix`x_getn_uint64'() >-----------------------------------------*/
+int
+APIPrefix`x_getn_uint64'(const void **xpp, unsigned long long *ullp, int nelems)
+{
+#ifdef WORDS_BIGENDIAN
+    /* use memcpy instead of assignment to avoid BUS_ADRALN alignment error on
+     * some system, such as HPUX */
+    (void) memcpy(ullp, *xpp, (size_t)8 * nelems);
+#else
+    swapn8b(ullp, *xpp, nelems);
+#endif
+    /* advance 8*nelems bytes for *xpp */
+    *xpp = (void *)((const char *)(*xpp) + 8 * nelems);
+
+    return NC_NOERR;
+}
+
 /*---< APIPrefix`x_put_uint32'() >-------------------------------------------*/
 /* copy the contents of ip (an unsigned 32-bit integer) to xpp in Big Endian
  * form and advance *xpp 4 bytes
@@ -2372,7 +2438,7 @@ APIPrefix`x_put_uint32'(void **xpp, const unsigned int ip)
     *cp++ = (uchar)((ip & 0xff000000) >> 24);
     *cp++ = (uchar)((ip & 0x00ff0000) >> 16);
     *cp++ = (uchar)((ip & 0x0000ff00) >>  8);
-    *cp   = (uchar)( ip & 0x000000ff);
+    *cp   = (uchar) (ip & 0x000000ff);
 #endif
     /* advance *xpp 4 bytes */
     *xpp  = (void *)((char *)(*xpp) + 4);
@@ -2380,6 +2446,26 @@ APIPrefix`x_put_uint32'(void **xpp, const unsigned int ip)
     return NC_NOERR;
 }
 
+/*---< APIPrefix`x_putn_uint32'() >------------------------------------------*/
+/* copy the contents of ip (nelems unsigned 32-bit integers) to xpp in Big
+ * Endian form and advance (4*nelems) bytes for pointer *xpp
+ */
+int
+APIPrefix`x_putn_uint32'(void **xpp, const unsigned int *ip, int nelems)
+{
+#ifdef WORDS_BIGENDIAN
+    /* use memcpy instead of assignment to avoid BUS_ADRALN alignment error on
+     * some system, such as HPUX */
+    (void) memcpy(*xpp, ip, (size_t)4 * nelems);
+#else
+    swapn4b(*xpp, ip, nelems);
+#endif
+    /* advance 4*nelems bytes for *xpp */
+    *xpp  = (void *)((char *)(*xpp) + 4*nelems);
+
+    return NC_NOERR;
+}
+
 /*---< APIPrefix`x_put_uint64'() >-------------------------------------------*/
 /* copy the contents of ip (an unsigned 64-bit integer) to xpp in Big Endian
  * form and advance *xpp 8 bytes
@@ -2409,6 +2495,26 @@ APIPrefix`x_put_uint64'(void **xpp, const unsigned long long ip)
     return NC_NOERR;
 }
 
+/*---< APIPrefix`x_putn_uint64'() >------------------------------------------*/
+/* copy the contents of ip (nelems unsigned 64-bit integers) to xpp in Big
+ * Endian form and advance 8*nelems bytes for pointer *xpp
+ */
+int
+APIPrefix`x_putn_uint64'(void **xpp, const unsigned long long *ip, int nelems)
+{
+#ifdef WORDS_BIGENDIAN
+    /* use memcpy instead of assignment to avoid BUS_ADRALN alignment error on
+     * some system, such as HPUX */
+    (void) memcpy(*xpp, ip, (size_t)8 * nelems);
+#else
+    swapn8b(*xpp, ip, nelems);
+#endif
+    /* advance 8*nelems bytes for *xpp */
+    *xpp  = (void *)((char *)(*xpp) + 8*nelems);
+
+    return NC_NOERR;
+}
+
 
 /*
  * Aggregate numeric conversion functions.
diff --git a/src/drivers/common/pack_unpack.c b/src/drivers/common/pack_unpack.c
new file mode 100644
index 0000000..24951f6
--- /dev/null
+++ b/src/drivers/common/pack_unpack.c
@@ -0,0 +1,127 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: pack_unpack.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpi.h>
+
+#include <pnetcdf.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/*----< ncmpii_pack() >------------------------------------------------------*/
+/* This subroutine packs buf, if it is noncontiguous, into a contiguous
+ * buffer, cbuf. Whether buf is contiguous or not depends on buftype and imap.
+ * If both buftype and imap indicate a contiguous buffer, then cbuf will be
+ * set to buf. Otherwise, cbuf will be malloc-ed and it needs to be freed
+ * later.
+ * buftype is decoded to find the element type, ptype, used to create the type.
+ * bnelems is calculated base don bufcount and buftype.
+ */
+int
+ncmpii_pack(int                ndims,
+            const MPI_Offset  *count,
+            const MPI_Offset  *imap,     /* can be NULL */
+            void              *buf,      /* user buffer */
+            MPI_Offset         bufcount, /* -1: from high-level API */
+            MPI_Datatype       buftype,  /* MPI derived datatype */
+            MPI_Offset        *bnelems,  /* OUT: no. of ptypes in buf */
+            MPI_Datatype      *ptype,    /* OUT: MPI primitive datatype */
+            void             **cbuf)     /* OUT: a contiguous buffer */
+{
+    void *lbuf=NULL;
+    int i, err=NC_NOERR, position, type_size;
+    MPI_Offset buf_size, nelems;
+    MPI_Datatype etype, imaptype=MPI_DATATYPE_NULL;
+
+    *cbuf = buf;
+
+    MPI_Type_size(buftype, &type_size);
+    buf_size = type_size;
+
+    for (nelems=1, i=0; i<ndims; i++) nelems *= count[i];
+
+    lbuf  = buf;
+    if (bufcount == -1) { /* called from a high-level API */
+        buf_size *= nelems;
+        etype     = buftype;
+
+        if (bnelems != NULL) *bnelems = nelems;
+        if (ptype   != NULL) *ptype   = buftype;
+
+        if (buf_size != (int)buf_size) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+        if (buf_size == 0) /* zero-length request */
+            return NC_NOERR;
+    
+        if (imap == NULL) /* not called from a true varm API */
+            return NC_NOERR;
+    }
+    else { /* called from a flexible API */
+        int el_size, isDerived, isContig;
+        MPI_Offset num_ptypes=0;
+
+        buf_size *= bufcount;
+
+        if (buf_size != (int)buf_size) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+        if (buf_size == 0) { /* zero-length request */
+            if (bnelems != NULL) *bnelems = 0;
+            if (ptype   != NULL) *ptype   = MPI_BYTE;
+            return NC_NOERR;
+        }
+    
+        /* check if buftype is an MPI predefined primitive datatype */
+        err = ncmpii_dtype_decode(buftype, &etype, &el_size, &num_ptypes,
+                                  &isDerived, &isContig);
+        if (err != NC_NOERR) return err;
+
+        num_ptypes *= bufcount;
+
+        if (bnelems != NULL) *bnelems = num_ptypes;
+        if (ptype   != NULL) *ptype   = etype;
+
+        /* check if number of elements of bufcount/buftype matches count[] */
+        if (num_ptypes != nelems)
+            DEBUG_RETURN_ERROR(NC_EIOMISMATCH)
+
+        if (isDerived) { /* Not a predefined datatype */
+            /* allocate lbuf and pack buf into lbuf */
+            lbuf = NCI_Malloc((size_t)buf_size);
+            if (lbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+            position = 0;
+            MPI_Pack(buf, (int)bufcount, buftype, lbuf, (int)buf_size,
+                     &position, MPI_COMM_SELF);
+        }
+    }
+
+    /* Construct a derived datatype, imaptype, if this is a true varm call */
+    err = ncmpii_create_imaptype(ndims, count, imap, etype, &imaptype);
+    if (err != NC_NOERR) return err;
+
+    /* Step 2: pack lbuf to cbuf if imap is non-contiguous */
+    if (imaptype != MPI_DATATYPE_NULL) { /* true varm */
+        /* pack lbuf to cbuf, a contiguous buffer, using imaptype */
+        *cbuf = NCI_Malloc((size_t)buf_size);
+        position = 0;
+        MPI_Pack(lbuf, 1, imaptype, *cbuf, (int)buf_size, &position,
+                 MPI_COMM_SELF);
+        MPI_Type_free(&imaptype);
+    }
+    else /* reuse lbuf */
+        *cbuf = lbuf;
+
+    /* lbuf is no longer needed */
+    if (lbuf != buf && lbuf != *cbuf) NCI_Free(lbuf);
+
+    return NC_NOERR;
+}
+
diff --git a/src/drivers/common/utf8proc.c b/src/drivers/common/utf8proc.c
new file mode 100644
index 0000000..5ac40d2
--- /dev/null
+++ b/src/drivers/common/utf8proc.c
@@ -0,0 +1,874 @@
+/*
+ *  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: utf8proc.c 3440 2017-10-15 18:46:02Z wkliao $ */
+
+#include <pnetcdf.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+#include "utf8proc.h"
+
+#define UTF8PROC_DLLEXPORT static
+
+static utf8proc_ssize_t utf8proc_map(const utf8proc_uint8_t *str,
+       utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr,
+       utf8proc_option_t options);
+static utf8proc_ssize_t utf8proc_iterate(const utf8proc_uint8_t *str,
+       utf8proc_ssize_t strlen, utf8proc_int32_t *dst);
+static utf8proc_ssize_t utf8proc_decompose_char(utf8proc_int32_t uc,
+       utf8proc_int32_t *dst, utf8proc_ssize_t bufsize,
+       utf8proc_option_t options, int *last_boundclass);
+static utf8proc_ssize_t utf8proc_decompose_custom(const utf8proc_uint8_t *str,
+       utf8proc_ssize_t strlen, utf8proc_int32_t *buffer,
+       utf8proc_ssize_t bufsize, utf8proc_option_t options,
+       utf8proc_custom_func custom_func, void *custom_data);
+static utf8proc_ssize_t utf8proc_map_custom(const utf8proc_uint8_t *str,
+       utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr,
+       utf8proc_option_t options, utf8proc_custom_func custom_func,
+       void *custom_data);
+
+/*
+ * Returns a pointer to newly allocated memory of a
+ * normalized version of the null-terminated string 'str'.
+ * Normalized string is returned in normalp argument;
+ * caller must free.
+ * Return codes:
+ * NC_NOERR -- success
+ * NC_ENOMEM -- out of memory
+ * NC_EINVAL -- illegal argument or internal error
+ * NC_EBADNAME -- other failure
+ */
+int
+ncmpii_utf8_normalize(const char *str, char **normalp)
+{
+    utf8proc_uint8_t *retval = NULL;
+    utf8proc_ssize_t  count;
+
+    count = utf8proc_map((utf8proc_uint8_t*)str, 0, &retval,
+            UTF8PROC_NULLTERM | UTF8PROC_STABLE | UTF8PROC_COMPOSE);
+    if (count < 0) {/* error */
+        switch (count) {
+            case UTF8PROC_ERROR_NOMEM:
+            case UTF8PROC_ERROR_OVERFLOW:    DEBUG_RETURN_ERROR(NC_ENOMEM)
+            case UTF8PROC_ERROR_INVALIDOPTS: DEBUG_RETURN_ERROR(NC_EINVAL)
+            case UTF8PROC_ERROR_INVALIDUTF8:
+            case UTF8PROC_ERROR_NOTASSIGNED:
+            default:                         DEBUG_RETURN_ERROR(NC_EBADNAME)
+        }
+    }
+
+    /* retval is mallocated in utf8proc_map() */
+    *normalp = (char*)retval;
+
+    return NC_NOERR;
+}
+
+/*
+ * Check validity of a UTF8 encoded null-terminated byte string.
+ * Return codes:
+ * NC_NOERR -- string is valid utf8
+ * NC_ENOMEM -- out of memory
+ * NC_EINVAL -- invalid argument or internal error
+ * NC_EBADNAME-- not valid utf8
+ */
+int
+ncmpii_utf8_validate(const char* name)
+{
+    const utf8proc_uint8_t *str;
+    utf8proc_ssize_t nchars = -1;
+    utf8proc_int32_t codepoint;
+    utf8proc_ssize_t count;
+
+    str = (const utf8proc_uint8_t*)name;
+    while(*str) {
+        count = utf8proc_iterate(str, nchars, &codepoint);
+        if (count < 0) {
+            switch (count) {
+                case UTF8PROC_ERROR_NOMEM:
+                case UTF8PROC_ERROR_OVERFLOW:    DEBUG_RETURN_ERROR(NC_ENOMEM)
+                case UTF8PROC_ERROR_INVALIDOPTS: DEBUG_RETURN_ERROR(NC_EINVAL)
+                case UTF8PROC_ERROR_INVALIDUTF8:
+                case UTF8PROC_ERROR_NOTASSIGNED:
+                default:                         DEBUG_RETURN_ERROR(NC_EBADNAME)
+            }
+        }
+        /* move to next char */
+        str += count;
+    }
+    return NC_NOERR;
+}
+
+/* -*- mode: c; c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil -*- */
+/*
+ *  Copyright (c) 2015 Steven G. Johnson, Jiahao Chen, Peter Colberg, Tony Kelman, Scott P. Jones, and other contributors.
+ *  Copyright (c) 2009 Public Software Group e. V., Berlin, Germany
+ *
+ *  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.
+ */
+
+/*
+ *  This library contains derived data from a modified version of the
+ *  Unicode data files.
+ *
+ *  The original data files are available at
+ *  http://www.unicode.org/Public/UNIDATA/
+ *
+ *  Please notice the copyright statement in the file "utf8proc_data.c".
+ */
+
+
+/*
+ *  File name:    utf8proc.c
+ *
+ *  Description:
+ *  Implementation of libutf8proc.
+ */
+
+
+#include "utf8proc_data.h"
+
+
+#ifndef _PNETCDF_H
+UTF8PROC_DLLEXPORT const utf8proc_int8_t utf8proc_utf8class[256] = {
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+  4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0 };
+#endif
+
+#define UTF8PROC_HANGUL_SBASE 0xAC00
+#define UTF8PROC_HANGUL_LBASE 0x1100
+#define UTF8PROC_HANGUL_VBASE 0x1161
+#define UTF8PROC_HANGUL_TBASE 0x11A7
+#define UTF8PROC_HANGUL_LCOUNT 19
+#define UTF8PROC_HANGUL_VCOUNT 21
+#define UTF8PROC_HANGUL_TCOUNT 28
+#define UTF8PROC_HANGUL_NCOUNT 588
+#define UTF8PROC_HANGUL_SCOUNT 11172
+/* END is exclusive */
+#define UTF8PROC_HANGUL_L_START  0x1100
+#define UTF8PROC_HANGUL_L_END    0x115A
+#define UTF8PROC_HANGUL_L_FILLER 0x115F
+#define UTF8PROC_HANGUL_V_START  0x1160
+#define UTF8PROC_HANGUL_V_END    0x11A3
+#define UTF8PROC_HANGUL_T_START  0x11A8
+#define UTF8PROC_HANGUL_T_END    0x11FA
+#define UTF8PROC_HANGUL_S_START  0xAC00
+#define UTF8PROC_HANGUL_S_END    0xD7A4
+
+/* Should follow semantic-versioning rules (semver.org) based on API
+   compatibility.  (Note that the shared-library version number will
+   be different, being based on ABI compatibility.): */
+#define STRINGIZEx(x) #x
+#define STRINGIZE(x) STRINGIZEx(x)
+#ifndef _PNETCDF_H
+UTF8PROC_DLLEXPORT const char *utf8proc_version(void) {
+  return STRINGIZE(UTF8PROC_VERSION_MAJOR) "." STRINGIZE(UTF8PROC_VERSION_MINOR) "." STRINGIZE(UTF8PROC_VERSION_PATCH) "";
+}
+
+UTF8PROC_DLLEXPORT const char *utf8proc_errmsg(utf8proc_ssize_t errcode) {
+  switch (errcode) {
+    case UTF8PROC_ERROR_NOMEM:
+    return "Memory for processing UTF-8 data could not be allocated.";
+    case UTF8PROC_ERROR_OVERFLOW:
+    return "UTF-8 string is too long to be processed.";
+    case UTF8PROC_ERROR_INVALIDUTF8:
+    return "Invalid UTF-8 string";
+    case UTF8PROC_ERROR_NOTASSIGNED:
+    return "Unassigned Unicode code point found in UTF-8 string.";
+    case UTF8PROC_ERROR_INVALIDOPTS:
+    return "Invalid options for UTF-8 processing chosen.";
+    default:
+    return "An unknown error occurred while processing UTF-8 data.";
+  }
+}
+#endif
+
+#define utf_cont(ch)  (((ch) & 0xc0) == 0x80)
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_iterate(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *dst
+) {
+  utf8proc_uint32_t uc;
+  const utf8proc_uint8_t *end;
+
+  *dst = -1;
+  if (!strlen) return 0;
+  end = str + ((strlen < 0) ? 4 : strlen);
+  uc = *str++;
+  if (uc < 0x80) {
+    *dst = uc;
+    return 1;
+  }
+  // Must be between 0xc2 and 0xf4 inclusive to be valid
+  if ((uc - 0xc2) > (0xf4-0xc2)) return UTF8PROC_ERROR_INVALIDUTF8;
+  if (uc < 0xe0) {         // 2-byte sequence
+     // Must have valid continuation character
+     if (str >= end || !utf_cont(*str)) return UTF8PROC_ERROR_INVALIDUTF8;
+     *dst = ((uc & 0x1f)<<6) | (*str & 0x3f);
+     return 2;
+  }
+  if (uc < 0xf0) {        // 3-byte sequence
+     if ((str + 1 >= end) || !utf_cont(*str) || !utf_cont(str[1]))
+        return UTF8PROC_ERROR_INVALIDUTF8;
+     // Check for surrogate chars
+     if (uc == 0xed && *str > 0x9f)
+         return UTF8PROC_ERROR_INVALIDUTF8;
+     uc = ((uc & 0xf)<<12) | ((*str & 0x3f)<<6) | (str[1] & 0x3f);
+     if (uc < 0x800)
+         return UTF8PROC_ERROR_INVALIDUTF8;
+     *dst = uc;
+     return 3;
+  }
+  // 4-byte sequence
+  // Must have 3 valid continuation characters
+  if ((str + 2 >= end) || !utf_cont(*str) || !utf_cont(str[1]) || !utf_cont(str[2]))
+     return UTF8PROC_ERROR_INVALIDUTF8;
+  // Make sure in correct range (0x10000 - 0x10ffff)
+  if (uc == 0xf0) {
+    if (*str < 0x90) return UTF8PROC_ERROR_INVALIDUTF8;
+  } else if (uc == 0xf4) {
+    if (*str > 0x8f) return UTF8PROC_ERROR_INVALIDUTF8;
+  }
+  *dst = ((uc & 7)<<18) | ((*str & 0x3f)<<12) | ((str[1] & 0x3f)<<6) | (str[2] & 0x3f);
+  return 4;
+}
+
+#ifndef _PNETCDF_H
+UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_codepoint_valid(utf8proc_int32_t uc) {
+    return (((utf8proc_uint32_t)uc)-0xd800 > 0x07ff) && ((utf8proc_uint32_t)uc < 0x110000);
+}
+#endif
+
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_encode_char(utf8proc_int32_t uc, utf8proc_uint8_t *dst) {
+  if (uc < 0x00) {
+    return 0;
+  } else if (uc < 0x80) {
+    dst[0] = (utf8proc_uint8_t) uc;
+    return 1;
+  } else if (uc < 0x800) {
+    dst[0] = (utf8proc_uint8_t)(0xC0 + (uc >> 6));
+    dst[1] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));
+    return 2;
+  // Note: we allow encoding 0xd800-0xdfff here, so as not to change
+  // the API, however, these are actually invalid in UTF-8
+  } else if (uc < 0x10000) {
+    dst[0] = (utf8proc_uint8_t)(0xE0 + (uc >> 12));
+    dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F));
+    dst[2] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));
+    return 3;
+  } else if (uc < 0x110000) {
+    dst[0] = (utf8proc_uint8_t)(0xF0 + (uc >> 18));
+    dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 12) & 0x3F));
+    dst[2] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F));
+    dst[3] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));
+    return 4;
+  } else return 0;
+}
+
+/* internal "unsafe" version that does not check whether uc is in range */
+static utf8proc_ssize_t unsafe_encode_char(utf8proc_int32_t uc, utf8proc_uint8_t *dst) {
+   if (uc < 0x00) {
+      return 0;
+   } else if (uc < 0x80) {
+      dst[0] = (utf8proc_uint8_t)uc;
+      return 1;
+   } else if (uc < 0x800) {
+      dst[0] = (utf8proc_uint8_t)(0xC0 + (uc >> 6));
+      dst[1] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));
+      return 2;
+   } else if (uc == 0xFFFF) {
+       dst[0] = (utf8proc_uint8_t)0xFF;
+       return 1;
+   } else if (uc == 0xFFFE) {
+       dst[0] = (utf8proc_uint8_t)0xFE;
+       return 1;
+   } else if (uc < 0x10000) {
+      dst[0] = (utf8proc_uint8_t)(0xE0 + (uc >> 12));
+      dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F));
+      dst[2] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));
+      return 3;
+   } else if (uc < 0x110000) {
+      dst[0] = (utf8proc_uint8_t)(0xF0 + (uc >> 18));
+      dst[1] = (utf8proc_uint8_t)(0x80 + ((uc >> 12) & 0x3F));
+      dst[2] = (utf8proc_uint8_t)(0x80 + ((uc >> 6) & 0x3F));
+      dst[3] = (utf8proc_uint8_t)(0x80 + (uc & 0x3F));
+      return 4;
+   } else return 0;
+}
+
+/* internal "unsafe" version that does not check whether uc is in range */
+static const utf8proc_property_t *unsafe_get_property(utf8proc_int32_t uc) {
+  /* ASSERT: uc >= 0 && uc < 0x110000 */
+  return utf8proc_properties + (
+    utf8proc_stage2table[
+      utf8proc_stage1table[uc >> 8] + (uc & 0xFF)
+    ]
+  );
+}
+
+#ifndef _PNETCDF_H
+UTF8PROC_DLLEXPORT const utf8proc_property_t *utf8proc_get_property(utf8proc_int32_t uc) {
+  return uc < 0 || uc >= 0x110000 ? utf8proc_properties : unsafe_get_property(uc);
+}
+#endif
+
+/* return whether there is a grapheme break between boundclasses lbc and tbc
+   (according to the definition of extended grapheme clusters)
+
+  Rule numbering refers to TR29 Version 29 (Unicode 9.0.0):
+  http://www.unicode.org/reports/tr29/tr29-29.html
+
+  CAVEATS:
+   Please note that evaluation of GB10 (grapheme breaks between emoji zwj sequences)
+   and GB 12/13 (regional indicator code points) require knowledge of previous characters
+   and are thus not handled by this function. This may result in an incorrect break before
+   an E_Modifier class codepoint and an incorrectly missing break between two
+   REGIONAL_INDICATOR class code points if such support does not exist in the caller.
+
+   See the special support in grapheme_break_extended, for required bookkeeping by the caller.
+*/
+static utf8proc_bool grapheme_break_simple(int lbc, int tbc) {
+  return
+    (lbc == UTF8PROC_BOUNDCLASS_START) ? true :       // GB1
+    (lbc == UTF8PROC_BOUNDCLASS_CR &&                 // GB3
+     tbc == UTF8PROC_BOUNDCLASS_LF) ? false :         // ---
+    (lbc >= UTF8PROC_BOUNDCLASS_CR && lbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? true :  // GB4
+    (tbc >= UTF8PROC_BOUNDCLASS_CR && tbc <= UTF8PROC_BOUNDCLASS_CONTROL) ? true :  // GB5
+    (lbc == UTF8PROC_BOUNDCLASS_L &&                  // GB6
+     (tbc == UTF8PROC_BOUNDCLASS_L ||                 // ---
+      tbc == UTF8PROC_BOUNDCLASS_V ||                 // ---
+      tbc == UTF8PROC_BOUNDCLASS_LV ||                // ---
+      tbc == UTF8PROC_BOUNDCLASS_LVT)) ? false :      // ---
+    ((lbc == UTF8PROC_BOUNDCLASS_LV ||                // GB7
+      lbc == UTF8PROC_BOUNDCLASS_V) &&                // ---
+     (tbc == UTF8PROC_BOUNDCLASS_V ||                 // ---
+      tbc == UTF8PROC_BOUNDCLASS_T)) ? false :        // ---
+    ((lbc == UTF8PROC_BOUNDCLASS_LVT ||               // GB8
+      lbc == UTF8PROC_BOUNDCLASS_T) &&                // ---
+     tbc == UTF8PROC_BOUNDCLASS_T) ? false :          // ---
+    (tbc == UTF8PROC_BOUNDCLASS_EXTEND ||             // GB9
+     tbc == UTF8PROC_BOUNDCLASS_ZWJ ||                // ---
+     tbc == UTF8PROC_BOUNDCLASS_SPACINGMARK ||        // GB9a
+     lbc == UTF8PROC_BOUNDCLASS_PREPEND) ? false :    // GB9b
+    ((lbc == UTF8PROC_BOUNDCLASS_E_BASE ||            // GB10 (requires additional handling below)
+      lbc == UTF8PROC_BOUNDCLASS_E_BASE_GAZ) &&       // ----
+     tbc == UTF8PROC_BOUNDCLASS_E_MODIFIER) ? false : // ----
+    (lbc == UTF8PROC_BOUNDCLASS_ZWJ &&                         // GB11
+     (tbc == UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ ||             // ----
+      tbc == UTF8PROC_BOUNDCLASS_E_BASE_GAZ)) ? false :        // ----
+    (lbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR &&          // GB12/13 (requires additional handling below)
+     tbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR) ? false :  // ----
+    true; // GB999
+}
+
+static utf8proc_bool grapheme_break_extended(int lbc, int tbc, utf8proc_int32_t *state)
+{
+  int lbc_override = lbc;
+  if (state && *state != UTF8PROC_BOUNDCLASS_START)
+    lbc_override = *state;
+  utf8proc_bool break_permitted = grapheme_break_simple(lbc_override, tbc);
+  if (state) {
+    // Special support for GB 12/13 made possible by GB999. After two RI
+    // class codepoints we want to force a break. Do this by resetting the
+    // second RI's bound class to UTF8PROC_BOUNDCLASS_OTHER, to force a break
+    // after that character according to GB999 (unless of course such a break is
+    // forbidden by a different rule such as GB9).
+    if (*state == tbc && tbc == UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR)
+      *state = UTF8PROC_BOUNDCLASS_OTHER;
+    // Special support for GB10. Fold any EXTEND codepoints into the previous
+    // boundclass if we're dealing with an emoji base boundclass.
+    else if ((*state == UTF8PROC_BOUNDCLASS_E_BASE      ||
+              *state == UTF8PROC_BOUNDCLASS_E_BASE_GAZ) &&
+             tbc == UTF8PROC_BOUNDCLASS_EXTEND)
+      *state = UTF8PROC_BOUNDCLASS_E_BASE;
+    else
+      *state = tbc;
+  }
+  return break_permitted;
+}
+
+#ifndef _PNETCDF_H
+UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break_stateful(
+    utf8proc_int32_t c1, utf8proc_int32_t c2, utf8proc_int32_t *state) {
+
+  return grapheme_break_extended(utf8proc_get_property(c1)->boundclass,
+                                 utf8proc_get_property(c2)->boundclass,
+                                 state);
+}
+
+
+UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break(
+    utf8proc_int32_t c1, utf8proc_int32_t c2) {
+  return utf8proc_grapheme_break_stateful(c1, c2, NULL);
+}
+#endif
+
+static utf8proc_int32_t seqindex_decode_entry(const utf8proc_uint16_t **entry)
+{
+  utf8proc_int32_t entry_cp = **entry;
+  if ((entry_cp & 0xF800) == 0xD800) {
+    *entry = *entry + 1;
+    entry_cp = ((entry_cp & 0x03FF) << 10) | (**entry & 0x03FF);
+    entry_cp += 0x10000;
+  }
+  return entry_cp;
+}
+
+#ifndef _PNETCDF_H
+static utf8proc_int32_t seqindex_decode_index(const utf8proc_uint32_t seqindex)
+{
+  const utf8proc_uint16_t *entry = &utf8proc_sequences[seqindex];
+  return seqindex_decode_entry(&entry);
+}
+#endif
+
+static utf8proc_ssize_t seqindex_write_char_decomposed(utf8proc_uint16_t seqindex, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize, utf8proc_option_t options, int *last_boundclass) {
+  utf8proc_ssize_t written = 0;
+  const utf8proc_uint16_t *entry = &utf8proc_sequences[seqindex & 0x1FFF];
+  int len = seqindex >> 13;
+  if (len >= 7) {
+    len = *entry;
+    entry++;
+  }
+  for (; len >= 0; entry++, len--) {
+    utf8proc_int32_t entry_cp = seqindex_decode_entry(&entry);
+
+    written += utf8proc_decompose_char(entry_cp, dst+written,
+      (bufsize > written) ? (bufsize - written) : 0, options,
+    last_boundclass);
+    if (written < 0) return UTF8PROC_ERROR_OVERFLOW;
+  }
+  return written;
+}
+
+#ifndef _PNETCDF_H
+UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_tolower(utf8proc_int32_t c)
+{
+  utf8proc_int32_t cl = utf8proc_get_property(c)->lowercase_seqindex;
+  return cl != UINT16_MAX ? seqindex_decode_index(cl) : c;
+}
+
+UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_toupper(utf8proc_int32_t c)
+{
+  utf8proc_int32_t cu = utf8proc_get_property(c)->uppercase_seqindex;
+  return cu != UINT16_MAX ? seqindex_decode_index(cu) : c;
+}
+
+UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_totitle(utf8proc_int32_t c)
+{
+  utf8proc_int32_t cu = utf8proc_get_property(c)->titlecase_seqindex;
+  return cu != UINT16_MAX ? seqindex_decode_index(cu) : c;
+}
+
+/* return a character width analogous to wcwidth (except portable and
+   hopefully less buggy than most system wcwidth functions). */
+UTF8PROC_DLLEXPORT int utf8proc_charwidth(utf8proc_int32_t c) {
+  return utf8proc_get_property(c)->charwidth;
+}
+
+UTF8PROC_DLLEXPORT utf8proc_category_t utf8proc_category(utf8proc_int32_t c) {
+  return utf8proc_get_property(c)->category;
+}
+
+UTF8PROC_DLLEXPORT const char *utf8proc_category_string(utf8proc_int32_t c) {
+  static const char s[][3] = {"Cn","Lu","Ll","Lt","Lm","Lo","Mn","Mc","Me","Nd","Nl","No","Pc","Pd","Ps","Pe","Pi","Pf","Po","Sm","Sc","Sk","So","Zs","Zl","Zp","Cc","Cf","Cs","Co"};
+  return s[utf8proc_category(c)];
+}
+#endif
+
+#define utf8proc_decompose_lump(replacement_uc) \
+  return utf8proc_decompose_char((replacement_uc), dst, bufsize, \
+  options & ~UTF8PROC_LUMP, last_boundclass)
+
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_char(utf8proc_int32_t uc, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize, utf8proc_option_t options, int *last_boundclass) {
+  const utf8proc_property_t *property;
+  utf8proc_propval_t category;
+  utf8proc_int32_t hangul_sindex;
+  if (uc < 0 || uc >= 0x110000) return UTF8PROC_ERROR_NOTASSIGNED;
+  property = unsafe_get_property(uc);
+  category = property->category;
+  hangul_sindex = uc - UTF8PROC_HANGUL_SBASE;
+  if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {
+    if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT) {
+      utf8proc_int32_t hangul_tindex;
+      if (bufsize >= 1) {
+        dst[0] = UTF8PROC_HANGUL_LBASE +
+          hangul_sindex / UTF8PROC_HANGUL_NCOUNT;
+        if (bufsize >= 2) dst[1] = UTF8PROC_HANGUL_VBASE +
+          (hangul_sindex % UTF8PROC_HANGUL_NCOUNT) / UTF8PROC_HANGUL_TCOUNT;
+      }
+      hangul_tindex = hangul_sindex % UTF8PROC_HANGUL_TCOUNT;
+      if (!hangul_tindex) return 2;
+      if (bufsize >= 3) dst[2] = UTF8PROC_HANGUL_TBASE + hangul_tindex;
+      return 3;
+    }
+  }
+  if (options & UTF8PROC_REJECTNA) {
+    if (!category) return UTF8PROC_ERROR_NOTASSIGNED;
+  }
+  if (options & UTF8PROC_IGNORE) {
+    if (property->ignorable) return 0;
+  }
+  if (options & UTF8PROC_LUMP) {
+    if (category == UTF8PROC_CATEGORY_ZS) utf8proc_decompose_lump(0x0020);
+    if (uc == 0x2018 || uc == 0x2019 || uc == 0x02BC || uc == 0x02C8)
+      utf8proc_decompose_lump(0x0027);
+    if (category == UTF8PROC_CATEGORY_PD || uc == 0x2212)
+      utf8proc_decompose_lump(0x002D);
+    if (uc == 0x2044 || uc == 0x2215) utf8proc_decompose_lump(0x002F);
+    if (uc == 0x2236) utf8proc_decompose_lump(0x003A);
+    if (uc == 0x2039 || uc == 0x2329 || uc == 0x3008)
+      utf8proc_decompose_lump(0x003C);
+    if (uc == 0x203A || uc == 0x232A || uc == 0x3009)
+      utf8proc_decompose_lump(0x003E);
+    if (uc == 0x2216) utf8proc_decompose_lump(0x005C);
+    if (uc == 0x02C4 || uc == 0x02C6 || uc == 0x2038 || uc == 0x2303)
+      utf8proc_decompose_lump(0x005E);
+    if (category == UTF8PROC_CATEGORY_PC || uc == 0x02CD)
+      utf8proc_decompose_lump(0x005F);
+    if (uc == 0x02CB) utf8proc_decompose_lump(0x0060);
+    if (uc == 0x2223) utf8proc_decompose_lump(0x007C);
+    if (uc == 0x223C) utf8proc_decompose_lump(0x007E);
+    if ((options & UTF8PROC_NLF2LS) && (options & UTF8PROC_NLF2PS)) {
+      if (category == UTF8PROC_CATEGORY_ZL ||
+          category == UTF8PROC_CATEGORY_ZP)
+        utf8proc_decompose_lump(0x000A);
+    }
+  }
+  if (options & UTF8PROC_STRIPMARK) {
+    if (category == UTF8PROC_CATEGORY_MN ||
+      category == UTF8PROC_CATEGORY_MC ||
+      category == UTF8PROC_CATEGORY_ME) return 0;
+  }
+  if (options & UTF8PROC_CASEFOLD) {
+    if (property->casefold_seqindex != UINT16_MAX) {
+      return seqindex_write_char_decomposed(property->casefold_seqindex, dst, bufsize, options, last_boundclass);
+    }
+  }
+  if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {
+    if (property->decomp_seqindex != UINT16_MAX &&
+        (!property->decomp_type || (options & UTF8PROC_COMPAT))) {
+      return seqindex_write_char_decomposed(property->decomp_seqindex, dst, bufsize, options, last_boundclass);
+    }
+  }
+  if (options & UTF8PROC_CHARBOUND) {
+    utf8proc_bool boundary;
+    int tbc = property->boundclass;
+    boundary = grapheme_break_extended(*last_boundclass, tbc, last_boundclass);
+    if (boundary) {
+      if (bufsize >= 1) dst[0] = 0xFFFF;
+      if (bufsize >= 2) dst[1] = uc;
+      return 2;
+    }
+  }
+  if (bufsize >= 1) *dst = uc;
+  return 1;
+}
+
+#ifndef _PNETCDF_H
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen,
+  utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options
+) {
+    return utf8proc_decompose_custom(str, strlen, buffer, bufsize, options, NULL, NULL);
+}
+#endif
+
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_custom(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen,
+  utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options,
+  utf8proc_custom_func custom_func, void *custom_data
+) {
+  /* strlen will be ignored, if UTF8PROC_NULLTERM is set in options */
+  utf8proc_ssize_t wpos = 0;
+  if ((options & UTF8PROC_COMPOSE) && (options & UTF8PROC_DECOMPOSE))
+    return UTF8PROC_ERROR_INVALIDOPTS;
+  if ((options & UTF8PROC_STRIPMARK) &&
+      !(options & UTF8PROC_COMPOSE) && !(options & UTF8PROC_DECOMPOSE))
+    return UTF8PROC_ERROR_INVALIDOPTS;
+  {
+    utf8proc_int32_t uc;
+    utf8proc_ssize_t rpos = 0;
+    utf8proc_ssize_t decomp_result;
+    int boundclass = UTF8PROC_BOUNDCLASS_START;
+    while (1) {
+      if (options & UTF8PROC_NULLTERM) {
+        rpos += utf8proc_iterate(str + rpos, -1, &uc);
+        /* checking of return value is not necessary,
+           as 'uc' is < 0 in case of error */
+        if (uc < 0) return UTF8PROC_ERROR_INVALIDUTF8;
+        if (rpos < 0) return UTF8PROC_ERROR_OVERFLOW;
+        if (uc == 0) break;
+      } else {
+        if (rpos >= strlen) break;
+        rpos += utf8proc_iterate(str + rpos, strlen - rpos, &uc);
+        if (uc < 0) return UTF8PROC_ERROR_INVALIDUTF8;
+      }
+      if (custom_func != NULL) {
+        uc = custom_func(uc, custom_data);   /* user-specified custom mapping */
+      }
+      decomp_result = utf8proc_decompose_char(
+        uc, buffer + wpos, (bufsize > wpos) ? (bufsize - wpos) : 0, options,
+        &boundclass
+      );
+      if (decomp_result < 0) return decomp_result;
+      wpos += decomp_result;
+      /* prohibiting integer overflows due to too long strings: */
+      if (wpos < 0 ||
+          wpos > (utf8proc_ssize_t)(SSIZE_MAX/sizeof(utf8proc_int32_t)/2))
+        return UTF8PROC_ERROR_OVERFLOW;
+    }
+  }
+  if ((options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) && bufsize >= wpos) {
+    utf8proc_ssize_t pos = 0;
+    while (pos < wpos-1) {
+      utf8proc_int32_t uc1, uc2;
+      const utf8proc_property_t *property1, *property2;
+      uc1 = buffer[pos];
+      uc2 = buffer[pos+1];
+      property1 = unsafe_get_property(uc1);
+      property2 = unsafe_get_property(uc2);
+      if (property1->combining_class > property2->combining_class &&
+          property2->combining_class > 0) {
+        buffer[pos] = uc2;
+        buffer[pos+1] = uc1;
+        if (pos > 0) pos--; else pos++;
+      } else {
+        pos++;
+      }
+    }
+  }
+  return wpos;
+}
+
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_normalize_utf32(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options) {
+  /* UTF8PROC_NULLTERM option will be ignored, 'length' is never ignored */
+  if (options & (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS | UTF8PROC_STRIPCC)) {
+    utf8proc_ssize_t rpos;
+    utf8proc_ssize_t wpos = 0;
+    utf8proc_int32_t uc;
+    for (rpos = 0; rpos < length; rpos++) {
+      uc = buffer[rpos];
+      if (uc == 0x000D && rpos < length-1 && buffer[rpos+1] == 0x000A) rpos++;
+      if (uc == 0x000A || uc == 0x000D || uc == 0x0085 ||
+          ((options & UTF8PROC_STRIPCC) && (uc == 0x000B || uc == 0x000C))) {
+        if (options & UTF8PROC_NLF2LS) {
+          if (options & UTF8PROC_NLF2PS) {
+            buffer[wpos++] = 0x000A;
+          } else {
+            buffer[wpos++] = 0x2028;
+          }
+        } else {
+          if (options & UTF8PROC_NLF2PS) {
+            buffer[wpos++] = 0x2029;
+          } else {
+            buffer[wpos++] = 0x0020;
+          }
+        }
+      } else if ((options & UTF8PROC_STRIPCC) &&
+          (uc < 0x0020 || (uc >= 0x007F && uc < 0x00A0))) {
+        if (uc == 0x0009) buffer[wpos++] = 0x0020;
+      } else {
+        buffer[wpos++] = uc;
+      }
+    }
+    length = wpos;
+  }
+  if (options & UTF8PROC_COMPOSE) {
+    utf8proc_int32_t *starter = NULL;
+    utf8proc_int32_t current_char;
+    const utf8proc_property_t *starter_property = NULL, *current_property;
+    utf8proc_propval_t max_combining_class = -1;
+    utf8proc_ssize_t rpos;
+    utf8proc_ssize_t wpos = 0;
+    utf8proc_int32_t composition;
+    for (rpos = 0; rpos < length; rpos++) {
+      current_char = buffer[rpos];
+      current_property = unsafe_get_property(current_char);
+      if (starter && current_property->combining_class > max_combining_class) {
+        /* combination perhaps possible */
+        utf8proc_int32_t hangul_lindex;
+        utf8proc_int32_t hangul_sindex;
+        hangul_lindex = *starter - UTF8PROC_HANGUL_LBASE;
+        if (hangul_lindex >= 0 && hangul_lindex < UTF8PROC_HANGUL_LCOUNT) {
+          utf8proc_int32_t hangul_vindex;
+          hangul_vindex = current_char - UTF8PROC_HANGUL_VBASE;
+          if (hangul_vindex >= 0 && hangul_vindex < UTF8PROC_HANGUL_VCOUNT) {
+            *starter = UTF8PROC_HANGUL_SBASE +
+              (hangul_lindex * UTF8PROC_HANGUL_VCOUNT + hangul_vindex) *
+              UTF8PROC_HANGUL_TCOUNT;
+            starter_property = NULL;
+            continue;
+          }
+        }
+        hangul_sindex = *starter - UTF8PROC_HANGUL_SBASE;
+        if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT &&
+            (hangul_sindex % UTF8PROC_HANGUL_TCOUNT) == 0) {
+          utf8proc_int32_t hangul_tindex;
+          hangul_tindex = current_char - UTF8PROC_HANGUL_TBASE;
+          if (hangul_tindex >= 0 && hangul_tindex < UTF8PROC_HANGUL_TCOUNT) {
+            *starter += hangul_tindex;
+            starter_property = NULL;
+            continue;
+          }
+        }
+        if (!starter_property) {
+          starter_property = unsafe_get_property(*starter);
+        }
+        if (starter_property->comb_index < 0x8000 &&
+            current_property->comb_index != UINT16_MAX &&
+            current_property->comb_index >= 0x8000) {
+          int sidx = starter_property->comb_index;
+          int idx = (current_property->comb_index & 0x3FFF) - utf8proc_combinations[sidx];
+          if (idx >= 0 && idx <= utf8proc_combinations[sidx + 1] ) {
+            idx += sidx + 2;
+            if (current_property->comb_index & 0x4000) {
+              composition = (utf8proc_combinations[idx] << 16) | utf8proc_combinations[idx+1];
+            } else
+              composition = utf8proc_combinations[idx];
+
+            if (composition > 0 && (!(options & UTF8PROC_STABLE) ||
+                !(unsafe_get_property(composition)->comp_exclusion))) {
+              *starter = composition;
+              starter_property = NULL;
+              continue;
+            }
+          }
+        }
+      }
+      buffer[wpos] = current_char;
+      if (current_property->combining_class) {
+        if (current_property->combining_class > max_combining_class) {
+          max_combining_class = current_property->combining_class;
+        }
+      } else {
+        starter = buffer + wpos;
+        starter_property = NULL;
+        max_combining_class = -1;
+      }
+      wpos++;
+    }
+    length = wpos;
+  }
+  return length;
+}
+
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_reencode(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options) {
+  /* UTF8PROC_NULLTERM option will be ignored, 'length' is never ignored
+     ASSERT: 'buffer' has one spare byte of free space at the end! */
+  length = utf8proc_normalize_utf32(buffer, length, options);
+  if (length < 0) return length;
+  {
+    utf8proc_ssize_t rpos, wpos = 0;
+    utf8proc_int32_t uc;
+    if (options & UTF8PROC_CHARBOUND) {
+        for (rpos = 0; rpos < length; rpos++) {
+            uc = buffer[rpos];
+            wpos += unsafe_encode_char(uc, ((utf8proc_uint8_t *)buffer) + wpos);
+        }
+    } else {
+        for (rpos = 0; rpos < length; rpos++) {
+            uc = buffer[rpos];
+            wpos += utf8proc_encode_char(uc, ((utf8proc_uint8_t *)buffer) + wpos);
+        }
+    }
+    ((utf8proc_uint8_t *)buffer)[wpos] = 0;
+    return wpos;
+  }
+}
+
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options
+) {
+    return utf8proc_map_custom(str, strlen, dstptr, options, NULL, NULL);
+}
+
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map_custom(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options,
+  utf8proc_custom_func custom_func, void *custom_data
+) {
+  utf8proc_int32_t *buffer;
+  utf8proc_ssize_t result;
+  *dstptr = NULL;
+  result = utf8proc_decompose_custom(str, strlen, NULL, 0, options, custom_func, custom_data);
+  if (result < 0) return result;
+  buffer = (utf8proc_int32_t *) NCI_Malloc(result * sizeof(utf8proc_int32_t) + 1);
+  if (!buffer) return UTF8PROC_ERROR_NOMEM;
+  result = utf8proc_decompose_custom(str, strlen, buffer, result, options, custom_func, custom_data);
+  if (result < 0) {
+    NCI_Free(buffer);
+    return result;
+  }
+  result = utf8proc_reencode(buffer, result, options);
+  if (result < 0) {
+    NCI_Free(buffer);
+    return result;
+  }
+  {
+    utf8proc_int32_t *newptr;
+    newptr = (utf8proc_int32_t *) NCI_Realloc(buffer, (size_t)result+1);
+    if (newptr) buffer = newptr;
+  }
+  *dstptr = (utf8proc_uint8_t *)buffer;
+  return result;
+}
+
+#ifndef _PNETCDF_H
+UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFD(const utf8proc_uint8_t *str) {
+  utf8proc_uint8_t *retval;
+  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |
+    UTF8PROC_DECOMPOSE);
+  return retval;
+}
+
+UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str) {
+  utf8proc_uint8_t *retval;
+  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |
+    UTF8PROC_COMPOSE);
+  return retval;
+}
+
+UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str) {
+  utf8proc_uint8_t *retval;
+  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |
+    UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);
+  return retval;
+}
+
+UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str) {
+  utf8proc_uint8_t *retval;
+  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |
+    UTF8PROC_COMPOSE | UTF8PROC_COMPAT);
+  return retval;
+}
+#endif
diff --git a/src/drivers/common/utf8proc.h b/src/drivers/common/utf8proc.h
new file mode 100644
index 0000000..123f9e7
--- /dev/null
+++ b/src/drivers/common/utf8proc.h
@@ -0,0 +1,723 @@
+/*
+ * Copyright (c) 2015 Steven G. Johnson, Jiahao Chen, Peter Colberg, Tony Kelman, Scott P. Jones, and other contributors.
+ * Copyright (c) 2009 Public Software Group e. V., Berlin, Germany
+ *
+ * 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.
+ */
+
+
+/**
+ * @mainpage
+ *
+ * utf8proc is a free/open-source (MIT/expat licensed) C library
+ * providing Unicode normalization, case-folding, and other operations
+ * for strings in the UTF-8 encoding, supporting Unicode version
+ * 8.0.0.  See the utf8proc home page (http://julialang.org/utf8proc/)
+ * for downloads and other information, or the source code on github
+ * (https://github.com/JuliaLang/utf8proc).
+ *
+ * For the utf8proc API documentation, see: @ref utf8proc.h
+ *
+ * The features of utf8proc include:
+ *
+ * - Transformation of strings (@ref utf8proc_map) to:
+ *    - decompose (@ref UTF8PROC_DECOMPOSE) or compose (@ref UTF8PROC_COMPOSE) Unicode combining characters (http://en.wikipedia.org/wiki/Combining_character)
+ *    - canonicalize Unicode compatibility characters (@ref UTF8PROC_COMPAT)
+ *    - strip "ignorable" (@ref UTF8PROC_IGNORE) characters, control characters (@ref UTF8PROC_STRIPCC), or combining characters such as accents (@ref UTF8PROC_STRIPMARK)
+ *    - case-folding (@ref UTF8PROC_CASEFOLD)
+ * - Unicode normalization: @ref utf8proc_NFD, @ref utf8proc_NFC, @ref utf8proc_NFKD, @ref utf8proc_NFKC
+ * - Detecting grapheme boundaries (@ref utf8proc_grapheme_break and @ref UTF8PROC_CHARBOUND)
+ * - Character-width computation: @ref utf8proc_charwidth
+ * - Classification of characters by Unicode category: @ref utf8proc_category and @ref utf8proc_category_string
+ * - Encode (@ref utf8proc_encode_char) and decode (@ref utf8proc_iterate) Unicode codepoints to/from UTF-8.
+ */
+
+/** @file */
+
+#ifndef UTF8PROC_H
+#define UTF8PROC_H
+
+/** @name API version
+ *
+ * The utf8proc API version MAJOR.MINOR.PATCH, following
+ * semantic-versioning rules (http://semver.org) based on API
+ * compatibility.
+ *
+ * This is also returned at runtime by @ref utf8proc_version; however, the
+ * runtime version may append a string like "-dev" to the version number
+ * for prerelease versions.
+ *
+ * @note The shared-library version number in the Makefile
+ *       (and CMakeLists.txt, and MANIFEST) may be different,
+ *       being based on ABI compatibility rather than API compatibility.
+ */
+/** @{ */
+/** The MAJOR version number (increased when backwards API compatibility is broken). */
+#define UTF8PROC_VERSION_MAJOR 2
+/** The MINOR version number (increased when new functionality is added in a backwards-compatible manner). */
+#define UTF8PROC_VERSION_MINOR 1
+/** The PATCH version (increased for fixes that do not change the API). */
+#define UTF8PROC_VERSION_PATCH 0
+/** @} */
+
+#include <stdlib.h>
+#include <sys/types.h>
+#if defined(_MSC_VER) && _MSC_VER < 1800
+// MSVC prior to 2013 lacked stdbool.h and inttypes.h
+typedef signed char utf8proc_int8_t;
+typedef unsigned char utf8proc_uint8_t;
+typedef short utf8proc_int16_t;
+typedef unsigned short utf8proc_uint16_t;
+typedef int utf8proc_int32_t;
+typedef unsigned int utf8proc_uint32_t;
+#  ifdef _WIN64
+typedef __int64 utf8proc_ssize_t;
+typedef unsigned __int64 utf8proc_size_t;
+#  else
+typedef int utf8proc_ssize_t;
+typedef unsigned int utf8proc_size_t;
+#  endif
+#  ifndef __cplusplus
+// emulate C99 bool
+typedef unsigned char utf8proc_bool;
+#    ifndef __bool_true_false_are_defined
+#      define false 0
+#      define true 1
+#      define __bool_true_false_are_defined 1
+#    endif
+#  else
+typedef bool utf8proc_bool;
+#  endif
+#else
+#  include <stddef.h>
+#  include <stdbool.h>
+#  include <inttypes.h>
+typedef int8_t utf8proc_int8_t;
+typedef uint8_t utf8proc_uint8_t;
+typedef int16_t utf8proc_int16_t;
+typedef uint16_t utf8proc_uint16_t;
+typedef int32_t utf8proc_int32_t;
+typedef uint32_t utf8proc_uint32_t;
+typedef size_t utf8proc_size_t;
+typedef ptrdiff_t utf8proc_ssize_t;
+typedef bool utf8proc_bool;
+#endif
+#include <limits.h>
+
+#ifndef _PNETCDF_H
+#ifdef _WIN32
+#  ifdef UTF8PROC_EXPORTS
+#    define UTF8PROC_DLLEXPORT __declspec(dllexport)
+#  else
+#    define UTF8PROC_DLLEXPORT __declspec(dllimport)
+#  endif
+#elif __GNUC__ >= 4
+#  define UTF8PROC_DLLEXPORT __attribute__ ((visibility("default")))
+#else
+#  define UTF8PROC_DLLEXPORT
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef SSIZE_MAX
+#define SSIZE_MAX ((size_t)SIZE_MAX/2)
+#endif
+
+#ifndef UINT16_MAX
+#  define UINT16_MAX 65535U
+#endif
+
+#ifdef _PNETCDF_H
+/* silence Fujitsu compiler warning: enumerated type mixed with another type */
+#define UTF8PROC_NULLTERM   (1<<0)
+#define UTF8PROC_STABLE     (1<<1)
+#define UTF8PROC_COMPAT     (1<<2)
+#define UTF8PROC_COMPOSE    (1<<3)
+#define UTF8PROC_DECOMPOSE  (1<<4)
+#define UTF8PROC_IGNORE     (1<<5)
+#define UTF8PROC_REJECTNA   (1<<6)
+#define UTF8PROC_NLF2LS     (1<<7)
+#define UTF8PROC_NLF2PS     (1<<8)
+#define UTF8PROC_NLF2LF     (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS)
+#define UTF8PROC_STRIPCC    (1<<9)
+#define UTF8PROC_CASEFOLD   (1<<10)
+#define UTF8PROC_CHARBOUND  (1<<11)
+#define UTF8PROC_LUMP       (1<<12)
+#define UTF8PROC_STRIPMARK  (1<<13)
+typedef unsigned int utf8proc_option_t;
+#else
+/**
+ * Option flags used by several functions in the library.
+ */
+typedef enum {
+  /** The given UTF-8 input is NULL terminated. */
+  UTF8PROC_NULLTERM  = (1<<0),
+  /** Unicode Versioning Stability has to be respected. */
+  UTF8PROC_STABLE    = (1<<1),
+  /** Compatibility decomposition (i.e. formatting information is lost). */
+  UTF8PROC_COMPAT    = (1<<2),
+  /** Return a result with decomposed characters. */
+  UTF8PROC_COMPOSE   = (1<<3),
+  /** Return a result with decomposed characters. */
+  UTF8PROC_DECOMPOSE = (1<<4),
+  /** Strip "default ignorable characters" such as SOFT-HYPHEN or ZERO-WIDTH-SPACE. */
+  UTF8PROC_IGNORE    = (1<<5),
+  /** Return an error, if the input contains unassigned codepoints. */
+  UTF8PROC_REJECTNA  = (1<<6),
+  /**
+   * Indicating that NLF-sequences (LF, CRLF, CR, NEL) are representing a
+   * line break, and should be converted to the codepoint for line
+   * separation (LS).
+   */
+  UTF8PROC_NLF2LS    = (1<<7),
+  /**
+   * Indicating that NLF-sequences are representing a paragraph break, and
+   * should be converted to the codepoint for paragraph separation
+   * (PS).
+   */
+  UTF8PROC_NLF2PS    = (1<<8),
+  /** Indicating that the meaning of NLF-sequences is unknown. */
+  UTF8PROC_NLF2LF    = (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS),
+  /** Strips and/or convers control characters.
+   *
+   * NLF-sequences are transformed into space, except if one of the
+   * NLF2LS/PS/LF options is given. HorizontalTab (HT) and FormFeed (FF)
+   * are treated as a NLF-sequence in this case.  All other control
+   * characters are simply removed.
+   */
+  UTF8PROC_STRIPCC   = (1<<9),
+  /**
+   * Performs unicode case folding, to be able to do a case-insensitive
+   * string comparison.
+   */
+  UTF8PROC_CASEFOLD  = (1<<10),
+  /**
+   * Inserts 0xFF bytes at the beginning of each sequence which is
+   * representing a single grapheme cluster (see UAX#29).
+   */
+  UTF8PROC_CHARBOUND = (1<<11),
+  /** Lumps certain characters together.
+   *
+   * E.g. HYPHEN U+2010 and MINUS U+2212 to ASCII "-". See lump.md for details.
+   *
+   * If NLF2LF is set, this includes a transformation of paragraph and
+   * line separators to ASCII line-feed (LF).
+   */
+  UTF8PROC_LUMP      = (1<<12),
+  /** Strips all character markings.
+   *
+   * This includes non-spacing, spacing and enclosing (i.e. accents).
+   * @note This option works only with @ref UTF8PROC_COMPOSE or
+   *       @ref UTF8PROC_DECOMPOSE
+   */
+  UTF8PROC_STRIPMARK = (1<<13)
+} utf8proc_option_t;
+#endif
+
+/** @name Error codes
+ * Error codes being returned by almost all functions.
+ */
+/** @{ */
+/** Memory could not be allocated. */
+#define UTF8PROC_ERROR_NOMEM -1
+/** The given string is too long to be processed. */
+#define UTF8PROC_ERROR_OVERFLOW -2
+/** The given string is not a legal UTF-8 string. */
+#define UTF8PROC_ERROR_INVALIDUTF8 -3
+/** The @ref UTF8PROC_REJECTNA flag was set and an unassigned codepoint was found. */
+#define UTF8PROC_ERROR_NOTASSIGNED -4
+/** Invalid options have been used. */
+#define UTF8PROC_ERROR_INVALIDOPTS -5
+/** @} */
+
+/* @name Types */
+
+/** Holds the value of a property. */
+typedef utf8proc_int16_t utf8proc_propval_t;
+
+/** Struct containing information about a codepoint. */
+typedef struct utf8proc_property_struct {
+  /**
+   * Unicode category.
+   * @see utf8proc_category_t.
+   */
+  utf8proc_propval_t category;
+  utf8proc_propval_t combining_class;
+  /**
+   * Bidirectional class.
+   * @see utf8proc_bidi_class_t.
+   */
+  utf8proc_propval_t bidi_class;
+  /**
+   * @anchor Decomposition type.
+   * @see utf8proc_decomp_type_t.
+   */
+  utf8proc_propval_t decomp_type;
+  utf8proc_uint16_t decomp_seqindex;
+  utf8proc_uint16_t casefold_seqindex;
+  utf8proc_uint16_t uppercase_seqindex;
+  utf8proc_uint16_t lowercase_seqindex;
+  utf8proc_uint16_t titlecase_seqindex;
+  utf8proc_uint16_t comb_index;
+  unsigned bidi_mirrored:1;
+  unsigned comp_exclusion:1;
+  /**
+   * Can this codepoint be ignored?
+   *
+   * Used by @ref utf8proc_decompose_char when @ref UTF8PROC_IGNORE is
+   * passed as an option.
+   */
+  unsigned ignorable:1;
+  unsigned control_boundary:1;
+  /** The width of the codepoint. */
+  unsigned charwidth:2;
+  unsigned pad:2;
+  /**
+   * Boundclass.
+   * @see utf8proc_boundclass_t.
+   */
+  unsigned boundclass:8;
+} utf8proc_property_t;
+
+/** Unicode categories. */
+typedef enum {
+  UTF8PROC_CATEGORY_CN  = 0, /**< Other, not assigned */
+  UTF8PROC_CATEGORY_LU  = 1, /**< Letter, uppercase */
+  UTF8PROC_CATEGORY_LL  = 2, /**< Letter, lowercase */
+  UTF8PROC_CATEGORY_LT  = 3, /**< Letter, titlecase */
+  UTF8PROC_CATEGORY_LM  = 4, /**< Letter, modifier */
+  UTF8PROC_CATEGORY_LO  = 5, /**< Letter, other */
+  UTF8PROC_CATEGORY_MN  = 6, /**< Mark, nonspacing */
+  UTF8PROC_CATEGORY_MC  = 7, /**< Mark, spacing combining */
+  UTF8PROC_CATEGORY_ME  = 8, /**< Mark, enclosing */
+  UTF8PROC_CATEGORY_ND  = 9, /**< Number, decimal digit */
+  UTF8PROC_CATEGORY_NL = 10, /**< Number, letter */
+  UTF8PROC_CATEGORY_NO = 11, /**< Number, other */
+  UTF8PROC_CATEGORY_PC = 12, /**< Punctuation, connector */
+  UTF8PROC_CATEGORY_PD = 13, /**< Punctuation, dash */
+  UTF8PROC_CATEGORY_PS = 14, /**< Punctuation, open */
+  UTF8PROC_CATEGORY_PE = 15, /**< Punctuation, close */
+  UTF8PROC_CATEGORY_PI = 16, /**< Punctuation, initial quote */
+  UTF8PROC_CATEGORY_PF = 17, /**< Punctuation, final quote */
+  UTF8PROC_CATEGORY_PO = 18, /**< Punctuation, other */
+  UTF8PROC_CATEGORY_SM = 19, /**< Symbol, math */
+  UTF8PROC_CATEGORY_SC = 20, /**< Symbol, currency */
+  UTF8PROC_CATEGORY_SK = 21, /**< Symbol, modifier */
+  UTF8PROC_CATEGORY_SO = 22, /**< Symbol, other */
+  UTF8PROC_CATEGORY_ZS = 23, /**< Separator, space */
+  UTF8PROC_CATEGORY_ZL = 24, /**< Separator, line */
+  UTF8PROC_CATEGORY_ZP = 25, /**< Separator, paragraph */
+  UTF8PROC_CATEGORY_CC = 26, /**< Other, control */
+  UTF8PROC_CATEGORY_CF = 27, /**< Other, format */
+  UTF8PROC_CATEGORY_CS = 28, /**< Other, surrogate */
+  UTF8PROC_CATEGORY_CO = 29, /**< Other, private use */
+} utf8proc_category_t;
+
+/** Bidirectional character classes. */
+typedef enum {
+  UTF8PROC_BIDI_CLASS_L     = 1, /**< Left-to-Right */
+  UTF8PROC_BIDI_CLASS_LRE   = 2, /**< Left-to-Right Embedding */
+  UTF8PROC_BIDI_CLASS_LRO   = 3, /**< Left-to-Right Override */
+  UTF8PROC_BIDI_CLASS_R     = 4, /**< Right-to-Left */
+  UTF8PROC_BIDI_CLASS_AL    = 5, /**< Right-to-Left Arabic */
+  UTF8PROC_BIDI_CLASS_RLE   = 6, /**< Right-to-Left Embedding */
+  UTF8PROC_BIDI_CLASS_RLO   = 7, /**< Right-to-Left Override */
+  UTF8PROC_BIDI_CLASS_PDF   = 8, /**< Pop Directional Format */
+  UTF8PROC_BIDI_CLASS_EN    = 9, /**< European Number */
+  UTF8PROC_BIDI_CLASS_ES   = 10, /**< European Separator */
+  UTF8PROC_BIDI_CLASS_ET   = 11, /**< European Number Terminator */
+  UTF8PROC_BIDI_CLASS_AN   = 12, /**< Arabic Number */
+  UTF8PROC_BIDI_CLASS_CS   = 13, /**< Common Number Separator */
+  UTF8PROC_BIDI_CLASS_NSM  = 14, /**< Nonspacing Mark */
+  UTF8PROC_BIDI_CLASS_BN   = 15, /**< Boundary Neutral */
+  UTF8PROC_BIDI_CLASS_B    = 16, /**< Paragraph Separator */
+  UTF8PROC_BIDI_CLASS_S    = 17, /**< Segment Separator */
+  UTF8PROC_BIDI_CLASS_WS   = 18, /**< Whitespace */
+  UTF8PROC_BIDI_CLASS_ON   = 19, /**< Other Neutrals */
+  UTF8PROC_BIDI_CLASS_LRI  = 20, /**< Left-to-Right Isolate */
+  UTF8PROC_BIDI_CLASS_RLI  = 21, /**< Right-to-Left Isolate */
+  UTF8PROC_BIDI_CLASS_FSI  = 22, /**< First Strong Isolate */
+  UTF8PROC_BIDI_CLASS_PDI  = 23, /**< Pop Directional Isolate */
+} utf8proc_bidi_class_t;
+
+/** Decomposition type. */
+typedef enum {
+  UTF8PROC_DECOMP_TYPE_FONT      = 1, /**< Font */
+  UTF8PROC_DECOMP_TYPE_NOBREAK   = 2, /**< Nobreak */
+  UTF8PROC_DECOMP_TYPE_INITIAL   = 3, /**< Initial */
+  UTF8PROC_DECOMP_TYPE_MEDIAL    = 4, /**< Medial */
+  UTF8PROC_DECOMP_TYPE_FINAL     = 5, /**< Final */
+  UTF8PROC_DECOMP_TYPE_ISOLATED  = 6, /**< Isolated */
+  UTF8PROC_DECOMP_TYPE_CIRCLE    = 7, /**< Circle */
+  UTF8PROC_DECOMP_TYPE_SUPER     = 8, /**< Super */
+  UTF8PROC_DECOMP_TYPE_SUB       = 9, /**< Sub */
+  UTF8PROC_DECOMP_TYPE_VERTICAL = 10, /**< Vertical */
+  UTF8PROC_DECOMP_TYPE_WIDE     = 11, /**< Wide */
+  UTF8PROC_DECOMP_TYPE_NARROW   = 12, /**< Narrow */
+  UTF8PROC_DECOMP_TYPE_SMALL    = 13, /**< Small */
+  UTF8PROC_DECOMP_TYPE_SQUARE   = 14, /**< Square */
+  UTF8PROC_DECOMP_TYPE_FRACTION = 15, /**< Fraction */
+  UTF8PROC_DECOMP_TYPE_COMPAT   = 16, /**< Compat */
+} utf8proc_decomp_type_t;
+
+/** Boundclass property. (TR29) */
+typedef enum {
+  UTF8PROC_BOUNDCLASS_START              =  0, /**< Start */
+  UTF8PROC_BOUNDCLASS_OTHER              =  1, /**< Other */
+  UTF8PROC_BOUNDCLASS_CR                 =  2, /**< Cr */
+  UTF8PROC_BOUNDCLASS_LF                 =  3, /**< Lf */
+  UTF8PROC_BOUNDCLASS_CONTROL            =  4, /**< Control */
+  UTF8PROC_BOUNDCLASS_EXTEND             =  5, /**< Extend */
+  UTF8PROC_BOUNDCLASS_L                  =  6, /**< L */
+  UTF8PROC_BOUNDCLASS_V                  =  7, /**< V */
+  UTF8PROC_BOUNDCLASS_T                  =  8, /**< T */
+  UTF8PROC_BOUNDCLASS_LV                 =  9, /**< Lv */
+  UTF8PROC_BOUNDCLASS_LVT                = 10, /**< Lvt */
+  UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR = 11, /**< Regional indicator */
+  UTF8PROC_BOUNDCLASS_SPACINGMARK        = 12, /**< Spacingmark */
+  UTF8PROC_BOUNDCLASS_PREPEND            = 13, /**< Prepend */
+  UTF8PROC_BOUNDCLASS_ZWJ                = 14, /**< Zero Width Joiner */
+  UTF8PROC_BOUNDCLASS_E_BASE             = 15, /**< Emoji Base */
+  UTF8PROC_BOUNDCLASS_E_MODIFIER         = 16, /**< Emoji Modifier */
+  UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ     = 17, /**< Glue_After_ZWJ */
+  UTF8PROC_BOUNDCLASS_E_BASE_GAZ         = 18, /**< E_BASE + GLUE_AFTER_ZJW */
+} utf8proc_boundclass_t;
+
+/**
+ * Function pointer type passed to @ref utf8proc_map_custom and
+ * @ref utf8proc_decompose_custom, which is used to specify a user-defined
+ * mapping of codepoints to be applied in conjunction with other mappings.
+ */
+typedef utf8proc_int32_t (*utf8proc_custom_func)(utf8proc_int32_t codepoint, void *data);
+
+#ifndef _PNETCDF_H
+/**
+ * Array containing the byte lengths of a UTF-8 encoded codepoint based
+ * on the first byte.
+ */
+UTF8PROC_DLLEXPORT extern const utf8proc_int8_t utf8proc_utf8class[256];
+
+/**
+ * Returns the utf8proc API version as a string MAJOR.MINOR.PATCH
+ * (http://semver.org format), possibly with a "-dev" suffix for
+ * development versions.
+ */
+UTF8PROC_DLLEXPORT const char *utf8proc_version(void);
+
+/**
+ * Returns an informative error string for the given utf8proc error code
+ * (e.g. the error codes returned by @ref utf8proc_map).
+ */
+UTF8PROC_DLLEXPORT const char *utf8proc_errmsg(utf8proc_ssize_t errcode);
+
+/**
+ * Reads a single codepoint from the UTF-8 sequence being pointed to by `str`.
+ * The maximum number of bytes read is `strlen`, unless `strlen` is
+ * negative (in which case up to 4 bytes are read).
+ *
+ * If a valid codepoint could be read, it is stored in the variable
+ * pointed to by `codepoint_ref`, otherwise that variable will be set to -1.
+ * In case of success, the number of bytes read is returned; otherwise, a
+ * negative error code is returned.
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_iterate(const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_int32_t *codepoint_ref);
+
+/**
+ * Check if a codepoint is valid (regardless of whether it has been
+ * assigned a value by the current Unicode standard).
+ *
+ * @return 1 if the given `codepoint` is valid and otherwise return 0.
+ */
+UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_codepoint_valid(utf8proc_int32_t codepoint);
+
+/**
+ * Encodes the codepoint as an UTF-8 string in the byte array pointed
+ * to by `dst`. This array must be at least 4 bytes long.
+ *
+ * In case of success the number of bytes written is returned, and
+ * otherwise 0 is returned.
+ *
+ * This function does not check whether `codepoint` is valid Unicode.
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_encode_char(utf8proc_int32_t codepoint, utf8proc_uint8_t *dst);
+
+/**
+ * Look up the properties for a given codepoint.
+ *
+ * @param codepoint The Unicode codepoint.
+ *
+ * @returns
+ * A pointer to a (constant) struct containing information about
+ * the codepoint.
+ * @par
+ * If the codepoint is unassigned or invalid, a pointer to a special struct is
+ * returned in which `category` is 0 (@ref UTF8PROC_CATEGORY_CN).
+ */
+UTF8PROC_DLLEXPORT const utf8proc_property_t *utf8proc_get_property(utf8proc_int32_t codepoint);
+
+/** Decompose a codepoint into an array of codepoints.
+ *
+ * @param codepoint the codepoint.
+ * @param dst the destination buffer.
+ * @param bufsize the size of the destination buffer.
+ * @param options one or more of the following flags:
+ * - @ref UTF8PROC_REJECTNA  - return an error `codepoint` is unassigned
+ * - @ref UTF8PROC_IGNORE    - strip "default ignorable" codepoints
+ * - @ref UTF8PROC_CASEFOLD  - apply Unicode casefolding
+ * - @ref UTF8PROC_COMPAT    - replace certain codepoints with their
+ *                             compatibility decomposition
+ * - @ref UTF8PROC_CHARBOUND - insert 0xFF bytes before each grapheme cluster
+ * - @ref UTF8PROC_LUMP      - lump certain different codepoints together
+ * - @ref UTF8PROC_STRIPMARK - remove all character marks
+ * @param last_boundclass
+ * Pointer to an integer variable containing
+ * the previous codepoint's boundary class if the @ref UTF8PROC_CHARBOUND
+ * option is used.  Otherwise, this parameter is ignored.
+ *
+ * @return
+ * In case of success, the number of codepoints written is returned; in case
+ * of an error, a negative error code is returned (@ref utf8proc_errmsg).
+ * @par
+ * If the number of written codepoints would be bigger than `bufsize`, the
+ * required buffer size is returned, while the buffer will be overwritten with
+ * undefined data.
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_char(
+  utf8proc_int32_t codepoint, utf8proc_int32_t *dst, utf8proc_ssize_t bufsize,
+  utf8proc_option_t options, int *last_boundclass
+);
+
+/**
+ * The same as @ref utf8proc_decompose_char, but acts on a whole UTF-8
+ * string and orders the decomposed sequences correctly.
+ *
+ * If the @ref UTF8PROC_NULLTERM flag in `options` is set, processing
+ * will be stopped, when a NULL byte is encounted, otherwise `strlen`
+ * bytes are processed.  The result (in the form of 32-bit unicode
+ * codepoints) is written into the buffer being pointed to by
+ * `buffer` (which must contain at least `bufsize` entries).  In case of
+ * success, the number of codepoints written is returned; in case of an
+ * error, a negative error code is returned (@ref utf8proc_errmsg).
+ * See @ref utf8proc_decompose_custom to supply additional transformations.
+ *
+ * If the number of written codepoints would be bigger than `bufsize`, the
+ * required buffer size is returned, while the buffer will be overwritten with
+ * undefined data.
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen,
+  utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options
+);
+
+/**
+ * The same as @ref utf8proc_decompose, but also takes a `custom_func` mapping function
+ * that is called on each codepoint in `str` before any other transformations
+ * (along with a `custom_data` pointer that is passed through to `custom_func`).
+ * The `custom_func` argument is ignored if it is `NULL`.  See also @ref utf8proc_map_custom.
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_custom(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen,
+  utf8proc_int32_t *buffer, utf8proc_ssize_t bufsize, utf8proc_option_t options,
+  utf8proc_custom_func custom_func, void *custom_data
+);
+
+/**
+ * Normalizes the sequence of `length` codepoints pointed to by `buffer`
+ * in-place (i.e., the result is also stored in `buffer`).
+ *
+ * @param buffer the (native-endian UTF-32) unicode codepoints to re-encode.
+ * @param length the length (in codepoints) of the buffer.
+ * @param options a bitwise or (`|`) of one or more of the following flags:
+ * - @ref UTF8PROC_NLF2LS  - convert LF, CRLF, CR and NEL into LS
+ * - @ref UTF8PROC_NLF2PS  - convert LF, CRLF, CR and NEL into PS
+ * - @ref UTF8PROC_NLF2LF  - convert LF, CRLF, CR and NEL into LF
+ * - @ref UTF8PROC_STRIPCC - strip or convert all non-affected control characters
+ * - @ref UTF8PROC_COMPOSE - try to combine decomposed codepoints into composite
+ *                           codepoints
+ * - @ref UTF8PROC_STABLE  - prohibit combining characters that would violate
+ *                           the unicode versioning stability
+ *
+ * @return
+ * In case of success, the length (in codepoints) of the normalized UTF-32 string is
+ * returned; otherwise, a negative error code is returned (@ref utf8proc_errmsg).
+ *
+ * @warning The entries of the array pointed to by `str` have to be in the
+ *          range `0x0000` to `0x10FFFF`. Otherwise, the program might crash!
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_normalize_utf32(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options);
+
+/**
+ * Reencodes the sequence of `length` codepoints pointed to by `buffer`
+ * UTF-8 data in-place (i.e., the result is also stored in `buffer`).
+ * Can optionally normalize the UTF-32 sequence prior to UTF-8 conversion.
+ *
+ * @param buffer the (native-endian UTF-32) unicode codepoints to re-encode.
+ * @param length the length (in codepoints) of the buffer.
+ * @param options a bitwise or (`|`) of one or more of the following flags:
+ * - @ref UTF8PROC_NLF2LS  - convert LF, CRLF, CR and NEL into LS
+ * - @ref UTF8PROC_NLF2PS  - convert LF, CRLF, CR and NEL into PS
+ * - @ref UTF8PROC_NLF2LF  - convert LF, CRLF, CR and NEL into LF
+ * - @ref UTF8PROC_STRIPCC - strip or convert all non-affected control characters
+ * - @ref UTF8PROC_COMPOSE - try to combine decomposed codepoints into composite
+ *                           codepoints
+ * - @ref UTF8PROC_STABLE  - prohibit combining characters that would violate
+ *                           the unicode versioning stability
+ * - @ref UTF8PROC_CHARBOUND - insert 0xFF bytes before each grapheme cluster
+ *
+ * @return
+ * In case of success, the length (in bytes) of the resulting nul-terminated
+ * UTF-8 string is returned; otherwise, a negative error code is returned
+ * (@ref utf8proc_errmsg).
+ *
+ * @warning The amount of free space pointed to by `buffer` must
+ *          exceed the amount of the input data by one byte, and the
+ *          entries of the array pointed to by `str` have to be in the
+ *          range `0x0000` to `0x10FFFF`. Otherwise, the program might crash!
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_reencode(utf8proc_int32_t *buffer, utf8proc_ssize_t length, utf8proc_option_t options);
+
+/**
+ * Given a pair of consecutive codepoints, return whether a grapheme break is
+ * permitted between them (as defined by the extended grapheme clusters in UAX#29).
+ *
+ * @param state Beginning with Version 29 (Unicode 9.0.0), this algorithm requires
+ *              state to break graphemes. This state can be passed in as a pointer
+ *              in the `state` argument and should initially be set to 0. If the
+ *              state is not passed in (i.e. a null pointer is passed), UAX#29 rules
+ *              GB10/12/13 which require this state will not be applied, essentially
+ *              matching the rules in Unicode 8.0.0.
+ *
+ * @warning If the state parameter is used, `utf8proc_grapheme_break_stateful` must
+ *          be called IN ORDER on ALL potential breaks in a string.
+ */
+UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break_stateful(
+    utf8proc_int32_t codepoint1, utf8proc_int32_t codepoint2, utf8proc_int32_t *state);
+
+/**
+ * Same as @ref utf8proc_grapheme_break_stateful, except without support for the
+ * Unicode 9 additions to the algorithm. Supported for legacy reasons.
+ */
+UTF8PROC_DLLEXPORT utf8proc_bool utf8proc_grapheme_break(
+    utf8proc_int32_t codepoint1, utf8proc_int32_t codepoint2);
+
+
+/**
+ * Given a codepoint `c`, return the codepoint of the corresponding
+ * lower-case character, if any; otherwise (if there is no lower-case
+ * variant, or if `c` is not a valid codepoint) return `c`.
+ */
+UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_tolower(utf8proc_int32_t c);
+
+/**
+ * Given a codepoint `c`, return the codepoint of the corresponding
+ * upper-case character, if any; otherwise (if there is no upper-case
+ * variant, or if `c` is not a valid codepoint) return `c`.
+ */
+UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_toupper(utf8proc_int32_t c);
+
+/**
+ * Given a codepoint `c`, return the codepoint of the corresponding
+ * title-case character, if any; otherwise (if there is no title-case
+ * variant, or if `c` is not a valid codepoint) return `c`.
+ */
+UTF8PROC_DLLEXPORT utf8proc_int32_t utf8proc_totitle(utf8proc_int32_t c);
+
+/**
+ * Given a codepoint, return a character width analogous to `wcwidth(codepoint)`,
+ * except that a width of 0 is returned for non-printable codepoints
+ * instead of -1 as in `wcwidth`.
+ *
+ * @note
+ * If you want to check for particular types of non-printable characters,
+ * (analogous to `isprint` or `iscntrl`), use @ref utf8proc_category. */
+UTF8PROC_DLLEXPORT int utf8proc_charwidth(utf8proc_int32_t codepoint);
+
+/**
+ * Return the Unicode category for the codepoint (one of the
+ * @ref utf8proc_category_t constants.)
+ */
+UTF8PROC_DLLEXPORT utf8proc_category_t utf8proc_category(utf8proc_int32_t codepoint);
+
+/**
+ * Return the two-letter (nul-terminated) Unicode category string for
+ * the codepoint (e.g. `"Lu"` or `"Co"`).
+ */
+UTF8PROC_DLLEXPORT const char *utf8proc_category_string(utf8proc_int32_t codepoint);
+
+/**
+ * Maps the given UTF-8 string pointed to by `str` to a new UTF-8
+ * string, allocated dynamically by `malloc` and returned via `dstptr`.
+ *
+ * If the @ref UTF8PROC_NULLTERM flag in the `options` field is set,
+ * the length is determined by a NULL terminator, otherwise the
+ * parameter `strlen` is evaluated to determine the string length, but
+ * in any case the result will be NULL terminated (though it might
+ * contain NULL characters with the string if `str` contained NULL
+ * characters). Other flags in the `options` field are passed to the
+ * functions defined above, and regarded as described.  See also
+ * @ref utfproc_map_custom to supply a custom codepoint transformation.
+ *
+ * In case of success the length of the new string is returned,
+ * otherwise a negative error code is returned.
+ *
+ * @note The memory of the new UTF-8 string will have been allocated
+ * with `malloc`, and should therefore be deallocated with `free`.
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options
+);
+
+/**
+ * Like @ref utf8proc_map, but also takes a `custom_func` mapping function
+ * that is called on each codepoint in `str` before any other transformations
+ * (along with a `custom_data` pointer that is passed through to `custom_func`).
+ * The `custom_func` argument is ignored if it is `NULL`.
+ */
+UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map_custom(
+  const utf8proc_uint8_t *str, utf8proc_ssize_t strlen, utf8proc_uint8_t **dstptr, utf8proc_option_t options,
+  utf8proc_custom_func custom_func, void *custom_data
+);
+
+/** @name Unicode normalization
+ *
+ * Returns a pointer to newly allocated memory of a NFD, NFC, NFKD or NFKC
+ * normalized version of the null-terminated string `str`.  These
+ * are shortcuts to calling @ref utf8proc_map with @ref UTF8PROC_NULLTERM
+ * combined with @ref UTF8PROC_STABLE and flags indicating the normalization.
+ */
+/** @{ */
+/** NFD normalization (@ref UTF8PROC_DECOMPOSE). */
+UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFD(const utf8proc_uint8_t *str);
+/** NFC normalization (@ref UTF8PROC_COMPOSE). */
+UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str);
+/** NFKD normalization (@ref UTF8PROC_DECOMPOSE and @ref UTF8PROC_COMPAT). */
+UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str);
+/** NFKC normalization (@ref UTF8PROC_COMPOSE and @ref UTF8PROC_COMPAT). */
+UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str);
+/** @} */
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/drivers/common/utf8proc_data.h b/src/drivers/common/utf8proc_data.h
new file mode 100644
index 0000000..3de2873
--- /dev/null
+++ b/src/drivers/common/utf8proc_data.h
@@ -0,0 +1,14386 @@
+static const utf8proc_uint16_t utf8proc_sequences[] = {
+  97, 98, 99, 100, 101, 102, 103, 
+  104, 105, 106, 107, 108, 109, 110, 111, 
+  112, 113, 114, 115, 116, 117, 118, 119, 
+  120, 121, 122, 32, 32, 776, 32, 772, 
+  50, 51, 32, 769, 956, 32, 807, 49, 
+  49, 8260, 52, 49, 8260, 50, 51, 8260, 
+  52, 65, 768, 224, 65, 769, 225, 65, 
+  770, 226, 65, 771, 227, 65, 776, 228, 
+  65, 778, 229, 230, 67, 807, 231, 69, 
+  768, 232, 69, 769, 233, 69, 770, 234, 
+  69, 776, 235, 73, 768, 236, 73, 769, 
+  237, 73, 770, 238, 73, 776, 239, 240, 
+  78, 771, 241, 79, 768, 242, 79, 769, 
+  243, 79, 770, 244, 79, 771, 245, 79, 
+  776, 246, 248, 85, 768, 249, 85, 769, 
+  250, 85, 770, 251, 85, 776, 252, 89, 
+  769, 253, 254, 115, 115, 97, 768, 97, 
+  769, 97, 770, 97, 771, 97, 776, 97, 
+  778, 99, 807, 101, 768, 101, 769, 101, 
+  770, 101, 776, 105, 768, 105, 769, 105, 
+  770, 105, 776, 110, 771, 111, 768, 111, 
+  769, 111, 770, 111, 771, 111, 776, 117, 
+  768, 117, 769, 117, 770, 117, 776, 121, 
+  769, 121, 776, 65, 772, 257, 97, 772, 
+  65, 774, 259, 97, 774, 65, 808, 261, 
+  97, 808, 67, 769, 263, 99, 769, 67, 
+  770, 265, 99, 770, 67, 775, 267, 99, 
+  775, 67, 780, 269, 99, 780, 68, 780, 
+  271, 100, 780, 273, 69, 772, 275, 101, 
+  772, 69, 774, 277, 101, 774, 69, 775, 
+  279, 101, 775, 69, 808, 281, 101, 808, 
+  69, 780, 283, 101, 780, 71, 770, 285, 
+  103, 770, 71, 774, 287, 103, 774, 71, 
+  775, 289, 103, 775, 71, 807, 291, 103, 
+  807, 72, 770, 293, 104, 770, 295, 73, 
+  771, 297, 105, 771, 73, 772, 299, 105, 
+  772, 73, 774, 301, 105, 774, 73, 808, 
+  303, 105, 808, 73, 775, 105, 775, 73, 
+  74, 307, 105, 106, 74, 770, 309, 106, 
+  770, 75, 807, 311, 107, 807, 76, 769, 
+  314, 108, 769, 76, 807, 316, 108, 807, 
+  76, 780, 318, 108, 780, 76, 183, 320, 
+  108, 183, 322, 78, 769, 324, 110, 769, 
+  78, 807, 326, 110, 807, 78, 780, 328, 
+  110, 780, 700, 110, 331, 79, 772, 333, 
+  111, 772, 79, 774, 335, 111, 774, 79, 
+  779, 337, 111, 779, 339, 82, 769, 341, 
+  114, 769, 82, 807, 343, 114, 807, 82, 
+  780, 345, 114, 780, 83, 769, 347, 115, 
+  769, 83, 770, 349, 115, 770, 83, 807, 
+  351, 115, 807, 83, 780, 353, 115, 780, 
+  84, 807, 355, 116, 807, 84, 780, 357, 
+  116, 780, 359, 85, 771, 361, 117, 771, 
+  85, 772, 363, 117, 772, 85, 774, 365, 
+  117, 774, 85, 778, 367, 117, 778, 85, 
+  779, 369, 117, 779, 85, 808, 371, 117, 
+  808, 87, 770, 373, 119, 770, 89, 770, 
+  375, 121, 770, 89, 776, 255, 90, 769, 
+  378, 122, 769, 90, 775, 380, 122, 775, 
+  90, 780, 382, 122, 780, 595, 387, 389, 
+  596, 392, 598, 599, 396, 477, 601, 603, 
+  402, 608, 611, 617, 616, 409, 623, 626, 
+  629, 79, 795, 417, 111, 795, 419, 421, 
+  640, 424, 643, 429, 648, 85, 795, 432, 
+  117, 795, 650, 651, 436, 438, 658, 441, 
+  445, 68, 381, 454, 68, 382, 100, 382, 
+  76, 74, 457, 76, 106, 108, 106, 78, 
+  74, 460, 78, 106, 110, 106, 65, 780, 
+  462, 97, 780, 73, 780, 464, 105, 780, 
+  79, 780, 466, 111, 780, 85, 780, 468, 
+  117, 780, 220, 772, 470, 252, 772, 220, 
+  769, 472, 252, 769, 220, 780, 474, 252, 
+  780, 220, 768, 476, 252, 768, 196, 772, 
+  479, 228, 772, 550, 772, 481, 551, 772, 
+  198, 772, 483, 230, 772, 485, 71, 780, 
+  487, 103, 780, 75, 780, 489, 107, 780, 
+  79, 808, 491, 111, 808, 490, 772, 493, 
+  491, 772, 439, 780, 495, 658, 780, 106, 
+  780, 68, 90, 499, 68, 122, 100, 122, 
+  71, 769, 501, 103, 769, 405, 447, 78, 
+  768, 505, 110, 768, 197, 769, 507, 229, 
+  769, 198, 769, 509, 230, 769, 216, 769, 
+  511, 248, 769, 65, 783, 513, 97, 783, 
+  65, 785, 515, 97, 785, 69, 783, 517, 
+  101, 783, 69, 785, 519, 101, 785, 73, 
+  783, 521, 105, 783, 73, 785, 523, 105, 
+  785, 79, 783, 525, 111, 783, 79, 785, 
+  527, 111, 785, 82, 783, 529, 114, 783, 
+  82, 785, 531, 114, 785, 85, 783, 533, 
+  117, 783, 85, 785, 535, 117, 785, 83, 
+  806, 537, 115, 806, 84, 806, 539, 116, 
+  806, 541, 72, 780, 543, 104, 780, 414, 
+  547, 549, 65, 775, 551, 97, 775, 69, 
+  807, 553, 101, 807, 214, 772, 555, 246, 
+  772, 213, 772, 557, 245, 772, 79, 775, 
+  559, 111, 775, 558, 772, 561, 559, 772, 
+  89, 772, 563, 121, 772, 11365, 572, 410, 
+  11366, 578, 384, 649, 652, 583, 585, 587, 
+  589, 591, 614, 633, 635, 641, 32, 774, 
+  32, 775, 32, 778, 32, 808, 32, 771, 
+  32, 779, 661, 768, 769, 787, 776, 769, 
+  953, 881, 883, 697, 887, 32, 837, 59, 
+  1011, 168, 769, 913, 769, 940, 183, 917, 
+  769, 941, 919, 769, 942, 921, 769, 943, 
+  927, 769, 972, 933, 769, 973, 937, 769, 
+  974, 970, 769, 953, 776, 769, 945, 946, 
+  947, 948, 949, 950, 951, 952, 954, 955, 
+  957, 958, 959, 960, 961, 963, 964, 965, 
+  966, 967, 968, 969, 921, 776, 970, 933, 
+  776, 971, 945, 769, 949, 769, 951, 769, 
+  953, 769, 971, 769, 965, 776, 769, 953, 
+  776, 965, 776, 959, 769, 965, 769, 969, 
+  769, 983, 933, 978, 769, 978, 776, 985, 
+  987, 989, 991, 993, 995, 997, 999, 1001, 
+  1003, 1005, 1007, 962, 920, 1016, 931, 1010, 
+  1019, 891, 892, 893, 1045, 768, 1104, 1045, 
+  776, 1105, 1106, 1043, 769, 1107, 1108, 1109, 
+  1110, 1030, 776, 1111, 1112, 1113, 1114, 1115, 
+  1050, 769, 1116, 1048, 768, 1117, 1059, 774, 
+  1118, 1119, 1072, 1073, 1074, 1075, 1076, 1077, 
+  1078, 1079, 1080, 1048, 774, 1081, 1082, 1083, 
+  1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 
+  1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 
+  1100, 1101, 1102, 1103, 1080, 774, 1077, 768, 
+  1077, 776, 1075, 769, 1110, 776, 1082, 769, 
+  1080, 768, 1091, 774, 1121, 1123, 1125, 1127, 
+  1129, 1131, 1133, 1135, 1137, 1139, 1141, 1140, 
+  783, 1143, 1141, 783, 1145, 1147, 1149, 1151, 
+  1153, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 
+  1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 
+  1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 
+  1209, 1211, 1213, 1215, 1231, 1046, 774, 1218, 
+  1078, 774, 1220, 1222, 1224, 1226, 1228, 1230, 
+  1040, 774, 1233, 1072, 774, 1040, 776, 1235, 
+  1072, 776, 1237, 1045, 774, 1239, 1077, 774, 
+  1241, 1240, 776, 1243, 1241, 776, 1046, 776, 
+  1245, 1078, 776, 1047, 776, 1247, 1079, 776, 
+  1249, 1048, 772, 1251, 1080, 772, 1048, 776, 
+  1253, 1080, 776, 1054, 776, 1255, 1086, 776, 
+  1257, 1256, 776, 1259, 1257, 776, 1069, 776, 
+  1261, 1101, 776, 1059, 772, 1263, 1091, 772, 
+  1059, 776, 1265, 1091, 776, 1059, 779, 1267, 
+  1091, 779, 1063, 776, 1269, 1095, 776, 1271, 
+  1067, 776, 1273, 1099, 776, 1275, 1277, 1279, 
+  1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 
+  1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 
+  1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 
+  1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 
+  1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 
+  1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 
+  1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 
+  1409, 1410, 1411, 1412, 1413, 1414, 1381, 1410, 
+  1575, 1619, 1575, 1620, 1608, 1620, 1575, 1621, 
+  1610, 1620, 1575, 1652, 1608, 1652, 1735, 1652, 
+  1610, 1652, 1749, 1620, 1729, 1620, 1746, 1620, 
+  2344, 2364, 2352, 2364, 2355, 2364, 2325, 2364, 
+  2326, 2364, 2327, 2364, 2332, 2364, 2337, 2364, 
+  2338, 2364, 2347, 2364, 2351, 2364, 2503, 2494, 
+  2503, 2519, 2465, 2492, 2466, 2492, 2479, 2492, 
+  2610, 2620, 2616, 2620, 2582, 2620, 2583, 2620, 
+  2588, 2620, 2603, 2620, 2887, 2902, 2887, 2878, 
+  2887, 2903, 2849, 2876, 2850, 2876, 2962, 3031, 
+  3014, 3006, 3015, 3006, 3014, 3031, 3142, 3158, 
+  3263, 3285, 3270, 3285, 3270, 3286, 3270, 3266, 
+  3274, 3285, 3398, 3390, 3399, 3390, 3398, 3415, 
+  3545, 3530, 3545, 3535, 3548, 3530, 3545, 3551, 
+  3661, 3634, 3789, 3762, 3755, 3737, 3755, 3745, 
+  3851, 3906, 4023, 3916, 4023, 3921, 4023, 3926, 
+  4023, 3931, 4023, 3904, 4021, 3953, 3954, 3953, 
+  3956, 4018, 3968, 4018, 3969, 4019, 3968, 4019, 
+  3969, 3953, 3968, 3986, 4023, 3996, 4023, 4001, 
+  4023, 4006, 4023, 4011, 4023, 3984, 4021, 4133, 
+  4142, 11520, 11521, 11522, 11523, 11524, 11525, 11526, 
+  11527, 11528, 11529, 11530, 11531, 11532, 11533, 11534, 
+  11535, 11536, 11537, 11538, 11539, 11540, 11541, 11542, 
+  11543, 11544, 11545, 11546, 11547, 11548, 11549, 11550, 
+  11551, 11552, 11553, 11554, 11555, 11556, 11557, 11559, 
+  11565, 4316, 5104, 5105, 5106, 5107, 5108, 5109, 
+  6917, 6965, 6919, 6965, 6921, 6965, 6923, 6965, 
+  6925, 6965, 6929, 6965, 6970, 6965, 6972, 6965, 
+  6974, 6965, 6975, 6965, 6978, 6965, 42571, 65, 
+  198, 66, 68, 69, 398, 71, 72, 73, 
+  74, 75, 76, 77, 78, 79, 546, 80, 
+  82, 84, 85, 87, 592, 593, 7426, 604, 
+  7446, 7447, 7453, 7461, 594, 597, 607, 609, 
+  613, 618, 7547, 669, 621, 7557, 671, 625, 
+  624, 627, 628, 632, 642, 427, 7452, 656, 
+  657, 65, 805, 7681, 97, 805, 66, 775, 
+  7683, 98, 775, 66, 803, 7685, 98, 803, 
+  66, 817, 7687, 98, 817, 199, 769, 7689, 
+  231, 769, 68, 775, 7691, 100, 775, 68, 
+  803, 7693, 100, 803, 68, 817, 7695, 100, 
+  817, 68, 807, 7697, 100, 807, 68, 813, 
+  7699, 100, 813, 274, 768, 7701, 275, 768, 
+  274, 769, 7703, 275, 769, 69, 813, 7705, 
+  101, 813, 69, 816, 7707, 101, 816, 552, 
+  774, 7709, 553, 774, 70, 775, 7711, 102, 
+  775, 71, 772, 7713, 103, 772, 72, 775, 
+  7715, 104, 775, 72, 803, 7717, 104, 803, 
+  72, 776, 7719, 104, 776, 72, 807, 7721, 
+  104, 807, 72, 814, 7723, 104, 814, 73, 
+  816, 7725, 105, 816, 207, 769, 7727, 239, 
+  769, 75, 769, 7729, 107, 769, 75, 803, 
+  7731, 107, 803, 75, 817, 7733, 107, 817, 
+  76, 803, 7735, 108, 803, 7734, 772, 7737, 
+  7735, 772, 76, 817, 7739, 108, 817, 76, 
+  813, 7741, 108, 813, 77, 769, 7743, 109, 
+  769, 77, 775, 7745, 109, 775, 77, 803, 
+  7747, 109, 803, 78, 775, 7749, 110, 775, 
+  78, 803, 7751, 110, 803, 78, 817, 7753, 
+  110, 817, 78, 813, 7755, 110, 813, 213, 
+  769, 7757, 245, 769, 213, 776, 7759, 245, 
+  776, 332, 768, 7761, 333, 768, 332, 769, 
+  7763, 333, 769, 80, 769, 7765, 112, 769, 
+  80, 775, 7767, 112, 775, 82, 775, 7769, 
+  114, 775, 82, 803, 7771, 114, 803, 7770, 
+  772, 7773, 7771, 772, 82, 817, 7775, 114, 
+  817, 83, 775, 7777, 115, 775, 83, 803, 
+  7779, 115, 803, 346, 775, 7781, 347, 775, 
+  352, 775, 7783, 353, 775, 7778, 775, 7785, 
+  7779, 775, 84, 775, 7787, 116, 775, 84, 
+  803, 7789, 116, 803, 84, 817, 7791, 116, 
+  817, 84, 813, 7793, 116, 813, 85, 804, 
+  7795, 117, 804, 85, 816, 7797, 117, 816, 
+  85, 813, 7799, 117, 813, 360, 769, 7801, 
+  361, 769, 362, 776, 7803, 363, 776, 86, 
+  771, 7805, 118, 771, 86, 803, 7807, 118, 
+  803, 87, 768, 7809, 119, 768, 87, 769, 
+  7811, 119, 769, 87, 776, 7813, 119, 776, 
+  87, 775, 7815, 119, 775, 87, 803, 7817, 
+  119, 803, 88, 775, 7819, 120, 775, 88, 
+  776, 7821, 120, 776, 89, 775, 7823, 121, 
+  775, 90, 770, 7825, 122, 770, 90, 803, 
+  7827, 122, 803, 90, 817, 7829, 122, 817, 
+  104, 817, 116, 776, 119, 778, 121, 778, 
+  97, 702, 383, 775, 223, 65, 803, 7841, 
+  97, 803, 65, 777, 7843, 97, 777, 194, 
+  769, 7845, 226, 769, 194, 768, 7847, 226, 
+  768, 194, 777, 7849, 226, 777, 194, 771, 
+  7851, 226, 771, 7840, 770, 7853, 7841, 770, 
+  258, 769, 7855, 259, 769, 258, 768, 7857, 
+  259, 768, 258, 777, 7859, 259, 777, 258, 
+  771, 7861, 259, 771, 7840, 774, 7863, 7841, 
+  774, 69, 803, 7865, 101, 803, 69, 777, 
+  7867, 101, 777, 69, 771, 7869, 101, 771, 
+  202, 769, 7871, 234, 769, 202, 768, 7873, 
+  234, 768, 202, 777, 7875, 234, 777, 202, 
+  771, 7877, 234, 771, 7864, 770, 7879, 7865, 
+  770, 73, 777, 7881, 105, 777, 73, 803, 
+  7883, 105, 803, 79, 803, 7885, 111, 803, 
+  79, 777, 7887, 111, 777, 212, 769, 7889, 
+  244, 769, 212, 768, 7891, 244, 768, 212, 
+  777, 7893, 244, 777, 212, 771, 7895, 244, 
+  771, 7884, 770, 7897, 7885, 770, 416, 769, 
+  7899, 417, 769, 416, 768, 7901, 417, 768, 
+  416, 777, 7903, 417, 777, 416, 771, 7905, 
+  417, 771, 416, 803, 7907, 417, 803, 85, 
+  803, 7909, 117, 803, 85, 777, 7911, 117, 
+  777, 431, 769, 7913, 432, 769, 431, 768, 
+  7915, 432, 768, 431, 777, 7917, 432, 777, 
+  431, 771, 7919, 432, 771, 431, 803, 7921, 
+  432, 803, 89, 768, 7923, 121, 768, 89, 
+  803, 7925, 121, 803, 89, 777, 7927, 121, 
+  777, 89, 771, 7929, 121, 771, 7931, 7933, 
+  7935, 945, 787, 945, 788, 7936, 768, 7937, 
+  768, 7936, 769, 7937, 769, 7936, 834, 7937, 
+  834, 913, 787, 7936, 913, 788, 7937, 7944, 
+  768, 7938, 7945, 768, 7939, 7944, 769, 7940, 
+  7945, 769, 7941, 7944, 834, 7942, 7945, 834, 
+  7943, 949, 787, 949, 788, 7952, 768, 7953, 
+  768, 7952, 769, 7953, 769, 917, 787, 7952, 
+  917, 788, 7953, 7960, 768, 7954, 7961, 768, 
+  7955, 7960, 769, 7956, 7961, 769, 7957, 951, 
+  787, 951, 788, 7968, 768, 7969, 768, 7968, 
+  769, 7969, 769, 7968, 834, 7969, 834, 919, 
+  787, 7968, 919, 788, 7969, 7976, 768, 7970, 
+  7977, 768, 7971, 7976, 769, 7972, 7977, 769, 
+  7973, 7976, 834, 7974, 7977, 834, 7975, 953, 
+  787, 953, 788, 7984, 768, 7985, 768, 7984, 
+  769, 7985, 769, 7984, 834, 7985, 834, 921, 
+  787, 7984, 921, 788, 7985, 7992, 768, 7986, 
+  7993, 768, 7987, 7992, 769, 7988, 7993, 769, 
+  7989, 7992, 834, 7990, 7993, 834, 7991, 959, 
+  787, 959, 788, 8000, 768, 8001, 768, 8000, 
+  769, 8001, 769, 927, 787, 8000, 927, 788, 
+  8001, 8008, 768, 8002, 8009, 768, 8003, 8008, 
+  769, 8004, 8009, 769, 8005, 965, 787, 965, 
+  788, 8016, 768, 965, 787, 768, 8017, 768, 
+  8016, 769, 965, 787, 769, 8017, 769, 8016, 
+  834, 965, 787, 834, 8017, 834, 933, 788, 
+  8017, 8025, 768, 8019, 8025, 769, 8021, 8025, 
+  834, 8023, 969, 787, 969, 788, 8032, 768, 
+  8033, 768, 8032, 769, 8033, 769, 8032, 834, 
+  8033, 834, 937, 787, 8032, 937, 788, 8033, 
+  8040, 768, 8034, 8041, 768, 8035, 8040, 769, 
+  8036, 8041, 769, 8037, 8040, 834, 8038, 8041, 
+  834, 8039, 945, 768, 949, 768, 951, 768, 
+  953, 768, 959, 768, 965, 768, 969, 768, 
+  7936, 837, 7936, 953, 7937, 837, 7937, 953, 
+  7938, 837, 7938, 953, 7939, 837, 7939, 953, 
+  7940, 837, 7940, 953, 7941, 837, 7941, 953, 
+  7942, 837, 7942, 953, 7943, 837, 7943, 953, 
+  7944, 837, 8064, 7945, 837, 8065, 7946, 837, 
+  8066, 7947, 837, 8067, 7948, 837, 8068, 7949, 
+  837, 8069, 7950, 837, 8070, 7951, 837, 8071, 
+  7968, 837, 7968, 953, 7969, 837, 7969, 953, 
+  7970, 837, 7970, 953, 7971, 837, 7971, 953, 
+  7972, 837, 7972, 953, 7973, 837, 7973, 953, 
+  7974, 837, 7974, 953, 7975, 837, 7975, 953, 
+  7976, 837, 8080, 7977, 837, 8081, 7978, 837, 
+  8082, 7979, 837, 8083, 7980, 837, 8084, 7981, 
+  837, 8085, 7982, 837, 8086, 7983, 837, 8087, 
+  8032, 837, 8032, 953, 8033, 837, 8033, 953, 
+  8034, 837, 8034, 953, 8035, 837, 8035, 953, 
+  8036, 837, 8036, 953, 8037, 837, 8037, 953, 
+  8038, 837, 8038, 953, 8039, 837, 8039, 953, 
+  8040, 837, 8096, 8041, 837, 8097, 8042, 837, 
+  8098, 8043, 837, 8099, 8044, 837, 8100, 8045, 
+  837, 8101, 8046, 837, 8102, 8047, 837, 8103, 
+  945, 774, 945, 772, 8048, 837, 8048, 953, 
+  945, 837, 945, 953, 940, 837, 940, 953, 
+  945, 834, 8118, 837, 945, 834, 953, 913, 
+  774, 8112, 913, 772, 8113, 913, 768, 8048, 
+  902, 8049, 913, 837, 8115, 32, 787, 32, 
+  834, 168, 834, 8052, 837, 8052, 953, 951, 
+  837, 951, 953, 942, 837, 942, 953, 951, 
+  834, 8134, 837, 951, 834, 953, 917, 768, 
+  8050, 904, 8051, 919, 768, 8052, 905, 8053, 
+  919, 837, 8131, 8127, 768, 8127, 769, 8127, 
+  834, 953, 774, 953, 772, 970, 768, 953, 
+  776, 768, 912, 953, 834, 970, 834, 953, 
+  776, 834, 921, 774, 8144, 921, 772, 8145, 
+  921, 768, 8054, 906, 8055, 8190, 768, 8190, 
+  769, 8190, 834, 965, 774, 965, 772, 971, 
+  768, 965, 776, 768, 944, 961, 787, 961, 
+  788, 965, 834, 971, 834, 965, 776, 834, 
+  933, 774, 8160, 933, 772, 8161, 933, 768, 
+  8058, 910, 8059, 929, 788, 8165, 168, 768, 
+  901, 96, 8060, 837, 8060, 953, 969, 837, 
+  969, 953, 974, 837, 974, 953, 969, 834, 
+  8182, 837, 969, 834, 953, 927, 768, 8056, 
+  908, 8057, 937, 768, 8060, 911, 8061, 937, 
+  837, 8179, 180, 32, 788, 8194, 8195, 8208, 
+  32, 819, 46, 46, 46, 46, 46, 46, 
+  8242, 8242, 8242, 8242, 8242, 8245, 8245, 8245, 
+  8245, 8245, 33, 33, 32, 773, 63, 63, 
+  63, 33, 33, 63, 8242, 8242, 8242, 8242, 
+  48, 52, 53, 54, 55, 56, 57, 43, 
+  8722, 61, 40, 41, 82, 115, 97, 47, 
+  99, 97, 47, 115, 67, 176, 67, 99, 
+  47, 111, 99, 47, 117, 400, 176, 70, 
+  78, 111, 81, 83, 77, 84, 69, 76, 
+  84, 77, 90, 937, 197, 70, 8526, 1488, 
+  1489, 1490, 1491, 70, 65, 88, 915, 928, 
+  8721, 49, 8260, 55, 49, 8260, 57, 49, 
+  8260, 49, 48, 49, 8260, 51, 50, 8260, 
+  51, 49, 8260, 53, 50, 8260, 53, 51, 
+  8260, 53, 52, 8260, 53, 49, 8260, 54, 
+  53, 8260, 54, 49, 8260, 56, 51, 8260, 
+  56, 53, 8260, 56, 55, 8260, 56, 49, 
+  8260, 8560, 73, 73, 8561, 73, 73, 73, 
+  8562, 73, 86, 8563, 86, 8564, 86, 73, 
+  8565, 86, 73, 73, 8566, 86, 73, 73, 
+  73, 8567, 73, 88, 8568, 88, 8569, 88, 
+  73, 8570, 88, 73, 73, 8571, 8572, 8573, 
+  8574, 8575, 105, 105, 105, 105, 105, 105, 
+  118, 118, 105, 118, 105, 105, 118, 105, 
+  105, 105, 105, 120, 120, 105, 120, 105, 
+  105, 8580, 48, 8260, 51, 8592, 824, 8594, 
+  824, 8596, 824, 8656, 824, 8660, 824, 8658, 
+  824, 8707, 824, 8712, 824, 8715, 824, 8739, 
+  824, 8741, 824, 8747, 8747, 8747, 8747, 8747, 
+  8750, 8750, 8750, 8750, 8750, 8764, 824, 8771, 
+  824, 8773, 824, 8776, 824, 61, 824, 8801, 
+  824, 8781, 824, 60, 824, 62, 824, 8804, 
+  824, 8805, 824, 8818, 824, 8819, 824, 8822, 
+  824, 8823, 824, 8826, 824, 8827, 824, 8834, 
+  824, 8835, 824, 8838, 824, 8839, 824, 8866, 
+  824, 8872, 824, 8873, 824, 8875, 824, 8828, 
+  824, 8829, 824, 8849, 824, 8850, 824, 8882, 
+  824, 8883, 824, 8884, 824, 8885, 824, 12296, 
+  12297, 49, 48, 49, 49, 49, 50, 49, 
+  51, 49, 52, 49, 53, 49, 54, 49, 
+  55, 49, 56, 49, 57, 50, 48, 40, 
+  49, 41, 40, 50, 41, 40, 51, 41, 
+  40, 52, 41, 40, 53, 41, 40, 54, 
+  41, 40, 55, 41, 40, 56, 41, 40, 
+  57, 41, 40, 49, 48, 41, 40, 49, 
+  49, 41, 40, 49, 50, 41, 40, 49, 
+  51, 41, 40, 49, 52, 41, 40, 49, 
+  53, 41, 40, 49, 54, 41, 40, 49, 
+  55, 41, 40, 49, 56, 41, 40, 49, 
+  57, 41, 40, 50, 48, 41, 49, 46, 
+  50, 46, 51, 46, 52, 46, 53, 46, 
+  54, 46, 55, 46, 56, 46, 57, 46, 
+  49, 48, 46, 49, 49, 46, 49, 50, 
+  46, 49, 51, 46, 49, 52, 46, 49, 
+  53, 46, 49, 54, 46, 49, 55, 46, 
+  49, 56, 46, 49, 57, 46, 50, 48, 
+  46, 40, 97, 41, 40, 98, 41, 40, 
+  99, 41, 40, 100, 41, 40, 101, 41, 
+  40, 102, 41, 40, 103, 41, 40, 104, 
+  41, 40, 105, 41, 40, 106, 41, 40, 
+  107, 41, 40, 108, 41, 40, 109, 41, 
+  40, 110, 41, 40, 111, 41, 40, 112, 
+  41, 40, 113, 41, 40, 114, 41, 40, 
+  115, 41, 40, 116, 41, 40, 117, 41, 
+  40, 118, 41, 40, 119, 41, 40, 120, 
+  41, 40, 121, 41, 40, 122, 41, 9424, 
+  9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 
+  9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 
+  9441, 83, 9442, 9443, 9444, 9445, 9446, 9447, 
+  89, 9448, 9449, 8747, 8747, 8747, 8747, 58, 
+  58, 61, 61, 61, 61, 61, 61, 10973, 
+  824, 11312, 11313, 11314, 11315, 11316, 11317, 11318, 
+  11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, 
+  11327, 11328, 11329, 11330, 11331, 11332, 11333, 11334, 
+  11335, 11336, 11337, 11338, 11339, 11340, 11341, 11342, 
+  11343, 11344, 11345, 11346, 11347, 11348, 11349, 11350, 
+  11351, 11352, 11353, 11354, 11355, 11356, 11357, 11358, 
+  11361, 619, 7549, 637, 11368, 11370, 11372, 11379, 
+  11382, 575, 576, 11393, 11395, 11397, 11399, 11401, 
+  11403, 11405, 11407, 11409, 11411, 11413, 11415, 11417, 
+  11419, 11421, 11423, 11425, 11427, 11429, 11431, 11433, 
+  11435, 11437, 11439, 11441, 11443, 11445, 11447, 11449, 
+  11451, 11453, 11455, 11457, 11459, 11461, 11463, 11465, 
+  11467, 11469, 11471, 11473, 11475, 11477, 11479, 11481, 
+  11483, 11485, 11487, 11489, 11491, 11500, 11502, 11507, 
+  11617, 27597, 40863, 19968, 20008, 20022, 20031, 20057, 
+  20101, 20108, 20128, 20154, 20799, 20837, 20843, 20866, 
+  20886, 20907, 20960, 20981, 20992, 21147, 21241, 21269, 
+  21274, 21304, 21313, 21340, 21353, 21378, 21430, 21448, 
+  21475, 22231, 22303, 22763, 22786, 22794, 22805, 22823, 
+  22899, 23376, 23424, 23544, 23567, 23586, 23608, 23662, 
+  23665, 24027, 24037, 24049, 24062, 24178, 24186, 24191, 
+  24308, 24318, 24331, 24339, 24400, 24417, 24435, 24515, 
+  25096, 25142, 25163, 25903, 25908, 25991, 26007, 26020, 
+  26041, 26080, 26085, 26352, 26376, 26408, 27424, 27490, 
+  27513, 27571, 27595, 27604, 27611, 27663, 27668, 27700, 
+  28779, 29226, 29238, 29243, 29247, 29255, 29273, 29275, 
+  29356, 29572, 29577, 29916, 29926, 29976, 29983, 29992, 
+  30000, 30091, 30098, 30326, 30333, 30382, 30399, 30446, 
+  30683, 30690, 30707, 31034, 31160, 31166, 31348, 31435, 
+  31481, 31859, 31992, 32566, 32593, 32650, 32701, 32769, 
+  32780, 32786, 32819, 32895, 32905, 33251, 33258, 33267, 
+  33276, 33292, 33307, 33311, 33390, 33394, 33400, 34381, 
+  34411, 34880, 34892, 34915, 35198, 35211, 35282, 35328, 
+  35895, 35910, 35925, 35960, 35997, 36196, 36208, 36275, 
+  36523, 36554, 36763, 36784, 36789, 37009, 37193, 37318, 
+  37324, 37329, 38263, 38272, 38428, 38582, 38585, 38632, 
+  38737, 38750, 38754, 38761, 38859, 38893, 38899, 38913, 
+  39080, 39131, 39135, 39318, 39321, 39340, 39592, 39640, 
+  39647, 39717, 39727, 39730, 39740, 39770, 40165, 40565, 
+  40575, 40613, 40635, 40643, 40653, 40657, 40697, 40701, 
+  40718, 40723, 40736, 40763, 40778, 40786, 40845, 40860, 
+  40864, 12306, 21316, 21317, 12363, 12441, 12365, 12441, 
+  12367, 12441, 12369, 12441, 12371, 12441, 12373, 12441, 
+  12375, 12441, 12377, 12441, 12379, 12441, 12381, 12441, 
+  12383, 12441, 12385, 12441, 12388, 12441, 12390, 12441, 
+  12392, 12441, 12399, 12441, 12399, 12442, 12402, 12441, 
+  12402, 12442, 12405, 12441, 12405, 12442, 12408, 12441, 
+  12408, 12442, 12411, 12441, 12411, 12442, 12358, 12441, 
+  32, 12441, 32, 12442, 12445, 12441, 12424, 12426, 
+  12459, 12441, 12461, 12441, 12463, 12441, 12465, 12441, 
+  12467, 12441, 12469, 12441, 12471, 12441, 12473, 12441, 
+  12475, 12441, 12477, 12441, 12479, 12441, 12481, 12441, 
+  12484, 12441, 12486, 12441, 12488, 12441, 12495, 12441, 
+  12495, 12442, 12498, 12441, 12498, 12442, 12501, 12441, 
+  12501, 12442, 12504, 12441, 12504, 12442, 12507, 12441, 
+  12507, 12442, 12454, 12441, 12527, 12441, 12528, 12441, 
+  12529, 12441, 12530, 12441, 12541, 12441, 12467, 12488, 
+  4352, 4353, 4522, 4354, 4524, 4525, 4355, 4356, 
+  4357, 4528, 4529, 4530, 4531, 4532, 4533, 4378, 
+  4358, 4359, 4360, 4385, 4361, 4362, 4363, 4364, 
+  4365, 4366, 4367, 4368, 4369, 4370, 4449, 4450, 
+  4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 
+  4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 
+  4467, 4468, 4469, 4448, 4372, 4373, 4551, 4552, 
+  4556, 4558, 4563, 4567, 4569, 4380, 4573, 4575, 
+  4381, 4382, 4384, 4386, 4387, 4391, 4393, 4395, 
+  4396, 4397, 4398, 4399, 4402, 4406, 4416, 4423, 
+  4428, 4593, 4594, 4439, 4440, 4441, 4484, 4485, 
+  4488, 4497, 4498, 4500, 4510, 4513, 19977, 22235, 
+  19978, 20013, 19979, 30002, 19993, 19969, 22825, 22320, 
+  40, 4352, 41, 40, 4354, 41, 40, 4355, 
+  41, 40, 4357, 41, 40, 4358, 41, 40, 
+  4359, 41, 40, 4361, 41, 40, 4363, 41, 
+  40, 4364, 41, 40, 4366, 41, 40, 4367, 
+  41, 40, 4368, 41, 40, 4369, 41, 40, 
+  4370, 41, 40, 4352, 4449, 41, 40, 4354, 
+  4449, 41, 40, 4355, 4449, 41, 40, 4357, 
+  4449, 41, 40, 4358, 4449, 41, 40, 4359, 
+  4449, 41, 40, 4361, 4449, 41, 40, 4363, 
+  4449, 41, 40, 4364, 4449, 41, 40, 4366, 
+  4449, 41, 40, 4367, 4449, 41, 40, 4368, 
+  4449, 41, 40, 4369, 4449, 41, 40, 4370, 
+  4449, 41, 40, 4364, 4462, 41, 40, 4363, 
+  4457, 4364, 4453, 4523, 41, 40, 4363, 4457, 
+  4370, 4462, 41, 40, 19968, 41, 40, 20108, 
+  41, 40, 19977, 41, 40, 22235, 41, 40, 
+  20116, 41, 40, 20845, 41, 40, 19971, 41, 
+  40, 20843, 41, 40, 20061, 41, 40, 21313, 
+  41, 40, 26376, 41, 40, 28779, 41, 40, 
+  27700, 41, 40, 26408, 41, 40, 37329, 41, 
+  40, 22303, 41, 40, 26085, 41, 40, 26666, 
+  41, 40, 26377, 41, 40, 31038, 41, 40, 
+  21517, 41, 40, 29305, 41, 40, 36001, 41, 
+  40, 31069, 41, 40, 21172, 41, 40, 20195, 
+  41, 40, 21628, 41, 40, 23398, 41, 40, 
+  30435, 41, 40, 20225, 41, 40, 36039, 41, 
+  40, 21332, 41, 40, 31085, 41, 40, 20241, 
+  41, 40, 33258, 41, 40, 33267, 41, 21839, 
+  24188, 31631, 80, 84, 69, 50, 49, 50, 
+  50, 50, 51, 50, 52, 50, 53, 50, 
+  54, 50, 55, 50, 56, 50, 57, 51, 
+  48, 51, 49, 51, 50, 51, 51, 51, 
+  52, 51, 53, 4352, 4449, 4354, 4449, 4355, 
+  4449, 4357, 4449, 4358, 4449, 4359, 4449, 4361, 
+  4449, 4363, 4449, 4364, 4449, 4366, 4449, 4367, 
+  4449, 4368, 4449, 4369, 4449, 4370, 4449, 4366, 
+  4449, 4535, 4352, 4457, 4364, 4462, 4363, 4468, 
+  4363, 4462, 20116, 20845, 19971, 20061, 26666, 26377, 
+  31038, 21517, 29305, 36001, 31069, 21172, 31192, 30007, 
+  36969, 20778, 21360, 27880, 38917, 20241, 20889, 27491, 
+  24038, 21491, 21307, 23447, 23398, 30435, 20225, 36039, 
+  21332, 22812, 51, 54, 51, 55, 51, 56, 
+  51, 57, 52, 48, 52, 49, 52, 50, 
+  52, 51, 52, 52, 52, 53, 52, 54, 
+  52, 55, 52, 56, 52, 57, 53, 48, 
+  49, 26376, 50, 26376, 51, 26376, 52, 26376, 
+  53, 26376, 54, 26376, 55, 26376, 56, 26376, 
+  57, 26376, 49, 48, 26376, 49, 49, 26376, 
+  49, 50, 26376, 72, 103, 101, 114, 103, 
+  101, 86, 76, 84, 68, 12450, 12452, 12454, 
+  12456, 12458, 12459, 12461, 12463, 12465, 12467, 12469, 
+  12471, 12473, 12475, 12477, 12479, 12481, 12484, 12486, 
+  12488, 12490, 12491, 12492, 12493, 12494, 12495, 12498, 
+  12501, 12504, 12507, 12510, 12511, 12512, 12513, 12514, 
+  12516, 12518, 12520, 12521, 12522, 12523, 12524, 12525, 
+  12527, 12528, 12529, 12530, 12450, 12497, 12540, 12488, 
+  12450, 12523, 12501, 12449, 12450, 12531, 12506, 12450, 
+  12450, 12540, 12523, 12452, 12491, 12531, 12464, 12452, 
+  12531, 12481, 12454, 12457, 12531, 12456, 12473, 12463, 
+  12540, 12489, 12456, 12540, 12459, 12540, 12458, 12531, 
+  12473, 12458, 12540, 12512, 12459, 12452, 12522, 12459, 
+  12521, 12483, 12488, 12459, 12525, 12522, 12540, 12460, 
+  12525, 12531, 12460, 12531, 12510, 12462, 12460, 12462, 
+  12491, 12540, 12461, 12517, 12522, 12540, 12462, 12523, 
+  12480, 12540, 12461, 12525, 12461, 12525, 12464, 12521, 
+  12512, 12461, 12525, 12513, 12540, 12488, 12523, 12461, 
+  12525, 12527, 12483, 12488, 12464, 12521, 12512, 12464, 
+  12521, 12512, 12488, 12531, 12463, 12523, 12476, 12452, 
+  12525, 12463, 12525, 12540, 12493, 12465, 12540, 12473, 
+  12467, 12523, 12490, 12467, 12540, 12509, 12469, 12452, 
+  12463, 12523, 12469, 12531, 12481, 12540, 12512, 12471, 
+  12522, 12531, 12464, 12475, 12531, 12481, 12475, 12531, 
+  12488, 12480, 12540, 12473, 12487, 12471, 12489, 12523, 
+  12488, 12531, 12490, 12494, 12494, 12483, 12488, 12495, 
+  12452, 12484, 12497, 12540, 12475, 12531, 12488, 12497, 
+  12540, 12484, 12496, 12540, 12524, 12523, 12500, 12450, 
+  12473, 12488, 12523, 12500, 12463, 12523, 12500, 12467, 
+  12499, 12523, 12501, 12449, 12521, 12483, 12489, 12501, 
+  12451, 12540, 12488, 12502, 12483, 12471, 12455, 12523, 
+  12501, 12521, 12531, 12504, 12463, 12479, 12540, 12523, 
+  12506, 12477, 12506, 12491, 12498, 12504, 12523, 12484, 
+  12506, 12531, 12473, 12506, 12540, 12472, 12505, 12540, 
+  12479, 12509, 12452, 12531, 12488, 12508, 12523, 12488, 
+  12507, 12531, 12509, 12531, 12489, 12507, 12540, 12523, 
+  12507, 12540, 12531, 12510, 12452, 12463, 12525, 12510, 
+  12452, 12523, 12510, 12483, 12495, 12510, 12523, 12463, 
+  12510, 12531, 12471, 12519, 12531, 12511, 12463, 12525, 
+  12531, 12511, 12522, 12511, 12522, 12496, 12540, 12523, 
+  12513, 12460, 12513, 12460, 12488, 12531, 12513, 12540, 
+  12488, 12523, 12516, 12540, 12489, 12516, 12540, 12523, 
+  12518, 12450, 12531, 12522, 12483, 12488, 12523, 12522, 
+  12521, 12523, 12500, 12540, 12523, 12540, 12502, 12523, 
+  12524, 12512, 12524, 12531, 12488, 12466, 12531, 12527, 
+  12483, 12488, 48, 28857, 49, 28857, 50, 28857, 
+  51, 28857, 52, 28857, 53, 28857, 54, 28857, 
+  55, 28857, 56, 28857, 57, 28857, 49, 48, 
+  28857, 49, 49, 28857, 49, 50, 28857, 49, 
+  51, 28857, 49, 52, 28857, 49, 53, 28857, 
+  49, 54, 28857, 49, 55, 28857, 49, 56, 
+  28857, 49, 57, 28857, 50, 48, 28857, 50, 
+  49, 28857, 50, 50, 28857, 50, 51, 28857, 
+  50, 52, 28857, 104, 80, 97, 100, 97, 
+  65, 85, 98, 97, 114, 111, 86, 112, 
+  99, 100, 109, 100, 109, 178, 100, 109, 
+  179, 73, 85, 24179, 25104, 26157, 21644, 22823, 
+  27491, 26126, 27835, 26666, 24335, 20250, 31038, 112, 
+  65, 110, 65, 956, 65, 109, 65, 107, 
+  65, 75, 66, 77, 66, 71, 66, 99, 
+  97, 108, 107, 99, 97, 108, 112, 70, 
+  110, 70, 956, 70, 956, 103, 109, 103, 
+  107, 103, 72, 122, 107, 72, 122, 77, 
+  72, 122, 71, 72, 122, 84, 72, 122, 
+  956, 8467, 109, 8467, 100, 8467, 107, 8467, 
+  102, 109, 110, 109, 956, 109, 109, 109, 
+  99, 109, 107, 109, 109, 109, 178, 99, 
+  109, 178, 109, 178, 107, 109, 178, 109, 
+  109, 179, 99, 109, 179, 109, 179, 107, 
+  109, 179, 109, 8725, 115, 109, 8725, 115, 
+  178, 80, 97, 107, 80, 97, 77, 80, 
+  97, 71, 80, 97, 114, 97, 100, 114, 
+  97, 100, 8725, 115, 114, 97, 100, 8725, 
+  115, 178, 112, 115, 110, 115, 956, 115, 
+  109, 115, 112, 86, 110, 86, 956, 86, 
+  109, 86, 107, 86, 77, 86, 112, 87, 
+  110, 87, 956, 87, 109, 87, 107, 87, 
+  77, 87, 107, 937, 77, 937, 97, 46, 
+  109, 46, 66, 113, 99, 99, 99, 100, 
+  67, 8725, 107, 103, 67, 111, 46, 100, 
+  66, 71, 121, 104, 97, 72, 80, 105, 
+  110, 75, 75, 75, 77, 107, 116, 108, 
+  109, 108, 110, 108, 111, 103, 108, 120, 
+  109, 98, 109, 105, 108, 109, 111, 108, 
+  80, 72, 112, 46, 109, 46, 80, 80, 
+  77, 80, 82, 115, 114, 83, 118, 87, 
+  98, 86, 8725, 109, 65, 8725, 109, 49, 
+  26085, 50, 26085, 51, 26085, 52, 26085, 53, 
+  26085, 54, 26085, 55, 26085, 56, 26085, 57, 
+  26085, 49, 48, 26085, 49, 49, 26085, 49, 
+  50, 26085, 49, 51, 26085, 49, 52, 26085, 
+  49, 53, 26085, 49, 54, 26085, 49, 55, 
+  26085, 49, 56, 26085, 49, 57, 26085, 50, 
+  48, 26085, 50, 49, 26085, 50, 50, 26085, 
+  50, 51, 26085, 50, 52, 26085, 50, 53, 
+  26085, 50, 54, 26085, 50, 55, 26085, 50, 
+  56, 26085, 50, 57, 26085, 51, 48, 26085, 
+  51, 49, 26085, 103, 97, 108, 42561, 42563, 
+  42565, 42567, 42569, 42573, 42575, 42577, 42579, 42581, 
+  42583, 42585, 42587, 42589, 42591, 42593, 42595, 42597, 
+  42599, 42601, 42603, 42605, 42625, 42627, 42629, 42631, 
+  42633, 42635, 42637, 42639, 42641, 42643, 42645, 42647, 
+  42649, 42651, 42787, 42789, 42791, 42793, 42795, 42797, 
+  42799, 42803, 42805, 42807, 42809, 42811, 42813, 42815, 
+  42817, 42819, 42821, 42823, 42825, 42827, 42829, 42831, 
+  42833, 42835, 42837, 42839, 42841, 42843, 42845, 42847, 
+  42849, 42851, 42853, 42855, 42857, 42859, 42861, 42863, 
+  42874, 42876, 7545, 42879, 42881, 42883, 42885, 42887, 
+  42892, 42897, 42899, 42903, 42905, 42907, 42909, 42911, 
+  42913, 42915, 42917, 42919, 42921, 620, 670, 647, 
+  43859, 42933, 42935, 294, 43831, 43858, 5024, 5025, 
+  5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 
+  5034, 5035, 5036, 5037, 5038, 5039, 5040, 5041, 
+  5042, 5043, 5044, 5045, 5046, 5047, 5048, 5049, 
+  5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 
+  5058, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 
+  5066, 5067, 5068, 5069, 5070, 5071, 5072, 5073, 
+  5074, 5075, 5076, 5077, 5078, 5079, 5080, 5081, 
+  5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 
+  5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 
+  5098, 5099, 5100, 5101, 5102, 5103, 35912, 26356, 
+  36040, 28369, 20018, 21477, 22865, 21895, 22856, 25078, 
+  30313, 32645, 34367, 34746, 35064, 37007, 27138, 27931, 
+  28889, 29662, 33853, 37226, 39409, 20098, 21365, 27396, 
+  29211, 34349, 40478, 23888, 28651, 34253, 35172, 25289, 
+  33240, 34847, 24266, 26391, 28010, 29436, 37070, 20358, 
+  20919, 21214, 25796, 27347, 29200, 30439, 34310, 34396, 
+  36335, 38706, 39791, 40442, 30860, 31103, 32160, 33737, 
+  37636, 35542, 22751, 24324, 31840, 32894, 29282, 30922, 
+  36034, 38647, 22744, 23650, 27155, 28122, 28431, 32047, 
+  32311, 38475, 21202, 32907, 20956, 20940, 31260, 32190, 
+  33777, 38517, 35712, 25295, 35582, 20025, 23527, 24594, 
+  29575, 30064, 21271, 30971, 20415, 24489, 19981, 27852, 
+  25976, 32034, 21443, 22622, 30465, 33865, 35498, 27578, 
+  27784, 25342, 33509, 25504, 30053, 20142, 20841, 20937, 
+  26753, 31975, 33391, 35538, 37327, 21237, 21570, 24300, 
+  26053, 28670, 31018, 38317, 39530, 40599, 40654, 26310, 
+  27511, 36706, 24180, 24976, 25088, 25754, 28451, 29001, 
+  29833, 31178, 32244, 32879, 36646, 34030, 36899, 37706, 
+  21015, 21155, 21693, 28872, 35010, 24265, 24565, 25467, 
+  27566, 31806, 29557, 20196, 22265, 23994, 24604, 29618, 
+  29801, 32666, 32838, 37428, 38646, 38728, 38936, 20363, 
+  31150, 37300, 38584, 24801, 20102, 20698, 23534, 23615, 
+  26009, 29134, 30274, 34044, 36988, 26248, 38446, 21129, 
+  26491, 26611, 27969, 28316, 29705, 30041, 30827, 32016, 
+  39006, 25134, 38520, 20523, 23833, 28138, 36650, 24459, 
+  24900, 26647, 38534, 21033, 21519, 23653, 26131, 26446, 
+  26792, 27877, 29702, 30178, 32633, 35023, 35041, 38626, 
+  21311, 28346, 21533, 29136, 29848, 34298, 38563, 40023, 
+  40607, 26519, 28107, 33256, 31520, 31890, 29376, 28825, 
+  35672, 20160, 33590, 21050, 20999, 24230, 25299, 31958, 
+  23429, 27934, 26292, 36667, 38477, 24275, 20800, 21952, 
+  22618, 26228, 20958, 29482, 30410, 31036, 31070, 31077, 
+  31119, 38742, 31934, 34322, 35576, 36920, 37117, 39151, 
+  39164, 39208, 40372, 37086, 38583, 20398, 20711, 20813, 
+  21193, 21220, 21329, 21917, 22022, 22120, 22592, 22696, 
+  23652, 24724, 24936, 24974, 25074, 25935, 26082, 26257, 
+  26757, 28023, 28186, 28450, 29038, 29227, 29730, 30865, 
+  31049, 31048, 31056, 31062, 31117, 31118, 31296, 31361, 
+  31680, 32265, 32321, 32626, 32773, 33261, 33401, 33879, 
+  35088, 35222, 35585, 35641, 36051, 36104, 36790, 38627, 
+  38911, 38971, 24693, 55376, 57070, 33304, 20006, 20917, 
+  20840, 20352, 20805, 20864, 21191, 21242, 21845, 21913, 
+  21986, 22707, 22852, 22868, 23138, 23336, 24274, 24281, 
+  24425, 24493, 24792, 24910, 24840, 24928, 25140, 25540, 
+  25628, 25682, 25942, 26395, 26454, 28379, 28363, 28702, 
+  30631, 29237, 29359, 29809, 29958, 30011, 30237, 30239, 
+  30427, 30452, 30538, 30528, 30924, 31409, 31867, 32091, 
+  32574, 33618, 33775, 34681, 35137, 35206, 35519, 35531, 
+  35565, 35722, 36664, 36978, 37273, 37494, 38524, 38875, 
+  38923, 39698, 55370, 56394, 55370, 56388, 55372, 57301, 
+  15261, 16408, 16441, 55380, 56905, 55383, 56528, 55391, 
+  57043, 40771, 40846, 102, 102, 102, 105, 102, 
+  108, 102, 102, 105, 102, 102, 108, 383, 
+  116, 115, 116, 1396, 1398, 1396, 1381, 1396, 
+  1387, 1406, 1398, 1396, 1389, 1497, 1460, 1522, 
+  1463, 1506, 1492, 1499, 1500, 1501, 1512, 1514, 
+  1513, 1473, 1513, 1474, 64329, 1473, 64329, 1474, 
+  1488, 1463, 1488, 1464, 1488, 1468, 1489, 1468, 
+  1490, 1468, 1491, 1468, 1492, 1468, 1493, 1468, 
+  1494, 1468, 1496, 1468, 1497, 1468, 1498, 1468, 
+  1499, 1468, 1500, 1468, 1502, 1468, 1504, 1468, 
+  1505, 1468, 1507, 1468, 1508, 1468, 1510, 1468, 
+  1511, 1468, 1512, 1468, 1513, 1468, 1514, 1468, 
+  1493, 1465, 1489, 1471, 1499, 1471, 1508, 1471, 
+  1488, 1500, 1649, 1659, 1662, 1664, 1658, 1663, 
+  1657, 1700, 1702, 1668, 1667, 1670, 1671, 1677, 
+  1676, 1678, 1672, 1688, 1681, 1705, 1711, 1715, 
+  1713, 1722, 1723, 1728, 1729, 1726, 1746, 1747, 
+  1709, 1735, 1734, 1736, 1655, 1739, 1733, 1737, 
+  1744, 1609, 1574, 1575, 1574, 1749, 1574, 1608, 
+  1574, 1735, 1574, 1734, 1574, 1736, 1574, 1744, 
+  1574, 1609, 1740, 1574, 1580, 1574, 1581, 1574, 
+  1605, 1574, 1610, 1576, 1580, 1576, 1581, 1576, 
+  1582, 1576, 1605, 1576, 1609, 1576, 1610, 1578, 
+  1580, 1578, 1581, 1578, 1582, 1578, 1605, 1578, 
+  1609, 1578, 1610, 1579, 1580, 1579, 1605, 1579, 
+  1609, 1579, 1610, 1580, 1581, 1580, 1605, 1581, 
+  1580, 1581, 1605, 1582, 1580, 1582, 1581, 1582, 
+  1605, 1587, 1580, 1587, 1581, 1587, 1582, 1587, 
+  1605, 1589, 1581, 1589, 1605, 1590, 1580, 1590, 
+  1581, 1590, 1582, 1590, 1605, 1591, 1581, 1591, 
+  1605, 1592, 1605, 1593, 1580, 1593, 1605, 1594, 
+  1580, 1594, 1605, 1601, 1580, 1601, 1581, 1601, 
+  1582, 1601, 1605, 1601, 1609, 1601, 1610, 1602, 
+  1581, 1602, 1605, 1602, 1609, 1602, 1610, 1603, 
+  1575, 1603, 1580, 1603, 1581, 1603, 1582, 1603, 
+  1604, 1603, 1605, 1603, 1609, 1603, 1610, 1604, 
+  1580, 1604, 1581, 1604, 1582, 1604, 1605, 1604, 
+  1609, 1604, 1610, 1605, 1580, 1605, 1581, 1605, 
+  1582, 1605, 1605, 1605, 1609, 1605, 1610, 1606, 
+  1580, 1606, 1581, 1606, 1582, 1606, 1605, 1606, 
+  1609, 1606, 1610, 1607, 1580, 1607, 1605, 1607, 
+  1609, 1607, 1610, 1610, 1580, 1610, 1581, 1610, 
+  1582, 1610, 1605, 1610, 1609, 1610, 1610, 1584, 
+  1648, 1585, 1648, 1609, 1648, 32, 1612, 1617, 
+  32, 1613, 1617, 32, 1614, 1617, 32, 1615, 
+  1617, 32, 1616, 1617, 32, 1617, 1648, 1574, 
+  1585, 1574, 1586, 1574, 1606, 1576, 1585, 1576, 
+  1586, 1576, 1606, 1578, 1585, 1578, 1586, 1578, 
+  1606, 1579, 1585, 1579, 1586, 1579, 1606, 1605, 
+  1575, 1606, 1585, 1606, 1586, 1606, 1606, 1610, 
+  1585, 1610, 1586, 1610, 1606, 1574, 1582, 1574, 
+  1607, 1576, 1607, 1578, 1607, 1589, 1582, 1604, 
+  1607, 1606, 1607, 1607, 1648, 1610, 1607, 1579, 
+  1607, 1587, 1607, 1588, 1605, 1588, 1607, 1600, 
+  1614, 1617, 1600, 1615, 1617, 1600, 1616, 1617, 
+  1591, 1609, 1591, 1610, 1593, 1609, 1593, 1610, 
+  1594, 1609, 1594, 1610, 1587, 1609, 1587, 1610, 
+  1588, 1609, 1588, 1610, 1581, 1609, 1581, 1610, 
+  1580, 1609, 1580, 1610, 1582, 1609, 1582, 1610, 
+  1589, 1609, 1589, 1610, 1590, 1609, 1590, 1610, 
+  1588, 1580, 1588, 1581, 1588, 1582, 1588, 1585, 
+  1587, 1585, 1589, 1585, 1590, 1585, 1575, 1611, 
+  1578, 1580, 1605, 1578, 1581, 1580, 1578, 1581, 
+  1605, 1578, 1582, 1605, 1578, 1605, 1580, 1578, 
+  1605, 1581, 1578, 1605, 1582, 1580, 1605, 1581, 
+  1581, 1605, 1610, 1581, 1605, 1609, 1587, 1581, 
+  1580, 1587, 1580, 1581, 1587, 1580, 1609, 1587, 
+  1605, 1581, 1587, 1605, 1580, 1587, 1605, 1605, 
+  1589, 1581, 1581, 1589, 1605, 1605, 1588, 1581, 
+  1605, 1588, 1580, 1610, 1588, 1605, 1582, 1588, 
+  1605, 1605, 1590, 1581, 1609, 1590, 1582, 1605, 
+  1591, 1605, 1581, 1591, 1605, 1605, 1591, 1605, 
+  1610, 1593, 1580, 1605, 1593, 1605, 1605, 1593, 
+  1605, 1609, 1594, 1605, 1605, 1594, 1605, 1610, 
+  1594, 1605, 1609, 1601, 1582, 1605, 1602, 1605, 
+  1581, 1602, 1605, 1605, 1604, 1581, 1605, 1604, 
+  1581, 1610, 1604, 1581, 1609, 1604, 1580, 1580, 
+  1604, 1582, 1605, 1604, 1605, 1581, 1605, 1581, 
+  1580, 1605, 1581, 1605, 1605, 1581, 1610, 1605, 
+  1580, 1581, 1605, 1580, 1605, 1605, 1582, 1580, 
+  1605, 1582, 1605, 1605, 1580, 1582, 1607, 1605, 
+  1580, 1607, 1605, 1605, 1606, 1581, 1605, 1606, 
+  1581, 1609, 1606, 1580, 1605, 1606, 1580, 1609, 
+  1606, 1605, 1610, 1606, 1605, 1609, 1610, 1605, 
+  1605, 1576, 1582, 1610, 1578, 1580, 1610, 1578, 
+  1580, 1609, 1578, 1582, 1610, 1578, 1582, 1609, 
+  1578, 1605, 1610, 1578, 1605, 1609, 1580, 1605, 
+  1610, 1580, 1581, 1609, 1580, 1605, 1609, 1587, 
+  1582, 1609, 1589, 1581, 1610, 1588, 1581, 1610, 
+  1590, 1581, 1610, 1604, 1580, 1610, 1604, 1605, 
+  1610, 1610, 1581, 1610, 1610, 1580, 1610, 1610, 
+  1605, 1610, 1605, 1605, 1610, 1602, 1605, 1610, 
+  1606, 1581, 1610, 1593, 1605, 1610, 1603, 1605, 
+  1610, 1606, 1580, 1581, 1605, 1582, 1610, 1604, 
+  1580, 1605, 1603, 1605, 1605, 1580, 1581, 1610, 
+  1581, 1580, 1610, 1605, 1580, 1610, 1601, 1605, 
+  1610, 1576, 1581, 1610, 1587, 1582, 1610, 1606, 
+  1580, 1610, 1589, 1604, 1746, 1602, 1604, 1746, 
+  1575, 1604, 1604, 1607, 1575, 1603, 1576, 1585, 
+  1605, 1581, 1605, 1583, 1589, 1604, 1593, 1605, 
+  1585, 1587, 1608, 1604, 1593, 1604, 1610, 1607, 
+  1608, 1587, 1604, 1605, 1589, 1604, 1609, 17, 
+  1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, 
+  32, 1593, 1604, 1610, 1607, 32, 1608, 1587, 
+  1604, 1605, 7, 1580, 1604, 32, 1580, 1604, 
+  1575, 1604, 1607, 1585, 1740, 1575, 1604, 44, 
+  12289, 12290, 58, 33, 63, 12310, 12311, 8230, 
+  8229, 8212, 8211, 95, 123, 125, 12308, 12309, 
+  12304, 12305, 12298, 12299, 12300, 12301, 12302, 12303, 
+  91, 93, 8254, 35, 38, 42, 45, 60, 
+  62, 92, 36, 37, 64, 32, 1611, 1600, 
+  1611, 32, 1612, 32, 1613, 32, 1614, 1600, 
+  1614, 32, 1615, 1600, 1615, 32, 1616, 1600, 
+  1616, 32, 1617, 1600, 1617, 32, 1618, 1600, 
+  1618, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 
+  1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 
+  1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 
+  1592, 1593, 1594, 1601, 1602, 1603, 1604, 1605, 
+  1606, 1607, 1608, 1610, 1604, 1570, 1604, 1571, 
+  1604, 1573, 1604, 1575, 34, 39, 47, 65345, 
+  65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 
+  65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 
+  65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 
+  65370, 94, 124, 126, 10629, 10630, 12539, 12449, 
+  12451, 12453, 12455, 12457, 12515, 12517, 12519, 12483, 
+  12540, 12531, 12441, 12442, 12644, 12593, 12594, 12595, 
+  12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 
+  12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 
+  12612, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 
+  12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, 
+  12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 
+  12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 
+  162, 163, 172, 175, 166, 165, 8361, 9474, 
+  8592, 8593, 8594, 8595, 9632, 9675, 55297, 56360, 
+  55297, 56361, 55297, 56362, 55297, 56363, 55297, 56364, 
+  55297, 56365, 55297, 56366, 55297, 56367, 55297, 56368, 
+  55297, 56369, 55297, 56370, 55297, 56371, 55297, 56372, 
+  55297, 56373, 55297, 56374, 55297, 56375, 55297, 56376, 
+  55297, 56377, 55297, 56378, 55297, 56379, 55297, 56380, 
+  55297, 56381, 55297, 56382, 55297, 56383, 55297, 56384, 
+  55297, 56385, 55297, 56386, 55297, 56387, 55297, 56388, 
+  55297, 56389, 55297, 56390, 55297, 56391, 55297, 56392, 
+  55297, 56393, 55297, 56394, 55297, 56395, 55297, 56396, 
+  55297, 56397, 55297, 56398, 55297, 56399, 55297, 56536, 
+  55297, 56537, 55297, 56538, 55297, 56539, 55297, 56540, 
+  55297, 56541, 55297, 56542, 55297, 56543, 55297, 56544, 
+  55297, 56545, 55297, 56546, 55297, 56547, 55297, 56548, 
+  55297, 56549, 55297, 56550, 55297, 56551, 55297, 56552, 
+  55297, 56553, 55297, 56554, 55297, 56555, 55297, 56556, 
+  55297, 56557, 55297, 56558, 55297, 56559, 55297, 56560, 
+  55297, 56561, 55297, 56562, 55297, 56563, 55297, 56564, 
+  55297, 56565, 55297, 56566, 55297, 56567, 55297, 56568, 
+  55297, 56569, 55297, 56570, 55297, 56571, 55299, 56512, 
+  55299, 56513, 55299, 56514, 55299, 56515, 55299, 56516, 
+  55299, 56517, 55299, 56518, 55299, 56519, 55299, 56520, 
+  55299, 56521, 55299, 56522, 55299, 56523, 55299, 56524, 
+  55299, 56525, 55299, 56526, 55299, 56527, 55299, 56528, 
+  55299, 56529, 55299, 56530, 55299, 56531, 55299, 56532, 
+  55299, 56533, 55299, 56534, 55299, 56535, 55299, 56536, 
+  55299, 56537, 55299, 56538, 55299, 56539, 55299, 56540, 
+  55299, 56541, 55299, 56542, 55299, 56543, 55299, 56544, 
+  55299, 56545, 55299, 56546, 55299, 56547, 55299, 56548, 
+  55299, 56549, 55299, 56550, 55299, 56551, 55299, 56552, 
+  55299, 56553, 55299, 56554, 55299, 56555, 55299, 56556, 
+  55299, 56557, 55299, 56558, 55299, 56559, 55299, 56560, 
+  55299, 56561, 55299, 56562, 55300, 56473, 55300, 56506, 
+  55300, 56475, 55300, 56506, 55300, 56485, 55300, 56506, 
+  55300, 56625, 55300, 56615, 55300, 56626, 55300, 56615, 
+  55300, 57159, 55300, 57150, 55300, 57159, 55300, 57175, 
+  55301, 56505, 55301, 56506, 55301, 56505, 55301, 56496, 
+  55301, 56505, 55301, 56509, 55301, 56760, 55301, 56751, 
+  55301, 56761, 55301, 56751, 55302, 56512, 55302, 56513, 
+  55302, 56514, 55302, 56515, 55302, 56516, 55302, 56517, 
+  55302, 56518, 55302, 56519, 55302, 56520, 55302, 56521, 
+  55302, 56522, 55302, 56523, 55302, 56524, 55302, 56525, 
+  55302, 56526, 55302, 56527, 55302, 56528, 55302, 56529, 
+  55302, 56530, 55302, 56531, 55302, 56532, 55302, 56533, 
+  55302, 56534, 55302, 56535, 55302, 56536, 55302, 56537, 
+  55302, 56538, 55302, 56539, 55302, 56540, 55302, 56541, 
+  55302, 56542, 55302, 56543, 55348, 56663, 55348, 56677, 
+  55348, 56664, 55348, 56677, 55348, 56671, 55348, 56686, 
+  55348, 56671, 55348, 56687, 55348, 56671, 55348, 56688, 
+  55348, 56671, 55348, 56689, 55348, 56671, 55348, 56690, 
+  55348, 56761, 55348, 56677, 55348, 56762, 55348, 56677, 
+  55348, 56763, 55348, 56686, 55348, 56764, 55348, 56686, 
+  55348, 56763, 55348, 56687, 55348, 56764, 55348, 56687, 
+  305, 567, 913, 914, 916, 917, 918, 919, 
+  921, 922, 923, 924, 925, 926, 927, 929, 
+  1012, 932, 934, 935, 936, 8711, 8706, 1013, 
+  977, 1008, 981, 1009, 982, 988, 55354, 56610, 
+  55354, 56611, 55354, 56612, 55354, 56613, 55354, 56614, 
+  55354, 56615, 55354, 56616, 55354, 56617, 55354, 56618, 
+  55354, 56619, 55354, 56620, 55354, 56621, 55354, 56622, 
+  55354, 56623, 55354, 56624, 55354, 56625, 55354, 56626, 
+  55354, 56627, 55354, 56628, 55354, 56629, 55354, 56630, 
+  55354, 56631, 55354, 56632, 55354, 56633, 55354, 56634, 
+  55354, 56635, 55354, 56636, 55354, 56637, 55354, 56638, 
+  55354, 56639, 55354, 56640, 55354, 56641, 55354, 56642, 
+  55354, 56643, 1646, 1697, 1647, 48, 46, 48, 
+  44, 49, 44, 50, 44, 51, 44, 52, 
+  44, 53, 44, 54, 44, 55, 44, 56, 
+  44, 57, 44, 40, 65, 41, 40, 66, 
+  41, 40, 67, 41, 40, 68, 41, 40, 
+  69, 41, 40, 70, 41, 40, 71, 41, 
+  40, 72, 41, 40, 73, 41, 40, 74, 
+  41, 40, 75, 41, 40, 76, 41, 40, 
+  77, 41, 40, 78, 41, 40, 79, 41, 
+  40, 80, 41, 40, 81, 41, 40, 82, 
+  41, 40, 83, 41, 40, 84, 41, 40, 
+  85, 41, 40, 86, 41, 40, 87, 41, 
+  40, 88, 41, 40, 89, 41, 40, 90, 
+  41, 12308, 83, 12309, 67, 68, 87, 90, 
+  72, 86, 83, 68, 83, 83, 80, 80, 
+  86, 87, 67, 77, 67, 77, 68, 68, 
+  74, 12411, 12363, 12467, 12467, 23383, 21452, 12487, 
+  22810, 35299, 20132, 26144, 28961, 21069, 24460, 20877, 
+  26032, 21021, 32066, 36009, 22768, 21561, 28436, 25237, 
+  25429, 36938, 25351, 25171, 31105, 31354, 21512, 28288, 
+  30003, 21106, 21942, 37197, 12308, 26412, 12309, 12308, 
+  19977, 12309, 12308, 20108, 12309, 12308, 23433, 12309, 
+  12308, 28857, 12309, 12308, 25171, 12309, 12308, 30423, 
+  12309, 12308, 21213, 12309, 12308, 25943, 12309, 24471, 
+  21487, 20029, 20024, 20033, 55360, 56610, 20320, 20411, 
+  20482, 20602, 20633, 20687, 13470, 55361, 56890, 20820, 
+  20836, 20855, 55361, 56604, 13497, 20839, 55361, 56651, 
+  20887, 20900, 20172, 20908, 55396, 56799, 20995, 13535, 
+  21051, 21062, 21111, 13589, 21253, 21254, 21321, 21338, 
+  21363, 21373, 21375, 55362, 56876, 28784, 21450, 21471, 
+  55362, 57187, 21483, 21489, 21510, 21662, 21560, 21576, 
+  21608, 21666, 21750, 21776, 21843, 21859, 21892, 21931, 
+  21939, 21954, 22294, 22295, 22097, 22132, 22766, 22478, 
+  22516, 22541, 22411, 22578, 22577, 22700, 55365, 56548, 
+  22770, 22775, 22790, 22818, 22882, 55365, 57000, 55365, 
+  57066, 23020, 23067, 23079, 23000, 23142, 14062, 14076, 
+  23304, 23358, 55366, 56776, 23491, 23512, 23539, 55366, 
+  57112, 23551, 23558, 24403, 14209, 23648, 23744, 23693, 
+  55367, 56804, 23875, 55367, 56806, 23918, 23915, 23932, 
+  24033, 24034, 14383, 24061, 24104, 24125, 24169, 14434, 
+  55368, 56707, 14460, 24240, 24243, 24246, 55400, 57234, 
+  55368, 57137, 33281, 24354, 14535, 55372, 57016, 55384, 
+  56794, 24418, 24427, 14563, 24474, 24525, 24535, 24569, 
+  24705, 14650, 14620, 55369, 57044, 24775, 24904, 24908, 
+  24954, 25010, 24996, 25007, 25054, 25104, 25115, 25181, 
+  25265, 25300, 25424, 55370, 57100, 25405, 25340, 25448, 
+  25475, 25572, 55370, 57329, 25634, 25541, 25513, 14894, 
+  25705, 25726, 25757, 25719, 14956, 25964, 55372, 56330, 
+  26083, 26360, 26185, 15129, 15112, 15076, 20882, 20885, 
+  26368, 26268, 32941, 17369, 26401, 26462, 26451, 55372, 
+  57283, 15177, 26618, 26501, 26706, 55373, 56429, 26766, 
+  26655, 26900, 26946, 27043, 27114, 27304, 55373, 56995, 
+  27355, 15384, 27425, 55374, 56487, 27476, 15438, 27506, 
+  27551, 27579, 55374, 56973, 55367, 56587, 55374, 57082, 
+  27726, 55375, 56508, 27839, 27853, 27751, 27926, 27966, 
+  28009, 28024, 28037, 55375, 56606, 27956, 28207, 28270, 
+  15667, 28359, 55375, 57041, 28153, 28526, 55375, 57182, 
+  55375, 57230, 28614, 28729, 28699, 15766, 28746, 28797, 
+  28791, 28845, 55361, 56613, 28997, 55376, 56931, 29084, 
+  55376, 57259, 29224, 29264, 55377, 56840, 29312, 29333, 
+  55377, 57141, 55378, 56340, 29562, 29579, 16044, 29605, 
+  16056, 29767, 29788, 29829, 29898, 16155, 29988, 55379, 
+  56374, 30014, 55379, 56466, 55368, 56735, 30224, 55379, 
+  57249, 55379, 57272, 55380, 56388, 16380, 16392, 55380, 
+  56563, 55380, 56562, 55380, 56601, 55380, 56627, 30494, 
+  30495, 30603, 16454, 16534, 55381, 56349, 30798, 16611, 
+  55381, 56870, 55381, 56986, 55381, 57029, 31211, 16687, 
+  31306, 31311, 55382, 56700, 55382, 56999, 31470, 16898, 
+  55382, 57259, 31686, 31689, 16935, 55383, 56448, 31954, 
+  17056, 31976, 31971, 32000, 55383, 57222, 32099, 17153, 
+  32199, 32258, 32325, 17204, 55384, 56872, 55384, 56903, 
+  17241, 55384, 57049, 32634, 55384, 57150, 32661, 32762, 
+  55385, 56538, 55385, 56611, 32864, 55385, 56744, 32880, 
+  55372, 57183, 17365, 32946, 33027, 17419, 33086, 23221, 
+  55385, 57255, 55385, 57269, 55372, 57235, 55372, 57244, 
+  33284, 36766, 17515, 33425, 33419, 33437, 21171, 33457, 
+  33459, 33469, 33510, 55386, 57148, 33565, 33635, 33709, 
+  33571, 33725, 33767, 33619, 33738, 33740, 33756, 55387, 
+  56374, 55387, 56683, 55387, 56533, 17707, 34033, 34035, 
+  34070, 55388, 57290, 34148, 55387, 57132, 17757, 17761, 
+  55387, 57265, 55388, 56530, 17771, 34384, 34407, 34409, 
+  34473, 34440, 34574, 34530, 34600, 34667, 34694, 17879, 
+  34785, 34817, 17913, 34912, 55389, 56935, 35031, 35038, 
+  17973, 35066, 13499, 55390, 56494, 55390, 56678, 18110, 
+  18119, 35488, 55391, 56488, 36011, 36033, 36123, 36215, 
+  55391, 57135, 55362, 56324, 36299, 36284, 36336, 55362, 
+  56542, 36564, 55393, 56786, 55393, 56813, 37012, 37105, 
+  37137, 55393, 57134, 37147, 37432, 37591, 37592, 37500, 
+  37881, 37909, 55394, 57338, 38283, 18837, 38327, 55395, 
+  56695, 18918, 38595, 23986, 38691, 55396, 56645, 55396, 
+  56858, 19054, 19062, 38880, 55397, 56330, 19122, 55397, 
+  56470, 38953, 55397, 56758, 39138, 19251, 39209, 39335, 
+  39362, 39422, 19406, 55398, 57136, 40000, 40189, 19662, 
+  19693, 40295, 55400, 56526, 19704, 55400, 56581, 55400, 
+  56846, 55400, 56977, 19798, 40702, 40709, 40719, 40726, 
+  55401, 56832, 192, 193, 194, 195, 196, 199, 
+  200, 201, 202, 203, 204, 205, 206, 207, 
+  208, 209, 210, 211, 212, 213, 214, 216, 
+  217, 218, 219, 220, 221, 222, 376, 256, 
+  258, 260, 262, 264, 266, 268, 270, 272, 
+  274, 276, 278, 280, 282, 284, 286, 288, 
+  290, 292, 296, 298, 300, 302, 306, 308, 
+  310, 313, 315, 317, 319, 321, 323, 325, 
+  327, 330, 332, 334, 336, 338, 340, 342, 
+  344, 346, 348, 350, 352, 354, 356, 358, 
+  360, 362, 364, 366, 368, 370, 372, 374, 
+  377, 379, 381, 579, 386, 388, 391, 395, 
+  401, 502, 408, 573, 544, 416, 418, 420, 
+  423, 428, 431, 435, 437, 440, 444, 503, 
+  453, 452, 456, 455, 459, 458, 461, 463, 
+  465, 467, 469, 471, 473, 475, 478, 480, 
+  482, 484, 486, 488, 490, 492, 494, 498, 
+  497, 500, 504, 506, 508, 510, 512, 514, 
+  516, 518, 520, 522, 524, 526, 528, 530, 
+  532, 534, 536, 538, 540, 542, 548, 550, 
+  552, 554, 556, 558, 560, 562, 571, 11390, 
+  11391, 577, 582, 584, 586, 588, 590, 11375, 
+  11373, 11376, 385, 390, 393, 394, 399, 42923, 
+  403, 42924, 404, 42893, 42922, 407, 406, 42926, 
+  11362, 42925, 412, 11374, 413, 415, 11364, 422, 
+  425, 42929, 430, 580, 433, 434, 581, 439, 
+  42930, 42928, 880, 882, 886, 1021, 1022, 1023, 
+  938, 939, 975, 984, 986, 990, 992, 994, 
+  996, 998, 1000, 1002, 1004, 1006, 1017, 895, 
+  1015, 1018, 1040, 1041, 1042, 1043, 1044, 1045, 
+  1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 
+  1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 
+  1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 
+  1070, 1071, 1024, 1025, 1026, 1027, 1028, 1029, 
+  1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 
+  1038, 1039, 1120, 1122, 1124, 1126, 1128, 1130, 
+  1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 
+  1148, 1150, 1152, 1162, 1164, 1166, 1168, 1170, 
+  1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 
+  1188, 1190, 1192, 1194, 1196, 1198, 1200, 1202, 
+  1204, 1206, 1208, 1210, 1212, 1214, 1217, 1219, 
+  1221, 1223, 1225, 1227, 1229, 1216, 1232, 1234, 
+  1236, 1238, 1240, 1242, 1244, 1246, 1248, 1250, 
+  1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266, 
+  1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 
+  1284, 1286, 1288, 1290, 1292, 1294, 1296, 1298, 
+  1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 
+  1316, 1318, 1320, 1322, 1324, 1326, 1329, 1330, 
+  1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 
+  1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 
+  1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 
+  1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 
+  1363, 1364, 1365, 1366, 43888, 43889, 43890, 43891, 
+  43892, 43893, 43894, 43895, 43896, 43897, 43898, 43899, 
+  43900, 43901, 43902, 43903, 43904, 43905, 43906, 43907, 
+  43908, 43909, 43910, 43911, 43912, 43913, 43914, 43915, 
+  43916, 43917, 43918, 43919, 43920, 43921, 43922, 43923, 
+  43924, 43925, 43926, 43927, 43928, 43929, 43930, 43931, 
+  43932, 43933, 43934, 43935, 43936, 43937, 43938, 43939, 
+  43940, 43941, 43942, 43943, 43944, 43945, 43946, 43947, 
+  43948, 43949, 43950, 43951, 43952, 43953, 43954, 43955, 
+  43956, 43957, 43958, 43959, 43960, 43961, 43962, 43963, 
+  43964, 43965, 43966, 43967, 5112, 5113, 5114, 5115, 
+  5116, 5117, 42570, 42877, 11363, 7680, 7682, 7684, 
+  7686, 7688, 7690, 7692, 7694, 7696, 7698, 7700, 
+  7702, 7704, 7706, 7708, 7710, 7712, 7714, 7716, 
+  7718, 7720, 7722, 7724, 7726, 7728, 7730, 7732, 
+  7734, 7736, 7738, 7740, 7742, 7744, 7746, 7748, 
+  7750, 7752, 7754, 7756, 7758, 7760, 7762, 7764, 
+  7766, 7768, 7770, 7772, 7774, 7776, 7778, 7780, 
+  7782, 7784, 7786, 7788, 7790, 7792, 7794, 7796, 
+  7798, 7800, 7802, 7804, 7806, 7808, 7810, 7812, 
+  7814, 7816, 7818, 7820, 7822, 7824, 7826, 7828, 
+  7840, 7842, 7844, 7846, 7848, 7850, 7852, 7854, 
+  7856, 7858, 7860, 7862, 7864, 7866, 7868, 7870, 
+  7872, 7874, 7876, 7878, 7880, 7882, 7884, 7886, 
+  7888, 7890, 7892, 7894, 7896, 7898, 7900, 7902, 
+  7904, 7906, 7908, 7910, 7912, 7914, 7916, 7918, 
+  7920, 7922, 7924, 7926, 7928, 7930, 7932, 7934, 
+  7944, 7945, 7946, 7947, 7948, 7949, 7950, 7951, 
+  7960, 7961, 7962, 7963, 7964, 7965, 7976, 7977, 
+  7978, 7979, 7980, 7981, 7982, 7983, 7992, 7993, 
+  7994, 7995, 7996, 7997, 7998, 7999, 8008, 8009, 
+  8010, 8011, 8012, 8013, 8025, 8027, 8029, 8031, 
+  8040, 8041, 8042, 8043, 8044, 8045, 8046, 8047, 
+  8122, 8123, 8136, 8137, 8138, 8139, 8154, 8155, 
+  8184, 8185, 8170, 8171, 8186, 8187, 8072, 8073, 
+  8074, 8075, 8076, 8077, 8078, 8079, 8088, 8089, 
+  8090, 8091, 8092, 8093, 8094, 8095, 8104, 8105, 
+  8106, 8107, 8108, 8109, 8110, 8111, 8120, 8121, 
+  8124, 8140, 8152, 8153, 8168, 8169, 8172, 8188, 
+  8498, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 
+  8551, 8552, 8553, 8554, 8555, 8556, 8557, 8558, 
+  8559, 8579, 9398, 9399, 9400, 9401, 9402, 9403, 
+  9404, 9405, 9406, 9407, 9408, 9409, 9410, 9411, 
+  9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 
+  9420, 9421, 9422, 9423, 11264, 11265, 11266, 11267, 
+  11268, 11269, 11270, 11271, 11272, 11273, 11274, 11275, 
+  11276, 11277, 11278, 11279, 11280, 11281, 11282, 11283, 
+  11284, 11285, 11286, 11287, 11288, 11289, 11290, 11291, 
+  11292, 11293, 11294, 11295, 11296, 11297, 11298, 11299, 
+  11300, 11301, 11302, 11303, 11304, 11305, 11306, 11307, 
+  11308, 11309, 11310, 11360, 570, 574, 11367, 11369, 
+  11371, 11378, 11381, 11392, 11394, 11396, 11398, 11400, 
+  11402, 11404, 11406, 11408, 11410, 11412, 11414, 11416, 
+  11418, 11420, 11422, 11424, 11426, 11428, 11430, 11432, 
+  11434, 11436, 11438, 11440, 11442, 11444, 11446, 11448, 
+  11450, 11452, 11454, 11456, 11458, 11460, 11462, 11464, 
+  11466, 11468, 11470, 11472, 11474, 11476, 11478, 11480, 
+  11482, 11484, 11486, 11488, 11490, 11499, 11501, 11506, 
+  4256, 4257, 4258, 4259, 4260, 4261, 4262, 4263, 
+  4264, 4265, 4266, 4267, 4268, 4269, 4270, 4271, 
+  4272, 4273, 4274, 4275, 4276, 4277, 4278, 4279, 
+  4280, 4281, 4282, 4283, 4284, 4285, 4286, 4287, 
+  4288, 4289, 4290, 4291, 4292, 4293, 4295, 4301, 
+  42560, 42562, 42564, 42566, 42568, 42572, 42574, 42576, 
+  42578, 42580, 42582, 42584, 42586, 42588, 42590, 42592, 
+  42594, 42596, 42598, 42600, 42602, 42604, 42624, 42626, 
+  42628, 42630, 42632, 42634, 42636, 42638, 42640, 42642, 
+  42644, 42646, 42648, 42650, 42786, 42788, 42790, 42792, 
+  42794, 42796, 42798, 42802, 42804, 42806, 42808, 42810, 
+  42812, 42814, 42816, 42818, 42820, 42822, 42824, 42826, 
+  42828, 42830, 42832, 42834, 42836, 42838, 42840, 42842, 
+  42844, 42846, 42848, 42850, 42852, 42854, 42856, 42858, 
+  42860, 42862, 42873, 42875, 42878, 42880, 42882, 42884, 
+  42886, 42891, 42896, 42898, 42902, 42904, 42906, 42908, 
+  42910, 42912, 42914, 42916, 42918, 42920, 42932, 42934, 
+  42931, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 
+  65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 
+  65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 
+  65336, 65337, 65338, 55297, 56320, 55297, 56321, 55297, 
+  56322, 55297, 56323, 55297, 56324, 55297, 56325, 55297, 
+  56326, 55297, 56327, 55297, 56328, 55297, 56329, 55297, 
+  56330, 55297, 56331, 55297, 56332, 55297, 56333, 55297, 
+  56334, 55297, 56335, 55297, 56336, 55297, 56337, 55297, 
+  56338, 55297, 56339, 55297, 56340, 55297, 56341, 55297, 
+  56342, 55297, 56343, 55297, 56344, 55297, 56345, 55297, 
+  56346, 55297, 56347, 55297, 56348, 55297, 56349, 55297, 
+  56350, 55297, 56351, 55297, 56352, 55297, 56353, 55297, 
+  56354, 55297, 56355, 55297, 56356, 55297, 56357, 55297, 
+  56358, 55297, 56359, 55297, 56496, 55297, 56497, 55297, 
+  56498, 55297, 56499, 55297, 56500, 55297, 56501, 55297, 
+  56502, 55297, 56503, 55297, 56504, 55297, 56505, 55297, 
+  56506, 55297, 56507, 55297, 56508, 55297, 56509, 55297, 
+  56510, 55297, 56511, 55297, 56512, 55297, 56513, 55297, 
+  56514, 55297, 56515, 55297, 56516, 55297, 56517, 55297, 
+  56518, 55297, 56519, 55297, 56520, 55297, 56521, 55297, 
+  56522, 55297, 56523, 55297, 56524, 55297, 56525, 55297, 
+  56526, 55297, 56527, 55297, 56528, 55297, 56529, 55297, 
+  56530, 55297, 56531, 55299, 56448, 55299, 56449, 55299, 
+  56450, 55299, 56451, 55299, 56452, 55299, 56453, 55299, 
+  56454, 55299, 56455, 55299, 56456, 55299, 56457, 55299, 
+  56458, 55299, 56459, 55299, 56460, 55299, 56461, 55299, 
+  56462, 55299, 56463, 55299, 56464, 55299, 56465, 55299, 
+  56466, 55299, 56467, 55299, 56468, 55299, 56469, 55299, 
+  56470, 55299, 56471, 55299, 56472, 55299, 56473, 55299, 
+  56474, 55299, 56475, 55299, 56476, 55299, 56477, 55299, 
+  56478, 55299, 56479, 55299, 56480, 55299, 56481, 55299, 
+  56482, 55299, 56483, 55299, 56484, 55299, 56485, 55299, 
+  56486, 55299, 56487, 55299, 56488, 55299, 56489, 55299, 
+  56490, 55299, 56491, 55299, 56492, 55299, 56493, 55299, 
+  56494, 55299, 56495, 55299, 56496, 55299, 56497, 55299, 
+  56498, 55302, 56480, 55302, 56481, 55302, 56482, 55302, 
+  56483, 55302, 56484, 55302, 56485, 55302, 56486, 55302, 
+  56487, 55302, 56488, 55302, 56489, 55302, 56490, 55302, 
+  56491, 55302, 56492, 55302, 56493, 55302, 56494, 55302, 
+  56495, 55302, 56496, 55302, 56497, 55302, 56498, 55302, 
+  56499, 55302, 56500, 55302, 56501, 55302, 56502, 55302, 
+  56503, 55302, 56504, 55302, 56505, 55302, 56506, 55302, 
+  56507, 55302, 56508, 55302, 56509, 55302, 56510, 55302, 
+  56511, 55354, 56576, 55354, 56577, 55354, 56578, 55354, 
+  56579, 55354, 56580, 55354, 56581, 55354, 56582, 55354, 
+  56583, 55354, 56584, 55354, 56585, 55354, 56586, 55354, 
+  56587, 55354, 56588, 55354, 56589, 55354, 56590, 55354, 
+  56591, 55354, 56592, 55354, 56593, 55354, 56594, 55354, 
+  56595, 55354, 56596, 55354, 56597, 55354, 56598, 55354, 
+  56599, 55354, 56600, 55354, 56601, 55354, 56602, 55354, 
+  56603, 55354, 56604, 55354, 56605, 55354, 56606, 55354, 
+  56607, 55354, 56608, 55354, 56609, };
+
+static const utf8proc_uint16_t utf8proc_stage1table[] = {
+  0, 256, 512, 768, 1024, 1280, 1536, 
+  1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 
+  3840, 4096, 4352, 4608, 4864, 5120, 5376, 5632, 
+  5888, 6144, 6400, 6656, 6912, 7168, 7424, 7680, 
+  7936, 8192, 8448, 8704, 8960, 9216, 9472, 9728, 
+  9984, 10240, 10496, 10752, 11008, 11264, 11520, 11776, 
+  12032, 12288, 12544, 12800, 13056, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13568, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13824, 14080, 13312, 13312, 13312, 14336, 13312, 14592, 
+  14848, 15104, 15360, 15616, 15872, 16128, 16384, 16640, 
+  16896, 17152, 17408, 17664, 16128, 16384, 16640, 16896, 
+  17152, 17408, 17664, 16128, 16384, 16640, 16896, 17152, 
+  17408, 17664, 16128, 16384, 16640, 16896, 17152, 17408, 
+  17664, 16128, 16384, 16640, 16896, 17152, 17408, 17664, 
+  16128, 16384, 16640, 16896, 17152, 17408, 17664, 16128, 
+  17920, 18176, 18176, 18176, 18176, 18176, 18176, 18176, 
+  18176, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18688, 18944, 19200, 19456, 19712, 19968, 
+  20224, 20480, 20736, 20992, 21248, 21504, 21760, 22016, 
+  22272, 22528, 22784, 23040, 23296, 23552, 23808, 24064, 
+  23808, 24320, 24576, 24832, 25088, 25344, 25600, 25856, 
+  26112, 26368, 23808, 26624, 23808, 26880, 23808, 23808, 
+  23808, 27136, 27136, 27136, 27392, 27648, 27904, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 27136, 27136, 27136, 27136, 28160, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 27136, 27136, 28416, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 27136, 27136, 28672, 28928, 23808, 23808, 23808, 
+  29184, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  29440, 13312, 13312, 29696, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 29952, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 30208, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 30464, 30720, 30976, 31232, 31488, 31744, 32000, 
+  32256, 10240, 10240, 32512, 23808, 23808, 23808, 23808, 
+  23808, 32768, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 33024, 33280, 23808, 23808, 23808, 23808, 33536, 
+  23808, 33792, 34048, 34304, 34560, 34816, 35072, 35328, 
+  35584, 35840, 36096, 23808, 23808, 23808, 23808, 23808, 
+  23808, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 36352, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  36608, 36864, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 13312, 
+  13312, 13312, 13312, 13312, 13312, 13312, 13312, 37120, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 37376, 37632, 37888, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 38144, 38400, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 23808, 23808, 23808, 23808, 23808, 23808, 23808, 
+  23808, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  38656, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  18432, 18432, 18432, 18432, 18432, 18432, 18432, 18432, 
+  38656, };
+
+static const utf8proc_uint16_t utf8proc_stage2table[] = {
+  1, 2, 2, 2, 2, 2, 2, 
+  2, 2, 3, 4, 3, 5, 6, 2, 
+  2, 2, 2, 2, 2, 2, 2, 2, 
+  2, 2, 2, 2, 2, 7, 7, 7, 
+  3, 8, 9, 9, 10, 11, 10, 9, 
+  9, 12, 13, 9, 14, 15, 16, 15, 
+  15, 17, 17, 17, 17, 17, 17, 17, 
+  17, 17, 17, 15, 9, 18, 19, 20, 
+  9, 9, 21, 22, 23, 24, 25, 26, 
+  27, 28, 29, 30, 31, 32, 33, 34, 
+  35, 36, 37, 38, 39, 40, 41, 42, 
+  43, 44, 45, 46, 12, 9, 13, 47, 
+  48, 47, 49, 50, 51, 52, 53, 54, 
+  55, 56, 57, 58, 59, 60, 61, 62, 
+  63, 64, 65, 66, 67, 68, 69, 70, 
+  71, 72, 73, 74, 12, 75, 13, 75, 
+  2, 2, 2, 2, 2, 2, 7, 2, 
+  2, 2, 2, 2, 2, 2, 2, 2, 
+  2, 2, 2, 2, 2, 2, 2, 2, 
+  2, 2, 2, 2, 2, 2, 2, 2, 
+  2, 76, 9, 11, 11, 11, 11, 77, 
+  9, 78, 77, 79, 80, 75, 81, 77, 
+  82, 83, 84, 85, 86, 87, 88, 9, 
+  9, 89, 90, 91, 92, 93, 94, 95, 
+  9, 96, 97, 98, 99, 100, 101, 102, 
+  103, 104, 105, 106, 107, 108, 109, 110, 
+  111, 112, 113, 114, 115, 116, 117, 118, 
+  75, 119, 120, 121, 122, 123, 124, 125, 
+  126, 127, 128, 129, 130, 131, 132, 133, 
+  134, 135, 136, 137, 138, 139, 140, 141, 
+  142, 143, 144, 145, 146, 147, 148, 149, 
+  75, 150, 151, 152, 153, 154, 155, 156, 
+  157, 158, 159, 160, 161, 162, 163, 164, 
+  165, 166, 167, 168, 169, 170, 171, 172, 
+  173, 174, 175, 176, 177, 178, 179, 180, 
+  181, 182, 183, 184, 185, 186, 187, 188, 
+  189, 190, 191, 192, 193, 194, 195, 196, 
+  197, 198, 199, 200, 201, 202, 203, 204, 
+  205, 206, 207, 208, 209, 210, 211, 212, 
+  213, 214, 215, 216, 217, 218, 219, 220, 
+  221, 222, 223, 224, 225, 226, 227, 228, 
+  229, 230, 231, 232, 233, 234, 235, 236, 
+  237, 238, 239, 240, 241, 242, 243, 244, 
+  245, 246, 247, 248, 249, 250, 251, 252, 
+  253, 254, 255, 256, 257, 258, 259, 260, 
+  261, 262, 263, 264, 265, 266, 267, 268, 
+  269, 270, 271, 272, 273, 274, 275, 276, 
+  277, 278, 279, 280, 281, 282, 283, 284, 
+  285, 286, 287, 288, 289, 290, 291, 292, 
+  293, 294, 295, 296, 297, 298, 214, 299, 
+  300, 301, 302, 303, 304, 305, 306, 307, 
+  308, 309, 310, 311, 214, 312, 313, 314, 
+  315, 316, 317, 318, 319, 320, 321, 322, 
+  323, 324, 325, 214, 214, 326, 327, 328, 
+  329, 330, 331, 332, 333, 334, 335, 336, 
+  337, 338, 339, 214, 340, 341, 342, 214, 
+  343, 340, 340, 340, 340, 344, 345, 346, 
+  347, 348, 349, 350, 351, 352, 353, 354, 
+  355, 356, 357, 358, 359, 360, 361, 362, 
+  363, 364, 365, 366, 367, 368, 369, 370, 
+  371, 372, 373, 374, 375, 376, 377, 378, 
+  379, 380, 381, 382, 383, 384, 385, 386, 
+  387, 388, 389, 390, 391, 392, 393, 394, 
+  395, 396, 397, 398, 399, 400, 401, 402, 
+  403, 404, 405, 406, 407, 408, 409, 410, 
+  411, 412, 413, 414, 415, 416, 417, 418, 
+  419, 420, 421, 422, 423, 424, 425, 426, 
+  427, 428, 429, 430, 431, 432, 433, 434, 
+  435, 436, 214, 437, 438, 439, 440, 441, 
+  442, 443, 444, 445, 446, 447, 448, 449, 
+  450, 451, 452, 453, 454, 214, 214, 214, 
+  214, 214, 214, 455, 456, 457, 458, 459, 
+  460, 461, 462, 463, 464, 465, 466, 467, 
+  468, 469, 470, 471, 472, 473, 474, 475, 
+  476, 477, 478, 479, 480, 481, 214, 482, 
+  483, 214, 484, 214, 485, 486, 214, 214, 
+  214, 487, 488, 214, 489, 214, 490, 491, 
+  214, 492, 493, 494, 495, 496, 214, 214, 
+  497, 214, 498, 499, 214, 214, 500, 214, 
+  214, 214, 214, 214, 214, 214, 501, 214, 
+  214, 502, 214, 214, 503, 214, 214, 214, 
+  504, 505, 506, 507, 508, 509, 214, 214, 
+  214, 214, 214, 510, 214, 340, 214, 214, 
+  214, 214, 214, 214, 214, 214, 511, 512, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 513, 514, 515, 516, 517, 518, 519, 
+  520, 521, 522, 522, 523, 523, 523, 523, 
+  523, 523, 523, 47, 47, 47, 47, 522, 
+  522, 522, 522, 522, 522, 522, 522, 522, 
+  522, 523, 523, 47, 47, 47, 47, 47, 
+  47, 524, 525, 526, 527, 528, 529, 47, 
+  47, 530, 531, 532, 533, 534, 47, 47, 
+  47, 47, 47, 47, 47, 522, 47, 523, 
+  47, 47, 47, 47, 47, 47, 47, 47, 
+  47, 47, 47, 47, 47, 47, 47, 47, 
+  47, 535, 536, 537, 538, 539, 540, 541, 
+  542, 543, 544, 545, 546, 547, 540, 540, 
+  548, 540, 549, 540, 550, 551, 552, 553, 
+  553, 553, 553, 552, 554, 553, 553, 553, 
+  553, 553, 555, 555, 556, 557, 558, 559, 
+  560, 561, 553, 553, 553, 553, 562, 563, 
+  553, 564, 565, 553, 553, 566, 566, 566, 
+  566, 567, 553, 553, 553, 553, 540, 540, 
+  540, 568, 569, 570, 571, 572, 573, 540, 
+  553, 553, 553, 540, 540, 540, 553, 553, 
+  574, 540, 540, 540, 553, 553, 553, 553, 
+  540, 552, 553, 553, 540, 575, 576, 576, 
+  575, 576, 576, 575, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 577, 578, 579, 580, 581, 47, 582, 
+  583, 0, 0, 584, 585, 586, 587, 588, 
+  589, 0, 0, 0, 0, 87, 590, 591, 
+  592, 593, 594, 595, 0, 596, 0, 597, 
+  598, 599, 600, 601, 602, 603, 604, 605, 
+  606, 607, 608, 609, 610, 611, 612, 613, 
+  614, 615, 616, 0, 617, 618, 619, 620, 
+  621, 622, 623, 624, 625, 626, 627, 628, 
+  629, 630, 631, 632, 633, 634, 635, 636, 
+  637, 638, 639, 640, 641, 642, 643, 644, 
+  645, 646, 647, 648, 649, 650, 651, 652, 
+  653, 654, 655, 656, 657, 658, 659, 660, 
+  661, 662, 663, 664, 665, 666, 667, 668, 
+  669, 670, 671, 672, 673, 674, 675, 676, 
+  677, 678, 679, 680, 681, 682, 683, 684, 
+  685, 686, 687, 688, 689, 690, 691, 692, 
+  693, 694, 695, 696, 697, 698, 699, 75, 
+  700, 701, 702, 703, 704, 214, 705, 706, 
+  707, 708, 709, 710, 711, 712, 713, 714, 
+  715, 716, 717, 718, 719, 720, 721, 722, 
+  723, 724, 725, 726, 727, 728, 729, 730, 
+  731, 732, 733, 734, 735, 736, 737, 738, 
+  739, 740, 741, 742, 743, 744, 745, 746, 
+  747, 748, 749, 750, 751, 752, 753, 754, 
+  755, 756, 757, 758, 759, 760, 761, 762, 
+  763, 764, 765, 766, 767, 768, 769, 770, 
+  771, 772, 773, 774, 775, 776, 777, 778, 
+  779, 780, 781, 782, 783, 784, 785, 786, 
+  787, 788, 789, 790, 791, 792, 793, 794, 
+  795, 796, 797, 798, 799, 800, 801, 802, 
+  803, 804, 805, 806, 807, 808, 809, 810, 
+  811, 812, 813, 814, 815, 816, 817, 818, 
+  819, 820, 821, 822, 823, 824, 825, 826, 
+  827, 828, 829, 830, 831, 832, 833, 834, 
+  835, 836, 837, 838, 540, 540, 540, 540, 
+  540, 839, 839, 840, 841, 842, 843, 844, 
+  845, 846, 847, 848, 849, 850, 851, 852, 
+  853, 854, 855, 856, 857, 858, 859, 860, 
+  861, 862, 863, 864, 865, 866, 867, 868, 
+  869, 870, 871, 872, 873, 874, 875, 876, 
+  877, 878, 879, 880, 881, 882, 883, 884, 
+  885, 886, 887, 888, 889, 890, 891, 892, 
+  893, 894, 895, 896, 897, 898, 899, 900, 
+  901, 902, 903, 904, 905, 906, 907, 908, 
+  909, 910, 911, 912, 913, 914, 915, 916, 
+  917, 918, 919, 920, 921, 922, 923, 924, 
+  925, 926, 927, 928, 929, 930, 931, 932, 
+  933, 934, 935, 936, 937, 938, 939, 940, 
+  941, 942, 943, 944, 945, 946, 947, 948, 
+  949, 950, 951, 952, 953, 954, 955, 956, 
+  957, 958, 959, 960, 961, 962, 963, 964, 
+  965, 966, 967, 968, 969, 970, 971, 972, 
+  973, 974, 975, 976, 977, 978, 979, 980, 
+  981, 982, 983, 984, 985, 986, 987, 988, 
+  989, 990, 991, 992, 993, 994, 995, 996, 
+  997, 998, 999, 1000, 1001, 1002, 1003, 1004, 
+  1005, 0, 1006, 1007, 1008, 1009, 1010, 1011, 
+  1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 
+  1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 
+  1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 
+  1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 
+  0, 0, 523, 1044, 1044, 1044, 1044, 1044, 
+  1044, 0, 1045, 1046, 1047, 1048, 1049, 1050, 
+  1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 
+  1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 
+  1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 
+  1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 
+  1083, 0, 1044, 1084, 0, 0, 1085, 1085, 
+  11, 0, 553, 540, 540, 540, 540, 553, 
+  540, 540, 540, 1086, 553, 540, 540, 540, 
+  540, 540, 540, 553, 553, 553, 553, 553, 
+  553, 540, 540, 553, 540, 540, 1086, 1087, 
+  540, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 
+  1095, 1096, 1097, 1097, 1098, 1099, 1100, 1101, 
+  1102, 1103, 1104, 1105, 1103, 540, 553, 1103, 
+  1096, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 0, 0, 0, 0, 
+  0, 1106, 1106, 1106, 1103, 1103, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1107, 1108, 1108, 1108, 1107, 1107, 1109, 
+  1109, 1110, 10, 10, 1111, 15, 1112, 1085, 
+  1085, 540, 540, 540, 540, 540, 540, 540, 
+  540, 1113, 1114, 1115, 1112, 1116, 0, 1117, 
+  1112, 1118, 1118, 1119, 1120, 1121, 1122, 1123, 
+  1124, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1125, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1126, 1127, 1118, 1128, 1129, 1130, 1131, 1113, 
+  1114, 1115, 1132, 1133, 1134, 1135, 1136, 553, 
+  540, 540, 540, 540, 540, 553, 540, 540, 
+  553, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 
+  1137, 1137, 1137, 10, 1138, 1138, 1112, 1118, 
+  1118, 1139, 1118, 1118, 1118, 1118, 1140, 1141, 
+  1142, 1143, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1126, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1144, 1145, 1146, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1147, 1148, 1112, 1149, 540, 
+  540, 540, 540, 540, 540, 540, 1108, 1085, 
+  540, 540, 540, 540, 553, 540, 1125, 1125, 
+  540, 540, 1085, 553, 540, 540, 553, 1118, 
+  1118, 17, 17, 17, 17, 17, 17, 17, 
+  17, 17, 17, 1118, 1118, 1118, 1150, 1150, 
+  1126, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 
+  1117, 1117, 1117, 1117, 1117, 1117, 1117, 0, 
+  1151, 1126, 1152, 1126, 1126, 1126, 1126, 1126, 
+  1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 
+  1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 
+  1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 
+  1126, 540, 553, 540, 540, 553, 540, 540, 
+  553, 553, 553, 540, 553, 553, 540, 553, 
+  540, 540, 540, 553, 540, 553, 540, 553, 
+  540, 553, 540, 540, 0, 0, 1126, 1126, 
+  1126, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1126, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1126, 1126, 
+  1126, 1118, 1118, 1118, 1118, 1118, 1118, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1118, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 
+  1154, 1154, 1154, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 540, 540, 540, 540, 
+  540, 540, 540, 553, 540, 1155, 1155, 77, 
+  9, 9, 9, 1155, 0, 0, 0, 0, 
+  0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 540, 
+  540, 540, 540, 1157, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 1157, 540, 540, 
+  540, 1157, 540, 540, 540, 540, 540, 0, 
+  0, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 
+  1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 
+  0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 553, 553, 553, 0, 0, 1158, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 0, 1118, 
+  1118, 1118, 1118, 1118, 1118, 1118, 1118, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 1107, 553, 540, 540, 553, 
+  540, 540, 553, 540, 540, 540, 553, 553, 
+  553, 1129, 1130, 1131, 540, 540, 540, 553, 
+  540, 540, 553, 553, 540, 540, 540, 540, 
+  540, 1153, 1153, 1153, 1159, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1161, 1162, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1163, 1164, 1160, 1165, 1166, 1160, 1160, 
+  1160, 1160, 1160, 1153, 1159, 1167, 1160, 1159, 
+  1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1159, 1159, 1159, 1159, 1168, 1159, 
+  1159, 1160, 540, 553, 540, 540, 1153, 1153, 
+  1153, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 
+  1176, 1160, 1160, 1153, 1153, 1177, 1177, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1177, 1179, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1153, 1159, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 
+  1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 0, 0, 0, 1160, 
+  1160, 1160, 1160, 0, 0, 1180, 1160, 1181, 
+  1159, 1159, 1153, 1153, 1153, 1153, 0, 0, 
+  1182, 1159, 0, 0, 1183, 1184, 1168, 1160, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  1185, 0, 0, 0, 0, 1186, 1187, 0, 
+  1188, 1160, 1160, 1153, 1153, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1160, 1160, 1189, 1189, 1190, 1190, 1190, 
+  1190, 1190, 1190, 1191, 1189, 0, 0, 0, 
+  0, 0, 1153, 1153, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 0, 0, 0, 0, 
+  1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1192, 0, 1160, 1193, 
+  0, 1160, 1160, 0, 0, 1180, 0, 1159, 
+  1159, 1159, 1153, 1153, 0, 0, 0, 0, 
+  1153, 1153, 0, 0, 1153, 1153, 1168, 0, 
+  0, 0, 1153, 0, 0, 0, 0, 0, 
+  0, 0, 1194, 1195, 1196, 1160, 0, 1197, 
+  0, 0, 0, 0, 0, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1153, 1153, 1160, 1160, 1160, 1153, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 1153, 1153, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 
+  1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 0, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 1180, 1160, 1159, 
+  1159, 1159, 1153, 1153, 1153, 1153, 1153, 0, 
+  1153, 1153, 1159, 0, 1159, 1159, 1168, 0, 
+  0, 1160, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1153, 1153, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1177, 1189, 0, 0, 0, 0, 0, 
+  0, 0, 1160, 0, 0, 0, 0, 0, 
+  0, 0, 1153, 1159, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 
+  1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 0, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 1180, 1160, 1198, 
+  1153, 1159, 1153, 1153, 1153, 1153, 0, 0, 
+  1199, 1200, 0, 0, 1201, 1202, 1168, 0, 
+  0, 0, 0, 0, 0, 0, 0, 1203, 
+  1204, 0, 0, 0, 0, 1205, 1206, 0, 
+  1160, 1160, 1160, 1153, 1153, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1191, 1160, 1190, 1190, 1190, 1190, 1190, 
+  1190, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 1153, 1160, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 0, 0, 0, 1160, 
+  1160, 1160, 0, 1207, 1160, 1208, 1160, 0, 
+  0, 0, 1160, 1160, 0, 1160, 0, 1160, 
+  1160, 0, 0, 0, 1160, 1160, 0, 0, 
+  0, 1160, 1160, 1160, 0, 0, 0, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 0, 0, 1209, 
+  1159, 1153, 1159, 1159, 0, 0, 0, 1210, 
+  1211, 1159, 0, 1212, 1213, 1214, 1168, 0, 
+  0, 1160, 0, 0, 0, 0, 0, 0, 
+  1215, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1190, 1190, 1190, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1189, 1085, 0, 0, 0, 0, 
+  0, 1153, 1159, 1159, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 0, 1160, 1153, 
+  1153, 1153, 1159, 1159, 1159, 1159, 0, 1216, 
+  1153, 1217, 0, 1153, 1153, 1153, 1168, 0, 
+  0, 0, 0, 0, 0, 0, 1218, 1219, 
+  0, 1160, 1160, 1160, 0, 0, 0, 0, 
+  0, 1160, 1160, 1153, 1153, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 
+  1191, 1160, 1153, 1159, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 0, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 1180, 1160, 1159, 
+  1221, 1222, 1159, 1223, 1159, 1159, 0, 1224, 
+  1225, 1226, 0, 1227, 1228, 1153, 1168, 0, 
+  0, 0, 0, 0, 0, 0, 1229, 1230, 
+  0, 0, 0, 0, 0, 0, 0, 1160, 
+  0, 1160, 1160, 1153, 1153, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 0, 1160, 1160, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 1153, 1159, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 0, 0, 1160, 1231, 
+  1159, 1159, 1153, 1153, 1153, 1153, 0, 1232, 
+  1233, 1159, 0, 1234, 1235, 1236, 1168, 1237, 
+  1191, 0, 0, 0, 0, 1160, 1160, 1160, 
+  1238, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1160, 1160, 1160, 1153, 1153, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1191, 1160, 1160, 1160, 1160, 1160, 
+  1160, 0, 0, 1159, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 0, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 0, 1160, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 0, 0, 1239, 0, 0, 0, 0, 
+  1240, 1159, 1159, 1153, 1153, 1153, 0, 1153, 
+  0, 1159, 1241, 1242, 1159, 1243, 1244, 1245, 
+  1246, 0, 0, 0, 0, 0, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 0, 0, 1159, 1159, 1177, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 1153, 340, 1247, 1153, 1153, 1153, 
+  1153, 1248, 1248, 1168, 0, 0, 0, 0, 
+  11, 340, 340, 340, 340, 340, 340, 523, 
+  1153, 1249, 1249, 1249, 1249, 1153, 1153, 1153, 
+  1044, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1250, 1044, 1044, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 340, 340, 0, 340, 0, 0, 
+  340, 340, 0, 340, 0, 0, 340, 0, 
+  0, 0, 0, 0, 0, 340, 340, 340, 
+  340, 0, 340, 340, 340, 340, 340, 340, 
+  340, 0, 340, 340, 340, 0, 340, 0, 
+  340, 0, 0, 340, 340, 0, 340, 340, 
+  340, 340, 1153, 340, 1251, 1153, 1153, 1153, 
+  1153, 1252, 1252, 0, 1153, 1153, 340, 0, 
+  0, 340, 340, 340, 340, 340, 0, 523, 
+  0, 1253, 1253, 1253, 1253, 1153, 1153, 0, 
+  0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1250, 0, 0, 1254, 1255, 340, 
+  340, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1191, 1191, 1191, 1177, 1177, 1177, 
+  1177, 1177, 1177, 1177, 1177, 1256, 1177, 1177, 
+  1177, 1177, 1177, 1177, 1191, 1177, 1191, 1191, 
+  1191, 553, 553, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1190, 1190, 1190, 1191, 553, 1191, 
+  553, 1191, 1257, 1258, 1259, 1258, 1259, 1159, 
+  1159, 1160, 1160, 1160, 1260, 1160, 1160, 1160, 
+  1160, 0, 1160, 1160, 1160, 1160, 1261, 1160, 
+  1160, 1160, 1160, 1262, 1160, 1160, 1160, 1160, 
+  1263, 1160, 1160, 1160, 1160, 1264, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1265, 1160, 1160, 1160, 0, 0, 
+  0, 0, 1266, 1267, 1268, 1269, 1270, 1271, 
+  1272, 1273, 1274, 1267, 1267, 1267, 1267, 1153, 
+  1159, 1267, 1275, 540, 540, 1168, 1177, 540, 
+  540, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1276, 1153, 1153, 1153, 
+  1153, 0, 1153, 1153, 1153, 1153, 1277, 1153, 
+  1153, 1153, 1153, 1278, 1153, 1153, 1153, 1153, 
+  1279, 1153, 1153, 1153, 1153, 1280, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1281, 1153, 1153, 1153, 0, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 553, 
+  1191, 1191, 1191, 1191, 1191, 1191, 0, 1191, 
+  1191, 1177, 1177, 1177, 1177, 1177, 1191, 1191, 
+  1191, 1191, 1177, 1177, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 340, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 340, 1160, 1160, 1160, 1160, 1282, 1283, 
+  1160, 1160, 1160, 1160, 1284, 1284, 1153, 1285, 
+  1153, 1153, 1159, 1153, 1153, 1153, 1153, 1153, 
+  1180, 1284, 1168, 1168, 1159, 1159, 1153, 1153, 
+  1160, 1178, 1178, 1250, 1250, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1044, 1044, 1044, 1177, 1177, 
+  1177, 1160, 1160, 1160, 1160, 340, 1160, 1159, 
+  1159, 1153, 1153, 1160, 1160, 1160, 1160, 1153, 
+  1153, 1153, 1160, 1284, 1284, 1284, 1160, 1160, 
+  1284, 1284, 1284, 1284, 1284, 1284, 1284, 1160, 
+  1160, 1160, 1153, 1153, 1153, 1153, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1153, 1284, 1159, 1153, 1153, 
+  1284, 1284, 1284, 1284, 1284, 1284, 553, 1160, 
+  1284, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1284, 1284, 1284, 1153, 1191, 
+  1191, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 
+  1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 
+  1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 
+  1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 
+  1317, 1318, 1319, 1320, 1321, 1322, 1323, 0, 
+  1324, 0, 0, 0, 0, 0, 1325, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 1044, 1326, 340, 340, 
+  340, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1328, 1329, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 0, 1160, 1160, 1160, 1160, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 0, 1160, 1160, 1160, 1160, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 0, 0, 540, 540, 
+  540, 1177, 1044, 1177, 1177, 1177, 1177, 1177, 
+  1177, 1177, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 77, 77, 77, 77, 77, 1085, 77, 
+  1085, 1085, 77, 0, 0, 0, 0, 0, 
+  0, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 
+  1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 
+  1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 
+  1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 
+  1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 
+  1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 
+  1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 
+  1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 
+  1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 
+  1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 
+  1411, 1412, 1413, 1414, 1415, 1416, 1417, 0, 
+  0, 1418, 1419, 1420, 1421, 1422, 1423, 0, 
+  0, 1424, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 340, 340, 340, 340, 
+  340, 340, 340, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 340, 340, 340, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 
+  1160, 1160, 1160, 1160, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 340, 340, 340, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 1160, 1160, 1160, 1160, 1160, 
+  1160, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 340, 340, 340, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 
+  340, 340, 340, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 340, 340, 340, 1160, 1160, 1160, 1160, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 340, 340, 340, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 340, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1177, 1044, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1425, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1258, 1259, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1160, 340, 1160, 340, 340, 340, 340, 
+  340, 340, 340, 340, 1044, 1044, 1044, 1426, 
+  1426, 1426, 340, 340, 340, 340, 340, 340, 
+  340, 340, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 
+  1160, 1160, 1160, 1153, 1153, 1168, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1153, 1153, 1168, 1177, 1177, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1153, 1153, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 340, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 1160, 
+  1160, 1160, 0, 1153, 1153, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 574, 574, 1159, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1159, 1159, 1153, 
+  1159, 1159, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1168, 1153, 1177, 1177, 1044, 
+  1179, 1177, 1177, 1177, 1189, 340, 540, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 
+  1427, 1427, 1427, 0, 0, 0, 0, 0, 
+  0, 1428, 1428, 1428, 1428, 1428, 1428, 1424, 
+  1428, 1428, 1428, 1428, 574, 574, 574, 81, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1179, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1153, 1153, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1087, 1160, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 340, 340, 340, 
+  1160, 340, 1160, 340, 1160, 1160, 1160, 340, 
+  340, 1160, 1160, 1160, 340, 340, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 340, 1160, 340, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 340, 340, 340, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1153, 1153, 1153, 1159, 1159, 1159, 1159, 
+  1153, 1153, 1159, 1159, 1159, 0, 0, 0, 
+  0, 1159, 1159, 1153, 1159, 1159, 1159, 1159, 
+  1159, 1159, 1086, 540, 553, 0, 0, 0, 
+  0, 1085, 0, 0, 0, 1428, 1428, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 0, 
+  0, 340, 340, 340, 340, 340, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1190, 0, 0, 0, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  540, 553, 1159, 1159, 1153, 0, 0, 1177, 
+  1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1159, 1153, 
+  1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  0, 1168, 1284, 1153, 1284, 1284, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1153, 1153, 540, 540, 
+  540, 540, 540, 540, 540, 540, 0, 0, 
+  553, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 
+  1179, 1177, 1177, 1177, 1177, 1177, 1177, 0, 
+  0, 540, 540, 540, 540, 540, 553, 553, 
+  553, 553, 553, 553, 540, 540, 553, 839, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1153, 1153, 1153, 1153, 1159, 1429, 1430, 
+  1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 
+  1160, 1160, 1439, 1440, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1180, 1441, 1153, 
+  1153, 1153, 1153, 1442, 1443, 1444, 1445, 1446, 
+  1447, 1448, 1449, 1450, 1451, 1452, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1177, 1177, 1177, 1177, 1177, 
+  1177, 1177, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 540, 553, 540, 540, 
+  540, 540, 540, 540, 540, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 0, 0, 
+  0, 1153, 1153, 1159, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1159, 1153, 1153, 1153, 1153, 1159, 
+  1159, 1153, 1153, 1452, 1168, 1153, 1153, 1160, 
+  1160, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1180, 
+  1159, 1153, 1153, 1159, 1159, 1159, 1153, 1159, 
+  1153, 1153, 1153, 1452, 1452, 0, 0, 0, 
+  0, 0, 0, 0, 0, 1177, 1177, 1177, 
+  1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1159, 1159, 1153, 
+  1180, 0, 0, 0, 1177, 1177, 1177, 1177, 
+  1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 1160, 1160, 
+  1160, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1250, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 523, 523, 523, 523, 523, 523, 1044, 
+  1044, 1453, 1454, 1455, 1456, 1457, 1457, 1458, 
+  1459, 1460, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 
+  1177, 0, 0, 0, 0, 0, 0, 0, 
+  0, 540, 540, 540, 1177, 566, 553, 553, 
+  553, 553, 553, 540, 540, 553, 553, 553, 
+  553, 540, 1159, 566, 566, 566, 566, 566, 
+  566, 566, 1160, 1160, 1160, 1160, 553, 1160, 
+  1160, 1160, 1160, 1159, 1159, 540, 1160, 1160, 
+  0, 540, 540, 0, 0, 0, 0, 0, 
+  0, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 1461, 1462, 1463, 
+  523, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 
+  1471, 1472, 1473, 1474, 523, 1475, 1476, 1477, 
+  1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 
+  1486, 1487, 1488, 1489, 1490, 1491, 1492, 523, 
+  1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 
+  1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 
+  1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 
+  1517, 1518, 1519, 1520, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 1521, 1522, 1523, 214, 214, 1524, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 1523, 214, 
+  214, 214, 214, 214, 1525, 1526, 1527, 1528, 
+  1491, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 
+  1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 
+  1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 
+  1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 
+  1560, 540, 540, 553, 540, 540, 540, 540, 
+  540, 540, 540, 553, 540, 540, 576, 1561, 
+  553, 555, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 0, 
+  0, 0, 0, 0, 540, 575, 553, 540, 
+  553, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 
+  1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 
+  1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 
+  1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 
+  1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 
+  1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 
+  1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 
+  1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 
+  1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 
+  1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 
+  1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 
+  1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 
+  1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 
+  1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 
+  1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 
+  1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 
+  1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 
+  1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 
+  1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 
+  1713, 1714, 1715, 1716, 1717, 214, 214, 1718, 
+  214, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 
+  1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 
+  1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 
+  1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 
+  1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 
+  1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 
+  1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 
+  1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 
+  1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 
+  1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 
+  1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 
+  1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 
+  1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 
+  1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 
+  1830, 1831, 1832, 1833, 1834, 1835, 1836, 0, 
+  0, 1837, 1838, 1839, 1840, 1841, 1842, 0, 
+  0, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 
+  1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 
+  1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 
+  1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 
+  1874, 1875, 1876, 1877, 1878, 1879, 1880, 0, 
+  0, 1881, 1882, 1883, 1884, 1885, 1886, 0, 
+  0, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 
+  1894, 0, 1895, 0, 1896, 0, 1897, 0, 
+  1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 
+  1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 
+  1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 
+  1922, 1923, 1924, 1925, 1926, 1927, 1928, 0, 
+  0, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 
+  1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 
+  1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 
+  1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 
+  1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 
+  1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 
+  1976, 1977, 1978, 1979, 1980, 1981, 0, 1982, 
+  1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 
+  1991, 1992, 1993, 1994, 1995, 1996, 0, 1997, 
+  1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 
+  2006, 2007, 2008, 2009, 2010, 0, 0, 2011, 
+  2012, 2013, 2014, 2015, 2016, 0, 2017, 2018, 
+  2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 
+  2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 
+  2035, 0, 0, 2036, 2037, 2038, 0, 2039, 
+  2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 
+  0, 2048, 2049, 2050, 2051, 2050, 2050, 2050, 
+  2052, 2050, 2050, 2050, 81, 2053, 2054, 2055, 
+  2056, 1084, 2057, 1084, 1084, 1084, 1084, 9, 
+  2058, 2059, 2060, 2061, 2059, 2059, 2060, 2061, 
+  2059, 9, 9, 9, 9, 2062, 2063, 2064, 
+  9, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 
+  76, 10, 10, 10, 2072, 2073, 9, 2074, 
+  2075, 9, 80, 92, 9, 2076, 9, 2077, 
+  48, 48, 9, 9, 9, 2078, 12, 13, 
+  2079, 2080, 2081, 9, 9, 9, 9, 9, 
+  9, 9, 9, 75, 9, 48, 9, 9, 
+  2082, 9, 9, 9, 9, 9, 9, 9, 
+  2050, 81, 81, 81, 81, 81, 0, 2083, 
+  2084, 2085, 2086, 81, 81, 81, 81, 81, 
+  81, 2087, 2088, 0, 0, 2089, 2090, 2091, 
+  2092, 2093, 2094, 2095, 2096, 2097, 2098, 2099, 
+  2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 
+  2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 
+  0, 2116, 2117, 2118, 2119, 2120, 2121, 2122, 
+  2123, 2124, 2125, 2126, 2127, 2128, 0, 0, 
+  0, 11, 11, 11, 11, 11, 11, 11, 
+  11, 2129, 11, 11, 11, 11, 11, 11, 
+  11, 11, 11, 11, 11, 11, 11, 11, 
+  11, 11, 1189, 11, 11, 11, 11, 11, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 540, 540, 566, 566, 540, 540, 540, 
+  540, 566, 566, 566, 540, 540, 839, 839, 
+  839, 839, 540, 839, 839, 839, 566, 566, 
+  540, 553, 540, 566, 566, 553, 553, 553, 
+  553, 540, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 2130, 2131, 2132, 2133, 77, 2134, 2135, 
+  2136, 77, 2137, 2138, 2139, 2139, 2139, 2140, 
+  2141, 2142, 2142, 2143, 2144, 77, 2145, 2146, 
+  77, 75, 2147, 2148, 2149, 2149, 2149, 77, 
+  77, 2150, 2151, 2152, 77, 2153, 77, 2154, 
+  77, 2153, 77, 2155, 2156, 2157, 2132, 83, 
+  2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 
+  2166, 2167, 2168, 1085, 2169, 2170, 2171, 2172, 
+  2173, 2174, 75, 75, 75, 75, 2175, 2176, 
+  2158, 2168, 2177, 77, 75, 1085, 77, 2178, 
+  1191, 2179, 2180, 2181, 2182, 2183, 2184, 2185, 
+  2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 
+  2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 
+  2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 
+  2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 
+  2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 
+  2226, 1426, 1426, 2227, 2228, 2229, 1426, 1426, 
+  1426, 2227, 2230, 77, 77, 0, 0, 0, 
+  0, 2231, 75, 2232, 75, 2233, 77, 77, 
+  77, 77, 77, 2234, 2235, 77, 77, 77, 
+  77, 75, 77, 77, 75, 77, 77, 75, 
+  77, 77, 77, 77, 77, 77, 77, 2236, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 2237, 2238, 
+  2239, 2240, 77, 2241, 77, 2242, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 1109, 75, 75, 
+  75, 75, 1109, 1109, 1109, 1109, 75, 75, 
+  1109, 75, 2243, 2243, 2244, 2245, 75, 75, 
+  75, 2246, 2247, 2243, 2248, 2249, 2243, 75, 
+  75, 75, 2243, 14, 84, 75, 2243, 2243, 
+  75, 75, 75, 2243, 2243, 2243, 2243, 75, 
+  2243, 2243, 2243, 2243, 2250, 2251, 2252, 2253, 
+  75, 75, 75, 75, 2243, 2254, 2255, 2243, 
+  2256, 2257, 2243, 2243, 2243, 75, 75, 75, 
+  75, 75, 2243, 75, 2243, 2258, 2243, 2243, 
+  2243, 2243, 2259, 2243, 2260, 2261, 2262, 2243, 
+  2263, 2264, 2265, 2243, 2243, 2243, 2266, 75, 
+  75, 75, 75, 2243, 2243, 2243, 2243, 75, 
+  75, 75, 75, 75, 75, 75, 75, 75, 
+  2243, 2267, 2268, 2269, 75, 2270, 2271, 2243, 
+  2243, 2243, 2243, 2243, 2243, 75, 2272, 2273, 
+  2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 
+  2282, 2283, 2284, 2285, 2286, 2287, 2288, 2243, 
+  2243, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 
+  2296, 2297, 2298, 2243, 2243, 2243, 75, 75, 
+  2243, 2243, 2299, 2300, 75, 75, 75, 75, 
+  75, 2243, 75, 75, 75, 75, 75, 75, 
+  75, 75, 75, 2301, 2243, 75, 75, 2243, 
+  2243, 2302, 2303, 2243, 2304, 2305, 2306, 2307, 
+  2308, 2243, 2243, 2309, 2310, 2311, 2312, 2243, 
+  2243, 2243, 75, 75, 75, 75, 75, 2243, 
+  2243, 75, 75, 75, 75, 75, 75, 75, 
+  75, 75, 2243, 2243, 2243, 2243, 2243, 75, 
+  75, 2243, 2243, 75, 75, 75, 75, 2243, 
+  2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 
+  2243, 2313, 2314, 2315, 2316, 2243, 2243, 2243, 
+  2243, 2243, 2243, 2317, 2318, 2319, 2320, 75, 
+  75, 2243, 2243, 2321, 2321, 2243, 2321, 2321, 
+  2243, 2243, 2321, 2321, 2321, 2243, 2321, 2243, 
+  2321, 77, 77, 77, 77, 77, 77, 77, 
+  77, 12, 13, 12, 13, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 1085, 1085, 77, 77, 77, 
+  77, 2243, 2243, 77, 77, 77, 77, 77, 
+  77, 77, 2322, 2323, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 1085, 1109, 1085, 1085, 
+  77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 838, 77, 
+  1085, 1085, 1085, 1085, 75, 75, 75, 75, 
+  75, 75, 75, 75, 75, 75, 75, 75, 
+  75, 75, 75, 75, 75, 75, 75, 75, 
+  75, 75, 75, 1109, 1109, 1085, 1085, 1085, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 77, 77, 1085, 1085, 
+  77, 77, 77, 77, 77, 1085, 1085, 1085, 
+  1085, 1085, 1085, 77, 1085, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1085, 1085, 1085, 1085, 1085, 
+  1085, 77, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 77, 77, 77, 77, 77, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 2324, 2325, 2326, 2327, 2328, 2329, 2330, 
+  2331, 2332, 2333, 2334, 2335, 2336, 2337, 2338, 
+  2339, 2340, 2341, 2342, 2343, 2344, 2345, 2346, 
+  2347, 2348, 2349, 2350, 2351, 2352, 2353, 2354, 
+  2355, 2356, 2357, 2358, 2359, 2360, 2361, 2362, 
+  2363, 2364, 2365, 2366, 2367, 2368, 2369, 2370, 
+  2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 
+  2379, 2380, 2381, 2382, 2383, 2384, 2385, 2386, 
+  2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 
+  2395, 2396, 2397, 2398, 2399, 2400, 2401, 2402, 
+  2403, 2404, 2405, 2406, 2407, 2408, 2409, 2410, 
+  2411, 2412, 2413, 2414, 2415, 2416, 2417, 2418, 
+  2419, 2420, 2421, 2422, 2423, 2424, 2425, 2426, 
+  2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 
+  2435, 2436, 2437, 2438, 2439, 2440, 2441, 2442, 
+  2443, 2444, 2445, 2446, 2447, 2448, 2449, 2450, 
+  2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458, 
+  2459, 2460, 2461, 2462, 1220, 1220, 1220, 1220, 
+  1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 
+  1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 
+  1220, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  75, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 75, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 75, 75, 75, 75, 75, 1109, 1109, 
+  75, 77, 77, 77, 1085, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 1085, 1085, 1085, 
+  1085, 1085, 1085, 77, 77, 77, 2463, 77, 
+  77, 77, 77, 1085, 1085, 1085, 77, 77, 
+  77, 77, 77, 77, 1085, 1085, 77, 77, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  75, 77, 77, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 77, 77, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 77, 1085, 1085, 1085, 838, 1085, 1085, 
+  1085, 1085, 1085, 77, 77, 77, 77, 1085, 
+  77, 77, 77, 77, 77, 77, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 77, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 2464, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 2464, 2464, 2464, 2464, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 2465, 1085, 1085, 
+  1085, 12, 13, 12, 13, 12, 13, 12, 
+  13, 12, 13, 12, 13, 12, 13, 1220, 
+  1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 
+  1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 
+  1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 
+  1220, 1220, 1220, 1220, 1220, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 2243, 1109, 75, 2321, 2321, 12, 13, 
+  75, 2321, 2321, 75, 2321, 2321, 2321, 1109, 
+  1109, 1109, 75, 1109, 2243, 2243, 2321, 2321, 
+  1109, 1109, 1109, 1109, 1109, 2321, 2321, 2321, 
+  1109, 75, 1109, 2321, 2321, 2321, 2321, 12, 
+  13, 12, 13, 12, 13, 12, 13, 12, 
+  13, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 75, 75, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 75, 75, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 75, 75, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 75, 1109, 1109, 75, 75, 1109, 
+  75, 1109, 75, 1109, 1109, 75, 75, 1109, 
+  1109, 75, 75, 1109, 1109, 75, 75, 1109, 
+  1109, 75, 75, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 75, 75, 1109, 
+  1109, 75, 1109, 75, 12, 13, 12, 13, 
+  12, 13, 12, 13, 12, 13, 12, 13, 
+  12, 13, 12, 13, 1258, 1259, 1258, 1259, 
+  12, 13, 75, 1109, 2321, 2321, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2321, 2321, 2321, 2243, 
+  2243, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 
+  2321, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 2321, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 2321, 2321, 2321, 2321, 2321, 2321, 1109, 
+  1109, 1109, 2321, 1109, 1109, 1109, 1109, 2321, 
+  2321, 2321, 2243, 2243, 75, 2243, 2243, 75, 
+  75, 12, 13, 1258, 1259, 2321, 1109, 1109, 
+  1109, 1109, 2321, 1109, 2321, 2321, 2321, 1109, 
+  1109, 2321, 2321, 1109, 75, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 2321, 2243, 2243, 
+  2243, 2243, 2243, 75, 75, 12, 13, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 2321, 2321, 2466, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2321, 2321, 1109, 2243, 
+  2243, 2321, 2243, 75, 75, 2243, 75, 2243, 
+  1109, 75, 2243, 75, 2243, 2243, 2321, 2321, 
+  75, 75, 75, 75, 1109, 2321, 2321, 1109, 
+  1109, 1109, 1109, 1109, 1109, 2243, 2243, 2243, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 75, 
+  75, 75, 75, 75, 75, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  2321, 2321, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 2321, 2321, 75, 
+  75, 1109, 1109, 2243, 2243, 2243, 2243, 1109, 
+  2243, 2243, 75, 75, 2243, 2467, 2468, 2469, 
+  75, 1109, 2321, 2321, 2321, 2321, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2243, 2243, 2321, 2321, 
+  2243, 2243, 2243, 2243, 2243, 2243, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2321, 1109, 1109, 2321, 
+  2321, 2321, 2321, 2321, 2321, 2321, 2321, 1109, 
+  2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2321, 2321, 2321, 2321, 
+  2243, 2243, 2243, 2243, 2243, 2243, 2243, 2243, 
+  2321, 2321, 2243, 2243, 2243, 2243, 2321, 2321, 
+  2321, 2321, 2321, 2321, 2243, 2243, 2243, 2243, 
+  1109, 1109, 1109, 1109, 1109, 2470, 2471, 2243, 
+  1109, 1109, 1109, 2321, 2321, 2321, 2321, 2321, 
+  1109, 1109, 1109, 1109, 1109, 2321, 2321, 2243, 
+  75, 75, 75, 75, 2321, 1109, 1109, 75, 
+  2321, 2321, 2321, 2321, 2321, 1109, 2321, 75, 
+  75, 1085, 1085, 1085, 1085, 1085, 1085, 77, 
+  77, 1085, 1085, 1085, 1085, 1085, 77, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 
+  1085, 1085, 1085, 1085, 1085, 1085, 77, 77, 
+  77, 77, 77, 77, 77, 1085, 1085, 77, 
+  77, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1085, 1085, 
+  1109, 1109, 1109, 1109, 1109, 1109, 1085, 77, 
+  77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 0, 0, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 0, 0, 0, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 0, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 1085, 1085, 1085, 
+  1085, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 
+  2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486, 
+  2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, 
+  2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 
+  2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 
+  2511, 2512, 2513, 2514, 2515, 2516, 2517, 2518, 
+  0, 2519, 2520, 2521, 2522, 2523, 2524, 2525, 
+  2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 
+  2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 
+  2542, 2543, 2544, 2545, 2546, 2547, 2548, 2549, 
+  2550, 2551, 2552, 2553, 2554, 2555, 2556, 2557, 
+  2558, 2559, 2560, 2561, 2562, 2563, 2564, 2565, 
+  0, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 
+  2573, 2574, 2575, 2576, 2577, 2578, 2579, 2580, 
+  2581, 2582, 214, 2583, 2584, 214, 2585, 2586, 
+  214, 214, 214, 214, 214, 2587, 2588, 2589, 
+  2590, 2591, 2592, 2593, 2594, 2595, 2596, 2597, 
+  2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605, 
+  2606, 2607, 2608, 2609, 2610, 2611, 2612, 2613, 
+  2614, 2615, 2616, 2617, 2618, 2619, 2620, 2621, 
+  2622, 2623, 2624, 2625, 2626, 2627, 2628, 2629, 
+  2630, 2631, 2632, 2633, 2634, 2635, 2636, 2637, 
+  2638, 2639, 2640, 2641, 2642, 2643, 2644, 2645, 
+  2646, 2647, 2648, 2649, 2650, 2651, 2652, 2653, 
+  2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 
+  2662, 2663, 2664, 2665, 2666, 2667, 2668, 2669, 
+  2670, 2671, 2672, 2673, 2674, 2675, 2676, 2677, 
+  2678, 2679, 2680, 2681, 2682, 2683, 2684, 2685, 
+  2686, 2687, 2688, 2689, 2690, 214, 77, 77, 
+  1085, 77, 77, 1085, 2691, 2692, 2693, 2694, 
+  540, 540, 540, 2695, 2696, 0, 0, 0, 
+  0, 0, 9, 9, 9, 9, 1427, 9, 
+  9, 2697, 2698, 2699, 2700, 2701, 2702, 2703, 
+  2704, 2705, 2706, 2707, 2708, 2709, 2710, 2711, 
+  2712, 2713, 2714, 2715, 2716, 2717, 2718, 2719, 
+  2720, 2721, 2722, 2723, 2724, 2725, 2726, 2727, 
+  2728, 2729, 2730, 2731, 2732, 2733, 2734, 0, 
+  2735, 0, 0, 0, 0, 0, 2736, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1160, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 0, 0, 0, 0, 0, 0, 0, 
+  2737, 1044, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  1168, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 9, 9, 80, 92, 80, 92, 9, 
+  9, 9, 80, 92, 9, 80, 92, 1428, 
+  1428, 1428, 1428, 9, 1428, 1428, 1428, 9, 
+  1084, 9, 9, 1084, 9, 80, 92, 9, 
+  9, 80, 92, 12, 13, 12, 13, 12, 
+  13, 12, 13, 9, 9, 9, 9, 9, 
+  522, 9, 9, 9, 9, 9, 9, 9, 
+  9, 9, 9, 1084, 1084, 9, 9, 9, 
+  9, 1084, 9, 2061, 1428, 9, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 0, 1085, 1085, 1085, 1085, 
+  2738, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 2739, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 2740, 2741, 2742, 2743, 2744, 2745, 2746, 
+  2747, 2748, 2749, 2750, 2751, 2752, 2753, 2754, 
+  2755, 2756, 2757, 2758, 2759, 2760, 2761, 2762, 
+  2763, 2764, 2765, 2766, 2767, 2768, 2769, 2770, 
+  2771, 2772, 2773, 2774, 2775, 2776, 2777, 2778, 
+  2779, 2780, 2781, 2782, 2783, 2784, 2785, 2786, 
+  2787, 2788, 2789, 2790, 2791, 2792, 2793, 2794, 
+  2795, 2796, 2797, 2798, 2799, 2800, 2801, 2802, 
+  2803, 2804, 2805, 2806, 2807, 2808, 2809, 2810, 
+  2811, 2812, 2813, 2814, 2815, 2816, 2817, 2818, 
+  2819, 2820, 2821, 2822, 2823, 2824, 2825, 2826, 
+  2827, 2828, 2829, 2830, 2831, 2832, 2833, 2834, 
+  2835, 2836, 2837, 2838, 2839, 2840, 2841, 2842, 
+  2843, 2844, 2845, 2846, 2847, 2848, 2849, 2850, 
+  2851, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 
+  2859, 2860, 2861, 2862, 2863, 2864, 2865, 2866, 
+  2867, 2868, 2869, 2870, 2871, 2872, 2873, 2874, 
+  2875, 2876, 2877, 2878, 2879, 2880, 2881, 2882, 
+  2883, 2884, 2885, 2886, 2887, 2888, 2889, 2890, 
+  2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, 
+  2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 
+  2907, 2908, 2909, 2910, 2911, 2912, 2913, 2914, 
+  2915, 2916, 2917, 2918, 2919, 2920, 2921, 2922, 
+  2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 
+  2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 
+  2939, 2940, 2941, 2942, 2943, 2944, 2945, 2946, 
+  2947, 2948, 2949, 2950, 2951, 2952, 2953, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 0, 0, 0, 
+  0, 2954, 1428, 1428, 1428, 1085, 1179, 1160, 
+  2227, 1258, 1259, 1258, 1259, 1258, 1259, 1258, 
+  1259, 1258, 1259, 1085, 1085, 1258, 1259, 1258, 
+  1259, 1258, 1259, 1258, 1259, 1424, 2955, 2956, 
+  2956, 1085, 2227, 2227, 2227, 2227, 2227, 2227, 
+  2227, 2227, 2227, 2957, 1087, 552, 1086, 2958, 
+  2958, 1424, 1179, 1179, 1179, 1179, 1179, 2959, 
+  1085, 2960, 2961, 2962, 1179, 1160, 1428, 1085, 
+  77, 0, 1160, 1160, 1160, 1160, 1160, 2963, 
+  1160, 1160, 1160, 1160, 2964, 2965, 2966, 2967, 
+  2968, 2969, 2970, 2971, 2972, 2973, 2974, 2975, 
+  2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 
+  2984, 2985, 2986, 2987, 1160, 2988, 2989, 2990, 
+  2991, 2992, 2993, 1160, 1160, 1160, 1160, 1160, 
+  2994, 2995, 2996, 2997, 2998, 2999, 3000, 3001, 
+  3002, 3003, 3004, 3005, 3006, 3007, 3008, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 3009, 1160, 1160, 
+  0, 0, 3010, 3011, 3012, 3013, 3014, 3015, 
+  3016, 1424, 1160, 1160, 1160, 1160, 1160, 3017, 
+  1160, 1160, 1160, 1160, 3018, 3019, 3020, 3021, 
+  3022, 3023, 3024, 3025, 3026, 3027, 3028, 3029, 
+  3030, 3031, 3032, 3033, 3034, 3035, 3036, 3037, 
+  3038, 3039, 3040, 3041, 1160, 3042, 3043, 3044, 
+  3045, 3046, 3047, 1160, 1160, 1160, 1160, 1160, 
+  3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 
+  3056, 3057, 3058, 3059, 3060, 3061, 3062, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  3063, 3064, 3065, 3066, 1160, 3067, 1160, 1160, 
+  3068, 3069, 3070, 3071, 1428, 1179, 3072, 3073, 
+  3074, 0, 0, 0, 0, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 
+  0, 0, 3075, 3076, 3077, 3078, 3079, 3080, 
+  3081, 3082, 3083, 3084, 3085, 3086, 3087, 3088, 
+  3089, 3090, 3091, 3092, 3093, 3094, 3095, 3096, 
+  3097, 3098, 3099, 3100, 3101, 3102, 3103, 3104, 
+  3105, 3106, 3107, 3108, 3109, 3110, 3111, 3112, 
+  3113, 3114, 3115, 3116, 3117, 3118, 3119, 3120, 
+  3121, 3122, 3123, 3124, 3125, 3126, 3127, 3128, 
+  3129, 3130, 3131, 3132, 3133, 3134, 3135, 3136, 
+  3137, 3138, 3139, 3140, 3141, 3142, 3143, 3144, 
+  3145, 3146, 3147, 3148, 3149, 3150, 3151, 3152, 
+  3153, 3154, 3155, 3156, 3157, 3158, 3159, 3160, 
+  3161, 3162, 3163, 3164, 3165, 3166, 3167, 3168, 
+  0, 1191, 1191, 3169, 3170, 3171, 3172, 3173, 
+  3174, 3175, 3176, 3177, 3178, 3179, 3180, 3181, 
+  3182, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 
+  3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 
+  3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 
+  3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 
+  0, 3214, 3215, 3216, 3217, 3218, 3219, 3220, 
+  3221, 3222, 3223, 3224, 3225, 3226, 3227, 3228, 
+  3229, 3230, 3231, 3232, 3233, 3234, 3235, 3236, 
+  3237, 3238, 3239, 3240, 3241, 3242, 3243, 3244, 
+  3245, 3246, 3247, 3248, 3249, 3250, 3251, 3252, 
+  3253, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1190, 3254, 3255, 3256, 3257, 3258, 3259, 3260, 
+  3261, 3262, 3263, 3264, 3265, 3266, 3267, 3268, 
+  3269, 3270, 3271, 3272, 3273, 3274, 3275, 3276, 
+  3277, 3278, 3279, 3280, 3281, 3282, 3283, 3284, 
+  3285, 3286, 3287, 3288, 3289, 3290, 3291, 3292, 
+  3293, 3294, 3295, 3296, 3297, 3298, 3299, 3300, 
+  1191, 3301, 3302, 3303, 3304, 3305, 3306, 3307, 
+  3308, 3309, 3310, 3311, 3312, 3313, 3314, 3315, 
+  3316, 3317, 3318, 3319, 3320, 3321, 3322, 3323, 
+  3324, 3325, 3326, 3327, 3328, 3329, 3330, 3331, 
+  3332, 3333, 3334, 3335, 3336, 3337, 3338, 3339, 
+  3340, 3341, 3342, 3343, 3344, 3345, 3346, 3347, 
+  3348, 3349, 3350, 3351, 3352, 3353, 3354, 3355, 
+  3356, 3357, 3358, 3359, 3360, 3361, 3362, 3363, 
+  3364, 3365, 3366, 3367, 3368, 3369, 3370, 3371, 
+  3372, 3373, 3374, 3375, 3376, 3377, 3378, 3379, 
+  3380, 3381, 3382, 3383, 3384, 3385, 3386, 3387, 
+  3388, 3389, 3390, 3391, 3392, 3393, 3394, 3395, 
+  3396, 3397, 3398, 3399, 3400, 3401, 3402, 3403, 
+  3404, 3405, 3406, 3407, 3408, 3409, 3410, 3411, 
+  3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 
+  3420, 3421, 3422, 3423, 3424, 3425, 3426, 3427, 
+  0, 3428, 3429, 3430, 3431, 3432, 3433, 3434, 
+  3435, 3436, 3437, 3438, 3439, 3440, 3441, 3442, 
+  3443, 3444, 3445, 3446, 3447, 3448, 3449, 3450, 
+  3451, 3452, 3453, 3454, 3455, 3456, 3457, 3458, 
+  3459, 3460, 3461, 3462, 3463, 3464, 3465, 3466, 
+  3467, 3468, 3469, 3470, 3471, 3472, 3473, 3474, 
+  3475, 3476, 3477, 3478, 3479, 3480, 3481, 3482, 
+  3483, 3484, 3485, 3486, 3487, 3488, 3489, 3490, 
+  3491, 3492, 3493, 3494, 3495, 3496, 3497, 3498, 
+  3499, 3500, 3501, 3502, 3503, 3504, 3505, 3506, 
+  3507, 3508, 3509, 3510, 3511, 3512, 3513, 3514, 
+  3515, 3516, 3517, 3518, 3519, 3520, 3521, 3522, 
+  3523, 3524, 3525, 3526, 3527, 3528, 3529, 3530, 
+  3531, 3532, 3533, 3534, 3535, 3536, 3537, 3538, 
+  3539, 3540, 3541, 3542, 3543, 3544, 3545, 3546, 
+  3547, 3548, 3549, 3550, 3551, 3552, 3553, 3554, 
+  3555, 3556, 3557, 3558, 3559, 3560, 3561, 3562, 
+  3563, 3564, 3565, 3566, 3567, 3568, 3569, 3570, 
+  3571, 3572, 3573, 3574, 3575, 3576, 3577, 3578, 
+  3579, 3580, 3581, 3582, 3583, 3584, 3585, 3586, 
+  3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 
+  3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 
+  3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 
+  3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 
+  3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 
+  3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 
+  3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 
+  3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 
+  3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 
+  3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 
+  3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 
+  3675, 3676, 3677, 3678, 3679, 3680, 3681, 3682, 
+  3683, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1179, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 523, 523, 523, 523, 523, 523, 1044, 
+  1044, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1179, 1428, 1428, 
+  1428, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1160, 1160, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 3684, 3685, 3686, 3687, 3688, 3689, 3690, 
+  3691, 3692, 3693, 3694, 3695, 3696, 3697, 3698, 
+  3699, 3700, 3701, 3702, 3703, 3704, 3705, 3706, 
+  3707, 3708, 3709, 3710, 3711, 3712, 3713, 3714, 
+  3715, 3716, 3717, 3718, 3719, 3720, 3721, 3722, 
+  3723, 3724, 3725, 3726, 3727, 3728, 3729, 1160, 
+  540, 839, 839, 839, 9, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 9, 
+  522, 3730, 3731, 3732, 3733, 3734, 3735, 3736, 
+  3737, 3738, 3739, 3740, 3741, 3742, 3743, 3744, 
+  3745, 3746, 3747, 3748, 3749, 3750, 3751, 3752, 
+  3753, 3754, 3755, 3756, 3757, 3758, 3759, 540, 
+  540, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 540, 540, 1044, 1044, 1044, 1044, 1044, 
+  1044, 0, 0, 0, 0, 0, 0, 0, 
+  0, 47, 47, 47, 47, 47, 47, 47, 
+  47, 47, 47, 47, 47, 47, 47, 47, 
+  47, 47, 47, 47, 47, 47, 47, 47, 
+  522, 522, 522, 522, 522, 522, 522, 522, 
+  522, 47, 47, 3760, 3761, 3762, 3763, 3764, 
+  3765, 3766, 3767, 3768, 3769, 3770, 3771, 3772, 
+  3773, 214, 214, 3774, 3775, 3776, 3777, 3778, 
+  3779, 3780, 3781, 3782, 3783, 3784, 3785, 3786, 
+  3787, 3788, 3789, 3790, 3791, 3792, 3793, 3794, 
+  3795, 3796, 3797, 3798, 3799, 3800, 3801, 3802, 
+  3803, 3804, 3805, 3806, 3807, 3808, 3809, 3810, 
+  3811, 3812, 3813, 3814, 3815, 3816, 3817, 3818, 
+  3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, 
+  3827, 3828, 3829, 3830, 3831, 3832, 3833, 3834, 
+  3835, 3836, 1523, 1523, 1523, 1523, 1523, 1523, 
+  1523, 214, 3837, 3838, 3839, 3840, 3841, 3842, 
+  3843, 3844, 3845, 3846, 3847, 3848, 3849, 3850, 
+  3851, 522, 3852, 3852, 3853, 3854, 3855, 214, 
+  340, 3856, 3857, 3858, 3859, 214, 214, 3860, 
+  3861, 3862, 3863, 3864, 3865, 3866, 3867, 3868, 
+  3869, 3870, 3871, 3872, 3873, 3874, 3875, 3876, 
+  3877, 3878, 3879, 3880, 3881, 3882, 3883, 3884, 
+  0, 3885, 3886, 3887, 3888, 3889, 3890, 3891, 
+  3892, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  340, 3893, 3894, 214, 340, 340, 340, 340, 
+  1160, 1160, 1160, 1153, 1160, 1160, 1160, 1168, 
+  1160, 1160, 1160, 1160, 1153, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1159, 1159, 1153, 1153, 
+  1159, 77, 77, 1085, 1085, 0, 0, 0, 
+  0, 1190, 1190, 1190, 1190, 1190, 1190, 1191, 
+  1191, 1189, 3895, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1428, 1428, 1428, 
+  1428, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1159, 1159, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1168, 1153, 0, 
+  0, 0, 0, 0, 0, 0, 0, 1177, 
+  1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1177, 1177, 1177, 1160, 1177, 1160, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1153, 
+  1153, 1153, 1153, 1153, 553, 553, 553, 1177, 
+  1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1159, 1452, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  1177, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 
+  1327, 1327, 1327, 1327, 1327, 1327, 0, 0, 
+  0, 1153, 1153, 1153, 1159, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1180, 1159, 1159, 1153, 
+  1153, 1153, 1153, 1159, 1159, 1153, 1159, 1159, 
+  1159, 1452, 1177, 1177, 1177, 1177, 1177, 1177, 
+  1177, 1177, 1177, 1177, 1177, 1177, 1177, 0, 
+  1179, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 1177, 
+  1177, 340, 1160, 1160, 1160, 1160, 1153, 523, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1178, 1160, 1160, 1160, 340, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1159, 1159, 1153, 1153, 1159, 1159, 1153, 1153, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1153, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1153, 1159, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 1177, 1177, 1177, 
+  1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1179, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1191, 1191, 1191, 1160, 1284, 1153, 1284, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 540, 1160, 540, 540, 553, 1160, 1160, 
+  540, 540, 1160, 1160, 1160, 1160, 1160, 540, 
+  540, 1160, 540, 1160, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 1160, 1160, 1179, 1177, 
+  1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1159, 1153, 1153, 1159, 
+  1159, 1177, 1177, 1160, 1179, 1179, 1159, 1168, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 0, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 214, 214, 214, 214, 
+  214, 214, 214, 214, 3896, 214, 214, 214, 
+  214, 214, 214, 214, 3852, 3897, 3898, 3899, 
+  3900, 214, 214, 214, 214, 214, 214, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 3901, 3902, 3903, 3904, 3905, 3906, 3907, 
+  3908, 3909, 3910, 3911, 3912, 3913, 3914, 3915, 
+  3916, 3917, 3918, 3919, 3920, 3921, 3922, 3923, 
+  3924, 3925, 3926, 3927, 3928, 3929, 3930, 3931, 
+  3932, 3933, 3934, 3935, 3936, 3937, 3938, 3939, 
+  3940, 3941, 3942, 3943, 3944, 3945, 3946, 3947, 
+  3948, 3949, 3950, 3951, 3952, 3953, 3954, 3955, 
+  3956, 3957, 3958, 3959, 3960, 3961, 3962, 3963, 
+  3964, 3965, 3966, 3967, 3968, 3969, 3970, 3971, 
+  3972, 3973, 3974, 3975, 3976, 3977, 3978, 3979, 
+  3980, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1159, 1159, 1153, 1159, 
+  1159, 1153, 1159, 1159, 1177, 1159, 1168, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3981, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3981, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 
+  3982, 3982, 3982, 3982, 3982, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  1330, 1330, 1330, 1330, 1330, 1330, 1330, 1330, 
+  0, 0, 0, 0, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 
+  1331, 1331, 1331, 1331, 1331, 0, 0, 0, 
+  0, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 
+  3983, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 
+  3992, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 
+  3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 
+  4007, 4008, 4009, 4010, 4011, 4012, 4013, 4014, 
+  4015, 4016, 4017, 4018, 4019, 4020, 4021, 4022, 
+  4023, 4024, 4025, 4026, 4027, 4028, 4029, 4030, 
+  4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 
+  4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046, 
+  4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 
+  4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 
+  4063, 4064, 4065, 4066, 4067, 4068, 4069, 4070, 
+  4071, 4072, 4073, 4074, 4075, 4004, 4076, 4077, 
+  4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 
+  4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 
+  4094, 4095, 4096, 4097, 4098, 4099, 4100, 4101, 
+  4102, 4103, 4104, 4105, 4106, 4107, 4108, 4109, 
+  4110, 4111, 4112, 4113, 4114, 4115, 4116, 4117, 
+  4118, 4119, 4120, 4121, 4122, 4123, 4124, 4125, 
+  4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 
+  4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 
+  4142, 4143, 4094, 4144, 4145, 4146, 4147, 4148, 
+  4149, 4150, 4151, 4078, 4152, 4153, 4154, 4155, 
+  4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 
+  4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 
+  4004, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 
+  4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 
+  4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 
+  4195, 4196, 4197, 4198, 4080, 4199, 4200, 4201, 
+  4202, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 
+  4210, 4211, 4212, 4213, 4214, 4215, 4216, 4217, 
+  4218, 4219, 4220, 4221, 4222, 4223, 4224, 4225, 
+  4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 
+  4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 
+  4242, 4243, 4244, 4245, 4246, 4247, 4248, 1160, 
+  1160, 4249, 1160, 4250, 1160, 1160, 4251, 4252, 
+  4253, 4254, 4255, 4256, 4257, 4258, 4259, 4260, 
+  1160, 4261, 1160, 4262, 1160, 1160, 4263, 4264, 
+  1160, 1160, 1160, 4265, 4266, 4267, 4268, 4269, 
+  4270, 4271, 4272, 4273, 4274, 4275, 4276, 4277, 
+  4278, 4279, 4280, 4281, 4282, 4283, 4284, 4285, 
+  4286, 4287, 4288, 4289, 4290, 4291, 4292, 4293, 
+  4294, 4295, 4296, 4297, 4298, 4299, 4300, 4301, 
+  4302, 4303, 4304, 4305, 4306, 4307, 4308, 4309, 
+  4133, 4310, 4311, 4312, 4313, 4314, 4315, 4315, 
+  4316, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 
+  4263, 4324, 4325, 4326, 4327, 4328, 4329, 0, 
+  0, 4330, 4331, 4332, 4333, 4334, 4335, 4336, 
+  4337, 4277, 4338, 4339, 4340, 4249, 4341, 4342, 
+  4343, 4344, 4345, 4346, 4347, 4348, 4349, 4350, 
+  4351, 4352, 4286, 4353, 4287, 4354, 4355, 4356, 
+  4357, 4358, 4250, 4025, 4359, 4360, 4361, 4095, 
+  4182, 4362, 4363, 4294, 4364, 4295, 4365, 4366, 
+  4367, 4252, 4368, 4369, 4370, 4371, 4372, 4253, 
+  4373, 4374, 4375, 4376, 4377, 4378, 4309, 4379, 
+  4380, 4133, 4381, 4313, 4382, 4383, 4384, 4385, 
+  4386, 4318, 4387, 4262, 4388, 4319, 4076, 4389, 
+  4320, 4390, 4322, 4391, 4392, 4393, 4394, 4395, 
+  4324, 4258, 4396, 4325, 4397, 4326, 4398, 3992, 
+  4399, 4400, 4401, 4402, 4403, 4404, 4405, 4406, 
+  4407, 4408, 4409, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 4410, 4411, 4412, 4413, 4414, 4415, 4416, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 4417, 4418, 4419, 4420, 
+  4421, 0, 0, 0, 0, 0, 4422, 4423, 
+  4424, 4425, 4426, 4427, 4428, 4429, 4430, 4431, 
+  4432, 4433, 4434, 4435, 4436, 4437, 4438, 4439, 
+  4440, 4441, 4442, 4443, 4444, 4445, 4446, 4447, 
+  0, 4448, 4449, 4450, 4451, 4452, 0, 4453, 
+  0, 4454, 4455, 0, 4456, 4457, 0, 4458, 
+  4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, 
+  4467, 4468, 4469, 4470, 4471, 4472, 4473, 4474, 
+  4475, 4476, 4477, 4478, 4479, 4480, 4481, 4482, 
+  4483, 4484, 4485, 4486, 4487, 4488, 4489, 4490, 
+  4491, 4492, 4493, 4494, 4495, 4496, 4497, 4498, 
+  4499, 4500, 4501, 4502, 4503, 4504, 4505, 4506, 
+  4507, 4508, 4509, 4510, 4511, 4512, 4513, 4514, 
+  4515, 4516, 4517, 4518, 4519, 4520, 4521, 4522, 
+  4523, 4524, 4525, 4526, 4527, 4528, 4529, 4530, 
+  4531, 4532, 4533, 4534, 4535, 4536, 4537, 4538, 
+  4539, 4540, 4541, 4542, 4543, 4544, 4545, 4546, 
+  4547, 4548, 4549, 4550, 4551, 4552, 4553, 4554, 
+  4555, 4556, 4557, 4558, 4559, 4560, 4561, 4562, 
+  4563, 4564, 4565, 4566, 4566, 4566, 4566, 4566, 
+  4566, 4566, 4566, 4566, 4566, 4566, 4566, 4566, 
+  4566, 4566, 4566, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 4567, 4568, 4569, 4570, 
+  4571, 4572, 4573, 4574, 4575, 4576, 4577, 4578, 
+  4579, 4580, 4581, 4582, 4583, 4584, 4585, 4586, 
+  4587, 4588, 4589, 4590, 4591, 4592, 4593, 4594, 
+  4595, 4596, 4597, 4598, 4599, 4600, 4601, 4602, 
+  4603, 4604, 4605, 4606, 4607, 4608, 4609, 4610, 
+  4611, 4612, 4613, 4614, 4605, 4615, 4616, 4617, 
+  4618, 4619, 4620, 4621, 4622, 4623, 4624, 4625, 
+  4626, 4627, 4628, 4629, 4630, 4631, 4632, 4633, 
+  4634, 4635, 4636, 4637, 4638, 4639, 4640, 4641, 
+  4642, 4643, 4644, 4645, 4646, 4647, 4648, 4649, 
+  4650, 4651, 4652, 4653, 4654, 4655, 4656, 4657, 
+  4658, 4659, 4660, 4661, 4662, 4663, 4664, 4665, 
+  4666, 4667, 4668, 4669, 4670, 4671, 4672, 4673, 
+  4674, 4675, 4676, 4677, 4678, 4679, 4680, 4681, 
+  4682, 4683, 4684, 4685, 4686, 4687, 4688, 4689, 
+  4690, 4691, 4692, 4693, 4694, 4695, 4696, 4697, 
+  4698, 4699, 4700, 4701, 4702, 4703, 4704, 4705, 
+  4706, 4707, 4708, 4709, 4710, 4711, 4712, 4713, 
+  4714, 4606, 4715, 4716, 4717, 4718, 4719, 4720, 
+  4721, 4722, 4723, 4724, 4725, 4726, 4727, 4728, 
+  4729, 4730, 4731, 4732, 4733, 4734, 4735, 4736, 
+  4737, 4738, 4739, 4740, 4741, 4742, 4743, 4744, 
+  4745, 4746, 4747, 4748, 4749, 4750, 4751, 4752, 
+  4753, 4754, 4755, 4756, 4757, 4758, 4759, 4760, 
+  4761, 4762, 4763, 4764, 4765, 4766, 4767, 4768, 
+  4769, 4770, 4771, 4772, 4773, 4774, 4775, 4776, 
+  4777, 4778, 4779, 4780, 4781, 4782, 4783, 4784, 
+  4785, 4786, 4787, 4788, 4789, 4790, 4791, 4792, 
+  4793, 4794, 4795, 4796, 4797, 4798, 4799, 4800, 
+  4801, 4802, 4803, 4804, 4805, 4806, 4807, 4808, 
+  4809, 4810, 4811, 4812, 4813, 4814, 4815, 4816, 
+  4817, 4818, 4819, 4820, 4821, 4822, 4823, 4824, 
+  4825, 4826, 4827, 4828, 4829, 4830, 4831, 4832, 
+  4833, 4834, 4835, 4836, 4837, 4838, 4839, 4840, 
+  4841, 4842, 4843, 4844, 4845, 4846, 4847, 4848, 
+  4849, 4850, 4851, 4852, 4853, 4854, 4855, 4856, 
+  4857, 4858, 4859, 4860, 4861, 4862, 4863, 4864, 
+  4865, 4866, 4867, 4868, 4869, 4870, 4871, 4872, 
+  4873, 4874, 4875, 4876, 4877, 4878, 4879, 4880, 
+  4881, 4882, 4883, 4884, 4885, 4886, 4887, 4888, 
+  4889, 4890, 4891, 4892, 4893, 4894, 4895, 4896, 
+  4897, 4898, 4899, 4900, 4901, 4902, 4903, 4904, 
+  4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 
+  4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 
+  4921, 4922, 4923, 4924, 4925, 4926, 4927, 2956, 
+  2955, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 
+  4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 
+  4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 
+  4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 
+  4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 
+  4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 
+  4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 
+  4983, 4984, 4985, 4986, 4987, 4988, 4989, 4990, 
+  4991, 0, 0, 4992, 4993, 4994, 4995, 4996, 
+  4997, 4998, 4999, 5000, 5001, 5002, 5003, 5004, 
+  5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 
+  5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 
+  5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 
+  5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 
+  5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 
+  5045, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 5046, 5047, 5048, 5049, 5050, 5051, 5052, 
+  5053, 5054, 5055, 5056, 5057, 5058, 1085, 0, 
+  0, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 5059, 5060, 5061, 5062, 5063, 5064, 5065, 
+  5066, 5067, 5068, 0, 0, 0, 0, 0, 
+  0, 540, 540, 540, 540, 540, 540, 540, 
+  553, 553, 553, 553, 553, 553, 553, 540, 
+  540, 5069, 5070, 5071, 5072, 5072, 5073, 5074, 
+  5075, 5076, 5077, 5078, 5079, 5080, 5081, 5082, 
+  5083, 5084, 5085, 5086, 5087, 5088, 1428, 1428, 
+  5089, 5090, 5091, 5091, 5091, 5091, 5092, 5092, 
+  5092, 5093, 5094, 5095, 0, 5096, 5097, 5098, 
+  5099, 5100, 5101, 5102, 5103, 5104, 5105, 5106, 
+  5107, 5108, 5109, 5110, 5111, 5112, 5113, 5114, 
+  0, 5115, 5116, 5117, 5118, 0, 0, 0, 
+  0, 5119, 5120, 5121, 1118, 5122, 0, 5123, 
+  5124, 5125, 5126, 5127, 5128, 5129, 5130, 5131, 
+  5132, 5133, 5134, 5135, 5136, 5137, 5138, 5139, 
+  5140, 5141, 5142, 5143, 5144, 5145, 5146, 5147, 
+  5148, 5149, 5150, 5151, 5152, 5153, 5154, 5155, 
+  5156, 5157, 5158, 5159, 5160, 5161, 5162, 5163, 
+  5164, 5165, 5166, 5167, 5168, 5169, 5170, 5171, 
+  5172, 5173, 5174, 5175, 5176, 5177, 5178, 5179, 
+  5180, 5181, 5182, 5183, 5184, 5185, 5186, 5187, 
+  5188, 5189, 5190, 5191, 5192, 5193, 5194, 5195, 
+  5196, 5197, 5198, 5199, 5200, 5201, 5202, 5203, 
+  5204, 5205, 5206, 5207, 5208, 5209, 5210, 5211, 
+  5212, 5213, 5214, 5215, 5216, 5217, 5218, 5219, 
+  5220, 5221, 5222, 5223, 5224, 5225, 5226, 5227, 
+  5228, 5229, 5230, 5231, 5232, 5233, 5234, 5235, 
+  5236, 5237, 5238, 5239, 5240, 5241, 5242, 5243, 
+  5244, 5245, 5246, 5247, 5248, 5249, 5250, 5251, 
+  5252, 5253, 5254, 5255, 5256, 5257, 0, 0, 
+  81, 0, 5258, 5259, 5260, 5261, 5262, 5263, 
+  5264, 5265, 5266, 5267, 5268, 5269, 5270, 5271, 
+  5272, 5273, 5274, 5275, 5276, 5277, 5278, 5279, 
+  5280, 5281, 5282, 5283, 5284, 5285, 5286, 5287, 
+  5288, 5289, 5290, 5291, 5292, 5293, 5294, 5295, 
+  5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 
+  5304, 5305, 5306, 5307, 5308, 5309, 5310, 5311, 
+  5312, 5313, 5314, 5315, 5316, 5317, 5318, 5319, 
+  5320, 5321, 5322, 5323, 5324, 5325, 5326, 5327, 
+  5328, 5329, 5330, 5331, 5332, 5333, 5334, 5335, 
+  5336, 5337, 5338, 5339, 5340, 5341, 5342, 5343, 
+  5344, 5345, 5346, 5347, 5348, 5349, 5350, 5351, 
+  5352, 5353, 5354, 5355, 5356, 5357, 5358, 5359, 
+  5360, 5361, 5362, 5363, 5364, 5365, 5366, 5367, 
+  5368, 5369, 5370, 5371, 5372, 5373, 5374, 5375, 
+  5376, 5377, 5378, 5379, 5380, 5381, 5382, 5383, 
+  5384, 5385, 5386, 5387, 5388, 5389, 5390, 5391, 
+  5392, 5393, 5394, 5395, 5396, 5397, 5398, 5399, 
+  5400, 5401, 5402, 5403, 5404, 5405, 5406, 5407, 
+  5408, 5409, 5410, 5411, 5412, 5413, 5414, 5415, 
+  5416, 5417, 5418, 5419, 5420, 5421, 5422, 5423, 
+  5424, 5425, 5426, 5427, 5428, 5429, 5430, 5431, 
+  5432, 5433, 5434, 5435, 5436, 5437, 5438, 5439, 
+  5440, 5441, 5442, 5443, 5444, 5445, 5446, 5447, 
+  0, 0, 0, 5448, 5449, 5450, 5451, 5452, 
+  5453, 0, 0, 5454, 5455, 5456, 5457, 5458, 
+  5459, 0, 0, 5460, 5461, 5462, 5463, 5464, 
+  5465, 0, 0, 5466, 5467, 5468, 0, 0, 
+  0, 5469, 5470, 5471, 5472, 5473, 5474, 5475, 
+  0, 5476, 5477, 5478, 5479, 5480, 5481, 5482, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 5483, 5483, 5483, 1085, 77, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 0, 340, 1160, 
+  1160, 340, 340, 340, 1160, 340, 340, 340, 
+  340, 340, 340, 340, 340, 1160, 340, 340, 
+  340, 340, 340, 1160, 1160, 1160, 340, 340, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 1160, 
+  340, 340, 340, 340, 0, 340, 340, 0, 
+  340, 340, 1160, 340, 340, 1160, 1160, 1160, 
+  340, 340, 340, 1160, 1160, 340, 1160, 0, 
+  0, 340, 340, 1160, 340, 340, 1160, 340, 
+  1160, 1160, 1160, 340, 1160, 1160, 1160, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 1160, 1160, 1160, 1160, 340, 
+  340, 340, 340, 1160, 1160, 1160, 1160, 1160, 
+  340, 1160, 340, 340, 340, 340, 1160, 1160, 
+  1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 340, 1160, 340, 1160, 
+  1160, 1160, 1160, 1160, 340, 340, 1160, 1160, 
+  1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 
+  1160, 1160, 340, 340, 340, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 0, 0, 0, 0, 
+  0, 1044, 9, 1044, 0, 0, 0, 0, 
+  5484, 5484, 5484, 5484, 5484, 5484, 5484, 5484, 
+  5484, 5484, 5484, 5484, 5484, 5484, 5484, 5484, 
+  5484, 5484, 5484, 5484, 5484, 5484, 5484, 5484, 
+  5484, 5484, 1190, 5484, 1190, 5484, 1190, 1190, 
+  1190, 1190, 1190, 1190, 5484, 1190, 5484, 1190, 
+  1190, 1190, 1190, 1190, 1190, 0, 0, 0, 
+  1191, 838, 1191, 838, 838, 838, 838, 838, 
+  1191, 5485, 5485, 5485, 5485, 5485, 5485, 5485, 
+  5485, 5485, 5485, 5485, 5485, 5485, 5485, 5485, 
+  5485, 5485, 5485, 5485, 5485, 5485, 5485, 5485, 
+  5485, 5485, 5485, 5485, 5485, 5485, 5485, 5485, 
+  5485, 5485, 5485, 5485, 5485, 5485, 5485, 5485, 
+  5485, 5485, 5486, 5486, 5486, 5486, 5486, 5486, 
+  5485, 5486, 5485, 5485, 5485, 5485, 1427, 1427, 
+  1220, 1427, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 1085, 77, 1427, 1427, 77, 838, 838, 
+  0, 77, 77, 77, 77, 77, 77, 77, 
+  1085, 1085, 1085, 77, 77, 0, 0, 0, 
+  0, 77, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 553, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 1160, 
+  1160, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1160, 340, 1160, 340, 340, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1160, 340, 340, 340, 340, 340, 340, 
+  1160, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 553, 5487, 5487, 5487, 5487, 5487, 5487, 
+  5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 
+  5487, 5487, 5487, 5487, 5487, 5487, 5487, 5487, 
+  5487, 5487, 5487, 5487, 5487, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 5484, 5484, 5484, 5484, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 1426, 340, 340, 340, 340, 340, 
+  340, 340, 340, 1426, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 540, 
+  540, 540, 540, 540, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 
+  1177, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1177, 2227, 2227, 2227, 2227, 2227, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 5488, 5489, 5490, 5491, 5492, 5493, 5494, 
+  5495, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 
+  5503, 5504, 5505, 5506, 5507, 5508, 5509, 5510, 
+  5511, 5512, 5513, 5514, 5515, 5516, 5517, 5518, 
+  5519, 5520, 5521, 5522, 5523, 5524, 5525, 5526, 
+  5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 
+  5535, 5536, 5537, 5538, 5539, 5540, 5541, 5542, 
+  5543, 5544, 5545, 5546, 5547, 5548, 5549, 5550, 
+  5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 
+  5559, 5560, 5561, 5562, 5563, 5564, 5565, 5566, 
+  5567, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 1160, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 1160, 
+  340, 1160, 340, 340, 1160, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 1160, 0, 
+  0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1250, 0, 0, 0, 0, 0, 
+  0, 5568, 5569, 5570, 5571, 5572, 5573, 5574, 
+  5575, 5576, 5577, 5578, 5579, 5580, 5581, 5582, 
+  5583, 5584, 5585, 5586, 5587, 5588, 5589, 5590, 
+  5591, 5592, 5593, 5594, 5595, 5596, 5597, 5598, 
+  5599, 5600, 5601, 5602, 5603, 0, 0, 0, 
+  0, 5604, 5605, 5606, 5607, 5608, 5609, 5610, 
+  5611, 5612, 5613, 5614, 5615, 5616, 5617, 5618, 
+  5619, 5620, 5621, 5622, 5623, 5624, 5625, 5626, 
+  5627, 5628, 5629, 5630, 5631, 5632, 5633, 5634, 
+  5635, 5636, 5637, 5638, 5639, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  1044, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 1160, 340, 340, 340, 
+  340, 1160, 340, 1160, 1160, 1160, 340, 340, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 340, 340, 1160, 340, 340, 1160, 1160, 
+  340, 340, 1160, 1160, 1160, 1160, 340, 1160, 
+  340, 340, 340, 340, 340, 1160, 1160, 1160, 
+  340, 1160, 340, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 340, 1160, 1160, 1160, 340, 
+  1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 
+  1160, 1160, 340, 340, 1160, 1160, 1160, 340, 
+  340, 340, 340, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 340, 1160, 1160, 1160, 1160, 
+  340, 1160, 1160, 340, 340, 340, 1160, 1160, 
+  1160, 1160, 340, 340, 340, 1160, 1160, 1160, 
+  1160, 340, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 1160, 1160, 1160, 1160, 1160, 340, 340, 
+  1160, 1160, 340, 1160, 1160, 340, 1160, 1160, 
+  1160, 1160, 1160, 340, 1160, 1160, 1160, 340, 
+  1160, 1160, 340, 1160, 1160, 340, 1160, 340, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 340, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 340, 340, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 
+  340, 340, 340, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 340, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 340, 1160, 1160, 340, 1160, 340, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1156, 1156, 1156, 1106, 1156, 1106, 0, 
+  0, 1156, 0, 1106, 1156, 1156, 1156, 1156, 
+  1156, 1106, 1156, 1106, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1106, 1156, 1156, 1156, 1156, 1106, 
+  1156, 1106, 1156, 1156, 1106, 1106, 1156, 1106, 
+  1156, 1106, 1106, 1106, 1106, 1156, 1106, 1106, 
+  1106, 1106, 1106, 1156, 1106, 1156, 1106, 0, 
+  1156, 1106, 0, 0, 0, 1156, 0, 0, 
+  1156, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 0, 
+  1103, 5640, 5640, 5640, 5640, 5640, 5640, 5640, 
+  5640, 1156, 1156, 1156, 1106, 1106, 1106, 1106, 
+  1156, 1106, 1106, 1156, 1106, 1156, 1106, 1106, 
+  1156, 1156, 1106, 1156, 1156, 1106, 1156, 1156, 
+  5641, 5641, 5640, 5640, 5642, 5642, 5642, 5642, 
+  5640, 1156, 1106, 1156, 1156, 1156, 1106, 1106, 
+  1106, 1106, 1106, 1156, 1156, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1156, 
+  1156, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  5640, 5640, 5640, 5640, 5640, 5640, 5640, 5640, 
+  5640, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 0, 1106, 1106, 0, 
+  0, 0, 0, 0, 5640, 5640, 5640, 5640, 
+  5640, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 5640, 
+  5640, 5640, 5640, 5640, 5640, 0, 0, 0, 
+  9, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 0, 0, 0, 0, 0, 
+  1103, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 
+  1106, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1106, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 
+  1156, 1156, 1106, 1156, 1106, 1156, 1106, 1106, 
+  1106, 1106, 1156, 1106, 1156, 1106, 1156, 1106, 
+  1106, 1106, 1156, 1106, 1156, 1106, 1156, 1156, 
+  1106, 0, 0, 0, 0, 5642, 5640, 1106, 
+  1156, 5640, 5640, 5640, 5640, 5642, 5642, 5642, 
+  5640, 5640, 5642, 5642, 5642, 5642, 5642, 5642, 
+  5642, 0, 0, 5642, 5642, 5642, 5642, 5642, 
+  5642, 5642, 5642, 5642, 5642, 5642, 5642, 5642, 
+  5642, 5642, 5642, 5642, 5642, 5642, 5642, 5642, 
+  5642, 5642, 5642, 5642, 5642, 5642, 5642, 5642, 
+  5642, 5642, 5642, 5642, 5642, 5642, 5642, 5640, 
+  5640, 5640, 5640, 5642, 5640, 5642, 5642, 5642, 
+  5642, 1156, 1153, 1153, 1153, 0, 1153, 1153, 
+  0, 0, 0, 0, 0, 1153, 553, 1153, 
+  540, 1156, 1156, 1156, 1156, 0, 1156, 1156, 
+  1156, 0, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 0, 0, 0, 
+  0, 540, 566, 553, 0, 0, 0, 0, 
+  1168, 5642, 5642, 5642, 5642, 5642, 5642, 5642, 
+  5642, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 
+  1158, 1158, 0, 0, 0, 0, 0, 0, 
+  0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 5640, 5640, 
+  1103, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 5640, 5640, 
+  5640, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1106, 1156, 1156, 1106, 1106, 1106, 1156, 
+  1106, 5643, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1156, 1156, 1156, 1106, 1156, 1156, 1156, 
+  1106, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1106, 1156, 1156, 1106, 540, 553, 
+  0, 0, 0, 0, 5640, 5642, 5642, 5642, 
+  5642, 1158, 1158, 1158, 1158, 1103, 1103, 1103, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1106, 1156, 1156, 1156, 1156, 1106, 1106, 
+  1106, 1156, 1156, 1156, 1156, 1106, 1106, 1106, 
+  1106, 1106, 1156, 1156, 1156, 1156, 1106, 1156, 
+  1106, 1106, 1106, 1106, 1156, 1106, 1106, 1106, 
+  1106, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 
+  1156, 1106, 1106, 1156, 1156, 1106, 1106, 1106, 
+  1106, 1106, 1156, 1156, 1156, 1156, 1156, 0, 
+  0, 0, 9, 9, 9, 9, 9, 9, 
+  9, 1156, 1156, 1106, 1106, 1156, 1106, 1106, 
+  1106, 1156, 1106, 1156, 1106, 1156, 1156, 1106, 
+  1106, 1156, 1156, 1106, 1106, 1106, 1106, 0, 
+  0, 5640, 5640, 5640, 5640, 5640, 5640, 5642, 
+  5640, 1106, 1106, 1106, 1106, 1156, 1106, 1106, 
+  1156, 1106, 1106, 1106, 1106, 1156, 1106, 1156, 
+  1106, 1106, 1156, 1106, 0, 0, 0, 0, 
+  0, 5640, 5640, 5640, 5640, 5640, 5640, 5640, 
+  5640, 1106, 1156, 1106, 1156, 1106, 1106, 1106, 
+  1156, 1106, 1156, 1106, 1106, 1106, 1156, 1106, 
+  1106, 1156, 1106, 0, 0, 0, 0, 0, 
+  0, 0, 1158, 1158, 1158, 1158, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 5640, 5640, 5640, 5642, 5640, 5640, 
+  5642, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 
+  1106, 1106, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 5644, 5645, 5646, 5647, 5648, 5649, 5650, 
+  5651, 5652, 5653, 5654, 5655, 5656, 5657, 5658, 
+  5659, 5660, 5661, 5662, 5663, 5664, 5665, 5666, 
+  5667, 5668, 5669, 5670, 5671, 5672, 5673, 5674, 
+  5675, 5676, 5677, 5678, 5679, 5680, 5681, 5682, 
+  5683, 5684, 5685, 5686, 5687, 5688, 5689, 5690, 
+  5691, 5692, 5693, 5694, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 5695, 5696, 5697, 5698, 5699, 5700, 5701, 
+  5702, 5703, 5704, 5705, 5706, 5707, 5708, 5709, 
+  5710, 5711, 5712, 5713, 5714, 5715, 5716, 5717, 
+  5718, 5719, 5720, 5721, 5722, 5723, 5724, 5725, 
+  5726, 5727, 5728, 5729, 5730, 5731, 5732, 5733, 
+  5734, 5735, 5736, 5737, 5738, 5739, 5740, 5741, 
+  5742, 5743, 5744, 5745, 0, 0, 0, 0, 
+  0, 0, 0, 5640, 5640, 5640, 5640, 5640, 
+  5640, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 5746, 5746, 5747, 5746, 5746, 5746, 5746, 
+  5746, 5747, 5746, 5746, 5747, 5747, 5747, 5746, 
+  5746, 5747, 5746, 5746, 5746, 5747, 5747, 5746, 
+  5747, 5747, 5746, 5746, 5747, 5747, 5747, 5747, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1159, 1153, 1159, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1168, 
+  1177, 1177, 1177, 1177, 1177, 1177, 1177, 0, 
+  0, 0, 0, 1220, 1220, 1220, 1220, 1220, 
+  1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 
+  1220, 1220, 1220, 1220, 1220, 1220, 1220, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  1168, 1153, 1153, 1159, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 5748, 5749, 5750, 5751, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 5752, 1160, 
+  1160, 1160, 1160, 1160, 5753, 1160, 1160, 1160, 
+  1160, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 
+  1159, 1159, 1168, 5754, 1177, 1177, 5755, 1177, 
+  1177, 1177, 1177, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 0, 0, 0, 0, 0, 0, 
+  0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1250, 0, 0, 0, 0, 0, 
+  0, 540, 540, 540, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  5756, 1153, 1153, 1153, 1153, 1159, 1153, 5757, 
+  5758, 1153, 5759, 5760, 1168, 1168, 0, 1178, 
+  1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1177, 1177, 1177, 1177, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 340, 340, 340, 1160, 340, 340, 
+  340, 340, 1160, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 1160, 340, 1160, 
+  1160, 1160, 1160, 1160, 340, 1160, 340, 1160, 
+  340, 340, 340, 340, 1180, 1044, 1044, 1160, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1153, 1153, 1159, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1159, 1159, 1159, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1159, 1452, 1160, 1237, 1237, 1160, 1177, 1177, 
+  1177, 1177, 1177, 1180, 1153, 1153, 1177, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1160, 1177, 1160, 1177, 1177, 
+  1177, 0, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 0, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1159, 1159, 1159, 
+  1153, 1153, 1153, 1159, 1159, 1153, 1452, 1180, 
+  1153, 1177, 1177, 1177, 1177, 1177, 1177, 1153, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 1160, 0, 1160, 1160, 1160, 1160, 0, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1177, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1153, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1180, 1168, 0, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 1153, 1153, 1159, 1159, 0, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 
+  1160, 1160, 0, 0, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 0, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 1180, 1160, 5761, 
+  1159, 1153, 1159, 1159, 1159, 1159, 0, 0, 
+  5762, 1159, 0, 0, 5763, 5764, 1452, 0, 
+  0, 1160, 0, 0, 0, 0, 0, 0, 
+  5765, 0, 0, 0, 0, 0, 1160, 1160, 
+  1160, 1160, 1160, 1159, 1159, 0, 0, 540, 
+  540, 540, 540, 540, 540, 540, 0, 0, 
+  0, 540, 540, 540, 540, 540, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1159, 1159, 
+  1159, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1159, 1159, 1168, 1153, 1153, 1159, 1180, 
+  1160, 1160, 1160, 1160, 1177, 1177, 1177, 1177, 
+  1177, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 1177, 0, 1177, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 5766, 1159, 1159, 1153, 1153, 1153, 1153, 
+  1153, 1153, 5767, 5768, 5769, 5770, 5771, 5772, 
+  1153, 1153, 1159, 1168, 1180, 1160, 1160, 1177, 
+  1160, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  5773, 1159, 1159, 1153, 1153, 1153, 1153, 0, 
+  0, 5774, 5775, 5776, 5777, 1153, 1153, 1159, 
+  1168, 1180, 1177, 1177, 1177, 1177, 1177, 1177, 
+  1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 
+  1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 
+  1177, 1160, 1160, 1160, 1160, 1153, 1153, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1159, 1159, 1159, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1159, 1159, 1153, 1159, 
+  1168, 1153, 1177, 1177, 1177, 1160, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 1428, 1428, 1428, 1428, 1428, 1428, 1428, 
+  1428, 1428, 1428, 1428, 1428, 1428, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1153, 1159, 1153, 1159, 
+  1159, 1153, 1153, 1153, 1153, 1153, 1153, 1452, 
+  1180, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 0, 1153, 1153, 
+  1153, 1159, 1159, 1153, 1153, 1153, 1153, 1159, 
+  1153, 1153, 1153, 1153, 1168, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1190, 1190, 1177, 1177, 1177, 
+  1191, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 5778, 5779, 5780, 5781, 5782, 5783, 5784, 
+  5785, 5786, 5787, 5788, 5789, 5790, 5791, 5792, 
+  5793, 5794, 5795, 5796, 5797, 5798, 5799, 5800, 
+  5801, 5802, 5803, 5804, 5805, 5806, 5807, 5808, 
+  5809, 5810, 5811, 5812, 5813, 5814, 5815, 5816, 
+  5817, 5818, 5819, 5820, 5821, 5822, 5823, 5824, 
+  5825, 5826, 5827, 5828, 5829, 5830, 5831, 5832, 
+  5833, 5834, 5835, 5836, 5837, 5838, 5839, 5840, 
+  5841, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1250, 5484, 5484, 5484, 5484, 5484, 
+  5484, 5484, 5484, 5484, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  340, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 0, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  5842, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  0, 1153, 1153, 1153, 1153, 1153, 1153, 1159, 
+  5843, 1160, 1177, 1177, 1177, 1177, 1177, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 
+  1178, 1178, 1178, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1190, 1190, 1190, 1190, 0, 0, 
+  0, 1044, 1044, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 0, 0, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 0, 1159, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1159, 1153, 1153, 1159, 1153, 1153, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 
+  0, 1044, 1044, 1044, 1044, 1044, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1250, 0, 0, 0, 0, 1044, 
+  1044, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 0, 
+  0, 566, 566, 566, 566, 566, 1044, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 540, 540, 540, 540, 540, 540, 540, 
+  1044, 1044, 1044, 1044, 1044, 838, 838, 838, 
+  838, 523, 523, 523, 523, 1044, 838, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 
+  1250, 1250, 1250, 0, 5484, 5484, 5484, 5484, 
+  5484, 5484, 5484, 0, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 0, 0, 0, 0, 0, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1159, 1159, 1159, 1159, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 
+  1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  1153, 1153, 1153, 1153, 1179, 1179, 1179, 1179, 
+  1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 
+  1179, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1179, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 1160, 1160, 
+  1160, 1160, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 1160, 1160, 340, 340, 
+  1160, 1160, 340, 340, 1160, 1160, 1160, 1160, 
+  340, 340, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 1160, 1160, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 1160, 340, 340, 340, 1160, 340, 340, 
+  1160, 1160, 1160, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 340, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  340, 1160, 340, 340, 340, 340, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 0, 0, 0, 0, 0, 0, 
+  0, 340, 340, 340, 340, 340, 340, 340, 
+  340, 340, 340, 0, 0, 1191, 1153, 566, 
+  1177, 81, 81, 81, 81, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 838, 838, 838, 838, 838, 838, 838, 
+  838, 1191, 1191, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 1191, 838, 1191, 838, 
+  838, 838, 1191, 838, 838, 838, 1191, 1191, 
+  1191, 838, 1191, 838, 1191, 838, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 838, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 838, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  838, 838, 1191, 1191, 1191, 1191, 1191, 838, 
+  838, 838, 838, 1191, 838, 1191, 1191, 1191, 
+  838, 838, 838, 1191, 1191, 1191, 1191, 1191, 
+  838, 1191, 1191, 1191, 838, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 838, 1191, 1191, 1191, 838, 
+  838, 838, 1191, 1191, 838, 838, 838, 838, 
+  1191, 1191, 838, 838, 838, 1191, 1191, 838, 
+  838, 838, 838, 1191, 1191, 1191, 1191, 1191, 
+  838, 838, 838, 838, 838, 838, 1191, 838, 
+  838, 1191, 1191, 1191, 838, 1191, 1191, 1191, 
+  1191, 838, 838, 1191, 838, 1191, 838, 1191, 
+  1191, 1191, 1191, 1191, 1191, 838, 838, 838, 
+  1191, 1191, 838, 838, 838, 1191, 838, 1191, 
+  838, 1191, 838, 838, 1191, 1191, 1191, 1191, 
+  838, 1191, 1191, 1191, 838, 1191, 1191, 1191, 
+  1191, 838, 1191, 1191, 1191, 838, 1191, 1191, 
+  1191, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 1191, 
+  838, 1191, 838, 838, 838, 838, 838, 838, 
+  838, 1191, 838, 1191, 838, 838, 838, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 838, 1191, 838, 838, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 838, 
+  838, 838, 1191, 1191, 1191, 1191, 838, 838, 
+  0, 0, 1191, 838, 1191, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 1191, 
+  1191, 1191, 1191, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  5844, 5845, 1191, 838, 838, 1191, 838, 5846, 
+  5847, 5848, 5849, 5850, 5851, 5852, 5853, 5854, 
+  566, 566, 566, 1191, 1191, 1191, 5855, 5856, 
+  5857, 5858, 5859, 5860, 81, 81, 81, 81, 
+  81, 81, 81, 81, 553, 553, 553, 553, 
+  553, 553, 553, 553, 838, 838, 540, 540, 
+  540, 540, 540, 553, 553, 838, 838, 838, 
+  838, 838, 838, 1191, 1191, 838, 838, 1191, 
+  1191, 1191, 1191, 838, 838, 1191, 1191, 838, 
+  838, 838, 838, 838, 1191, 1191, 838, 1191, 
+  1191, 838, 838, 540, 540, 540, 540, 1191, 
+  1191, 1191, 1191, 1191, 1191, 838, 1191, 1191, 
+  1191, 1191, 5861, 5862, 5863, 5864, 5865, 5866, 
+  5867, 5868, 838, 838, 838, 838, 838, 838, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 838, 838, 838, 838, 838, 838, 838, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 540, 540, 540, 1085, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1190, 1190, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 5484, 1190, 1190, 1190, 1190, 1190, 
+  1190, 1190, 1190, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 5869, 2157, 2132, 5870, 2159, 2160, 5871, 
+  2139, 2142, 5872, 5873, 2143, 2162, 2145, 5874, 
+  2147, 2148, 2149, 5875, 5876, 5877, 5878, 5879, 
+  5880, 5881, 2153, 5882, 5883, 5884, 5885, 2158, 
+  5886, 2138, 2140, 2168, 2177, 5887, 2144, 5888, 
+  5889, 2163, 5890, 5891, 5892, 5893, 5894, 5895, 
+  5896, 5897, 5898, 5899, 5900, 5901, 5902, 5903, 
+  2175, 5904, 5905, 5906, 5907, 5908, 5909, 5910, 
+  5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 
+  5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 
+  5927, 5928, 2176, 5929, 5930, 5931, 0, 5932, 
+  5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 
+  5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 
+  5949, 5901, 5902, 5903, 2175, 5904, 5905, 5906, 
+  5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 
+  5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 
+  5923, 5924, 5925, 5926, 5927, 5928, 2176, 5929, 
+  5930, 5931, 5950, 5932, 5933, 5934, 5935, 5936, 
+  5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 
+  5945, 5946, 5947, 5948, 5949, 5901, 0, 5903, 
+  2175, 0, 0, 5906, 0, 0, 5909, 5910, 
+  0, 0, 5913, 5914, 5915, 5916, 0, 5918, 
+  5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 
+  5927, 5928, 2176, 0, 5930, 0, 5950, 5932, 
+  5933, 5934, 5935, 5936, 5937, 0, 5939, 5940, 
+  5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 
+  5949, 5901, 5902, 5903, 2175, 5904, 5905, 5906, 
+  5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 
+  5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 
+  5923, 5924, 5925, 5926, 5927, 5928, 2176, 5929, 
+  5930, 5931, 5950, 5932, 5933, 5934, 5935, 5936, 
+  5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 
+  5945, 5946, 5947, 5948, 5949, 5869, 2157, 0, 
+  5870, 2159, 2160, 5871, 0, 0, 5872, 5873, 
+  2143, 2162, 2145, 5874, 2147, 2148, 0, 5875, 
+  5876, 5877, 5878, 5879, 5880, 5881, 0, 5882, 
+  5883, 5884, 5885, 2158, 5886, 2138, 2140, 2168, 
+  2177, 5887, 2144, 5888, 5889, 2163, 5890, 5891, 
+  5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 
+  5900, 5869, 2157, 0, 5870, 2159, 2160, 5871, 
+  0, 2142, 5872, 5873, 2143, 2162, 0, 5874, 
+  0, 0, 0, 5875, 5876, 5877, 5878, 5879, 
+  5880, 5881, 0, 5882, 5883, 5884, 5885, 2158, 
+  5886, 2138, 2140, 2168, 2177, 5887, 2144, 5888, 
+  5889, 2163, 5890, 5891, 5892, 5893, 5894, 5895, 
+  5896, 5897, 5898, 5899, 5900, 5869, 2157, 2132, 
+  5870, 2159, 2160, 5871, 2139, 2142, 5872, 5873, 
+  2143, 2162, 2145, 5874, 2147, 2148, 2149, 5875, 
+  5876, 5877, 5878, 5879, 5880, 5881, 2153, 5882, 
+  5883, 5884, 5885, 2158, 5886, 2138, 2140, 2168, 
+  2177, 5887, 2144, 5888, 5889, 2163, 5890, 5891, 
+  5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 
+  5900, 5869, 2157, 2132, 5870, 2159, 2160, 5871, 
+  2139, 2142, 5872, 5873, 2143, 2162, 2145, 5874, 
+  2147, 2148, 2149, 5875, 5876, 5877, 5878, 5879, 
+  5880, 5881, 2153, 5882, 5883, 5884, 5885, 2158, 
+  5886, 2138, 2140, 2168, 2177, 5887, 2144, 5888, 
+  5889, 2163, 5890, 5891, 5892, 5893, 5894, 5895, 
+  5896, 5897, 5898, 5899, 5900, 5869, 2157, 2132, 
+  5870, 2159, 2160, 5871, 2139, 2142, 5872, 5873, 
+  2143, 2162, 2145, 5874, 2147, 2148, 2149, 5875, 
+  5876, 5877, 5878, 5879, 5880, 5881, 2153, 5882, 
+  5883, 5884, 5885, 2158, 5886, 2138, 2140, 2168, 
+  2177, 5887, 2144, 5888, 5889, 2163, 5890, 5891, 
+  5892, 5893, 5894, 5895, 5896, 5897, 5898, 5899, 
+  5900, 5901, 5902, 5903, 2175, 5904, 5905, 5906, 
+  5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 
+  5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 
+  5923, 5924, 5925, 5926, 5927, 5928, 2176, 5929, 
+  5930, 5931, 5950, 5932, 5933, 5934, 5935, 5936, 
+  5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 
+  5945, 5946, 5947, 5948, 5949, 5901, 5902, 5903, 
+  2175, 5904, 5905, 5906, 5907, 5908, 5909, 5910, 
+  5911, 5912, 5913, 5914, 5915, 5916, 5917, 5918, 
+  5919, 5920, 5921, 5922, 5923, 5924, 5925, 5926, 
+  5927, 5928, 2176, 5929, 5930, 5931, 5950, 5932, 
+  5933, 5934, 5935, 5936, 5937, 5938, 5939, 5940, 
+  5941, 5942, 5943, 5944, 5945, 5946, 5947, 5948, 
+  5949, 5901, 5902, 5903, 2175, 5904, 5905, 5906, 
+  5907, 5908, 5909, 5910, 5911, 5912, 5913, 5914, 
+  5915, 5916, 5917, 5918, 5919, 5920, 5921, 5922, 
+  5923, 5924, 5925, 5926, 5927, 5928, 2176, 5929, 
+  5930, 5931, 5950, 5932, 5933, 5934, 5935, 5936, 
+  5937, 5938, 5939, 5940, 5941, 5942, 5943, 5944, 
+  5945, 5946, 5947, 5948, 5949, 5951, 5952, 0, 
+  0, 5953, 5954, 2172, 5955, 5956, 5957, 5958, 
+  5959, 5960, 5961, 5962, 5963, 5964, 5965, 5966, 
+  5967, 5968, 5969, 5970, 5971, 5972, 5973, 5974, 
+  5975, 5976, 5977, 5978, 5979, 5980, 5981, 5982, 
+  5983, 5984, 5985, 5986, 5987, 5988, 5989, 5990, 
+  5991, 5992, 5993, 5994, 5995, 5996, 5997, 5998, 
+  5999, 6000, 6001, 6002, 6003, 6004, 6005, 6006, 
+  6007, 6008, 6009, 6010, 6011, 6012, 6013, 6014, 
+  6015, 6016, 6017, 6018, 6019, 6020, 6021, 6022, 
+  6023, 6024, 2173, 6025, 6026, 6027, 6028, 6029, 
+  6030, 6031, 6032, 6033, 6034, 6035, 6036, 2171, 
+  6037, 6038, 6039, 6040, 6041, 6042, 6043, 6044, 
+  6045, 6046, 6047, 6048, 2170, 6049, 6050, 6051, 
+  6052, 6053, 6054, 6055, 6056, 6057, 6058, 6059, 
+  6005, 6060, 6061, 6062, 6063, 6010, 6011, 6012, 
+  6013, 6014, 6015, 6016, 6017, 6018, 6019, 6020, 
+  6021, 6022, 6023, 6024, 2173, 6025, 6026, 6027, 
+  6028, 6029, 6030, 6031, 6032, 6033, 6034, 6035, 
+  6036, 2171, 6037, 6038, 6039, 6040, 6041, 6042, 
+  6043, 6044, 6045, 6046, 6047, 6048, 2170, 6049, 
+  6050, 6051, 6052, 6053, 6054, 6055, 6056, 6057, 
+  6058, 6059, 6064, 6060, 6061, 6062, 6063, 5953, 
+  5954, 2172, 5955, 5956, 5957, 5958, 5959, 5960, 
+  5961, 5962, 5963, 5964, 5965, 5966, 5967, 5968, 
+  5969, 5970, 5971, 5972, 5973, 5974, 5975, 5976, 
+  5977, 5978, 5979, 5980, 5981, 5982, 5983, 5984, 
+  5985, 5986, 5987, 5988, 5989, 5990, 5991, 5992, 
+  5993, 5994, 5995, 5996, 5997, 5998, 5999, 6000, 
+  6001, 6002, 6003, 6004, 6005, 6006, 6007, 6008, 
+  6009, 6010, 6011, 6012, 6013, 6014, 6015, 6016, 
+  6017, 6018, 6019, 6020, 6021, 6022, 6023, 6024, 
+  2173, 6025, 6026, 6027, 6028, 6029, 6030, 6031, 
+  6032, 6033, 6034, 6035, 6036, 2171, 6037, 6038, 
+  6039, 6040, 6041, 6042, 6043, 6044, 6045, 6046, 
+  6047, 6048, 2170, 6049, 6050, 6051, 6052, 6053, 
+  6054, 6055, 6056, 6057, 6058, 6059, 6064, 6060, 
+  6061, 6062, 6063, 6065, 6066, 0, 0, 6067, 
+  6068, 6069, 6070, 6071, 6072, 6073, 6074, 6075, 
+  6076, 6067, 6068, 6069, 6070, 6071, 6072, 6073, 
+  6074, 6075, 6076, 6067, 6068, 6069, 6070, 6071, 
+  6072, 6073, 6074, 6075, 6076, 6067, 6068, 6069, 
+  6070, 6071, 6072, 6073, 6074, 6075, 6076, 6077, 
+  6078, 6079, 6080, 6081, 6082, 6083, 6084, 6085, 
+  6086, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  838, 838, 838, 838, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 838, 838, 
+  838, 838, 838, 838, 838, 838, 1153, 838, 
+  838, 838, 838, 838, 838, 838, 838, 838, 
+  838, 838, 838, 838, 838, 1153, 838, 838, 
+  1044, 1044, 1044, 1044, 1044, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 1153, 1153, 1153, 1153, 
+  1153, 0, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 
+  1153, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 540, 540, 540, 540, 540, 540, 540, 
+  0, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 540, 540, 540, 540, 540, 540, 
+  540, 540, 0, 0, 540, 540, 540, 540, 
+  540, 540, 540, 0, 540, 540, 0, 540, 
+  540, 540, 540, 540, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1106, 1106, 1106, 1106, 
+  1106, 1156, 1156, 1106, 1106, 1106, 1106, 1106, 
+  1156, 1106, 1156, 1106, 1106, 1106, 1156, 1106, 
+  1156, 1156, 1106, 1106, 1106, 1106, 1156, 1106, 
+  1106, 1106, 1156, 1156, 1106, 1156, 1156, 1156, 
+  1156, 1156, 1156, 1156, 1106, 1106, 1156, 1156, 
+  1156, 1156, 1156, 1106, 1156, 1106, 1106, 1106, 
+  1106, 1106, 1156, 1156, 1106, 1106, 1106, 1106, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 
+  1106, 1156, 1156, 1106, 1106, 1106, 1106, 1156, 
+  1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 
+  1106, 1156, 1156, 1106, 1156, 1106, 1156, 1106, 
+  1156, 1156, 1106, 1106, 1106, 1106, 1106, 1156, 
+  1156, 1156, 1106, 1156, 1106, 1156, 1106, 1156, 
+  1156, 1156, 1156, 1106, 1156, 1156, 1156, 1156, 
+  1156, 1156, 1106, 1156, 1156, 1156, 1156, 1156, 
+  1156, 1106, 1106, 1156, 1156, 1156, 1106, 1106, 
+  1156, 1156, 1156, 1156, 1106, 1156, 1156, 1106, 
+  1156, 1156, 1156, 1156, 1106, 1156, 1156, 1106, 
+  1156, 1156, 1106, 1156, 1156, 1156, 1106, 1156, 
+  1156, 1156, 1156, 1106, 1106, 1156, 1156, 1106, 
+  1156, 1156, 1156, 1156, 1156, 1156, 1156, 1106, 
+  1156, 1156, 1156, 1156, 1156, 1156, 0, 0, 
+  5642, 5642, 5642, 5642, 5642, 5642, 5642, 5642, 
+  5642, 553, 553, 553, 553, 553, 553, 553, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 6087, 6088, 6089, 6090, 6091, 6092, 6093, 
+  6094, 6095, 6096, 6097, 6098, 6099, 6100, 6101, 
+  6102, 6103, 6104, 6105, 6106, 6107, 6108, 6109, 
+  6110, 6111, 6112, 6113, 6114, 6115, 6116, 6117, 
+  6118, 6119, 6120, 6121, 6122, 6123, 6124, 6125, 
+  6126, 6127, 6128, 6129, 6130, 6131, 6132, 6133, 
+  6134, 6135, 6136, 6137, 6138, 6139, 6140, 6141, 
+  6142, 6143, 6144, 6145, 6146, 6147, 6148, 6149, 
+  6150, 6151, 6152, 6153, 6154, 540, 540, 540, 
+  540, 540, 540, 1180, 0, 0, 0, 0, 
+  0, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 
+  1154, 1154, 1154, 0, 0, 0, 0, 1103, 
+  1103, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 6155, 6156, 6157, 6158, 0, 6159, 6160, 
+  6161, 6162, 6163, 6164, 6165, 6166, 6167, 6168, 
+  6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 
+  6177, 6178, 6179, 6180, 6181, 6182, 6183, 6184, 
+  6185, 0, 6156, 6157, 0, 6186, 0, 0, 
+  6161, 0, 6163, 6164, 6165, 6166, 6167, 6168, 
+  6169, 6170, 6171, 6172, 0, 6174, 6175, 6176, 
+  6177, 0, 6179, 0, 6181, 0, 0, 0, 
+  0, 0, 0, 6157, 0, 0, 0, 0, 
+  6161, 0, 6163, 0, 6165, 0, 6167, 6168, 
+  6169, 0, 6171, 6172, 0, 6174, 0, 0, 
+  6177, 0, 6179, 0, 6181, 0, 6183, 0, 
+  6185, 0, 6156, 6157, 0, 6187, 0, 0, 
+  6161, 6162, 6163, 6164, 0, 6166, 6167, 6168, 
+  6169, 6170, 6171, 6172, 0, 6174, 6175, 6176, 
+  6177, 0, 6179, 6180, 6181, 6182, 0, 6184, 
+  0, 6155, 6156, 6157, 6158, 6187, 6159, 6160, 
+  6161, 6162, 6163, 0, 6165, 6166, 6167, 6168, 
+  6169, 6170, 6171, 6172, 6173, 6174, 6175, 6176, 
+  6177, 6178, 6179, 6180, 6181, 0, 0, 0, 
+  0, 0, 6188, 6189, 6190, 0, 6191, 6192, 
+  6193, 6194, 6195, 0, 6196, 6197, 6198, 6199, 
+  6200, 6201, 6202, 6203, 6204, 6205, 6206, 6207, 
+  6208, 6209, 6210, 6211, 6212, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1109, 1109, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 77, 77, 77, 
+  77, 77, 77, 77, 77, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  0, 0, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 0, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 0, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 6213, 6214, 6215, 6216, 6217, 6218, 6219, 
+  6220, 6221, 6222, 6223, 1220, 1220, 0, 0, 
+  0, 6224, 6225, 6226, 6227, 6228, 6229, 6230, 
+  6231, 6232, 6233, 6234, 6235, 6236, 6237, 6238, 
+  6239, 6240, 6241, 6242, 6243, 6244, 6245, 6246, 
+  6247, 6248, 6249, 6250, 6251, 6252, 6253, 6254, 
+  0, 6255, 6256, 6257, 6258, 6259, 6260, 6261, 
+  6262, 6263, 6264, 6265, 6266, 6267, 6268, 6269, 
+  6270, 6271, 6272, 6273, 6274, 6275, 6276, 6277, 
+  6278, 6279, 6280, 6281, 3613, 6282, 6283, 6284, 
+  6285, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 6286, 6287, 0, 0, 0, 
+  0, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 6288, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 
+  1191, 1191, 1191, 1191, 1191, 1191, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 6289, 
+  6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289, 
+  6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289, 
+  6289, 6289, 6289, 6289, 6289, 6289, 6289, 6289, 
+  6289, 6290, 6291, 6292, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 6293, 6294, 6295, 6296, 6297, 6298, 6299, 
+  6300, 6301, 6302, 6303, 6304, 6305, 6306, 6307, 
+  6308, 6309, 6310, 6311, 6312, 6313, 6314, 6315, 
+  6316, 6317, 6318, 6319, 6320, 6321, 6322, 6323, 
+  6324, 6325, 6326, 6327, 6328, 6329, 6330, 6331, 
+  6332, 6333, 6334, 6335, 6336, 0, 0, 0, 
+  0, 6337, 6338, 6339, 6340, 6341, 6342, 6343, 
+  6344, 6345, 0, 0, 0, 0, 0, 0, 
+  0, 6346, 6347, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 2464, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 2464, 2464, 1085, 1085, 
+  1085, 1085, 1085, 2464, 2464, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 6348, 6348, 6348, 6348, 
+  6348, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 2464, 2464, 1085, 1085, 2464, 
+  2464, 2464, 2464, 2464, 2464, 2464, 2464, 2464, 
+  2464, 2464, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 6349, 
+  6349, 6349, 6349, 1085, 1085, 1085, 1085, 2464, 
+  1085, 2464, 2464, 2464, 2464, 2464, 2464, 2464, 
+  2464, 2464, 1085, 1085, 1085, 2464, 1085, 1085, 
+  1085, 1085, 2464, 2464, 2464, 1085, 2464, 2464, 
+  2464, 1085, 1085, 1085, 2465, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 2464, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 2464, 1085, 
+  1085, 1085, 1085, 2464, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 2464, 1085, 1085, 1085, 1085, 2464, 2464, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  77, 2465, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 2464, 2464, 
+  2464, 1085, 1085, 1085, 2464, 2464, 2464, 2464, 
+  2464, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 77, 
+  77, 77, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 2464, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 2464, 2464, 2464, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 2464, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 77, 77, 1085, 77, 77, 
+  77, 1085, 1085, 1085, 1085, 77, 77, 77, 
+  1085, 1085, 77, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 77, 1085, 77, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 77, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 77, 77, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  77, 77, 77, 1085, 1085, 1085, 77, 77, 
+  77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 77, 77, 77, 77, 77, 77, 77, 
+  77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 0, 0, 0, 0, 0, 0, 0, 
+  0, 77, 77, 77, 77, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 77, 77, 77, 
+  77, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 77, 77, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 2464, 2464, 2464, 2464, 2464, 2464, 2464, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 2464, 
+  1085, 0, 0, 0, 0, 0, 0, 0, 
+  0, 2464, 0, 0, 2464, 2464, 2464, 2464, 
+  2464, 2464, 2464, 1085, 1085, 2464, 2464, 2464, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 1085, 1085, 1085, 1085, 1085, 
+  1085, 1085, 1085, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1085, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 0, 
+  0, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 
+  1160, 1160, 1160, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 6350, 6351, 6352, 6353, 6354, 4271, 6355, 
+  6356, 6357, 6358, 4272, 6359, 6360, 6361, 4273, 
+  6362, 6363, 6364, 6365, 6366, 6367, 6368, 6369, 
+  6370, 6371, 6372, 6373, 4331, 6374, 6375, 6376, 
+  6377, 6378, 6379, 6380, 6381, 6382, 4336, 4274, 
+  4275, 4337, 6383, 6384, 4082, 6385, 4276, 6386, 
+  6387, 6388, 6389, 6389, 6389, 6390, 6391, 6392, 
+  6393, 6394, 6395, 6396, 6397, 6398, 6399, 6400, 
+  6401, 6402, 6403, 6404, 6405, 6406, 6407, 6407, 
+  4339, 6408, 6409, 6410, 6411, 4278, 6412, 6413, 
+  6414, 4235, 6415, 6416, 6417, 6418, 6419, 6420, 
+  6421, 6422, 6423, 6424, 6425, 6426, 6427, 6428, 
+  6429, 6430, 6431, 6432, 6433, 6434, 6435, 6436, 
+  6437, 6438, 6439, 6440, 6440, 6441, 6442, 6443, 
+  4078, 6444, 6445, 6446, 6447, 6448, 6449, 6450, 
+  6451, 4283, 6452, 6453, 6454, 6455, 6456, 6457, 
+  6458, 6459, 6460, 6461, 6462, 6463, 6464, 6465, 
+  6466, 6467, 6468, 6469, 6470, 6471, 6472, 4024, 
+  6473, 6474, 6475, 6475, 6476, 6477, 6477, 6478, 
+  6479, 6480, 6481, 6482, 6483, 6484, 6485, 6486, 
+  6487, 6488, 6489, 6490, 4284, 6491, 6492, 6493, 
+  6494, 4351, 6494, 6495, 4286, 6496, 6497, 6498, 
+  6499, 4287, 3997, 6500, 6501, 6502, 6503, 6504, 
+  6505, 6506, 6507, 6508, 6509, 6510, 6511, 6512, 
+  6513, 6514, 6515, 6516, 6517, 6518, 6519, 6520, 
+  6521, 4288, 6522, 6523, 6524, 6525, 6526, 6527, 
+  4290, 6528, 6529, 6530, 6531, 6532, 6533, 6534, 
+  6535, 4025, 4359, 6536, 6537, 6538, 6539, 6540, 
+  6541, 6542, 6543, 4291, 6544, 6545, 6546, 6547, 
+  4402, 6548, 6549, 6550, 6551, 6552, 6553, 6554, 
+  6555, 6556, 6557, 6558, 6559, 6560, 4095, 6561, 
+  6562, 6563, 6564, 6565, 6566, 6567, 6568, 6569, 
+  6570, 6571, 4292, 4182, 6572, 6573, 6574, 6575, 
+  6576, 6577, 6578, 6579, 4363, 6580, 6581, 6582, 
+  6583, 6584, 6585, 6586, 6587, 4364, 6588, 6589, 
+  6590, 6591, 6592, 6593, 6594, 6595, 6596, 6597, 
+  6598, 6599, 4366, 6600, 6601, 6602, 6603, 6604, 
+  6605, 6606, 6607, 6608, 6609, 6610, 6610, 6611, 
+  6612, 4368, 6613, 6614, 6615, 6616, 6617, 6618, 
+  6619, 4081, 6620, 6621, 6622, 6623, 6624, 6625, 
+  6626, 4374, 6627, 6628, 6629, 6630, 6631, 6632, 
+  6632, 4375, 4404, 6633, 6634, 6635, 6636, 6637, 
+  4043, 4377, 6638, 6639, 4303, 6640, 6641, 4257, 
+  6642, 6643, 4307, 6644, 6645, 6646, 6647, 6647, 
+  6648, 6649, 6650, 6651, 6652, 6653, 6654, 6655, 
+  6656, 6657, 6658, 6659, 6660, 6661, 6662, 6663, 
+  6664, 6665, 6666, 6667, 6668, 6669, 6670, 6671, 
+  6672, 6673, 6674, 4313, 6675, 6676, 6677, 6678, 
+  6679, 6680, 6681, 6682, 6683, 6684, 6685, 6686, 
+  6687, 6688, 6689, 6690, 6476, 6691, 6692, 6693, 
+  6694, 6695, 6696, 6697, 6698, 6699, 6700, 6701, 
+  6702, 4099, 6703, 6704, 6705, 6706, 6707, 6708, 
+  4316, 6709, 6710, 6711, 6712, 6713, 6714, 6715, 
+  6716, 6717, 6718, 6719, 6720, 6721, 6722, 6723, 
+  6724, 6725, 6726, 6727, 6728, 4038, 6729, 6730, 
+  6731, 6732, 6733, 6734, 4384, 6735, 6736, 6737, 
+  6738, 6739, 6740, 6741, 6742, 6743, 6744, 6745, 
+  6746, 6747, 6748, 6749, 6750, 6751, 6752, 6753, 
+  6754, 4389, 4390, 6755, 6756, 6757, 6758, 6759, 
+  6760, 6761, 6762, 6763, 6764, 6765, 6766, 6767, 
+  4391, 6768, 6769, 6770, 6771, 6772, 6773, 6774, 
+  6775, 6776, 6777, 6778, 6779, 6780, 6781, 6782, 
+  6783, 6784, 6785, 6786, 6787, 6788, 6789, 6790, 
+  6791, 6792, 6793, 6794, 6795, 6796, 6797, 4397, 
+  4397, 6798, 6799, 6800, 6801, 6802, 6803, 6804, 
+  6805, 6806, 6807, 4398, 6808, 6809, 6810, 6811, 
+  6812, 6813, 6814, 6815, 6816, 6817, 6818, 6819, 
+  6820, 6821, 6822, 6823, 6824, 6825, 6826, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 81, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 
+  2053, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 574, 574, 574, 574, 574, 574, 574, 
+  574, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 3984, 
+  3984, 3984, 3984, 3984, 3984, 3984, 3984, 0, 
+  0, };
+
+static const utf8proc_property_t utf8proc_properties[] = {
+  {0, 0, 0, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX,  false,false,false,false, 0, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_S, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_LF},
+  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CR},
+  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5093, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5084, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5096, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 0, UINT16_MAX, 0, UINT16_MAX, 0, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1, UINT16_MAX, 1, UINT16_MAX, 2784, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2, UINT16_MAX, 2, UINT16_MAX, 49, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3, UINT16_MAX, 3, UINT16_MAX, 704, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 4, UINT16_MAX, 4, UINT16_MAX, 62, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5, UINT16_MAX, 5, UINT16_MAX, 2872, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6, UINT16_MAX, 6, UINT16_MAX, 782, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7, UINT16_MAX, 7, UINT16_MAX, 808, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8, UINT16_MAX, 8, UINT16_MAX, 111, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 9, UINT16_MAX, 9, UINT16_MAX, 898, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 10, UINT16_MAX, 10, UINT16_MAX, 913, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 11, UINT16_MAX, 11, UINT16_MAX, 999, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 12, UINT16_MAX, 12, UINT16_MAX, 2890, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 13, UINT16_MAX, 13, UINT16_MAX, 160, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 14, UINT16_MAX, 14, UINT16_MAX, 205, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 15, UINT16_MAX, 15, UINT16_MAX, 2982, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 16, UINT16_MAX, 16, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 17, UINT16_MAX, 17, UINT16_MAX, 1087, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 18, UINT16_MAX, 18, UINT16_MAX, 1173, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 19, UINT16_MAX, 19, UINT16_MAX, 1257, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 20, UINT16_MAX, 20, UINT16_MAX, 254, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 21, UINT16_MAX, 21, UINT16_MAX, 3042, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 22, UINT16_MAX, 22, UINT16_MAX, 1337, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 23, UINT16_MAX, 23, UINT16_MAX, 3122, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 24, UINT16_MAX, 24, UINT16_MAX, 303, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 25, UINT16_MAX, 25, UINT16_MAX, 1423, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1446, UINT16_MAX, 1446, 352, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1448, UINT16_MAX, 1448, 2818, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2795, UINT16_MAX, 2795, 401, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1449, UINT16_MAX, 1449, 743, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1450, UINT16_MAX, 1450, 414, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2820, UINT16_MAX, 2820, 2875, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1452, UINT16_MAX, 1452, 795, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1453, UINT16_MAX, 1453, 853, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1454, UINT16_MAX, 1454, 463, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1455, UINT16_MAX, 1455, 901, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1456, UINT16_MAX, 1456, 956, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1457, UINT16_MAX, 1457, 1043, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1458, UINT16_MAX, 1458, 2932, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1459, UINT16_MAX, 1459, 512, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1460, UINT16_MAX, 1460, 557, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1462, UINT16_MAX, 1462, 2994, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2809, UINT16_MAX, 2809, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1463, UINT16_MAX, 1463, 1130, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 3288, UINT16_MAX, 3288, 1215, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1464, UINT16_MAX, 1464, 1296, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1465, UINT16_MAX, 1465, 606, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2891, UINT16_MAX, 2891, 3082, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1466, UINT16_MAX, 1466, 1380, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2908, UINT16_MAX, 2908, 3131, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 3295, UINT16_MAX, 3295, 655, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2817, UINT16_MAX, 2817, 1466, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_NOBREAK, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 1621, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PI, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 35, 35, 7130, UINT16_MAX, 7130, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 16423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 16426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 16429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8240, 50, UINT16_MAX, 50, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8243, 53, UINT16_MAX, 53, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8246, 56, UINT16_MAX, 56, UINT16_MAX, 3143, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8249, 59, UINT16_MAX, 59, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8252, 62, UINT16_MAX, 62, UINT16_MAX, 1537, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8255, 65, UINT16_MAX, 65, UINT16_MAX, 1579, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 66, UINT16_MAX, 66, UINT16_MAX, 1549, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8259, 69, UINT16_MAX, 69, UINT16_MAX, 2852, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8262, 72, UINT16_MAX, 72, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8265, 75, UINT16_MAX, 75, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8268, 78, UINT16_MAX, 78, UINT16_MAX, 3357, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8271, 81, UINT16_MAX, 81, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8274, 84, UINT16_MAX, 84, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8277, 87, UINT16_MAX, 87, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8280, 90, UINT16_MAX, 90, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8283, 93, UINT16_MAX, 93, UINT16_MAX, 2878, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 94, UINT16_MAX, 94, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8287, 97, UINT16_MAX, 97, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8290, 100, UINT16_MAX, 100, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8293, 103, UINT16_MAX, 103, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8296, 106, UINT16_MAX, 106, UINT16_MAX, 3461, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8299, 109, UINT16_MAX, 109, UINT16_MAX, 1597, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8302, 112, UINT16_MAX, 112, UINT16_MAX, 1591, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 113, UINT16_MAX, 113, UINT16_MAX, 1585, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8306, 116, UINT16_MAX, 116, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8309, 119, UINT16_MAX, 119, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8312, 122, UINT16_MAX, 122, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8315, 125, UINT16_MAX, 125, UINT16_MAX, 1509, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8318, 128, UINT16_MAX, 128, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 129, UINT16_MAX, 129, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 8322, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8324, UINT16_MAX, 7977, UINT16_MAX, 7977, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8326, UINT16_MAX, 7978, UINT16_MAX, 7978, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8328, UINT16_MAX, 7979, UINT16_MAX, 7979, 3192, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8330, UINT16_MAX, 7980, UINT16_MAX, 7980, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8332, UINT16_MAX, 7981, UINT16_MAX, 7981, 1540, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8334, UINT16_MAX, 2819, UINT16_MAX, 2819, 1582, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1447, UINT16_MAX, 1447, 1558, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8336, UINT16_MAX, 7982, UINT16_MAX, 7982, 2855, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8338, UINT16_MAX, 7983, UINT16_MAX, 7983, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8340, UINT16_MAX, 7984, UINT16_MAX, 7984, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8342, UINT16_MAX, 7985, UINT16_MAX, 7985, 3406, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8344, UINT16_MAX, 7986, UINT16_MAX, 7986, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8346, UINT16_MAX, 7987, UINT16_MAX, 7987, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8348, UINT16_MAX, 7988, UINT16_MAX, 7988, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8350, UINT16_MAX, 7989, UINT16_MAX, 7989, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8352, UINT16_MAX, 7990, UINT16_MAX, 7990, 2881, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7991, UINT16_MAX, 7991, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8354, UINT16_MAX, 7992, UINT16_MAX, 7992, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8356, UINT16_MAX, 7993, UINT16_MAX, 7993, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8358, UINT16_MAX, 7994, UINT16_MAX, 7994, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8360, UINT16_MAX, 7995, UINT16_MAX, 7995, 3510, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8362, UINT16_MAX, 7996, UINT16_MAX, 7996, 1606, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8364, UINT16_MAX, 7997, UINT16_MAX, 7997, 1594, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7998, UINT16_MAX, 7998, 1588, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8366, UINT16_MAX, 7999, UINT16_MAX, 7999, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8368, UINT16_MAX, 8000, UINT16_MAX, 8000, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8370, UINT16_MAX, 8001, UINT16_MAX, 8001, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8372, UINT16_MAX, 8002, UINT16_MAX, 8002, 1523, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8374, UINT16_MAX, 8003, UINT16_MAX, 8003, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8004, UINT16_MAX, 8004, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8376, UINT16_MAX, 8005, UINT16_MAX, 8005, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8378, 188, UINT16_MAX, 188, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8381, UINT16_MAX, 8006, UINT16_MAX, 8006, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8383, 193, UINT16_MAX, 193, UINT16_MAX, 3259, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8386, UINT16_MAX, 8007, UINT16_MAX, 8007, 3308, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8388, 198, UINT16_MAX, 198, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8391, UINT16_MAX, 8008, UINT16_MAX, 8008, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8393, 203, UINT16_MAX, 203, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8396, UINT16_MAX, 8009, UINT16_MAX, 8009, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8398, 208, UINT16_MAX, 208, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8401, UINT16_MAX, 8010, UINT16_MAX, 8010, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8403, 213, UINT16_MAX, 213, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8406, UINT16_MAX, 8011, UINT16_MAX, 8011, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8408, 218, UINT16_MAX, 218, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8411, UINT16_MAX, 8012, UINT16_MAX, 8012, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8413, 223, UINT16_MAX, 223, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8416, UINT16_MAX, 8013, UINT16_MAX, 8013, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 226, UINT16_MAX, 226, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8014, UINT16_MAX, 8014, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8419, 229, UINT16_MAX, 229, UINT16_MAX, 2858, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8422, UINT16_MAX, 8015, UINT16_MAX, 8015, 2862, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8424, 234, UINT16_MAX, 234, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8427, UINT16_MAX, 8016, UINT16_MAX, 8016, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8429, 239, UINT16_MAX, 239, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8432, UINT16_MAX, 8017, UINT16_MAX, 8017, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8434, 244, UINT16_MAX, 244, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8437, UINT16_MAX, 8018, UINT16_MAX, 8018, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8439, 249, UINT16_MAX, 249, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8442, UINT16_MAX, 8019, UINT16_MAX, 8019, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8444, 254, UINT16_MAX, 254, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8447, UINT16_MAX, 8020, UINT16_MAX, 8020, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8449, 259, UINT16_MAX, 259, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8452, UINT16_MAX, 8021, UINT16_MAX, 8021, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8454, 264, UINT16_MAX, 264, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8457, UINT16_MAX, 8022, UINT16_MAX, 8022, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8459, 269, UINT16_MAX, 269, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8462, UINT16_MAX, 8023, UINT16_MAX, 8023, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8464, 274, UINT16_MAX, 274, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8467, UINT16_MAX, 8024, UINT16_MAX, 8024, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 277, UINT16_MAX, 277, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 5138, UINT16_MAX, 5138, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8470, 280, UINT16_MAX, 280, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8473, UINT16_MAX, 8025, UINT16_MAX, 8025, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8475, 285, UINT16_MAX, 285, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8478, UINT16_MAX, 8026, UINT16_MAX, 8026, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8480, 290, UINT16_MAX, 290, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8483, UINT16_MAX, 8027, UINT16_MAX, 8027, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8485, 295, UINT16_MAX, 295, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8488, UINT16_MAX, 8028, UINT16_MAX, 8028, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8490, 8492, UINT16_MAX, 8, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1454, UINT16_MAX, 1454, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8494, 304, UINT16_MAX, 304, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8497, UINT16_MAX, 8029, UINT16_MAX, 8029, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8499, 309, UINT16_MAX, 309, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8502, UINT16_MAX, 8030, UINT16_MAX, 8030, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8504, 314, UINT16_MAX, 314, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8507, UINT16_MAX, 8031, UINT16_MAX, 8031, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8509, 319, UINT16_MAX, 319, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8512, UINT16_MAX, 8032, UINT16_MAX, 8032, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8514, 324, UINT16_MAX, 324, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8517, UINT16_MAX, 8033, UINT16_MAX, 8033, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8519, 329, UINT16_MAX, 329, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8522, UINT16_MAX, 8034, UINT16_MAX, 8034, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8524, 334, UINT16_MAX, 334, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8527, UINT16_MAX, 8035, UINT16_MAX, 8035, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 337, UINT16_MAX, 337, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8036, UINT16_MAX, 8036, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8530, 340, UINT16_MAX, 340, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8533, UINT16_MAX, 8037, UINT16_MAX, 8037, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8535, 345, UINT16_MAX, 345, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8538, UINT16_MAX, 8038, UINT16_MAX, 8038, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8540, 350, UINT16_MAX, 350, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8543, UINT16_MAX, 8039, UINT16_MAX, 8039, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8545, 8545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 355, UINT16_MAX, 355, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8040, UINT16_MAX, 8040, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8548, 358, UINT16_MAX, 358, UINT16_MAX, 2974, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8551, UINT16_MAX, 8041, UINT16_MAX, 8041, 2978, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8553, 363, UINT16_MAX, 363, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8556, UINT16_MAX, 8042, UINT16_MAX, 8042, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8558, 368, UINT16_MAX, 368, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8561, UINT16_MAX, 8043, UINT16_MAX, 8043, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 371, UINT16_MAX, 371, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8044, UINT16_MAX, 8044, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8564, 374, UINT16_MAX, 374, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8567, UINT16_MAX, 8045, UINT16_MAX, 8045, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8569, 379, UINT16_MAX, 379, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8572, UINT16_MAX, 8046, UINT16_MAX, 8046, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8574, 384, UINT16_MAX, 384, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8577, UINT16_MAX, 8047, UINT16_MAX, 8047, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8579, 389, UINT16_MAX, 389, UINT16_MAX, 3012, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8582, UINT16_MAX, 8048, UINT16_MAX, 8048, 3015, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8584, 394, UINT16_MAX, 394, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8587, UINT16_MAX, 8049, UINT16_MAX, 8049, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8589, 399, UINT16_MAX, 399, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8592, UINT16_MAX, 8050, UINT16_MAX, 8050, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8594, 404, UINT16_MAX, 404, UINT16_MAX, 3018, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8597, UINT16_MAX, 8051, UINT16_MAX, 8051, 3021, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8599, 409, UINT16_MAX, 409, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8602, UINT16_MAX, 8052, UINT16_MAX, 8052, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8604, 414, UINT16_MAX, 414, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8607, UINT16_MAX, 8053, UINT16_MAX, 8053, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 417, UINT16_MAX, 417, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8054, UINT16_MAX, 8054, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8610, 420, UINT16_MAX, 420, UINT16_MAX, 3030, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8613, UINT16_MAX, 8055, UINT16_MAX, 8055, 3033, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8615, 425, UINT16_MAX, 425, UINT16_MAX, 3036, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8618, UINT16_MAX, 8056, UINT16_MAX, 8056, 3039, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8620, 430, UINT16_MAX, 430, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8623, UINT16_MAX, 8057, UINT16_MAX, 8057, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8625, 435, UINT16_MAX, 435, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8628, UINT16_MAX, 8058, UINT16_MAX, 8058, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8630, 440, UINT16_MAX, 440, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8633, UINT16_MAX, 8059, UINT16_MAX, 8059, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8635, 445, UINT16_MAX, 445, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8638, UINT16_MAX, 8060, UINT16_MAX, 8060, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8640, 450, UINT16_MAX, 450, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8643, UINT16_MAX, 8061, UINT16_MAX, 8061, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8645, 455, UINT16_MAX, 455, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8648, UINT16_MAX, 8062, UINT16_MAX, 8062, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8650, 460, UINT16_MAX, 460, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8653, 463, UINT16_MAX, 463, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8656, UINT16_MAX, 8063, UINT16_MAX, 8063, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8658, 468, UINT16_MAX, 468, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8661, UINT16_MAX, 8064, UINT16_MAX, 8064, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8663, 473, UINT16_MAX, 473, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8666, UINT16_MAX, 8065, UINT16_MAX, 8065, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 18, 18, 3288, UINT16_MAX, 3288, 3140, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8066, UINT16_MAX, 8066, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 476, UINT16_MAX, 476, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 477, UINT16_MAX, 477, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8067, UINT16_MAX, 8067, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 478, UINT16_MAX, 478, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8068, UINT16_MAX, 8068, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 479, UINT16_MAX, 479, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 480, UINT16_MAX, 480, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8069, UINT16_MAX, 8069, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 481, UINT16_MAX, 481, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 482, UINT16_MAX, 482, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 483, UINT16_MAX, 483, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8070, UINT16_MAX, 8070, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 484, UINT16_MAX, 484, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 485, UINT16_MAX, 485, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 486, UINT16_MAX, 486, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 487, UINT16_MAX, 487, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8071, UINT16_MAX, 8071, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 488, UINT16_MAX, 488, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 489, UINT16_MAX, 489, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8072, UINT16_MAX, 8072, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 490, UINT16_MAX, 490, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 491, UINT16_MAX, 491, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 492, UINT16_MAX, 492, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8073, UINT16_MAX, 8073, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8074, UINT16_MAX, 8074, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 493, UINT16_MAX, 493, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 494, UINT16_MAX, 494, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8075, UINT16_MAX, 8075, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 495, UINT16_MAX, 495, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8688, 498, UINT16_MAX, 498, UINT16_MAX, 3565, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8691, UINT16_MAX, 8076, UINT16_MAX, 8076, 3614, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 501, UINT16_MAX, 501, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8077, UINT16_MAX, 8077, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 502, UINT16_MAX, 502, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8078, UINT16_MAX, 8078, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 503, UINT16_MAX, 503, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 504, UINT16_MAX, 504, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8079, UINT16_MAX, 8079, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 505, UINT16_MAX, 505, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 506, UINT16_MAX, 506, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8080, UINT16_MAX, 8080, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 507, UINT16_MAX, 507, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8700, 510, UINT16_MAX, 510, UINT16_MAX, 3663, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8703, UINT16_MAX, 8081, UINT16_MAX, 8081, 3712, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 513, UINT16_MAX, 513, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 514, UINT16_MAX, 514, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 515, UINT16_MAX, 515, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8082, UINT16_MAX, 8082, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 516, UINT16_MAX, 516, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8083, UINT16_MAX, 8083, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 517, UINT16_MAX, 517, UINT16_MAX, 1573, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 518, UINT16_MAX, 518, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8084, UINT16_MAX, 8084, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 519, UINT16_MAX, 519, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8085, UINT16_MAX, 8085, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8086, UINT16_MAX, 8086, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8712, 522, UINT16_MAX, 522, 8087, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8715, 522, 8088, 522, 8087, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8717, UINT16_MAX, 8088, UINT16_MAX, 8087, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8719, 529, UINT16_MAX, 529, 8089, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8722, 529, 8090, 529, 8089, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8724, UINT16_MAX, 8090, UINT16_MAX, 8089, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8726, 536, UINT16_MAX, 536, 8091, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8729, 536, 8092, 536, 8091, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8731, UINT16_MAX, 8092, UINT16_MAX, 8091, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8733, 543, UINT16_MAX, 543, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8736, UINT16_MAX, 8093, UINT16_MAX, 8093, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8738, 548, UINT16_MAX, 548, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8741, UINT16_MAX, 8094, UINT16_MAX, 8094, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8743, 553, UINT16_MAX, 553, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8746, UINT16_MAX, 8095, UINT16_MAX, 8095, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8748, 558, UINT16_MAX, 558, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8751, UINT16_MAX, 8096, UINT16_MAX, 8096, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8753, 563, UINT16_MAX, 563, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8756, UINT16_MAX, 8097, UINT16_MAX, 8097, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8758, 568, UINT16_MAX, 568, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8761, UINT16_MAX, 8098, UINT16_MAX, 8098, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8763, 573, UINT16_MAX, 573, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8766, UINT16_MAX, 8099, UINT16_MAX, 8099, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8768, 578, UINT16_MAX, 578, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8771, UINT16_MAX, 8100, UINT16_MAX, 8100, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1451, UINT16_MAX, 1451, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8773, 583, UINT16_MAX, 583, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8776, UINT16_MAX, 8101, UINT16_MAX, 8101, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8778, 588, UINT16_MAX, 588, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8781, UINT16_MAX, 8102, UINT16_MAX, 8102, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8783, 593, UINT16_MAX, 593, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8786, UINT16_MAX, 8103, UINT16_MAX, 8103, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 596, UINT16_MAX, 596, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8104, UINT16_MAX, 8104, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8789, 599, UINT16_MAX, 599, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8792, UINT16_MAX, 8105, UINT16_MAX, 8105, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8794, 604, UINT16_MAX, 604, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8797, UINT16_MAX, 8106, UINT16_MAX, 8106, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8799, 609, UINT16_MAX, 609, UINT16_MAX, 1567, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8802, UINT16_MAX, 8107, UINT16_MAX, 8107, 1570, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8804, 614, UINT16_MAX, 614, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8807, UINT16_MAX, 8108, UINT16_MAX, 8108, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8809, 619, UINT16_MAX, 619, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8812, UINT16_MAX, 8109, UINT16_MAX, 8109, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8814, 8814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8816, 626, UINT16_MAX, 626, 8110, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8819, 626, 8111, 626, 8110, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8821, UINT16_MAX, 8111, UINT16_MAX, 8110, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8823, 633, UINT16_MAX, 633, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8826, UINT16_MAX, 8112, UINT16_MAX, 8112, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 636, UINT16_MAX, 636, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 637, UINT16_MAX, 637, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8830, 640, UINT16_MAX, 640, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8833, UINT16_MAX, 8113, UINT16_MAX, 8113, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8835, 645, UINT16_MAX, 645, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8838, UINT16_MAX, 8114, UINT16_MAX, 8114, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8840, 650, UINT16_MAX, 650, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8843, UINT16_MAX, 8115, UINT16_MAX, 8115, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8845, 655, UINT16_MAX, 655, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8848, UINT16_MAX, 8116, UINT16_MAX, 8116, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8850, 660, UINT16_MAX, 660, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8853, UINT16_MAX, 8117, UINT16_MAX, 8117, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8855, 665, UINT16_MAX, 665, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8858, UINT16_MAX, 8118, UINT16_MAX, 8118, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8860, 670, UINT16_MAX, 670, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8863, UINT16_MAX, 8119, UINT16_MAX, 8119, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8865, 675, UINT16_MAX, 675, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8868, UINT16_MAX, 8120, UINT16_MAX, 8120, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8870, 680, UINT16_MAX, 680, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8873, UINT16_MAX, 8121, UINT16_MAX, 8121, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8875, 685, UINT16_MAX, 685, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8878, UINT16_MAX, 8122, UINT16_MAX, 8122, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8880, 690, UINT16_MAX, 690, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8883, UINT16_MAX, 8123, UINT16_MAX, 8123, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8885, 695, UINT16_MAX, 695, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8888, UINT16_MAX, 8124, UINT16_MAX, 8124, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8890, 700, UINT16_MAX, 700, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8893, UINT16_MAX, 8125, UINT16_MAX, 8125, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8895, 705, UINT16_MAX, 705, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8898, UINT16_MAX, 8126, UINT16_MAX, 8126, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8900, 710, UINT16_MAX, 710, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8903, UINT16_MAX, 8127, UINT16_MAX, 8127, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8905, 715, UINT16_MAX, 715, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8908, UINT16_MAX, 8128, UINT16_MAX, 8128, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8910, 720, UINT16_MAX, 720, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8913, UINT16_MAX, 8129, UINT16_MAX, 8129, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8915, 725, UINT16_MAX, 725, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8918, UINT16_MAX, 8130, UINT16_MAX, 8130, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 728, UINT16_MAX, 728, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8131, UINT16_MAX, 8131, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8921, 731, UINT16_MAX, 731, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8924, UINT16_MAX, 8132, UINT16_MAX, 8132, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 734, UINT16_MAX, 734, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 735, UINT16_MAX, 735, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 1461, UINT16_MAX, 1461, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 736, UINT16_MAX, 736, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8133, UINT16_MAX, 8133, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8929, 739, UINT16_MAX, 739, UINT16_MAX, 1543, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8932, UINT16_MAX, 8134, UINT16_MAX, 8134, 1546, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8934, 744, UINT16_MAX, 744, UINT16_MAX, 2866, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8937, UINT16_MAX, 8135, UINT16_MAX, 8135, 2869, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8939, 749, UINT16_MAX, 749, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8942, UINT16_MAX, 8136, UINT16_MAX, 8136, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8944, 754, UINT16_MAX, 754, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8947, UINT16_MAX, 8137, UINT16_MAX, 8137, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8949, 759, UINT16_MAX, 759, UINT16_MAX, 1615, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8952, UINT16_MAX, 8138, UINT16_MAX, 8138, 1618, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8954, 764, UINT16_MAX, 764, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8957, UINT16_MAX, 8139, UINT16_MAX, 8139, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 8959, 769, UINT16_MAX, 769, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 8962, UINT16_MAX, 8140, UINT16_MAX, 8140, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 772, UINT16_MAX, 772, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 773, UINT16_MAX, 773, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8141, UINT16_MAX, 8141, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 774, UINT16_MAX, 774, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 775, UINT16_MAX, 775, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8142, UINT16_MAX, 8142, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8143, UINT16_MAX, 8143, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 776, UINT16_MAX, 776, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8144, UINT16_MAX, 8144, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 777, UINT16_MAX, 777, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 778, UINT16_MAX, 778, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 779, UINT16_MAX, 779, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 780, UINT16_MAX, 780, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8145, UINT16_MAX, 8145, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 781, UINT16_MAX, 781, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8146, UINT16_MAX, 8146, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 782, UINT16_MAX, 782, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8147, UINT16_MAX, 8147, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 783, UINT16_MAX, 783, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8148, UINT16_MAX, 8148, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 784, UINT16_MAX, 784, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8149, UINT16_MAX, 8149, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8150, UINT16_MAX, 8150, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8151, UINT16_MAX, 8151, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8152, UINT16_MAX, 8152, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8153, UINT16_MAX, 8153, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8154, UINT16_MAX, 8154, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8155, UINT16_MAX, 8155, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8156, UINT16_MAX, 8156, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8157, UINT16_MAX, 8157, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2804, UINT16_MAX, 2804, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8158, UINT16_MAX, 8158, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8159, UINT16_MAX, 8159, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8160, UINT16_MAX, 8160, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8161, UINT16_MAX, 8161, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8162, UINT16_MAX, 8162, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8163, UINT16_MAX, 8163, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8164, UINT16_MAX, 8164, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8165, UINT16_MAX, 8165, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8166, UINT16_MAX, 8166, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8167, UINT16_MAX, 8167, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8168, UINT16_MAX, 8168, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8169, UINT16_MAX, 8169, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8170, UINT16_MAX, 8170, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8171, UINT16_MAX, 8171, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8172, UINT16_MAX, 8172, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8173, UINT16_MAX, 8173, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8174, UINT16_MAX, 8174, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8175, UINT16_MAX, 8175, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8176, UINT16_MAX, 8176, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8177, UINT16_MAX, 8177, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8178, UINT16_MAX, 8178, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8179, UINT16_MAX, 8179, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8180, UINT16_MAX, 8180, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8181, UINT16_MAX, 8181, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8182, UINT16_MAX, 8182, 1576, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8183, UINT16_MAX, 8183, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8184, UINT16_MAX, 8184, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 7, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 9, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 17, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 22, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 24, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8987, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8989, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 8991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 11, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 18, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 23, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32768, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32769, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32770, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32771, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32775, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32776, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32778, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32772, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32814, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32773, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32780, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32779, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32782, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32783, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32815, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32816, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 232, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 216, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32781, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32808, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32813, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32807, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32784, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32774, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32777, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32810, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32812, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32811, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32809, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32819, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32817, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, 8997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 240, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, 807, 7127, UINT16_MAX, 7127, 32818, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 233, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 234, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 808, UINT16_MAX, 808, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8185, UINT16_MAX, 8185, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 809, UINT16_MAX, 809, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8186, UINT16_MAX, 8186, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 811, UINT16_MAX, 811, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8187, UINT16_MAX, 8187, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8188, UINT16_MAX, 8188, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8189, UINT16_MAX, 8189, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8190, UINT16_MAX, 8190, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 815, UINT16_MAX, 815, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 9008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9010, 820, UINT16_MAX, 820, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9014, 824, UINT16_MAX, 824, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9017, 827, UINT16_MAX, 827, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9020, 830, UINT16_MAX, 830, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9023, 833, UINT16_MAX, 833, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9026, 836, UINT16_MAX, 836, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9029, 839, UINT16_MAX, 839, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9032, 17226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 845, UINT16_MAX, 845, UINT16_MAX, 1673, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 846, UINT16_MAX, 846, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 847, UINT16_MAX, 847, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 848, UINT16_MAX, 848, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 849, UINT16_MAX, 849, UINT16_MAX, 1726, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 850, UINT16_MAX, 850, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 851, UINT16_MAX, 851, UINT16_MAX, 1777, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 852, UINT16_MAX, 852, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 807, UINT16_MAX, 807, UINT16_MAX, 1830, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 853, UINT16_MAX, 853, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 854, UINT16_MAX, 854, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 35, UINT16_MAX, 35, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 855, UINT16_MAX, 855, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 856, UINT16_MAX, 856, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 857, UINT16_MAX, 857, UINT16_MAX, 1881, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 858, UINT16_MAX, 858, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 859, UINT16_MAX, 859, UINT16_MAX, 5027, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 860, UINT16_MAX, 860, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 861, UINT16_MAX, 861, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 862, UINT16_MAX, 862, UINT16_MAX, 1932, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 863, UINT16_MAX, 863, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 864, UINT16_MAX, 864, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 865, UINT16_MAX, 865, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 866, UINT16_MAX, 866, UINT16_MAX, 1983, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9059, 869, UINT16_MAX, 869, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9062, 872, UINT16_MAX, 872, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9065, UINT16_MAX, 2583, UINT16_MAX, 2583, 4904, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9067, UINT16_MAX, 2616, UINT16_MAX, 2616, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9069, UINT16_MAX, 2621, UINT16_MAX, 2621, 4913, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9071, UINT16_MAX, 2658, UINT16_MAX, 2658, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9073, 17267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7121, UINT16_MAX, 7121, 2088, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7122, UINT16_MAX, 7122, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2829, UINT16_MAX, 2829, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7123, UINT16_MAX, 7123, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7124, UINT16_MAX, 7124, 2141, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7125, UINT16_MAX, 7125, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7126, UINT16_MAX, 7126, 2192, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 915, UINT16_MAX, 915, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7127, UINT16_MAX, 7127, 2245, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7128, UINT16_MAX, 7128, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7129, UINT16_MAX, 7129, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7130, UINT16_MAX, 7130, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7131, UINT16_MAX, 7131, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7132, UINT16_MAX, 7132, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7133, UINT16_MAX, 7133, 2401, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2830, UINT16_MAX, 2830, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7134, UINT16_MAX, 7134, 5023, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 860, 917, UINT16_MAX, 917, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 917, UINT16_MAX, 917, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7136, UINT16_MAX, 7136, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 897, UINT16_MAX, 897, 2349, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7137, UINT16_MAX, 7137, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7138, UINT16_MAX, 7138, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7139, UINT16_MAX, 7139, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 2818, UINT16_MAX, 2818, 2452, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9078, UINT16_MAX, 8191, UINT16_MAX, 8191, 2036, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9080, UINT16_MAX, 8192, UINT16_MAX, 8192, 2297, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9082, UINT16_MAX, 2727, UINT16_MAX, 2727, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9084, UINT16_MAX, 2696, UINT16_MAX, 2696, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9086, UINT16_MAX, 2732, UINT16_MAX, 2732, 5033, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 896, UINT16_MAX, 896, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 846, 846, 7122, UINT16_MAX, 7122, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 852, 852, 915, UINT16_MAX, 915, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2505, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 863, 863, 7137, UINT16_MAX, 7137, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 858, 858, 2830, UINT16_MAX, 2830, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8193, UINT16_MAX, 8193, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 902, UINT16_MAX, 902, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8194, UINT16_MAX, 8194, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 903, UINT16_MAX, 903, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8195, UINT16_MAX, 8195, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 904, UINT16_MAX, 904, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 7148, UINT16_MAX, 7148, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 905, UINT16_MAX, 905, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8196, UINT16_MAX, 8196, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 906, UINT16_MAX, 906, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8197, UINT16_MAX, 8197, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 907, UINT16_MAX, 907, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8198, UINT16_MAX, 8198, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 908, UINT16_MAX, 908, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8199, UINT16_MAX, 8199, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 909, UINT16_MAX, 909, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8200, UINT16_MAX, 8200, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 910, UINT16_MAX, 910, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8201, UINT16_MAX, 8201, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 911, UINT16_MAX, 911, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8202, UINT16_MAX, 8202, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 912, UINT16_MAX, 912, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8203, UINT16_MAX, 8203, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 913, UINT16_MAX, 913, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8204, UINT16_MAX, 8204, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 853, 853, 7128, UINT16_MAX, 7128, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 859, 859, 7134, UINT16_MAX, 7134, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 914, UINT16_MAX, 8205, UINT16_MAX, 8205, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8206, UINT16_MAX, 8206, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 915, 852, UINT16_MAX, 852, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 849, 849, 7124, UINT16_MAX, 7124, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 916, UINT16_MAX, 916, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8207, UINT16_MAX, 8207, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 917, 918, UINT16_MAX, 918, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 919, UINT16_MAX, 919, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8208, UINT16_MAX, 8208, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 920, UINT16_MAX, 920, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 921, UINT16_MAX, 921, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 922, UINT16_MAX, 922, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9115, 925, UINT16_MAX, 925, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9118, 928, UINT16_MAX, 928, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 929, UINT16_MAX, 929, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9122, 932, UINT16_MAX, 932, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 933, UINT16_MAX, 933, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 934, UINT16_MAX, 934, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 935, UINT16_MAX, 935, UINT16_MAX, 2525, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9128, 938, UINT16_MAX, 938, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 939, UINT16_MAX, 939, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 940, UINT16_MAX, 940, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 941, UINT16_MAX, 941, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 942, UINT16_MAX, 942, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9135, 945, UINT16_MAX, 945, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9138, 948, UINT16_MAX, 948, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9141, 951, UINT16_MAX, 951, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 952, UINT16_MAX, 952, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 953, UINT16_MAX, 953, UINT16_MAX, 2615, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 954, UINT16_MAX, 954, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 955, UINT16_MAX, 955, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 956, UINT16_MAX, 956, UINT16_MAX, 2522, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 957, UINT16_MAX, 957, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 958, UINT16_MAX, 958, UINT16_MAX, 2511, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 959, UINT16_MAX, 959, UINT16_MAX, 2601, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 960, UINT16_MAX, 960, UINT16_MAX, 2635, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 961, UINT16_MAX, 961, UINT16_MAX, 2531, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9154, 964, UINT16_MAX, 964, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 965, UINT16_MAX, 965, UINT16_MAX, 2528, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 966, UINT16_MAX, 966, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 967, UINT16_MAX, 967, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 968, UINT16_MAX, 968, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 969, UINT16_MAX, 969, UINT16_MAX, 2641, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 970, UINT16_MAX, 970, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 971, UINT16_MAX, 971, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 972, UINT16_MAX, 972, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 973, UINT16_MAX, 973, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 974, UINT16_MAX, 974, UINT16_MAX, 2542, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 975, UINT16_MAX, 975, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 976, UINT16_MAX, 976, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 977, UINT16_MAX, 977, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 978, UINT16_MAX, 978, UINT16_MAX, 2659, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 979, UINT16_MAX, 979, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 980, UINT16_MAX, 980, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 981, UINT16_MAX, 981, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 982, UINT16_MAX, 982, UINT16_MAX, 2665, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 983, UINT16_MAX, 983, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 984, UINT16_MAX, 984, UINT16_MAX, 2653, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 985, UINT16_MAX, 985, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 986, UINT16_MAX, 986, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8209, UINT16_MAX, 8209, 2622, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8210, UINT16_MAX, 8210, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8211, UINT16_MAX, 8211, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8212, UINT16_MAX, 8212, 2575, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8213, UINT16_MAX, 8213, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8214, UINT16_MAX, 8214, 2564, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8215, UINT16_MAX, 8215, 2608, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8216, UINT16_MAX, 8216, 2638, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8217, UINT16_MAX, 8217, 2553, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9179, UINT16_MAX, 8218, UINT16_MAX, 8218, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8219, UINT16_MAX, 8219, 2581, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8220, UINT16_MAX, 8220, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8221, UINT16_MAX, 8221, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8222, UINT16_MAX, 8222, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8223, UINT16_MAX, 8223, 2644, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8224, UINT16_MAX, 8224, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8225, UINT16_MAX, 8225, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8226, UINT16_MAX, 8226, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8227, UINT16_MAX, 8227, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8228, UINT16_MAX, 8228, 2584, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8229, UINT16_MAX, 8229, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8230, UINT16_MAX, 8230, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8231, UINT16_MAX, 8231, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8232, UINT16_MAX, 8232, 2662, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8233, UINT16_MAX, 8233, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8234, UINT16_MAX, 8234, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8235, UINT16_MAX, 8235, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8236, UINT16_MAX, 8236, 2668, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8237, UINT16_MAX, 8237, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8238, UINT16_MAX, 8238, 2656, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8239, UINT16_MAX, 8239, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8240, UINT16_MAX, 8240, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9181, UINT16_MAX, 8241, UINT16_MAX, 8241, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9183, UINT16_MAX, 8242, UINT16_MAX, 8242, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8243, UINT16_MAX, 8243, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9185, UINT16_MAX, 8244, UINT16_MAX, 8244, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8245, UINT16_MAX, 8245, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8246, UINT16_MAX, 8246, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8247, UINT16_MAX, 8247, 2578, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9187, UINT16_MAX, 8248, UINT16_MAX, 8248, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8249, UINT16_MAX, 8249, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8250, UINT16_MAX, 8250, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8251, UINT16_MAX, 8251, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8252, UINT16_MAX, 8252, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9189, UINT16_MAX, 8253, UINT16_MAX, 8253, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9191, UINT16_MAX, 8254, UINT16_MAX, 8254, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9193, UINT16_MAX, 8255, UINT16_MAX, 8255, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8256, UINT16_MAX, 8256, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1003, UINT16_MAX, 1003, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8257, UINT16_MAX, 8257, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1004, UINT16_MAX, 1004, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8258, UINT16_MAX, 8258, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1005, UINT16_MAX, 1005, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8259, UINT16_MAX, 8259, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1006, UINT16_MAX, 1006, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8260, UINT16_MAX, 8260, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1007, UINT16_MAX, 1007, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8261, UINT16_MAX, 8261, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1008, UINT16_MAX, 1008, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8262, UINT16_MAX, 8262, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1009, UINT16_MAX, 1009, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8263, UINT16_MAX, 8263, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1010, UINT16_MAX, 1010, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8264, UINT16_MAX, 8264, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1011, UINT16_MAX, 1011, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8265, UINT16_MAX, 8265, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1012, UINT16_MAX, 1012, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8266, UINT16_MAX, 8266, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1013, UINT16_MAX, 1013, UINT16_MAX, 2595, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8267, UINT16_MAX, 8267, 2598, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9206, 1016, UINT16_MAX, 1016, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9209, UINT16_MAX, 8268, UINT16_MAX, 8268, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1019, UINT16_MAX, 1019, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8269, UINT16_MAX, 8269, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1020, UINT16_MAX, 1020, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8270, UINT16_MAX, 8270, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1021, UINT16_MAX, 1021, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8271, UINT16_MAX, 8271, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1022, UINT16_MAX, 1022, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8272, UINT16_MAX, 8272, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1023, UINT16_MAX, 1023, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8273, UINT16_MAX, 8273, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ME, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1024, UINT16_MAX, 1024, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8274, UINT16_MAX, 8274, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1025, UINT16_MAX, 1025, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8275, UINT16_MAX, 8275, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1026, UINT16_MAX, 1026, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8276, UINT16_MAX, 8276, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1027, UINT16_MAX, 1027, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8277, UINT16_MAX, 8277, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1028, UINT16_MAX, 1028, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8278, UINT16_MAX, 8278, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1029, UINT16_MAX, 1029, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8279, UINT16_MAX, 8279, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1030, UINT16_MAX, 1030, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8280, UINT16_MAX, 8280, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1031, UINT16_MAX, 1031, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8281, UINT16_MAX, 8281, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1032, UINT16_MAX, 1032, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8282, UINT16_MAX, 8282, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1033, UINT16_MAX, 1033, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8283, UINT16_MAX, 8283, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1034, UINT16_MAX, 1034, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8284, UINT16_MAX, 8284, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1035, UINT16_MAX, 1035, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8285, UINT16_MAX, 8285, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1036, UINT16_MAX, 1036, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8286, UINT16_MAX, 8286, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1037, UINT16_MAX, 1037, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8287, UINT16_MAX, 8287, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1038, UINT16_MAX, 1038, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8288, UINT16_MAX, 8288, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1039, UINT16_MAX, 1039, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8289, UINT16_MAX, 8289, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1040, UINT16_MAX, 1040, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8290, UINT16_MAX, 8290, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1041, UINT16_MAX, 1041, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8291, UINT16_MAX, 8291, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1042, UINT16_MAX, 1042, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8292, UINT16_MAX, 8292, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1043, UINT16_MAX, 1043, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8293, UINT16_MAX, 8293, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1044, UINT16_MAX, 1044, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8294, UINT16_MAX, 8294, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1045, UINT16_MAX, 1045, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8295, UINT16_MAX, 8295, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1046, UINT16_MAX, 1046, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8296, UINT16_MAX, 8296, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1047, UINT16_MAX, 1047, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8297, UINT16_MAX, 8297, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1048, UINT16_MAX, 1048, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8298, UINT16_MAX, 8298, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1049, UINT16_MAX, 1049, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8299, UINT16_MAX, 8299, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1050, UINT16_MAX, 1050, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8300, UINT16_MAX, 8300, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1051, UINT16_MAX, 1051, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9244, 1054, UINT16_MAX, 1054, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9247, UINT16_MAX, 8301, UINT16_MAX, 8301, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1057, UINT16_MAX, 1057, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8302, UINT16_MAX, 8302, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1058, UINT16_MAX, 1058, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8303, UINT16_MAX, 8303, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1059, UINT16_MAX, 1059, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8304, UINT16_MAX, 8304, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1060, UINT16_MAX, 1060, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8305, UINT16_MAX, 8305, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1061, UINT16_MAX, 1061, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8306, UINT16_MAX, 8306, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1062, UINT16_MAX, 1062, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8307, UINT16_MAX, 8307, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8308, UINT16_MAX, 8308, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9255, 1065, UINT16_MAX, 1065, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9258, UINT16_MAX, 8309, UINT16_MAX, 8309, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9260, 1070, UINT16_MAX, 1070, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9263, UINT16_MAX, 8310, UINT16_MAX, 8310, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1073, UINT16_MAX, 1073, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8311, UINT16_MAX, 8311, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9266, 1076, UINT16_MAX, 1076, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9269, UINT16_MAX, 8312, UINT16_MAX, 8312, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1079, UINT16_MAX, 1079, UINT16_MAX, 2629, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8313, UINT16_MAX, 8313, 2632, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9272, 1082, UINT16_MAX, 1082, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9275, UINT16_MAX, 8314, UINT16_MAX, 8314, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9277, 1087, UINT16_MAX, 1087, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9280, UINT16_MAX, 8315, UINT16_MAX, 8315, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9282, 1092, UINT16_MAX, 1092, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9285, UINT16_MAX, 8316, UINT16_MAX, 8316, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1095, UINT16_MAX, 1095, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8317, UINT16_MAX, 8317, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9288, 1098, UINT16_MAX, 1098, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9291, UINT16_MAX, 8318, UINT16_MAX, 8318, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9293, 1103, UINT16_MAX, 1103, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9296, UINT16_MAX, 8319, UINT16_MAX, 8319, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9298, 1108, UINT16_MAX, 1108, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9301, UINT16_MAX, 8320, UINT16_MAX, 8320, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1111, UINT16_MAX, 1111, UINT16_MAX, 2647, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8321, UINT16_MAX, 8321, 2650, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9304, 1114, UINT16_MAX, 1114, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9307, UINT16_MAX, 8322, UINT16_MAX, 8322, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9309, 1119, UINT16_MAX, 1119, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9312, UINT16_MAX, 8323, UINT16_MAX, 8323, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9314, 1124, UINT16_MAX, 1124, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9317, UINT16_MAX, 8324, UINT16_MAX, 8324, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9319, 1129, UINT16_MAX, 1129, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9322, UINT16_MAX, 8325, UINT16_MAX, 8325, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9324, 1134, UINT16_MAX, 1134, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9327, UINT16_MAX, 8326, UINT16_MAX, 8326, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9329, 1139, UINT16_MAX, 1139, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9332, UINT16_MAX, 8327, UINT16_MAX, 8327, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1142, UINT16_MAX, 1142, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8328, UINT16_MAX, 8328, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9335, 1145, UINT16_MAX, 1145, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9338, UINT16_MAX, 8329, UINT16_MAX, 8329, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1148, UINT16_MAX, 1148, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8330, UINT16_MAX, 8330, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1149, UINT16_MAX, 1149, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8331, UINT16_MAX, 8331, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1150, UINT16_MAX, 1150, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8332, UINT16_MAX, 8332, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1151, UINT16_MAX, 1151, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8333, UINT16_MAX, 8333, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1152, UINT16_MAX, 1152, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8334, UINT16_MAX, 8334, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1153, UINT16_MAX, 1153, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8335, UINT16_MAX, 8335, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1154, UINT16_MAX, 1154, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8336, UINT16_MAX, 8336, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1155, UINT16_MAX, 1155, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8337, UINT16_MAX, 8337, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1156, UINT16_MAX, 1156, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8338, UINT16_MAX, 8338, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1157, UINT16_MAX, 1157, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8339, UINT16_MAX, 8339, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1158, UINT16_MAX, 1158, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8340, UINT16_MAX, 8340, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1159, UINT16_MAX, 1159, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8341, UINT16_MAX, 8341, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1160, UINT16_MAX, 1160, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8342, UINT16_MAX, 8342, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1161, UINT16_MAX, 1161, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8343, UINT16_MAX, 8343, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1162, UINT16_MAX, 1162, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8344, UINT16_MAX, 8344, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1163, UINT16_MAX, 1163, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8345, UINT16_MAX, 8345, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1164, UINT16_MAX, 1164, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8346, UINT16_MAX, 8346, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1165, UINT16_MAX, 1165, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8347, UINT16_MAX, 8347, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1166, UINT16_MAX, 1166, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8348, UINT16_MAX, 8348, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1167, UINT16_MAX, 1167, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8349, UINT16_MAX, 8349, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1168, UINT16_MAX, 1168, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8350, UINT16_MAX, 8350, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1169, UINT16_MAX, 1169, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8351, UINT16_MAX, 8351, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1170, UINT16_MAX, 1170, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8352, UINT16_MAX, 8352, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1171, UINT16_MAX, 1171, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8353, UINT16_MAX, 8353, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1172, UINT16_MAX, 1172, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8354, UINT16_MAX, 8354, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1173, UINT16_MAX, 1173, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8355, UINT16_MAX, 8355, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1174, UINT16_MAX, 1174, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8356, UINT16_MAX, 8356, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1175, UINT16_MAX, 1175, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1176, UINT16_MAX, 1176, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1177, UINT16_MAX, 1177, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1178, UINT16_MAX, 1178, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1179, UINT16_MAX, 1179, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1180, UINT16_MAX, 1180, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1181, UINT16_MAX, 1181, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1182, UINT16_MAX, 1182, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1183, UINT16_MAX, 1183, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1184, UINT16_MAX, 1184, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1185, UINT16_MAX, 1185, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1186, UINT16_MAX, 1186, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1187, UINT16_MAX, 1187, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1188, UINT16_MAX, 1188, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1189, UINT16_MAX, 1189, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1190, UINT16_MAX, 1190, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1191, UINT16_MAX, 1191, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1192, UINT16_MAX, 1192, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1193, UINT16_MAX, 1193, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1194, UINT16_MAX, 1194, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1195, UINT16_MAX, 1195, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1196, UINT16_MAX, 1196, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1197, UINT16_MAX, 1197, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1198, UINT16_MAX, 1198, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1199, UINT16_MAX, 1199, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1200, UINT16_MAX, 1200, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1201, UINT16_MAX, 1201, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1202, UINT16_MAX, 1202, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1203, UINT16_MAX, 1203, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1204, UINT16_MAX, 1204, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1205, UINT16_MAX, 1205, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1206, UINT16_MAX, 1206, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1207, UINT16_MAX, 1207, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1208, UINT16_MAX, 1208, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1209, UINT16_MAX, 1209, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1210, UINT16_MAX, 1210, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1211, UINT16_MAX, 1211, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1212, UINT16_MAX, 1212, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8357, UINT16_MAX, 8357, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8358, UINT16_MAX, 8358, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8359, UINT16_MAX, 8359, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8360, UINT16_MAX, 8360, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8361, UINT16_MAX, 8361, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8362, UINT16_MAX, 8362, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8363, UINT16_MAX, 8363, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8364, UINT16_MAX, 8364, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8365, UINT16_MAX, 8365, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8366, UINT16_MAX, 8366, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8367, UINT16_MAX, 8367, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8368, UINT16_MAX, 8368, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8369, UINT16_MAX, 8369, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8370, UINT16_MAX, 8370, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8371, UINT16_MAX, 8371, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8372, UINT16_MAX, 8372, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8373, UINT16_MAX, 8373, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8374, UINT16_MAX, 8374, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8375, UINT16_MAX, 8375, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8376, UINT16_MAX, 8376, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8377, UINT16_MAX, 8377, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8378, UINT16_MAX, 8378, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8379, UINT16_MAX, 8379, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8380, UINT16_MAX, 8380, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8381, UINT16_MAX, 8381, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8382, UINT16_MAX, 8382, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8383, UINT16_MAX, 8383, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8384, UINT16_MAX, 8384, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8385, UINT16_MAX, 8385, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8386, UINT16_MAX, 8386, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8387, UINT16_MAX, 8387, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8388, UINT16_MAX, 8388, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8389, UINT16_MAX, 8389, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8390, UINT16_MAX, 8390, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8391, UINT16_MAX, 8391, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8392, UINT16_MAX, 8392, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8393, UINT16_MAX, 8393, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8394, UINT16_MAX, 8394, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9405, 9405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 222, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 228, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 10, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 11, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 12, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 13, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 14, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 15, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 16, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 17, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 18, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 19, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 20, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 21, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 22, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 23, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 24, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 25, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_PREPEND},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 2, 0, UTF8PROC_BOUNDCLASS_PREPEND},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 30, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 31, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 32, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2671, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2676, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2679, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 27, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 28, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 29, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 33, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 34, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32785, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32786, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32787, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 35, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 9417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 9419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 9421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, 9423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2685, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2688, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, 9429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2682, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_PREPEND},
+  {UTF8PROC_CATEGORY_MN, 36, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2691, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2694, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2697, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32788, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32789, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2700, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32790, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32792, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2704, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32791, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32793, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2709, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32795, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2712, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2716, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32794, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2719, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 84, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 91, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32796, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2722, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32799, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2725, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2730, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32797, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32798, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32800, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2733, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2737, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_PREPEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32801, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32802, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32803, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2740, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2745, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32804, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MN, 103, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 107, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MN, 118, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 122, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 9525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NOBREAK, 1335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 216, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 129, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 130, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 132, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, UTF8PROC_DECOMP_TYPE_COMPAT, 9546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, UTF8PROC_DECOMP_TYPE_COMPAT, 9550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 9564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2748, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32805, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1376, UINT16_MAX, 1376, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1377, UINT16_MAX, 1377, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1378, UINT16_MAX, 1378, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1379, UINT16_MAX, 1379, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1380, UINT16_MAX, 1380, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1381, UINT16_MAX, 1381, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1382, UINT16_MAX, 1382, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1383, UINT16_MAX, 1383, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1384, UINT16_MAX, 1384, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1385, UINT16_MAX, 1385, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1386, UINT16_MAX, 1386, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1387, UINT16_MAX, 1387, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1388, UINT16_MAX, 1388, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1389, UINT16_MAX, 1389, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1390, UINT16_MAX, 1390, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1391, UINT16_MAX, 1391, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1392, UINT16_MAX, 1392, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1393, UINT16_MAX, 1393, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1394, UINT16_MAX, 1394, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1395, UINT16_MAX, 1395, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1396, UINT16_MAX, 1396, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1397, UINT16_MAX, 1397, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1398, UINT16_MAX, 1398, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1399, UINT16_MAX, 1399, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1400, UINT16_MAX, 1400, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1401, UINT16_MAX, 1401, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1402, UINT16_MAX, 1402, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1403, UINT16_MAX, 1403, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1404, UINT16_MAX, 1404, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1405, UINT16_MAX, 1405, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1406, UINT16_MAX, 1406, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1407, UINT16_MAX, 1407, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1408, UINT16_MAX, 1408, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1409, UINT16_MAX, 1409, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1410, UINT16_MAX, 1410, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1411, UINT16_MAX, 1411, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1412, UINT16_MAX, 1412, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1413, UINT16_MAX, 1413, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1414, UINT16_MAX, 1414, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1415, UINT16_MAX, 1415, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_L},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 2, 0, UTF8PROC_BOUNDCLASS_L},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 2, 0, UTF8PROC_BOUNDCLASS_V},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_V},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_T},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8395, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8396, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8397, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8398, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8399, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8400, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8401, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8402, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8403, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8404, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8405, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8406, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8407, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8408, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8409, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8410, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8411, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8412, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8413, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8414, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8415, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8416, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8417, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8418, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8419, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8420, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8421, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8422, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8423, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8424, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8425, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8426, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8427, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8428, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8429, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8430, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8431, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8432, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8433, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8434, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8435, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8436, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8437, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8438, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8439, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8440, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8441, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8442, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8443, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8444, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8445, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8446, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8447, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8448, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8449, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8450, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8451, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8452, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8453, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8454, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8455, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8456, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8457, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8458, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8459, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8460, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8461, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8462, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8463, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8464, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8465, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8466, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8467, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8468, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8469, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8470, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8471, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8472, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8473, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8474, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8475, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8476, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8477, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8478, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8479, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, 8480, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1417, 1417, UINT16_MAX, 1417, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1418, 1418, UINT16_MAX, 1418, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1419, 1419, UINT16_MAX, 1419, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1420, 1420, UINT16_MAX, 1420, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1421, 1421, UINT16_MAX, 1421, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1422, 1422, UINT16_MAX, 1422, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2751, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2754, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2757, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2760, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2763, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2766, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 9625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32806, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2769, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2772, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2775, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2778, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 2781, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 9635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 955, 8211, UINT16_MAX, 8211, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 957, 8213, UINT16_MAX, 8213, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 969, 8223, UINT16_MAX, 8223, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 972, 8226, UINT16_MAX, 8226, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 973, 8227, UINT16_MAX, 8227, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 981, 8235, UINT16_MAX, 8235, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1004, 8258, UINT16_MAX, 8258, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1445, 8481, UINT16_MAX, 8481, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 4, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 6, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 10, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 12, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 15, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 19, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 20, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 21, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 8, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 17, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 20, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 21, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8482, UINT16_MAX, 8482, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8483, UINT16_MAX, 8483, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 94, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 25, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 1495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 214, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9688, 1498, UINT16_MAX, 1498, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9691, UINT16_MAX, 8484, UINT16_MAX, 8484, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9693, 1503, UINT16_MAX, 1503, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9696, UINT16_MAX, 8485, UINT16_MAX, 8485, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9698, 1508, UINT16_MAX, 1508, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9701, UINT16_MAX, 8486, UINT16_MAX, 8486, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9703, 1513, UINT16_MAX, 1513, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9706, UINT16_MAX, 8487, UINT16_MAX, 8487, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9708, 1518, UINT16_MAX, 1518, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9711, UINT16_MAX, 8488, UINT16_MAX, 8488, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9713, 1523, UINT16_MAX, 1523, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9716, UINT16_MAX, 8489, UINT16_MAX, 8489, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9718, 1528, UINT16_MAX, 1528, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9721, UINT16_MAX, 8490, UINT16_MAX, 8490, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9723, 1533, UINT16_MAX, 1533, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9726, UINT16_MAX, 8491, UINT16_MAX, 8491, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9728, 1538, UINT16_MAX, 1538, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9731, UINT16_MAX, 8492, UINT16_MAX, 8492, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9733, 1543, UINT16_MAX, 1543, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9736, UINT16_MAX, 8493, UINT16_MAX, 8493, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9738, 1548, UINT16_MAX, 1548, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9741, UINT16_MAX, 8494, UINT16_MAX, 8494, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9743, 1553, UINT16_MAX, 1553, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9746, UINT16_MAX, 8495, UINT16_MAX, 8495, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9748, 1558, UINT16_MAX, 1558, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9751, UINT16_MAX, 8496, UINT16_MAX, 8496, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9753, 1563, UINT16_MAX, 1563, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9756, UINT16_MAX, 8497, UINT16_MAX, 8497, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9758, 1568, UINT16_MAX, 1568, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9761, UINT16_MAX, 8498, UINT16_MAX, 8498, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9763, 1573, UINT16_MAX, 1573, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9766, UINT16_MAX, 8499, UINT16_MAX, 8499, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9768, 1578, UINT16_MAX, 1578, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9771, UINT16_MAX, 8500, UINT16_MAX, 8500, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9773, 1583, UINT16_MAX, 1583, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9776, UINT16_MAX, 8501, UINT16_MAX, 8501, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9778, 1588, UINT16_MAX, 1588, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9781, UINT16_MAX, 8502, UINT16_MAX, 8502, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9783, 1593, UINT16_MAX, 1593, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9786, UINT16_MAX, 8503, UINT16_MAX, 8503, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9788, 1598, UINT16_MAX, 1598, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9791, UINT16_MAX, 8504, UINT16_MAX, 8504, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9793, 1603, UINT16_MAX, 1603, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9796, UINT16_MAX, 8505, UINT16_MAX, 8505, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9798, 1608, UINT16_MAX, 1608, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9801, UINT16_MAX, 8506, UINT16_MAX, 8506, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9803, 1613, UINT16_MAX, 1613, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9806, UINT16_MAX, 8507, UINT16_MAX, 8507, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9808, 1618, UINT16_MAX, 1618, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9811, UINT16_MAX, 8508, UINT16_MAX, 8508, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9813, 1623, UINT16_MAX, 1623, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9816, UINT16_MAX, 8509, UINT16_MAX, 8509, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9818, 1628, UINT16_MAX, 1628, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9821, UINT16_MAX, 8510, UINT16_MAX, 8510, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9823, 1633, UINT16_MAX, 1633, UINT16_MAX, 2884, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9826, UINT16_MAX, 8511, UINT16_MAX, 8511, 2887, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9828, 1638, UINT16_MAX, 1638, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9831, UINT16_MAX, 8512, UINT16_MAX, 8512, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9833, 1643, UINT16_MAX, 1643, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9836, UINT16_MAX, 8513, UINT16_MAX, 8513, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9838, 1648, UINT16_MAX, 1648, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9841, UINT16_MAX, 8514, UINT16_MAX, 8514, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9843, 1653, UINT16_MAX, 1653, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9846, UINT16_MAX, 8515, UINT16_MAX, 8515, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9848, 1658, UINT16_MAX, 1658, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9851, UINT16_MAX, 8516, UINT16_MAX, 8516, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9853, 1663, UINT16_MAX, 1663, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9856, UINT16_MAX, 8517, UINT16_MAX, 8517, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9858, 1668, UINT16_MAX, 1668, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9861, UINT16_MAX, 8518, UINT16_MAX, 8518, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9863, 1673, UINT16_MAX, 1673, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9866, UINT16_MAX, 8519, UINT16_MAX, 8519, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9868, 1678, UINT16_MAX, 1678, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9871, UINT16_MAX, 8520, UINT16_MAX, 8520, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9873, 1683, UINT16_MAX, 1683, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9876, UINT16_MAX, 8521, UINT16_MAX, 8521, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9878, 1688, UINT16_MAX, 1688, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9881, UINT16_MAX, 8522, UINT16_MAX, 8522, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9883, 1693, UINT16_MAX, 1693, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9886, UINT16_MAX, 8523, UINT16_MAX, 8523, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9888, 1698, UINT16_MAX, 1698, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9891, UINT16_MAX, 8524, UINT16_MAX, 8524, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9893, 1703, UINT16_MAX, 1703, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9896, UINT16_MAX, 8525, UINT16_MAX, 8525, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9898, 1708, UINT16_MAX, 1708, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9901, UINT16_MAX, 8526, UINT16_MAX, 8526, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9903, 1713, UINT16_MAX, 1713, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9906, UINT16_MAX, 8527, UINT16_MAX, 8527, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9908, 1718, UINT16_MAX, 1718, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9911, UINT16_MAX, 8528, UINT16_MAX, 8528, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9913, 1723, UINT16_MAX, 1723, UINT16_MAX, 3006, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9916, UINT16_MAX, 8529, UINT16_MAX, 8529, 3009, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9918, 1728, UINT16_MAX, 1728, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9921, UINT16_MAX, 8530, UINT16_MAX, 8530, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9923, 1733, UINT16_MAX, 1733, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9926, UINT16_MAX, 8531, UINT16_MAX, 8531, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9928, 1738, UINT16_MAX, 1738, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9931, UINT16_MAX, 8532, UINT16_MAX, 8532, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9933, 1743, UINT16_MAX, 1743, UINT16_MAX, 3024, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9936, UINT16_MAX, 8533, UINT16_MAX, 8533, 3027, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9938, 1748, UINT16_MAX, 1748, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9941, UINT16_MAX, 8534, UINT16_MAX, 8534, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9943, 1753, UINT16_MAX, 1753, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9946, UINT16_MAX, 8535, UINT16_MAX, 8535, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9948, 1758, UINT16_MAX, 1758, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9951, UINT16_MAX, 8536, UINT16_MAX, 8536, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9953, 1763, UINT16_MAX, 1763, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9956, UINT16_MAX, 8537, UINT16_MAX, 8537, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9958, 1768, UINT16_MAX, 1768, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9961, UINT16_MAX, 8538, UINT16_MAX, 8538, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9963, 1773, UINT16_MAX, 1773, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9966, UINT16_MAX, 8539, UINT16_MAX, 8539, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9968, 1778, UINT16_MAX, 1778, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9971, UINT16_MAX, 8540, UINT16_MAX, 8540, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9973, 1783, UINT16_MAX, 1783, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9976, UINT16_MAX, 8541, UINT16_MAX, 8541, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9978, 1788, UINT16_MAX, 1788, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9981, UINT16_MAX, 8542, UINT16_MAX, 8542, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9983, 1793, UINT16_MAX, 1793, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9986, UINT16_MAX, 8543, UINT16_MAX, 8543, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9988, 1798, UINT16_MAX, 1798, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9991, UINT16_MAX, 8544, UINT16_MAX, 8544, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9993, 1803, UINT16_MAX, 1803, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 9996, UINT16_MAX, 8545, UINT16_MAX, 8545, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 9998, 1808, UINT16_MAX, 1808, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10001, UINT16_MAX, 8546, UINT16_MAX, 8546, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10003, 1813, UINT16_MAX, 1813, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10006, UINT16_MAX, 8547, UINT16_MAX, 8547, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10008, 1818, UINT16_MAX, 1818, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10011, UINT16_MAX, 8548, UINT16_MAX, 8548, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10013, 1823, UINT16_MAX, 1823, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10016, UINT16_MAX, 8549, UINT16_MAX, 8549, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10018, 1828, UINT16_MAX, 1828, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10021, UINT16_MAX, 8550, UINT16_MAX, 8550, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10023, 1833, UINT16_MAX, 1833, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10026, UINT16_MAX, 8551, UINT16_MAX, 8551, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10028, 1838, UINT16_MAX, 1838, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10031, UINT16_MAX, 8552, UINT16_MAX, 8552, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10033, 1843, UINT16_MAX, 1843, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10036, UINT16_MAX, 8553, UINT16_MAX, 8553, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10038, 1848, UINT16_MAX, 1848, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10041, UINT16_MAX, 8554, UINT16_MAX, 8554, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10043, 1853, UINT16_MAX, 1853, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10046, UINT16_MAX, 8555, UINT16_MAX, 8555, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10048, 1858, UINT16_MAX, 1858, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10051, UINT16_MAX, 8556, UINT16_MAX, 8556, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10053, 1863, UINT16_MAX, 1863, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10056, UINT16_MAX, 8557, UINT16_MAX, 8557, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10058, 1868, UINT16_MAX, 1868, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10061, UINT16_MAX, 8558, UINT16_MAX, 8558, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10063, 10063, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10065, 10065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10067, 10067, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10069, 10069, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 10071, 10071, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10073, 1738, 8532, UINT16_MAX, 8532, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1883, UINT16_MAX, 1883, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10076, 1886, UINT16_MAX, 1886, UINT16_MAX, 3241, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10079, UINT16_MAX, 8559, UINT16_MAX, 8559, 3250, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10081, 1891, UINT16_MAX, 1891, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10084, UINT16_MAX, 8560, UINT16_MAX, 8560, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10086, 1896, UINT16_MAX, 1896, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10089, UINT16_MAX, 8561, UINT16_MAX, 8561, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10091, 1901, UINT16_MAX, 1901, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10094, UINT16_MAX, 8562, UINT16_MAX, 8562, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10096, 1906, UINT16_MAX, 1906, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10099, UINT16_MAX, 8563, UINT16_MAX, 8563, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10101, 1911, UINT16_MAX, 1911, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10104, UINT16_MAX, 8564, UINT16_MAX, 8564, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10106, 1916, UINT16_MAX, 1916, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10109, UINT16_MAX, 8565, UINT16_MAX, 8565, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10111, 1921, UINT16_MAX, 1921, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10114, UINT16_MAX, 8566, UINT16_MAX, 8566, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10116, 1926, UINT16_MAX, 1926, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10119, UINT16_MAX, 8567, UINT16_MAX, 8567, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10121, 1931, UINT16_MAX, 1931, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10124, UINT16_MAX, 8568, UINT16_MAX, 8568, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10126, 1936, UINT16_MAX, 1936, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10129, UINT16_MAX, 8569, UINT16_MAX, 8569, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10131, 1941, UINT16_MAX, 1941, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10134, UINT16_MAX, 8570, UINT16_MAX, 8570, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10136, 1946, UINT16_MAX, 1946, UINT16_MAX, 3455, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10139, UINT16_MAX, 8571, UINT16_MAX, 8571, 3458, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10141, 1951, UINT16_MAX, 1951, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10144, UINT16_MAX, 8572, UINT16_MAX, 8572, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10146, 1956, UINT16_MAX, 1956, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10149, UINT16_MAX, 8573, UINT16_MAX, 8573, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10151, 1961, UINT16_MAX, 1961, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10154, UINT16_MAX, 8574, UINT16_MAX, 8574, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10156, 1966, UINT16_MAX, 1966, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10159, UINT16_MAX, 8575, UINT16_MAX, 8575, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10161, 1971, UINT16_MAX, 1971, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10164, UINT16_MAX, 8576, UINT16_MAX, 8576, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10166, 1976, UINT16_MAX, 1976, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10169, UINT16_MAX, 8577, UINT16_MAX, 8577, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10171, 1981, UINT16_MAX, 1981, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10174, UINT16_MAX, 8578, UINT16_MAX, 8578, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10176, 1986, UINT16_MAX, 1986, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10179, UINT16_MAX, 8579, UINT16_MAX, 8579, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10181, 1991, UINT16_MAX, 1991, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10184, UINT16_MAX, 8580, UINT16_MAX, 8580, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10186, 1996, UINT16_MAX, 1996, UINT16_MAX, 3559, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10189, UINT16_MAX, 8581, UINT16_MAX, 8581, 3562, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10191, 2001, UINT16_MAX, 2001, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10194, UINT16_MAX, 8582, UINT16_MAX, 8582, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10196, 2006, UINT16_MAX, 2006, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10199, UINT16_MAX, 8583, UINT16_MAX, 8583, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10201, 2011, UINT16_MAX, 2011, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10204, UINT16_MAX, 8584, UINT16_MAX, 8584, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10206, 2016, UINT16_MAX, 2016, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10209, UINT16_MAX, 8585, UINT16_MAX, 8585, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10211, 2021, UINT16_MAX, 2021, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10214, UINT16_MAX, 8586, UINT16_MAX, 8586, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10216, 2026, UINT16_MAX, 2026, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10219, UINT16_MAX, 8587, UINT16_MAX, 8587, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10221, 2031, UINT16_MAX, 2031, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10224, UINT16_MAX, 8588, UINT16_MAX, 8588, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10226, 2036, UINT16_MAX, 2036, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10229, UINT16_MAX, 8589, UINT16_MAX, 8589, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10231, 2041, UINT16_MAX, 2041, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10234, UINT16_MAX, 8590, UINT16_MAX, 8590, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10236, 2046, UINT16_MAX, 2046, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10239, UINT16_MAX, 8591, UINT16_MAX, 8591, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10241, 2051, UINT16_MAX, 2051, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10244, UINT16_MAX, 8592, UINT16_MAX, 8592, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10246, 2056, UINT16_MAX, 2056, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10249, UINT16_MAX, 8593, UINT16_MAX, 8593, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10251, 2061, UINT16_MAX, 2061, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10254, UINT16_MAX, 8594, UINT16_MAX, 8594, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10256, 2066, UINT16_MAX, 2066, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10259, UINT16_MAX, 8595, UINT16_MAX, 8595, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10261, 2071, UINT16_MAX, 2071, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10264, UINT16_MAX, 8596, UINT16_MAX, 8596, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10266, 2076, UINT16_MAX, 2076, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10269, UINT16_MAX, 8597, UINT16_MAX, 8597, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10271, 2081, UINT16_MAX, 2081, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10274, UINT16_MAX, 8598, UINT16_MAX, 8598, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10276, 2086, UINT16_MAX, 2086, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10279, UINT16_MAX, 8599, UINT16_MAX, 8599, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10281, 2091, UINT16_MAX, 2091, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10284, UINT16_MAX, 8600, UINT16_MAX, 8600, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10286, 2096, UINT16_MAX, 2096, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10289, UINT16_MAX, 8601, UINT16_MAX, 8601, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10291, 2101, UINT16_MAX, 2101, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10294, UINT16_MAX, 8602, UINT16_MAX, 8602, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10296, 2106, UINT16_MAX, 2106, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10299, UINT16_MAX, 8603, UINT16_MAX, 8603, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2109, UINT16_MAX, 2109, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8604, UINT16_MAX, 8604, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2110, UINT16_MAX, 2110, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8605, UINT16_MAX, 8605, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2111, UINT16_MAX, 2111, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8606, UINT16_MAX, 8606, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10304, UINT16_MAX, 8607, UINT16_MAX, 8607, 3761, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10306, UINT16_MAX, 8608, UINT16_MAX, 8608, 3814, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10308, UINT16_MAX, 8609, UINT16_MAX, 8609, 4793, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10310, UINT16_MAX, 8610, UINT16_MAX, 8610, 4796, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10312, UINT16_MAX, 8611, UINT16_MAX, 8611, 4799, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10314, UINT16_MAX, 8612, UINT16_MAX, 8612, 4802, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10316, UINT16_MAX, 8613, UINT16_MAX, 8613, 4805, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10318, UINT16_MAX, 8614, UINT16_MAX, 8614, 4808, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10320, 2130, UINT16_MAX, 2130, UINT16_MAX, 3867, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10323, 2133, UINT16_MAX, 2133, UINT16_MAX, 3920, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10326, 2136, UINT16_MAX, 2136, UINT16_MAX, 4811, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10329, 2139, UINT16_MAX, 2139, UINT16_MAX, 4814, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10332, 2142, UINT16_MAX, 2142, UINT16_MAX, 4817, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10335, 2145, UINT16_MAX, 2145, UINT16_MAX, 4820, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10338, 2148, UINT16_MAX, 2148, UINT16_MAX, 4823, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10341, 2151, UINT16_MAX, 2151, UINT16_MAX, 4826, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10344, UINT16_MAX, 8615, UINT16_MAX, 8615, 3973, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10346, UINT16_MAX, 8616, UINT16_MAX, 8616, 3977, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10348, UINT16_MAX, 8617, UINT16_MAX, 8617, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10350, UINT16_MAX, 8618, UINT16_MAX, 8618, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10352, UINT16_MAX, 8619, UINT16_MAX, 8619, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10354, UINT16_MAX, 8620, UINT16_MAX, 8620, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10356, 2166, UINT16_MAX, 2166, UINT16_MAX, 3981, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10359, 2169, UINT16_MAX, 2169, UINT16_MAX, 3985, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10362, 2172, UINT16_MAX, 2172, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10365, 2175, UINT16_MAX, 2175, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10368, 2178, UINT16_MAX, 2178, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10371, 2181, UINT16_MAX, 2181, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10374, UINT16_MAX, 8621, UINT16_MAX, 8621, 3989, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10376, UINT16_MAX, 8622, UINT16_MAX, 8622, 4042, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10378, UINT16_MAX, 8623, UINT16_MAX, 8623, 4829, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10380, UINT16_MAX, 8624, UINT16_MAX, 8624, 4832, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10382, UINT16_MAX, 8625, UINT16_MAX, 8625, 4835, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10384, UINT16_MAX, 8626, UINT16_MAX, 8626, 4838, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10386, UINT16_MAX, 8627, UINT16_MAX, 8627, 4841, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10388, UINT16_MAX, 8628, UINT16_MAX, 8628, 4844, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10390, 2200, UINT16_MAX, 2200, UINT16_MAX, 4095, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10393, 2203, UINT16_MAX, 2203, UINT16_MAX, 4148, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10396, 2206, UINT16_MAX, 2206, UINT16_MAX, 4847, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10399, 2209, UINT16_MAX, 2209, UINT16_MAX, 4850, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10402, 2212, UINT16_MAX, 2212, UINT16_MAX, 4853, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10405, 2215, UINT16_MAX, 2215, UINT16_MAX, 4856, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10408, 2218, UINT16_MAX, 2218, UINT16_MAX, 4859, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10411, 2221, UINT16_MAX, 2221, UINT16_MAX, 4862, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10414, UINT16_MAX, 8629, UINT16_MAX, 8629, 4201, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10416, UINT16_MAX, 8630, UINT16_MAX, 8630, 4253, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10418, UINT16_MAX, 8631, UINT16_MAX, 8631, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10420, UINT16_MAX, 8632, UINT16_MAX, 8632, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10422, UINT16_MAX, 8633, UINT16_MAX, 8633, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10424, UINT16_MAX, 8634, UINT16_MAX, 8634, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10426, UINT16_MAX, 8635, UINT16_MAX, 8635, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10428, UINT16_MAX, 8636, UINT16_MAX, 8636, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10430, 2240, UINT16_MAX, 2240, UINT16_MAX, 4305, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10433, 2243, UINT16_MAX, 2243, UINT16_MAX, 4357, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10436, 2246, UINT16_MAX, 2246, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10439, 2249, UINT16_MAX, 2249, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10442, 2252, UINT16_MAX, 2252, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10445, 2255, UINT16_MAX, 2255, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10448, 2258, UINT16_MAX, 2258, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10451, 2261, UINT16_MAX, 2261, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10454, UINT16_MAX, 8637, UINT16_MAX, 8637, 4409, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10456, UINT16_MAX, 8638, UINT16_MAX, 8638, 4413, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10458, UINT16_MAX, 8639, UINT16_MAX, 8639, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10460, UINT16_MAX, 8640, UINT16_MAX, 8640, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10462, UINT16_MAX, 8641, UINT16_MAX, 8641, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10464, UINT16_MAX, 8642, UINT16_MAX, 8642, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10466, 2276, UINT16_MAX, 2276, UINT16_MAX, 4417, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10469, 2279, UINT16_MAX, 2279, UINT16_MAX, 4421, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10472, 2282, UINT16_MAX, 2282, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10475, 2285, UINT16_MAX, 2285, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10478, 2288, UINT16_MAX, 2288, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10481, 2291, UINT16_MAX, 2291, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10484, 10484, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4425, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10486, UINT16_MAX, 8643, UINT16_MAX, 8643, 4477, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10488, 18682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10493, UINT16_MAX, 8644, UINT16_MAX, 8644, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10495, 18689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10500, UINT16_MAX, 8645, UINT16_MAX, 8645, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10502, 18696, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10507, UINT16_MAX, 8646, UINT16_MAX, 8646, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10509, 2319, UINT16_MAX, 2319, UINT16_MAX, 4529, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10512, 2322, UINT16_MAX, 2322, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10515, 2325, UINT16_MAX, 2325, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10518, 2328, UINT16_MAX, 2328, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10521, UINT16_MAX, 8647, UINT16_MAX, 8647, 4581, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10523, UINT16_MAX, 8648, UINT16_MAX, 8648, 4634, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10525, UINT16_MAX, 8649, UINT16_MAX, 8649, 4865, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10527, UINT16_MAX, 8650, UINT16_MAX, 8650, 4868, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10529, UINT16_MAX, 8651, UINT16_MAX, 8651, 4871, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10531, UINT16_MAX, 8652, UINT16_MAX, 8652, 4874, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10533, UINT16_MAX, 8653, UINT16_MAX, 8653, 4877, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10535, UINT16_MAX, 8654, UINT16_MAX, 8654, 4880, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10537, 2347, UINT16_MAX, 2347, UINT16_MAX, 4687, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10540, 2350, UINT16_MAX, 2350, UINT16_MAX, 4740, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10543, 2353, UINT16_MAX, 2353, UINT16_MAX, 4883, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10546, 2356, UINT16_MAX, 2356, UINT16_MAX, 4886, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10549, 2359, UINT16_MAX, 2359, UINT16_MAX, 4889, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10552, 2362, UINT16_MAX, 2362, UINT16_MAX, 4892, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10555, 2365, UINT16_MAX, 2365, UINT16_MAX, 4895, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10558, 2368, UINT16_MAX, 2368, UINT16_MAX, 4898, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10561, UINT16_MAX, 8655, UINT16_MAX, 8655, 4901, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 820, UINT16_MAX, 8656, UINT16_MAX, 8656, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10563, UINT16_MAX, 8657, UINT16_MAX, 8657, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 824, UINT16_MAX, 8658, UINT16_MAX, 8658, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10565, UINT16_MAX, 8659, UINT16_MAX, 8659, 4910, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 827, UINT16_MAX, 8660, UINT16_MAX, 8660, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10567, UINT16_MAX, 8661, UINT16_MAX, 8661, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 830, UINT16_MAX, 8662, UINT16_MAX, 8662, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10569, UINT16_MAX, 8663, UINT16_MAX, 8663, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 833, UINT16_MAX, 8664, UINT16_MAX, 8664, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10571, UINT16_MAX, 8665, UINT16_MAX, 8665, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 836, UINT16_MAX, 8666, UINT16_MAX, 8666, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10573, UINT16_MAX, 8667, UINT16_MAX, 8667, 5030, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 839, UINT16_MAX, 8668, UINT16_MAX, 8668, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10575, 10577, 8669, UINT16_MAX, 8669, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10579, 10581, 8670, UINT16_MAX, 8670, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10583, 10585, 8671, UINT16_MAX, 8671, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10587, 10589, 8672, UINT16_MAX, 8672, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10591, 10593, 8673, UINT16_MAX, 8673, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10595, 10597, 8674, UINT16_MAX, 8674, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10599, 10601, 8675, UINT16_MAX, 8675, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10603, 10605, 8676, UINT16_MAX, 8676, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10607, 2417, UINT16_MAX, 2417, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10610, 2420, UINT16_MAX, 2420, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10613, 2423, UINT16_MAX, 2423, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10616, 2426, UINT16_MAX, 2426, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10619, 2429, UINT16_MAX, 2429, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10622, 2432, UINT16_MAX, 2432, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10625, 2435, UINT16_MAX, 2435, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10628, 2438, UINT16_MAX, 2438, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10631, 10633, 8677, UINT16_MAX, 8677, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10635, 10637, 8678, UINT16_MAX, 8678, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10639, 10641, 8679, UINT16_MAX, 8679, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10643, 10645, 8680, UINT16_MAX, 8680, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10647, 10649, 8681, UINT16_MAX, 8681, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10651, 10653, 8682, UINT16_MAX, 8682, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10655, 10657, 8683, UINT16_MAX, 8683, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10659, 10661, 8684, UINT16_MAX, 8684, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10663, 2473, UINT16_MAX, 2473, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10666, 2476, UINT16_MAX, 2476, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10669, 2479, UINT16_MAX, 2479, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10672, 2482, UINT16_MAX, 2482, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10675, 2485, UINT16_MAX, 2485, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10678, 2488, UINT16_MAX, 2488, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10681, 2491, UINT16_MAX, 2491, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10684, 2494, UINT16_MAX, 2494, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10687, 10689, 8685, UINT16_MAX, 8685, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10691, 10693, 8686, UINT16_MAX, 8686, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10695, 10697, 8687, UINT16_MAX, 8687, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10699, 10701, 8688, UINT16_MAX, 8688, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10703, 10705, 8689, UINT16_MAX, 8689, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10707, 10709, 8690, UINT16_MAX, 8690, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10711, 10713, 8691, UINT16_MAX, 8691, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10715, 10717, 8692, UINT16_MAX, 8692, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10719, 2529, UINT16_MAX, 2529, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10722, 2532, UINT16_MAX, 2532, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10725, 2535, UINT16_MAX, 2535, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10728, 2538, UINT16_MAX, 2538, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10731, 2541, UINT16_MAX, 2541, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10734, 2544, UINT16_MAX, 2544, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10737, 2547, UINT16_MAX, 2547, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10740, 2550, UINT16_MAX, 2550, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10743, UINT16_MAX, 8693, UINT16_MAX, 8693, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10745, UINT16_MAX, 8694, UINT16_MAX, 8694, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10747, 10749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10751, 10753, 8695, UINT16_MAX, 8695, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10755, 10757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10759, 10759, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4907, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10761, 18955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10766, 2576, UINT16_MAX, 2576, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10769, 2579, UINT16_MAX, 2579, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10772, 2582, UINT16_MAX, 2582, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2583, 2584, UINT16_MAX, 2584, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10777, 2587, UINT16_MAX, 2587, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 807, 807, 7127, UINT16_MAX, 7127, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4919, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10786, 10788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10790, 10792, 8696, UINT16_MAX, 8696, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10794, 10796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10798, 10798, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4916, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10800, 18994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10805, 2615, UINT16_MAX, 2615, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2616, 2617, UINT16_MAX, 2617, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10810, 2620, UINT16_MAX, 2620, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2621, 2622, UINT16_MAX, 2622, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10815, 2625, UINT16_MAX, 2625, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10824, UINT16_MAX, 8697, UINT16_MAX, 8697, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10826, UINT16_MAX, 8698, UINT16_MAX, 8698, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10828, 19022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 2641, 17226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10834, 10834, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10836, 19030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10841, 2651, UINT16_MAX, 2651, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10844, 2654, UINT16_MAX, 2654, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10847, 2657, UINT16_MAX, 2657, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2658, 2659, UINT16_MAX, 2659, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10858, UINT16_MAX, 8699, UINT16_MAX, 8699, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10860, UINT16_MAX, 8700, UINT16_MAX, 8700, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10862, 19056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 2675, 17267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10868, 10868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10870, UINT16_MAX, 8701, UINT16_MAX, 8701, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10872, 10872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10874, 19068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10879, 2689, UINT16_MAX, 2689, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10882, 2692, UINT16_MAX, 2692, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10885, 2695, UINT16_MAX, 2695, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2696, 2697, UINT16_MAX, 2697, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10890, 2700, UINT16_MAX, 2700, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 10893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 2703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 2704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10897, 10899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10901, 10903, 8702, UINT16_MAX, 8702, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10905, 10907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10909, 10909, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5036, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, 10911, 19105, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10916, 2726, UINT16_MAX, 2726, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2727, 2728, UINT16_MAX, 2728, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 10921, 2731, UINT16_MAX, 2731, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2732, 2733, UINT16_MAX, 2733, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, 10926, 2736, UINT16_MAX, 2736, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, 2737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 4971, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, 2740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, 2741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_COMPAT, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_COMPAT, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_NOBREAK, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_ZWJ},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NOBREAK, 2742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PI, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 2745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZL, 0, UTF8PROC_BIDI_CLASS_WS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_ZP, 0, UTF8PROC_BIDI_CLASS_B, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRE, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLE, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_PDF, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRO, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLO, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 10943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 19137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_CS, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27347, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_FSI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_PDI, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 8, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUPER, 2782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUPER, 2783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 2784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 2785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 2786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 13, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUB, 2782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUB, 2783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 2784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 2785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, 2786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 4, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 23, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 7, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 10, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 11, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 12, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 13, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 15, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 18, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 19, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, 10979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19173, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10997, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 10999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 11002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 11007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2818, 866, UINT16_MAX, 866, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 1456, 10, UINT16_MAX, 10, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, 2819, 65, UINT16_MAX, 65, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2821, UINT16_MAX, 2821, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 2831, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8703, UINT16_MAX, 8703, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 27414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19229, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 11070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1454, 2880, UINT16_MAX, 2880, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11073, 2883, UINT16_MAX, 2883, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19268, 2887, UINT16_MAX, 2887, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11080, 2890, UINT16_MAX, 2890, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2891, 2892, UINT16_MAX, 2892, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11085, 2895, UINT16_MAX, 2895, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19280, 2899, UINT16_MAX, 2899, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 27476, 2904, UINT16_MAX, 2904, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11097, 2907, UINT16_MAX, 2907, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2908, 2909, UINT16_MAX, 2909, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11102, 2912, UINT16_MAX, 2912, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19297, 2916, UINT16_MAX, 2916, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1457, 2917, UINT16_MAX, 2917, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2795, 2918, UINT16_MAX, 2918, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1449, 2919, UINT16_MAX, 2919, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 1458, 2920, UINT16_MAX, 2920, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 8, UINT16_MAX, 8704, UINT16_MAX, 8704, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11113, UINT16_MAX, 8705, UINT16_MAX, 8705, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19307, UINT16_MAX, 8706, UINT16_MAX, 8706, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11118, UINT16_MAX, 8707, UINT16_MAX, 8707, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21, UINT16_MAX, 8708, UINT16_MAX, 8708, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11120, UINT16_MAX, 8709, UINT16_MAX, 8709, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19314, UINT16_MAX, 8710, UINT16_MAX, 8710, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 27509, UINT16_MAX, 8711, UINT16_MAX, 8711, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11129, UINT16_MAX, 8712, UINT16_MAX, 8712, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23, UINT16_MAX, 8713, UINT16_MAX, 8713, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11131, UINT16_MAX, 8714, UINT16_MAX, 8714, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19325, UINT16_MAX, 8715, UINT16_MAX, 8715, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 11, UINT16_MAX, 8716, UINT16_MAX, 8716, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 2, UINT16_MAX, 8717, UINT16_MAX, 8717, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3, UINT16_MAX, 8718, UINT16_MAX, 8718, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12, UINT16_MAX, 8719, UINT16_MAX, 8719, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 2944, UINT16_MAX, 2944, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8720, UINT16_MAX, 8720, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, 19329, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5039, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5042, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5045, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11150, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5048, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5054, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5051, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5057, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5060, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5063, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5066, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5069, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11167, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5072, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5075, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5078, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5081, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5090, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5087, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5099, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5102, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5105, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5108, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5111, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5114, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5117, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5120, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5147, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5150, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5123, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5126, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5129, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5132, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5153, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5156, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5135, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5138, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5141, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5144, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5159, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5162, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5165, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5168, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, 3046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, 3047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 11260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27693, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27705, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11341, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11343, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11347, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 11349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 19573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19648, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 19651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1446, 3270, UINT16_MAX, 3270, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1448, 3271, UINT16_MAX, 3271, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2795, 3272, UINT16_MAX, 3272, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1449, 3273, UINT16_MAX, 3273, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1450, 3274, UINT16_MAX, 3274, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2820, 3275, UINT16_MAX, 3275, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1452, 3276, UINT16_MAX, 3276, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1453, 3277, UINT16_MAX, 3277, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1454, 3278, UINT16_MAX, 3278, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1455, 3279, UINT16_MAX, 3279, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1456, 3280, UINT16_MAX, 3280, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1457, 3281, UINT16_MAX, 3281, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1458, 3282, UINT16_MAX, 3282, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1459, 3283, UINT16_MAX, 3283, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1460, 3284, UINT16_MAX, 3284, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1462, 3285, UINT16_MAX, 3285, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2809, 3286, UINT16_MAX, 3286, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1463, 3287, UINT16_MAX, 3287, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3288, 3289, UINT16_MAX, 3289, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1464, 3290, UINT16_MAX, 3290, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1465, 3291, UINT16_MAX, 3291, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2891, 3292, UINT16_MAX, 3292, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1466, 3293, UINT16_MAX, 3293, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2908, 3294, UINT16_MAX, 3294, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3295, 3296, UINT16_MAX, 3296, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2817, 3297, UINT16_MAX, 3297, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 0, UINT16_MAX, 8721, UINT16_MAX, 8721, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1, UINT16_MAX, 8722, UINT16_MAX, 8722, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2, UINT16_MAX, 8723, UINT16_MAX, 8723, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3, UINT16_MAX, 8724, UINT16_MAX, 8724, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4, UINT16_MAX, 8725, UINT16_MAX, 8725, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 5, UINT16_MAX, 8726, UINT16_MAX, 8726, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 6, UINT16_MAX, 8727, UINT16_MAX, 8727, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 7, UINT16_MAX, 8728, UINT16_MAX, 8728, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 8, UINT16_MAX, 8729, UINT16_MAX, 8729, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 9, UINT16_MAX, 8730, UINT16_MAX, 8730, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 10, UINT16_MAX, 8731, UINT16_MAX, 8731, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 11, UINT16_MAX, 8732, UINT16_MAX, 8732, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12, UINT16_MAX, 8733, UINT16_MAX, 8733, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 13, UINT16_MAX, 8734, UINT16_MAX, 8734, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 14, UINT16_MAX, 8735, UINT16_MAX, 8735, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 15, UINT16_MAX, 8736, UINT16_MAX, 8736, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 16, UINT16_MAX, 8737, UINT16_MAX, 8737, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 17, UINT16_MAX, 8738, UINT16_MAX, 8738, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 18, UINT16_MAX, 8739, UINT16_MAX, 8739, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 19, UINT16_MAX, 8740, UINT16_MAX, 8740, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 20, UINT16_MAX, 8741, UINT16_MAX, 8741, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 21, UINT16_MAX, 8742, UINT16_MAX, 8742, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 22, UINT16_MAX, 8743, UINT16_MAX, 8743, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 23, UINT16_MAX, 8744, UINT16_MAX, 8744, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 24, UINT16_MAX, 8745, UINT16_MAX, 8745, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 25, UINT16_MAX, 8746, UINT16_MAX, 8746, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 2775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_E_BASE},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_E_BASE},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 27874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 19691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, 11502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, true, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5171, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3312, UINT16_MAX, 3312, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3313, UINT16_MAX, 3313, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3314, UINT16_MAX, 3314, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3315, UINT16_MAX, 3315, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3316, UINT16_MAX, 3316, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3317, UINT16_MAX, 3317, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3318, UINT16_MAX, 3318, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3319, UINT16_MAX, 3319, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3320, UINT16_MAX, 3320, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3321, UINT16_MAX, 3321, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3322, UINT16_MAX, 3322, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3323, UINT16_MAX, 3323, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3324, UINT16_MAX, 3324, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3325, UINT16_MAX, 3325, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3326, UINT16_MAX, 3326, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3327, UINT16_MAX, 3327, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3328, UINT16_MAX, 3328, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3329, UINT16_MAX, 3329, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3330, UINT16_MAX, 3330, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3331, UINT16_MAX, 3331, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3332, UINT16_MAX, 3332, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3333, UINT16_MAX, 3333, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3334, UINT16_MAX, 3334, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3335, UINT16_MAX, 3335, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3336, UINT16_MAX, 3336, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3337, UINT16_MAX, 3337, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3338, UINT16_MAX, 3338, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3339, UINT16_MAX, 3339, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3340, UINT16_MAX, 3340, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3341, UINT16_MAX, 3341, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3342, UINT16_MAX, 3342, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3343, UINT16_MAX, 3343, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3344, UINT16_MAX, 3344, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3345, UINT16_MAX, 3345, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3346, UINT16_MAX, 3346, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3347, UINT16_MAX, 3347, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3348, UINT16_MAX, 3348, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3349, UINT16_MAX, 3349, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3350, UINT16_MAX, 3350, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3351, UINT16_MAX, 3351, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3352, UINT16_MAX, 3352, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3353, UINT16_MAX, 3353, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3354, UINT16_MAX, 3354, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3355, UINT16_MAX, 3355, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3356, UINT16_MAX, 3356, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3357, UINT16_MAX, 3357, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3358, UINT16_MAX, 3358, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8747, UINT16_MAX, 8747, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8748, UINT16_MAX, 8748, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8749, UINT16_MAX, 8749, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8750, UINT16_MAX, 8750, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8751, UINT16_MAX, 8751, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8752, UINT16_MAX, 8752, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8753, UINT16_MAX, 8753, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8754, UINT16_MAX, 8754, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8755, UINT16_MAX, 8755, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8756, UINT16_MAX, 8756, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8757, UINT16_MAX, 8757, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8758, UINT16_MAX, 8758, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8759, UINT16_MAX, 8759, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8760, UINT16_MAX, 8760, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8761, UINT16_MAX, 8761, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8762, UINT16_MAX, 8762, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8763, UINT16_MAX, 8763, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8764, UINT16_MAX, 8764, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8765, UINT16_MAX, 8765, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8766, UINT16_MAX, 8766, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8767, UINT16_MAX, 8767, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8768, UINT16_MAX, 8768, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8769, UINT16_MAX, 8769, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8770, UINT16_MAX, 8770, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8771, UINT16_MAX, 8771, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8772, UINT16_MAX, 8772, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8773, UINT16_MAX, 8773, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8774, UINT16_MAX, 8774, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8775, UINT16_MAX, 8775, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8776, UINT16_MAX, 8776, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8777, UINT16_MAX, 8777, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8778, UINT16_MAX, 8778, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8779, UINT16_MAX, 8779, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8780, UINT16_MAX, 8780, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8781, UINT16_MAX, 8781, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8782, UINT16_MAX, 8782, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8783, UINT16_MAX, 8783, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8784, UINT16_MAX, 8784, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8785, UINT16_MAX, 8785, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8786, UINT16_MAX, 8786, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8787, UINT16_MAX, 8787, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8788, UINT16_MAX, 8788, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8789, UINT16_MAX, 8789, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8790, UINT16_MAX, 8790, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8791, UINT16_MAX, 8791, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8792, UINT16_MAX, 8792, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8793, UINT16_MAX, 8793, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3359, UINT16_MAX, 3359, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8794, UINT16_MAX, 8794, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3360, UINT16_MAX, 3360, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3361, UINT16_MAX, 3361, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3362, UINT16_MAX, 3362, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8795, UINT16_MAX, 8795, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8796, UINT16_MAX, 8796, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3363, UINT16_MAX, 3363, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8797, UINT16_MAX, 8797, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3364, UINT16_MAX, 3364, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8798, UINT16_MAX, 8798, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3365, UINT16_MAX, 3365, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8799, UINT16_MAX, 8799, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1468, UINT16_MAX, 1468, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1486, UINT16_MAX, 1486, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1467, UINT16_MAX, 1467, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1475, UINT16_MAX, 1475, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3366, UINT16_MAX, 3366, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8800, UINT16_MAX, 8800, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3367, UINT16_MAX, 3367, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8801, UINT16_MAX, 8801, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, 9, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 2891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3368, UINT16_MAX, 3368, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3369, UINT16_MAX, 3369, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3370, UINT16_MAX, 3370, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8802, UINT16_MAX, 8802, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3371, UINT16_MAX, 3371, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8803, UINT16_MAX, 8803, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3372, UINT16_MAX, 3372, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8804, UINT16_MAX, 8804, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3373, UINT16_MAX, 3373, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8805, UINT16_MAX, 8805, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3374, UINT16_MAX, 3374, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8806, UINT16_MAX, 8806, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3375, UINT16_MAX, 3375, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8807, UINT16_MAX, 8807, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3376, UINT16_MAX, 3376, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8808, UINT16_MAX, 8808, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3377, UINT16_MAX, 3377, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8809, UINT16_MAX, 8809, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3378, UINT16_MAX, 3378, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8810, UINT16_MAX, 8810, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3379, UINT16_MAX, 3379, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8811, UINT16_MAX, 8811, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3380, UINT16_MAX, 3380, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8812, UINT16_MAX, 8812, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3381, UINT16_MAX, 3381, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8813, UINT16_MAX, 8813, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3382, UINT16_MAX, 3382, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8814, UINT16_MAX, 8814, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3383, UINT16_MAX, 3383, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8815, UINT16_MAX, 8815, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3384, UINT16_MAX, 3384, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8816, UINT16_MAX, 8816, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3385, UINT16_MAX, 3385, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8817, UINT16_MAX, 8817, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3386, UINT16_MAX, 3386, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8818, UINT16_MAX, 8818, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3387, UINT16_MAX, 3387, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8819, UINT16_MAX, 8819, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3388, UINT16_MAX, 3388, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8820, UINT16_MAX, 8820, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3389, UINT16_MAX, 3389, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8821, UINT16_MAX, 8821, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3390, UINT16_MAX, 3390, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8822, UINT16_MAX, 8822, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3391, UINT16_MAX, 3391, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8823, UINT16_MAX, 8823, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3392, UINT16_MAX, 3392, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8824, UINT16_MAX, 8824, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3393, UINT16_MAX, 3393, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8825, UINT16_MAX, 8825, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3394, UINT16_MAX, 3394, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8826, UINT16_MAX, 8826, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3395, UINT16_MAX, 3395, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8827, UINT16_MAX, 8827, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3396, UINT16_MAX, 3396, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8828, UINT16_MAX, 8828, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3397, UINT16_MAX, 3397, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8829, UINT16_MAX, 8829, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3398, UINT16_MAX, 3398, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8830, UINT16_MAX, 8830, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3399, UINT16_MAX, 3399, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8831, UINT16_MAX, 8831, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3400, UINT16_MAX, 3400, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8832, UINT16_MAX, 8832, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3401, UINT16_MAX, 3401, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8833, UINT16_MAX, 8833, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3402, UINT16_MAX, 3402, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8834, UINT16_MAX, 8834, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3403, UINT16_MAX, 3403, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8835, UINT16_MAX, 8835, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3404, UINT16_MAX, 3404, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8836, UINT16_MAX, 8836, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3405, UINT16_MAX, 3405, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8837, UINT16_MAX, 8837, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3406, UINT16_MAX, 3406, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8838, UINT16_MAX, 8838, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3407, UINT16_MAX, 3407, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8839, UINT16_MAX, 8839, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3408, UINT16_MAX, 3408, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8840, UINT16_MAX, 8840, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3409, UINT16_MAX, 3409, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8841, UINT16_MAX, 8841, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3410, UINT16_MAX, 3410, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8842, UINT16_MAX, 8842, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3411, UINT16_MAX, 3411, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8843, UINT16_MAX, 8843, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3412, UINT16_MAX, 3412, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8844, UINT16_MAX, 8844, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3413, UINT16_MAX, 3413, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8845, UINT16_MAX, 8845, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3414, UINT16_MAX, 3414, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8846, UINT16_MAX, 8846, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3415, UINT16_MAX, 3415, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8847, UINT16_MAX, 8847, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3416, UINT16_MAX, 3416, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8848, UINT16_MAX, 8848, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3417, UINT16_MAX, 3417, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8849, UINT16_MAX, 8849, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3418, UINT16_MAX, 3418, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8850, UINT16_MAX, 8850, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3419, UINT16_MAX, 3419, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8851, UINT16_MAX, 8851, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3420, UINT16_MAX, 3420, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8852, UINT16_MAX, 8852, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3421, UINT16_MAX, 3421, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8853, UINT16_MAX, 8853, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 3422, UINT16_MAX, 3422, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8854, UINT16_MAX, 8854, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8855, UINT16_MAX, 8855, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8856, UINT16_MAX, 8856, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8857, UINT16_MAX, 8857, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8858, UINT16_MAX, 8858, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8859, UINT16_MAX, 8859, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8860, UINT16_MAX, 8860, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8861, UINT16_MAX, 8861, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8862, UINT16_MAX, 8862, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8863, UINT16_MAX, 8863, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8864, UINT16_MAX, 8864, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8865, UINT16_MAX, 8865, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8866, UINT16_MAX, 8866, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8867, UINT16_MAX, 8867, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8868, UINT16_MAX, 8868, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8869, UINT16_MAX, 8869, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8870, UINT16_MAX, 8870, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8871, UINT16_MAX, 8871, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8872, UINT16_MAX, 8872, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8873, UINT16_MAX, 8873, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8874, UINT16_MAX, 8874, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8875, UINT16_MAX, 8875, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8876, UINT16_MAX, 8876, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8877, UINT16_MAX, 8877, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8878, UINT16_MAX, 8878, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8879, UINT16_MAX, 8879, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8880, UINT16_MAX, 8880, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8881, UINT16_MAX, 8881, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8882, UINT16_MAX, 8882, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8883, UINT16_MAX, 8883, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8884, UINT16_MAX, 8884, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8885, UINT16_MAX, 8885, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8886, UINT16_MAX, 8886, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8887, UINT16_MAX, 8887, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8888, UINT16_MAX, 8888, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8889, UINT16_MAX, 8889, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8890, UINT16_MAX, 8890, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8891, UINT16_MAX, 8891, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8892, UINT16_MAX, 8892, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8893, UINT16_MAX, 8893, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8894, UINT16_MAX, 8894, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_WIDE, 26, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 218, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 224, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 3640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5239, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5174, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5177, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5180, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5183, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5186, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5189, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5192, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5195, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5198, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5201, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5204, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5207, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5210, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5213, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5216, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5219, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5223, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5227, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5231, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5235, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 8, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32820, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 8, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 32821, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 11889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5242, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, 11891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_VERTICAL, 11893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5310, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5245, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5248, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5251, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5254, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5257, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5260, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5263, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5266, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5269, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5272, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5275, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5278, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5281, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5284, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5287, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5290, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5294, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5298, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5302, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5306, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5313, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5316, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5319, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5322, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 11953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5325, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, 11955, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_VERTICAL, 11957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3788, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3797, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3800, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3808, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3812, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3828, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3831, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3834, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3839, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3841, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 3860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 28545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 53125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 44940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20382, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20385, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4095, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 20481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12312, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12316, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12318, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12320, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3792, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3794, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12322, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12326, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12328, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12330, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12332, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12334, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12338, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12340, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12344, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12346, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 12348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 36926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 28739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4169, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4172, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4173, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4176, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4177, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4178, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4180, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4181, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4184, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4186, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4188, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4189, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 3865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4195, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4197, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4199, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12393, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, 12421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 20639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 12450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 20644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 12455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 20649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4297, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4312, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 4314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20711, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 45352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 28992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20810, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29005, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37201, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20843, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20906, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20940, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37338, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29153, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29157, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20984, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37377, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 20998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 12827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21021, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21027, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21057, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21063, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21073, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 12888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21085, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 12896, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12898, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12922, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12933, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12935, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12943, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12965, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12967, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12985, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21182, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21185, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 12996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21193, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21205, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21211, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 37598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 45795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13033, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13035, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13037, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13039, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13041, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13043, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13045, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13049, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13051, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13053, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13055, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13057, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13059, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13061, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13063, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13065, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13067, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13073, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13075, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13077, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13109, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13111, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13119, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 29505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 21317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 13134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21328, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13150, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21382, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21385, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 21415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, 21418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5037, UINT16_MAX, 5037, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8895, UINT16_MAX, 8895, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5038, UINT16_MAX, 5038, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8896, UINT16_MAX, 8896, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5039, UINT16_MAX, 5039, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8897, UINT16_MAX, 8897, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5040, UINT16_MAX, 5040, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8898, UINT16_MAX, 8898, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5041, UINT16_MAX, 5041, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8899, UINT16_MAX, 8899, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1445, UINT16_MAX, 1445, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8481, UINT16_MAX, 8481, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5042, UINT16_MAX, 5042, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8900, UINT16_MAX, 8900, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5043, UINT16_MAX, 5043, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8901, UINT16_MAX, 8901, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5044, UINT16_MAX, 5044, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8902, UINT16_MAX, 8902, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5045, UINT16_MAX, 5045, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8903, UINT16_MAX, 8903, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5046, UINT16_MAX, 5046, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8904, UINT16_MAX, 8904, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5047, UINT16_MAX, 5047, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8905, UINT16_MAX, 8905, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5048, UINT16_MAX, 5048, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8906, UINT16_MAX, 8906, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5049, UINT16_MAX, 5049, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8907, UINT16_MAX, 8907, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5050, UINT16_MAX, 5050, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8908, UINT16_MAX, 8908, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5051, UINT16_MAX, 5051, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8909, UINT16_MAX, 8909, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5052, UINT16_MAX, 5052, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8910, UINT16_MAX, 8910, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5053, UINT16_MAX, 5053, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8911, UINT16_MAX, 8911, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5054, UINT16_MAX, 5054, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8912, UINT16_MAX, 8912, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5055, UINT16_MAX, 5055, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8913, UINT16_MAX, 8913, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5056, UINT16_MAX, 5056, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8914, UINT16_MAX, 8914, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5057, UINT16_MAX, 5057, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8915, UINT16_MAX, 8915, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5058, UINT16_MAX, 5058, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8916, UINT16_MAX, 8916, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5059, UINT16_MAX, 5059, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8917, UINT16_MAX, 8917, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5060, UINT16_MAX, 5060, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8918, UINT16_MAX, 8918, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5061, UINT16_MAX, 5061, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8919, UINT16_MAX, 8919, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5062, UINT16_MAX, 5062, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8920, UINT16_MAX, 8920, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5063, UINT16_MAX, 5063, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8921, UINT16_MAX, 8921, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5064, UINT16_MAX, 5064, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8922, UINT16_MAX, 8922, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5065, UINT16_MAX, 5065, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8923, UINT16_MAX, 8923, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5066, UINT16_MAX, 5066, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8924, UINT16_MAX, 8924, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5067, UINT16_MAX, 5067, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8925, UINT16_MAX, 8925, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5068, UINT16_MAX, 5068, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8926, UINT16_MAX, 8926, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5069, UINT16_MAX, 5069, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8927, UINT16_MAX, 8927, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5070, UINT16_MAX, 5070, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8928, UINT16_MAX, 8928, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5071, UINT16_MAX, 5071, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8929, UINT16_MAX, 8929, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5072, UINT16_MAX, 5072, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8930, UINT16_MAX, 8930, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5073, UINT16_MAX, 5073, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8931, UINT16_MAX, 8931, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5074, UINT16_MAX, 5074, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8932, UINT16_MAX, 8932, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5075, UINT16_MAX, 5075, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8933, UINT16_MAX, 8933, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5076, UINT16_MAX, 5076, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8934, UINT16_MAX, 8934, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5077, UINT16_MAX, 5077, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8935, UINT16_MAX, 8935, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5078, UINT16_MAX, 5078, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8936, UINT16_MAX, 8936, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5079, UINT16_MAX, 5079, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8937, UINT16_MAX, 8937, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5080, UINT16_MAX, 5080, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8938, UINT16_MAX, 8938, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5081, UINT16_MAX, 5081, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8939, UINT16_MAX, 8939, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5082, UINT16_MAX, 5082, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8940, UINT16_MAX, 8940, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5083, UINT16_MAX, 5083, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8941, UINT16_MAX, 8941, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5084, UINT16_MAX, 5084, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8942, UINT16_MAX, 8942, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5085, UINT16_MAX, 5085, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8943, UINT16_MAX, 8943, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5086, UINT16_MAX, 5086, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8944, UINT16_MAX, 8944, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5087, UINT16_MAX, 5087, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8945, UINT16_MAX, 8945, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5088, UINT16_MAX, 5088, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8946, UINT16_MAX, 8946, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5089, UINT16_MAX, 5089, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8947, UINT16_MAX, 8947, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5090, UINT16_MAX, 5090, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8948, UINT16_MAX, 8948, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5091, UINT16_MAX, 5091, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8949, UINT16_MAX, 8949, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5092, UINT16_MAX, 5092, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8950, UINT16_MAX, 8950, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5093, UINT16_MAX, 5093, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8951, UINT16_MAX, 8951, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5094, UINT16_MAX, 5094, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8952, UINT16_MAX, 8952, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5095, UINT16_MAX, 5095, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8953, UINT16_MAX, 8953, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5096, UINT16_MAX, 5096, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8954, UINT16_MAX, 8954, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5097, UINT16_MAX, 5097, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8955, UINT16_MAX, 8955, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5098, UINT16_MAX, 5098, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8956, UINT16_MAX, 8956, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5099, UINT16_MAX, 5099, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8957, UINT16_MAX, 8957, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5100, UINT16_MAX, 5100, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8958, UINT16_MAX, 8958, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5101, UINT16_MAX, 5101, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8959, UINT16_MAX, 8959, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5102, UINT16_MAX, 5102, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8960, UINT16_MAX, 8960, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5103, UINT16_MAX, 5103, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8961, UINT16_MAX, 8961, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5104, UINT16_MAX, 5104, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8962, UINT16_MAX, 8962, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5105, UINT16_MAX, 5105, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8963, UINT16_MAX, 8963, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5106, UINT16_MAX, 5106, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8964, UINT16_MAX, 8964, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5107, UINT16_MAX, 5107, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8965, UINT16_MAX, 8965, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5108, UINT16_MAX, 5108, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8966, UINT16_MAX, 8966, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5109, UINT16_MAX, 5109, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8967, UINT16_MAX, 8967, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5110, UINT16_MAX, 5110, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8968, UINT16_MAX, 8968, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5111, UINT16_MAX, 5111, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8969, UINT16_MAX, 8969, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5112, UINT16_MAX, 5112, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8970, UINT16_MAX, 8970, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5113, UINT16_MAX, 5113, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5114, UINT16_MAX, 5114, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8971, UINT16_MAX, 8971, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5115, UINT16_MAX, 5115, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8972, UINT16_MAX, 8972, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5116, UINT16_MAX, 5116, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8973, UINT16_MAX, 8973, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5117, UINT16_MAX, 5117, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8974, UINT16_MAX, 8974, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5118, UINT16_MAX, 5118, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8975, UINT16_MAX, 8975, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5119, UINT16_MAX, 5119, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8976, UINT16_MAX, 8976, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1479, UINT16_MAX, 1479, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5120, UINT16_MAX, 5120, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8977, UINT16_MAX, 8977, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5121, UINT16_MAX, 5121, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8978, UINT16_MAX, 8978, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5122, UINT16_MAX, 5122, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8979, UINT16_MAX, 8979, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5123, UINT16_MAX, 5123, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8980, UINT16_MAX, 8980, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5124, UINT16_MAX, 5124, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8981, UINT16_MAX, 8981, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5125, UINT16_MAX, 5125, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8982, UINT16_MAX, 8982, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5126, UINT16_MAX, 5126, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8983, UINT16_MAX, 8983, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5127, UINT16_MAX, 5127, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8984, UINT16_MAX, 8984, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5128, UINT16_MAX, 5128, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8985, UINT16_MAX, 8985, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5129, UINT16_MAX, 5129, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8986, UINT16_MAX, 8986, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5130, UINT16_MAX, 5130, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8987, UINT16_MAX, 8987, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5131, UINT16_MAX, 5131, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8988, UINT16_MAX, 8988, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 785, UINT16_MAX, 785, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1470, UINT16_MAX, 1470, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1478, UINT16_MAX, 1478, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5132, UINT16_MAX, 5132, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1480, UINT16_MAX, 1480, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5133, UINT16_MAX, 5133, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5134, UINT16_MAX, 5134, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 1482, UINT16_MAX, 1482, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5135, UINT16_MAX, 5135, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5136, UINT16_MAX, 5136, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8989, UINT16_MAX, 8989, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5137, UINT16_MAX, 5137, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8990, UINT16_MAX, 8990, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ET, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 8991, UINT16_MAX, 8991, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5075, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 3360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, 5140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5141, 5141, UINT16_MAX, 5141, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5142, 5142, UINT16_MAX, 5142, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5143, 5143, UINT16_MAX, 5143, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5144, 5144, UINT16_MAX, 5144, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5145, 5145, UINT16_MAX, 5145, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5146, 5146, UINT16_MAX, 5146, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5147, 5147, UINT16_MAX, 5147, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5148, 5148, UINT16_MAX, 5148, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5149, 5149, UINT16_MAX, 5149, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5150, 5150, UINT16_MAX, 5150, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5151, 5151, UINT16_MAX, 5151, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5152, 5152, UINT16_MAX, 5152, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5153, 5153, UINT16_MAX, 5153, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5154, 5154, UINT16_MAX, 5154, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5155, 5155, UINT16_MAX, 5155, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5156, 5156, UINT16_MAX, 5156, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5157, 5157, UINT16_MAX, 5157, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5158, 5158, UINT16_MAX, 5158, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5159, 5159, UINT16_MAX, 5159, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5160, 5160, UINT16_MAX, 5160, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5161, 5161, UINT16_MAX, 5161, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5162, 5162, UINT16_MAX, 5162, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5163, 5163, UINT16_MAX, 5163, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5164, 5164, UINT16_MAX, 5164, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5165, 5165, UINT16_MAX, 5165, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5166, 5166, UINT16_MAX, 5166, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5167, 5167, UINT16_MAX, 5167, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5168, 5168, UINT16_MAX, 5168, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5169, 5169, UINT16_MAX, 5169, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5170, 5170, UINT16_MAX, 5170, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5171, 5171, UINT16_MAX, 5171, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5172, 5172, UINT16_MAX, 5172, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5173, 5173, UINT16_MAX, 5173, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5174, 5174, UINT16_MAX, 5174, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5175, 5175, UINT16_MAX, 5175, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5176, 5176, UINT16_MAX, 5176, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5177, 5177, UINT16_MAX, 5177, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5178, 5178, UINT16_MAX, 5178, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5179, 5179, UINT16_MAX, 5179, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5180, 5180, UINT16_MAX, 5180, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5181, 5181, UINT16_MAX, 5181, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5182, 5182, UINT16_MAX, 5182, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5183, 5183, UINT16_MAX, 5183, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5184, 5184, UINT16_MAX, 5184, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5185, 5185, UINT16_MAX, 5185, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5186, 5186, UINT16_MAX, 5186, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5187, 5187, UINT16_MAX, 5187, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5188, 5188, UINT16_MAX, 5188, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5189, 5189, UINT16_MAX, 5189, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5190, 5190, UINT16_MAX, 5190, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5191, 5191, UINT16_MAX, 5191, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5192, 5192, UINT16_MAX, 5192, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5193, 5193, UINT16_MAX, 5193, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5194, 5194, UINT16_MAX, 5194, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5195, 5195, UINT16_MAX, 5195, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5196, 5196, UINT16_MAX, 5196, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5197, 5197, UINT16_MAX, 5197, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5198, 5198, UINT16_MAX, 5198, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5199, 5199, UINT16_MAX, 5199, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5200, 5200, UINT16_MAX, 5200, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5201, 5201, UINT16_MAX, 5201, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5202, 5202, UINT16_MAX, 5202, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5203, 5203, UINT16_MAX, 5203, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5204, 5204, UINT16_MAX, 5204, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5205, 5205, UINT16_MAX, 5205, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5206, 5206, UINT16_MAX, 5206, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5207, 5207, UINT16_MAX, 5207, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5208, 5208, UINT16_MAX, 5208, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5209, 5209, UINT16_MAX, 5209, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5210, 5210, UINT16_MAX, 5210, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5211, 5211, UINT16_MAX, 5211, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5212, 5212, UINT16_MAX, 5212, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5213, 5213, UINT16_MAX, 5213, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5214, 5214, UINT16_MAX, 5214, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5215, 5215, UINT16_MAX, 5215, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5216, 5216, UINT16_MAX, 5216, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5217, 5217, UINT16_MAX, 5217, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5218, 5218, UINT16_MAX, 5218, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5219, 5219, UINT16_MAX, 5219, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 5220, 5220, UINT16_MAX, 5220, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_LV},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_LVT},
+  {UTF8PROC_CATEGORY_CS, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_CO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5221, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5223, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5225, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5227, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5229, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5231, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5233, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5235, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5237, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5239, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5241, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5243, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5245, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5247, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5249, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5251, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5253, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5254, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5255, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5256, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5257, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5258, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5260, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5261, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5262, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5264, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5266, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5297, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5312, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5315, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5316, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5318, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5319, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5320, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5321, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5322, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5323, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5324, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5325, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5326, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5327, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5328, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5329, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5330, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5331, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5332, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5333, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5334, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5335, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5336, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5337, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5338, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5339, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5340, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5341, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5342, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5343, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5344, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5345, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5346, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5347, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5350, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5353, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5365, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5374, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5377, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5378, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5380, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5381, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5382, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5383, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5384, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5385, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5386, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5387, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5388, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5389, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5390, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5391, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5392, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5393, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5394, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5395, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5396, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5397, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5398, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5400, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5401, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5402, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5403, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5404, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5405, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5408, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5410, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5421, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5436, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5451, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 4179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5542, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5579, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5615, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 5633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13826, 13826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13828, 13828, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13830, 13830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22024, 22024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 22027, 22027, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13838, 13840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13840, 13840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13842, 13842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13844, 13844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13846, 13846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13848, 13848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 13850, 13850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 26, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 2822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 2825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5666, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, 5670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_FONT, 2782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13883, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13885, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13903, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13913, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, 13925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_COMPAT, 13927, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5740, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5744, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5746, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5756, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5765, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_AL, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13969, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13977, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13979, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13981, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13983, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 5793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 5793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 13998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14018, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14036, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14058, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14064, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14072, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14078, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14084, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14150, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14152, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14166, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14168, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22379, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14190, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14194, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 13992, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14196, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14198, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14200, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14002, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14004, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14202, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14204, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14206, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14014, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14016, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14208, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14210, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14212, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14022, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14024, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14082, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14084, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14090, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14092, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14094, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14106, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14108, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14118, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14214, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14216, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14220, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14170, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14222, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14224, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14226, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14162, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14164, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13986, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13988, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14228, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13994, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13996, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 13998, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14006, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14008, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14010, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14026, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14028, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14030, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14032, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14034, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14038, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14048, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14236, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14052, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14054, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14056, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14058, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14060, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14064, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14066, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14068, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14070, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14072, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14074, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14076, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14078, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14080, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14086, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14088, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14096, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14098, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14100, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14110, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14112, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14114, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14238, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14242, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14154, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14156, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14158, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 13990, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14230, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14000, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14232, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14012, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14234, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14020, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14246, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14102, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14104, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14116, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14240, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14160, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14244, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 22446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 22449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 22452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14297, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14315, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14265, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14297, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14313, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14315, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14250, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14248, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14252, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 14062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14040, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14042, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14044, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14062, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14064, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14317, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22520, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22586, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22598, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22688, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22721, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22727, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22733, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22748, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22754, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 22562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 22790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30991, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30995, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 30999, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 31003, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 31007, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 31011, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 31015, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 22827, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 63790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 63809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 31050, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6486, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 2785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 2786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6495, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 3046, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 3047, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, 6504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 6505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, 6490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 6478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 2745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, 6481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 2785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 2786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6493, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 6506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 2782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, 6509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 2784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 6513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, 6514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, 6515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14714, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14716, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 14734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6544, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6549, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 5776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 5776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 6578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 6578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, 6578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, 6578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, 14777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, 14777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6506, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 2785, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 2786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 2782, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 6478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, 6509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 2745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 6589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, 6481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 814, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 2784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6511, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1446, 6590, UINT16_MAX, 6590, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1448, 6591, UINT16_MAX, 6591, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2795, 6592, UINT16_MAX, 6592, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1449, 6593, UINT16_MAX, 6593, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1450, 6594, UINT16_MAX, 6594, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2820, 6595, UINT16_MAX, 6595, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1452, 6596, UINT16_MAX, 6596, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1453, 6597, UINT16_MAX, 6597, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1454, 6598, UINT16_MAX, 6598, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1455, 6599, UINT16_MAX, 6599, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1456, 6600, UINT16_MAX, 6600, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1457, 6601, UINT16_MAX, 6601, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1458, 6602, UINT16_MAX, 6602, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1459, 6603, UINT16_MAX, 6603, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1460, 6604, UINT16_MAX, 6604, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1462, 6605, UINT16_MAX, 6605, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2809, 6606, UINT16_MAX, 6606, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1463, 6607, UINT16_MAX, 6607, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3288, 6608, UINT16_MAX, 6608, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1464, 6609, UINT16_MAX, 6609, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1465, 6610, UINT16_MAX, 6610, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2891, 6611, UINT16_MAX, 6611, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1466, 6612, UINT16_MAX, 6612, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2908, 6613, UINT16_MAX, 6613, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3295, 6614, UINT16_MAX, 6614, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2817, 6615, UINT16_MAX, 6615, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 2704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 0, UINT16_MAX, 8992, UINT16_MAX, 8992, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 1, UINT16_MAX, 8993, UINT16_MAX, 8993, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 2, UINT16_MAX, 8994, UINT16_MAX, 8994, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 3, UINT16_MAX, 8995, UINT16_MAX, 8995, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 4, UINT16_MAX, 8996, UINT16_MAX, 8996, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 5, UINT16_MAX, 8997, UINT16_MAX, 8997, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 6, UINT16_MAX, 8998, UINT16_MAX, 8998, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 7, UINT16_MAX, 8999, UINT16_MAX, 8999, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 8, UINT16_MAX, 9000, UINT16_MAX, 9000, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 9, UINT16_MAX, 9001, UINT16_MAX, 9001, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 10, UINT16_MAX, 9002, UINT16_MAX, 9002, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 11, UINT16_MAX, 9003, UINT16_MAX, 9003, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 12, UINT16_MAX, 9004, UINT16_MAX, 9004, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 13, UINT16_MAX, 9005, UINT16_MAX, 9005, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 14, UINT16_MAX, 9006, UINT16_MAX, 9006, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 15, UINT16_MAX, 9007, UINT16_MAX, 9007, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 16, UINT16_MAX, 9008, UINT16_MAX, 9008, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 17, UINT16_MAX, 9009, UINT16_MAX, 9009, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 18, UINT16_MAX, 9010, UINT16_MAX, 9010, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 19, UINT16_MAX, 9011, UINT16_MAX, 9011, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 20, UINT16_MAX, 9012, UINT16_MAX, 9012, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 21, UINT16_MAX, 9013, UINT16_MAX, 9013, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 22, UINT16_MAX, 9014, UINT16_MAX, 9014, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 23, UINT16_MAX, 9015, UINT16_MAX, 9015, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 24, UINT16_MAX, 9016, UINT16_MAX, 9016, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, 25, UINT16_MAX, 9017, UINT16_MAX, 9017, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6621, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4314, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6630, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4268, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4269, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4270, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4272, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4273, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4274, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4276, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4277, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4280, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4281, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4282, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4284, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4285, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4286, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4289, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4290, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4292, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4293, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4294, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4296, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4297, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4298, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4300, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4301, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4302, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4304, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4305, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4306, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4308, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4309, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4310, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 4311, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, true, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6642, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6646, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6648, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6649, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6654, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6657, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6659, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6660, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6663, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6666, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6670, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6672, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6682, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6683, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6684, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6685, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, 6686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6687, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6688, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, 6691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6692, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, 6693, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6696, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6698, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6699, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, 6700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_CONTROL},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6701, UINT16_MAX, 6701, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6703, UINT16_MAX, 6703, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6705, UINT16_MAX, 6705, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6707, UINT16_MAX, 6707, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6709, UINT16_MAX, 6709, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6711, UINT16_MAX, 6711, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6713, UINT16_MAX, 6713, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6715, UINT16_MAX, 6715, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6717, UINT16_MAX, 6717, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6719, UINT16_MAX, 6719, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6721, UINT16_MAX, 6721, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6723, UINT16_MAX, 6723, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6725, UINT16_MAX, 6725, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6727, UINT16_MAX, 6727, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6729, UINT16_MAX, 6729, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6731, UINT16_MAX, 6731, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6733, UINT16_MAX, 6733, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6735, UINT16_MAX, 6735, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6737, UINT16_MAX, 6737, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6739, UINT16_MAX, 6739, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6741, UINT16_MAX, 6741, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6743, UINT16_MAX, 6743, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6745, UINT16_MAX, 6745, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6747, UINT16_MAX, 6747, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6749, UINT16_MAX, 6749, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6751, UINT16_MAX, 6751, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6753, UINT16_MAX, 6753, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6755, UINT16_MAX, 6755, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6757, UINT16_MAX, 6757, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6759, UINT16_MAX, 6759, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6761, UINT16_MAX, 6761, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6763, UINT16_MAX, 6763, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6765, UINT16_MAX, 6765, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6767, UINT16_MAX, 6767, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6769, UINT16_MAX, 6769, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6771, UINT16_MAX, 6771, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6773, UINT16_MAX, 6773, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6775, UINT16_MAX, 6775, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6777, UINT16_MAX, 6777, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6779, UINT16_MAX, 6779, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9018, UINT16_MAX, 9018, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9020, UINT16_MAX, 9020, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9022, UINT16_MAX, 9022, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9024, UINT16_MAX, 9024, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9026, UINT16_MAX, 9026, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9028, UINT16_MAX, 9028, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9030, UINT16_MAX, 9030, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9032, UINT16_MAX, 9032, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9034, UINT16_MAX, 9034, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9036, UINT16_MAX, 9036, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9038, UINT16_MAX, 9038, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9040, UINT16_MAX, 9040, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9042, UINT16_MAX, 9042, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9044, UINT16_MAX, 9044, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9046, UINT16_MAX, 9046, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9048, UINT16_MAX, 9048, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9050, UINT16_MAX, 9050, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9052, UINT16_MAX, 9052, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9054, UINT16_MAX, 9054, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9056, UINT16_MAX, 9056, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9058, UINT16_MAX, 9058, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9060, UINT16_MAX, 9060, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9062, UINT16_MAX, 9062, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9064, UINT16_MAX, 9064, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9066, UINT16_MAX, 9066, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9068, UINT16_MAX, 9068, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9070, UINT16_MAX, 9070, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9072, UINT16_MAX, 9072, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9074, UINT16_MAX, 9074, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9076, UINT16_MAX, 9076, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9078, UINT16_MAX, 9078, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9080, UINT16_MAX, 9080, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9082, UINT16_MAX, 9082, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9084, UINT16_MAX, 9084, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9086, UINT16_MAX, 9086, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9088, UINT16_MAX, 9088, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9090, UINT16_MAX, 9090, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9092, UINT16_MAX, 9092, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9094, UINT16_MAX, 9094, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9096, UINT16_MAX, 9096, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6781, UINT16_MAX, 6781, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6783, UINT16_MAX, 6783, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6785, UINT16_MAX, 6785, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6787, UINT16_MAX, 6787, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6789, UINT16_MAX, 6789, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6791, UINT16_MAX, 6791, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6793, UINT16_MAX, 6793, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6795, UINT16_MAX, 6795, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6797, UINT16_MAX, 6797, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6799, UINT16_MAX, 6799, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6801, UINT16_MAX, 6801, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6803, UINT16_MAX, 6803, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6805, UINT16_MAX, 6805, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6807, UINT16_MAX, 6807, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6809, UINT16_MAX, 6809, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6811, UINT16_MAX, 6811, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6813, UINT16_MAX, 6813, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6815, UINT16_MAX, 6815, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6817, UINT16_MAX, 6817, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6819, UINT16_MAX, 6819, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6821, UINT16_MAX, 6821, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6823, UINT16_MAX, 6823, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6825, UINT16_MAX, 6825, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6827, UINT16_MAX, 6827, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6829, UINT16_MAX, 6829, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6831, UINT16_MAX, 6831, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6833, UINT16_MAX, 6833, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6835, UINT16_MAX, 6835, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6837, UINT16_MAX, 6837, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6839, UINT16_MAX, 6839, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6841, UINT16_MAX, 6841, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6843, UINT16_MAX, 6843, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6845, UINT16_MAX, 6845, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6847, UINT16_MAX, 6847, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6849, UINT16_MAX, 6849, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 6851, UINT16_MAX, 6851, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9098, UINT16_MAX, 9098, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9100, UINT16_MAX, 9100, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9102, UINT16_MAX, 9102, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9104, UINT16_MAX, 9104, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9106, UINT16_MAX, 9106, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9108, UINT16_MAX, 9108, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9110, UINT16_MAX, 9110, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9112, UINT16_MAX, 9112, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9114, UINT16_MAX, 9114, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9116, UINT16_MAX, 9116, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9118, UINT16_MAX, 9118, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9120, UINT16_MAX, 9120, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9122, UINT16_MAX, 9122, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9124, UINT16_MAX, 9124, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9126, UINT16_MAX, 9126, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9128, UINT16_MAX, 9128, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9130, UINT16_MAX, 9130, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9132, UINT16_MAX, 9132, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9134, UINT16_MAX, 9134, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9136, UINT16_MAX, 9136, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9138, UINT16_MAX, 9138, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9140, UINT16_MAX, 9140, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9142, UINT16_MAX, 9142, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9144, UINT16_MAX, 9144, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9146, UINT16_MAX, 9146, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9148, UINT16_MAX, 9148, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9150, UINT16_MAX, 9150, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9152, UINT16_MAX, 9152, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9154, UINT16_MAX, 9154, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9156, UINT16_MAX, 9156, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9158, UINT16_MAX, 9158, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9160, UINT16_MAX, 9160, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9162, UINT16_MAX, 9162, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9164, UINT16_MAX, 9164, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9166, UINT16_MAX, 9166, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9168, UINT16_MAX, 9168, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6853, UINT16_MAX, 6853, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6855, UINT16_MAX, 6855, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6857, UINT16_MAX, 6857, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6859, UINT16_MAX, 6859, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6861, UINT16_MAX, 6861, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6863, UINT16_MAX, 6863, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6865, UINT16_MAX, 6865, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6867, UINT16_MAX, 6867, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6869, UINT16_MAX, 6869, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6871, UINT16_MAX, 6871, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6873, UINT16_MAX, 6873, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6875, UINT16_MAX, 6875, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6877, UINT16_MAX, 6877, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6879, UINT16_MAX, 6879, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6881, UINT16_MAX, 6881, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6883, UINT16_MAX, 6883, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6885, UINT16_MAX, 6885, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6887, UINT16_MAX, 6887, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6889, UINT16_MAX, 6889, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6891, UINT16_MAX, 6891, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6893, UINT16_MAX, 6893, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6895, UINT16_MAX, 6895, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6897, UINT16_MAX, 6897, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6899, UINT16_MAX, 6899, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6901, UINT16_MAX, 6901, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6903, UINT16_MAX, 6903, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6905, UINT16_MAX, 6905, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6907, UINT16_MAX, 6907, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6909, UINT16_MAX, 6909, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6911, UINT16_MAX, 6911, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6913, UINT16_MAX, 6913, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6915, UINT16_MAX, 6915, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6917, UINT16_MAX, 6917, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6919, UINT16_MAX, 6919, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6921, UINT16_MAX, 6921, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6923, UINT16_MAX, 6923, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6925, UINT16_MAX, 6925, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6927, UINT16_MAX, 6927, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6929, UINT16_MAX, 6929, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6931, UINT16_MAX, 6931, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6933, UINT16_MAX, 6933, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6935, UINT16_MAX, 6935, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6937, UINT16_MAX, 6937, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6939, UINT16_MAX, 6939, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6941, UINT16_MAX, 6941, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6943, UINT16_MAX, 6943, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6945, UINT16_MAX, 6945, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6947, UINT16_MAX, 6947, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6949, UINT16_MAX, 6949, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6951, UINT16_MAX, 6951, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 6953, UINT16_MAX, 6953, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9170, UINT16_MAX, 9170, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9172, UINT16_MAX, 9172, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9174, UINT16_MAX, 9174, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9176, UINT16_MAX, 9176, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9178, UINT16_MAX, 9178, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9180, UINT16_MAX, 9180, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9182, UINT16_MAX, 9182, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9184, UINT16_MAX, 9184, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9186, UINT16_MAX, 9186, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9188, UINT16_MAX, 9188, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9190, UINT16_MAX, 9190, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9192, UINT16_MAX, 9192, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9194, UINT16_MAX, 9194, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9196, UINT16_MAX, 9196, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9198, UINT16_MAX, 9198, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9200, UINT16_MAX, 9200, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9202, UINT16_MAX, 9202, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9204, UINT16_MAX, 9204, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9206, UINT16_MAX, 9206, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9208, UINT16_MAX, 9208, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9210, UINT16_MAX, 9210, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9212, UINT16_MAX, 9212, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9214, UINT16_MAX, 9214, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9216, UINT16_MAX, 9216, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9218, UINT16_MAX, 9218, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9220, UINT16_MAX, 9220, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9222, UINT16_MAX, 9222, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9224, UINT16_MAX, 9224, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9226, UINT16_MAX, 9226, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9228, UINT16_MAX, 9228, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9230, UINT16_MAX, 9230, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9232, UINT16_MAX, 9232, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9234, UINT16_MAX, 9234, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9236, UINT16_MAX, 9236, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9238, UINT16_MAX, 9238, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9240, UINT16_MAX, 9240, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9242, UINT16_MAX, 9242, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9244, UINT16_MAX, 9244, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9246, UINT16_MAX, 9246, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9248, UINT16_MAX, 9248, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9250, UINT16_MAX, 9250, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9252, UINT16_MAX, 9252, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9254, UINT16_MAX, 9254, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9256, UINT16_MAX, 9256, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9258, UINT16_MAX, 9258, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9260, UINT16_MAX, 9260, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9262, UINT16_MAX, 9262, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9264, UINT16_MAX, 9264, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9266, UINT16_MAX, 9266, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9268, UINT16_MAX, 9268, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9270, UINT16_MAX, 9270, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_AN, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5328, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5332, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15151, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5336, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15155, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49206, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, true, 0, 0, UTF8PROC_BOUNDCLASS_PREPEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49208, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 15159, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, 15163, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5340, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5344, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49210, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5348, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15167, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15171, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49212, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49216, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5354, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49214, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15175, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15179, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49218, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15183, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49220, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5362, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5366, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15187, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, 15191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7003, UINT16_MAX, 7003, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7005, UINT16_MAX, 7005, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7007, UINT16_MAX, 7007, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7009, UINT16_MAX, 7009, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7011, UINT16_MAX, 7011, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7013, UINT16_MAX, 7013, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7015, UINT16_MAX, 7015, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7017, UINT16_MAX, 7017, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7019, UINT16_MAX, 7019, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7021, UINT16_MAX, 7021, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7023, UINT16_MAX, 7023, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7025, UINT16_MAX, 7025, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7027, UINT16_MAX, 7027, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7029, UINT16_MAX, 7029, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7031, UINT16_MAX, 7031, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7033, UINT16_MAX, 7033, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7035, UINT16_MAX, 7035, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7037, UINT16_MAX, 7037, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7039, UINT16_MAX, 7039, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7041, UINT16_MAX, 7041, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7043, UINT16_MAX, 7043, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7045, UINT16_MAX, 7045, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7047, UINT16_MAX, 7047, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7049, UINT16_MAX, 7049, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7051, UINT16_MAX, 7051, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7053, UINT16_MAX, 7053, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7055, UINT16_MAX, 7055, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7057, UINT16_MAX, 7057, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7059, UINT16_MAX, 7059, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7061, UINT16_MAX, 7061, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7063, UINT16_MAX, 7063, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, 7065, UINT16_MAX, 7065, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9272, UINT16_MAX, 9272, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9274, UINT16_MAX, 9274, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9276, UINT16_MAX, 9276, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9278, UINT16_MAX, 9278, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9280, UINT16_MAX, 9280, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9282, UINT16_MAX, 9282, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9284, UINT16_MAX, 9284, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9286, UINT16_MAX, 9286, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9288, UINT16_MAX, 9288, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9290, UINT16_MAX, 9290, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9292, UINT16_MAX, 9292, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9294, UINT16_MAX, 9294, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9296, UINT16_MAX, 9296, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9298, UINT16_MAX, 9298, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9300, UINT16_MAX, 9300, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9302, UINT16_MAX, 9302, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9304, UINT16_MAX, 9304, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9306, UINT16_MAX, 9306, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9308, UINT16_MAX, 9308, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9310, UINT16_MAX, 9310, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9312, UINT16_MAX, 9312, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9314, UINT16_MAX, 9314, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9316, UINT16_MAX, 9316, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9318, UINT16_MAX, 9318, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9320, UINT16_MAX, 9320, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9322, UINT16_MAX, 9322, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9324, UINT16_MAX, 9324, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9326, UINT16_MAX, 9326, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9328, UINT16_MAX, 9328, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9330, UINT16_MAX, 9330, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9332, UINT16_MAX, 9332, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, 9334, UINT16_MAX, 9334, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5370, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5374, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15259, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15263, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5378, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15267, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15271, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15275, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15279, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15283, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49222, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 226, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_SPACINGMARK},
+  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49224, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49226, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49228, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49230, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 49232, false, false, false, false, 0, 0, UTF8PROC_BOUNDCLASS_EXTEND},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5390, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5394, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15287, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5398, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15291, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, 5404, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15299, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15303, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, 15307, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, true, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 3295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 1, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 4, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 5, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 6, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 8, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 9, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 10, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 11, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 12, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 13, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 14, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 15, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 16, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 17, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 18, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 19, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 20, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 21, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 22, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 23, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 24, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 25, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7119, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7120, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7121, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7123, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7133, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 858, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 7141, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7121, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7122, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7123, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7124, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7125, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7126, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7127, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7128, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7129, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7130, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7131, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7132, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7133, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7134, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7135, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7136, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7137, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7138, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7139, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 2818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7140, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 849, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 852, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 35, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 856, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, 7141, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, true, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7142, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7144, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7145, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7146, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7147, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7143, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 7148, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, 904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 38, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 31, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 32, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2780, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, 2781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7149, UINT16_MAX, 7149, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7151, UINT16_MAX, 7151, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7153, UINT16_MAX, 7153, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7155, UINT16_MAX, 7155, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7157, UINT16_MAX, 7157, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7159, UINT16_MAX, 7159, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7161, UINT16_MAX, 7161, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7163, UINT16_MAX, 7163, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7165, UINT16_MAX, 7165, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7167, UINT16_MAX, 7167, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7169, UINT16_MAX, 7169, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7171, UINT16_MAX, 7171, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7173, UINT16_MAX, 7173, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7175, UINT16_MAX, 7175, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7177, UINT16_MAX, 7177, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7179, UINT16_MAX, 7179, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7181, UINT16_MAX, 7181, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7183, UINT16_MAX, 7183, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7185, UINT16_MAX, 7185, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7187, UINT16_MAX, 7187, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7189, UINT16_MAX, 7189, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7191, UINT16_MAX, 7191, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7193, UINT16_MAX, 7193, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7195, UINT16_MAX, 7195, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7197, UINT16_MAX, 7197, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7199, UINT16_MAX, 7199, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7201, UINT16_MAX, 7201, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7203, UINT16_MAX, 7203, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7205, UINT16_MAX, 7205, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7207, UINT16_MAX, 7207, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7209, UINT16_MAX, 7209, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7211, UINT16_MAX, 7211, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7213, UINT16_MAX, 7213, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, 7215, UINT16_MAX, 7215, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9336, UINT16_MAX, 9336, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9338, UINT16_MAX, 9338, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9340, UINT16_MAX, 9340, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9342, UINT16_MAX, 9342, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9344, UINT16_MAX, 9344, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9346, UINT16_MAX, 9346, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9348, UINT16_MAX, 9348, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9350, UINT16_MAX, 9350, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9352, UINT16_MAX, 9352, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9354, UINT16_MAX, 9354, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9356, UINT16_MAX, 9356, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9358, UINT16_MAX, 9358, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9360, UINT16_MAX, 9360, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9362, UINT16_MAX, 9362, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9364, UINT16_MAX, 9364, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9366, UINT16_MAX, 9366, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9368, UINT16_MAX, 9368, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9370, UINT16_MAX, 9370, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9372, UINT16_MAX, 9372, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9374, UINT16_MAX, 9374, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9376, UINT16_MAX, 9376, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9378, UINT16_MAX, 9378, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9380, UINT16_MAX, 9380, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9382, UINT16_MAX, 9382, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9384, UINT16_MAX, 9384, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9386, UINT16_MAX, 9386, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9388, UINT16_MAX, 9388, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9390, UINT16_MAX, 9390, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9392, UINT16_MAX, 9392, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9394, UINT16_MAX, 9394, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9396, UINT16_MAX, 9396, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9398, UINT16_MAX, 9398, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9400, UINT16_MAX, 9400, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_R, 0, UINT16_MAX, UINT16_MAX, 9402, UINT16_MAX, 9402, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7217, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 5760, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7218, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 7219, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 1, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6551, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6563, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FONT, 6569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15412, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15430, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, 15432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23635, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23644, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23659, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23683, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23692, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23698, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 2795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 15515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 15517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1456, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3288, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 1466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2908, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3295, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 2817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15523, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 23717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 15530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, 15532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15536, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 15538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4278, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7348, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7349, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7350, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7352, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7353, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7354, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7355, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 5399, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7356, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7357, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7359, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7360, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7361, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7362, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7363, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7364, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7365, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7366, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7367, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3426, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7368, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4191, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4192, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7369, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7370, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7371, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7372, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7373, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7374, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 4174, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 3499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7375, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7377, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, 7378, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23772, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, 23787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 7406, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, 7407, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_E_MODIFIER},
+  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_E_BASE_GAZ},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7408, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7409, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7410, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7411, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7413, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7414, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7415, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7416, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7417, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7418, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7419, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7420, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7422, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7423, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7424, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7425, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7427, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7428, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7358, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7429, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7431, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7432, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7433, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7434, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7435, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7437, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7438, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7439, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7440, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7376, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7441, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7442, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7443, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7444, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7445, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7446, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7447, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7448, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7449, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7450, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7452, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7453, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7454, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7455, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7457, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7458, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7459, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7460, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7461, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7462, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7463, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7464, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7465, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7466, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7467, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7469, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7470, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7471, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7472, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7473, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7474, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7475, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7476, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7477, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7478, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7479, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7481, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7482, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7483, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7484, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7485, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7487, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7488, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7489, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7351, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7490, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7491, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7492, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7494, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7496, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7497, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7498, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7499, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7500, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7501, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7502, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7503, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7504, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7505, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7507, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7508, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7509, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7510, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7512, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7513, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7514, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3468, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7515, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7516, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7517, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7518, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7519, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7521, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7522, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7524, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7525, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7526, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7527, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7528, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7529, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7530, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7531, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7532, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7533, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7534, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7535, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7537, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7538, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7539, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7540, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7541, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3480, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7543, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7545, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7546, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7547, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7548, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7550, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7552, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7553, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7554, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7555, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7556, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7557, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7558, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7559, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7560, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7561, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7562, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7564, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7565, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7566, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7567, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7568, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7569, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7571, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7572, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7573, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7574, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7575, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7576, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7578, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7580, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7581, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7582, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7583, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7584, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7585, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7587, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7588, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7589, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7590, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7591, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7592, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7593, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7594, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7595, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7596, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7597, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7599, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7600, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7601, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7602, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7603, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7604, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7605, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7606, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7607, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7608, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7609, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7610, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7611, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7612, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7613, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7614, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7616, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7617, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7618, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7619, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7620, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7622, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7623, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7624, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7626, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7627, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7628, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7631, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7632, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7633, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7636, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7637, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7638, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7639, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7640, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7641, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7643, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7645, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7647, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7648, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7650, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7651, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7652, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7653, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7654, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7655, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7656, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7657, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7658, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7660, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7661, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7662, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7663, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7664, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7665, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7667, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7668, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7669, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7671, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7673, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7674, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7675, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7676, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7677, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7678, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7679, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7680, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7681, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7683, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7684, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7686, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7687, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7689, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7690, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7691, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7693, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7694, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7695, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7697, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7699, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7700, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7701, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7702, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7703, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7704, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7705, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7706, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7707, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7708, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7709, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7710, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7712, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7713, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7715, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7717, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7718, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7720, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7722, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7724, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7725, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7726, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7728, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7730, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7732, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7734, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7735, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7736, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7737, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7738, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7739, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7741, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7742, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7743, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7745, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7747, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7749, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7750, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7751, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7752, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7753, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7755, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7757, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7758, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7759, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7761, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7762, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7763, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7764, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7766, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7767, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7768, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7769, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7770, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7771, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7773, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7774, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7775, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7776, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7777, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7778, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7779, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7781, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7783, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7784, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7786, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7787, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7789, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7790, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7791, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7793, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7795, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7796, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7798, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7799, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7801, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7802, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7803, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7804, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7805, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7806, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7807, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7809, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7811, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7813, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7815, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7816, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7817, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7818, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7819, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7820, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7821, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7822, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7823, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7824, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7825, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7826, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7828, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7829, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7830, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7831, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7832, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7833, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7834, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7835, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7836, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7837, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7838, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7840, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7842, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7844, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7845, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7846, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7847, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7848, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7850, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7851, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7853, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7854, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7855, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7857, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7859, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7860, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7861, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7862, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7863, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7864, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7865, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7866, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7867, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7868, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7869, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7870, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7871, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7872, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7873, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7874, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3570, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7875, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7877, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7878, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7879, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7880, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7881, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7882, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7884, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7886, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7887, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7888, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3577, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7889, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7891, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7892, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7893, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7894, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7895, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7897, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7899, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7900, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7901, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7902, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7904, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7905, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7907, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7909, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7910, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7911, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7912, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7914, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7915, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7916, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7917, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7918, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7919, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7920, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7921, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7923, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7924, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7925, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7926, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7928, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7929, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7930, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7931, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7932, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7934, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7936, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7937, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7938, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7939, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7941, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7942, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7944, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7945, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7947, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7948, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7949, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7950, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7951, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7952, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7953, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7954, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7956, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7957, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7958, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7959, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7960, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7961, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7963, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7964, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7966, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7968, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3625, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7970, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3629, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7971, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7972, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7973, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7974, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 3634, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, 7975, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, UINT16_MAX, false, false, false, false, 2, 0, UTF8PROC_BOUNDCLASS_OTHER},
+};
+
+static const utf8proc_uint16_t utf8proc_combinations[] = {
+  0, 46, 192, 193, 194, 195, 196, 197, 0, 
+  256, 258, 260, 550, 461, 0, 0, 512, 
+  514, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7680, 7840, 0, 0, 0, 0, 0, 7842, 
+1, 11, 
+  262, 264, 0, 0, 0, 199, 0, 0, 
+  0, 266, 268, 
+0, 46, 200, 201, 202, 7868, 203, 
+  0, 552, 274, 276, 280, 278, 282, 0, 
+  0, 516, 518, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7864, 0, 7704, 7706, 0, 
+  0, 7866, 
+0, 46, 204, 205, 206, 296, 207, 0, 
+  0, 298, 300, 302, 304, 463, 0, 0, 
+  520, 522, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7882, 0, 0, 7724, 0, 0, 
+  7880, 
+0, 42, 504, 323, 0, 209, 0, 0, 325, 
+  0, 0, 0, 7748, 327, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 7750, 7752, 7754, 
+0, 46, 210, 211, 212, 213, 
+  214, 0, 0, 332, 334, 490, 558, 465, 
+  336, 416, 524, 526, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 7884, 0, 0, 0, 
+  0, 0, 7886, 
+0, 46, 217, 218, 219, 360, 220, 
+  366, 0, 362, 364, 370, 0, 467, 368, 
+  431, 532, 534, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7908, 0, 7798, 7796, 0, 
+  7794, 7910, 
+0, 46, 7922, 221, 374, 7928, 376, 0, 
+  0, 562, 0, 0, 7822, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7924, 0, 0, 0, 0, 0, 
+  7926, 
+0, 46, 224, 225, 226, 227, 228, 229, 0, 
+  257, 259, 261, 551, 462, 0, 0, 513, 
+  515, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7681, 7841, 0, 0, 0, 0, 0, 7843, 
+1, 11, 
+  263, 265, 0, 0, 0, 231, 0, 0, 
+  0, 267, 269, 
+0, 46, 232, 233, 234, 7869, 235, 
+  0, 553, 275, 277, 281, 279, 283, 0, 
+  0, 517, 519, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7865, 0, 7705, 7707, 0, 
+  0, 7867, 
+0, 46, 236, 237, 238, 297, 239, 0, 
+  0, 299, 301, 303, 0, 464, 0, 0, 
+  521, 523, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7883, 0, 0, 7725, 0, 0, 
+  7881, 
+0, 42, 505, 324, 0, 241, 0, 0, 326, 
+  0, 0, 0, 7749, 328, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 7751, 7753, 7755, 
+0, 46, 242, 243, 244, 245, 
+  246, 0, 0, 333, 335, 491, 559, 466, 
+  337, 417, 525, 527, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 7885, 0, 0, 0, 
+  0, 0, 7887, 
+0, 46, 249, 250, 251, 361, 252, 
+  367, 0, 363, 365, 371, 0, 468, 369, 
+  432, 533, 535, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7909, 0, 7799, 7797, 0, 
+  7795, 7911, 
+0, 46, 7923, 253, 375, 7929, 255, 7833, 
+  0, 563, 0, 0, 7823, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7925, 0, 0, 0, 0, 0, 
+  7927, 
+6, 42, 7696, 0, 0, 0, 7690, 270, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7692, 7694, 7698, 
+6, 42, 7697, 0, 
+  0, 0, 7691, 271, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7693, 7695, 7699, 
+1, 11, 500, 284, 0, 0, 0, 
+  290, 7712, 286, 0, 288, 486, 
+1, 11, 501, 285, 
+  0, 0, 0, 291, 7713, 287, 0, 289, 
+  487, 
+2, 44, 292, 0, 7718, 0, 7720, 0, 0, 
+  0, 7714, 542, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7716, 
+  0, 0, 0, 7722, 
+2, 44, 293, 0, 7719, 0, 
+  7721, 0, 0, 0, 7715, 543, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7717, 7830, 0, 0, 7723, 
+2, 2, 308, 
+2, 11, 
+  309, 0, 0, 0, 0, 0, 0, 0, 
+  0, 496, 
+1, 41, 7728, 0, 0, 0, 0, 310, 
+  0, 0, 0, 0, 488, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 7730, 7732, 
+1, 41, 7729, 0, 0, 0, 0, 
+  311, 0, 0, 0, 0, 489, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7731, 7733, 
+1, 42, 313, 0, 0, 0, 
+  0, 315, 0, 0, 0, 0, 317, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7734, 7738, 7740, 
+1, 42, 314, 0, 
+  0, 0, 0, 316, 0, 0, 0, 0, 
+  318, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 7735, 7739, 7741, 
+1, 41, 
+  340, 0, 0, 0, 0, 342, 0, 0, 
+  0, 7768, 344, 0, 0, 528, 530, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7770, 
+  7774, 
+1, 41, 341, 0, 0, 0, 0, 343, 0, 
+  0, 0, 7769, 345, 0, 0, 529, 531, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7771, 7775, 
+1, 40, 346, 348, 0, 0, 0, 350, 
+  0, 0, 0, 7776, 352, 0, 0, 0, 
+  0, 536, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 7778, 
+1, 40, 347, 349, 0, 0, 0, 351, 
+  0, 0, 0, 7777, 353, 0, 0, 0, 
+  0, 537, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 7779, 
+6, 42, 354, 0, 0, 0, 7786, 356, 
+  0, 0, 0, 0, 538, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 7788, 7790, 7792, 
+4, 42, 7831, 
+  0, 355, 0, 0, 0, 7787, 357, 0, 
+  0, 0, 0, 539, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7789, 7791, 7793, 
+0, 40, 7808, 7810, 
+  372, 0, 7812, 0, 0, 0, 0, 0, 
+  7814, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7816, 
+0, 40, 7809, 
+  7811, 373, 0, 7813, 7832, 0, 0, 0, 
+  0, 7815, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7817, 
+1, 41, 
+  377, 7824, 0, 0, 0, 0, 0, 0, 
+  0, 379, 381, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7826, 
+  7828, 
+1, 41, 378, 7825, 0, 0, 0, 0, 0, 
+  0, 0, 380, 382, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7827, 7829, 
+0, 11, 475, 471, 0, 0, 0, 0, 
+  0, 469, 0, 0, 0, 473, 
+0, 11, 476, 472, 
+  0, 0, 0, 0, 0, 470, 0, 0, 
+  0, 474, 
+7, 7, 478, 
+7, 7, 479, 
+7, 7, 480, 
+7, 7, 481, 
+1, 7, 508, 0, 
+  0, 0, 0, 0, 482, 
+1, 7, 509, 0, 0, 
+  0, 0, 0, 483, 
+7, 7, 492, 
+7, 7, 493, 
+11, 11, 494, 
+11, 11, 495, 
+1, 1, 
+  506, 
+1, 1, 507, 
+1, 1, 510, 
+1, 1, 511, 
+7, 7, 554, 
+7, 7, 555, 
+1, 7, 7756, 0, 
+  0, 7758, 0, 0, 556, 
+1, 7, 7757, 0, 0, 
+  7759, 0, 0, 557, 
+7, 7, 560, 
+7, 7, 561, 
+0, 49, 8173, 901, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 8129, 
+0, 50, 
+  8122, 902, 0, 0, 0, 0, 0, 8121, 
+  8120, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7944, 
+  7945, 0, 8124, 
+0, 48, 8136, 904, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7960, 7961, 
+0, 50, 8138, 905, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7976, 7977, 0, 8140, 
+0, 48, 8154, 
+  906, 0, 0, 938, 0, 0, 8153, 8152, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7992, 7993, 
+0, 48, 
+  8184, 908, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 8008, 
+  8009, 
+0, 48, 8170, 910, 0, 0, 939, 0, 0, 
+  8169, 8168, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 8025, 
+0, 50, 8186, 911, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 8040, 8041, 0, 8188, 
+0, 49, 8146, 912, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 8151, 
+0, 50, 8048, 
+  940, 0, 0, 0, 0, 0, 8113, 8112, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7936, 7937, 
+  8118, 8115, 
+0, 48, 8050, 941, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 7952, 7953, 
+0, 50, 8052, 942, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7968, 7969, 8134, 8131, 
+0, 49, 8054, 943, 
+  0, 0, 970, 0, 0, 8145, 8144, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 7984, 7985, 8150, 
+0, 49, 
+  8162, 944, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 8167, 
+0, 49, 8058, 973, 0, 0, 971, 0, 
+  0, 8161, 8160, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 8016, 8017, 8166, 
+0, 48, 8056, 972, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 8000, 8001, 
+0, 50, 8060, 974, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 8032, 8033, 8182, 8179, 
+1, 4, 
+  979, 0, 0, 980, 
+0, 8, 1024, 0, 0, 0, 
+  1025, 0, 0, 0, 1238, 
+1, 1, 1027, 
+4, 4, 1031, 
+1, 1, 1036, 
+0, 8, 
+  1037, 0, 0, 0, 1252, 0, 0, 1250, 
+  1049, 
+4, 12, 1264, 0, 0, 1262, 1038, 0, 0, 
+  0, 1266, 
+0, 8, 1117, 0, 0, 0, 1253, 0, 
+  0, 1251, 1081, 
+0, 8, 1104, 0, 0, 0, 1105, 
+  0, 0, 0, 1239, 
+1, 1, 1107, 
+4, 4, 1111, 
+1, 1, 1116, 
+4, 12, 1265, 
+  0, 0, 1263, 1118, 0, 0, 0, 1267, 
+14, 14, 
+  1142, 
+14, 14, 1143, 
+4, 8, 1244, 0, 0, 0, 1217, 
+4, 8, 1245, 
+  0, 0, 0, 1218, 
+4, 8, 1234, 0, 0, 0, 
+  1232, 
+4, 8, 1235, 0, 0, 0, 1233, 
+4, 4, 1242, 
+4, 4, 1243, 
+4, 4, 
+  1246, 
+4, 4, 1247, 
+4, 4, 1254, 
+4, 4, 1255, 
+4, 4, 1258, 
+4, 4, 1259, 
+4, 4, 1260, 
+4, 4, 1261, 
+4, 4, 
+  1268, 
+4, 4, 1269, 
+4, 4, 1272, 
+4, 4, 1273, 
+17, 19, 1570, 1571, 1573, 
+18, 18, 1572, 
+18, 18, 
+  1574, 
+18, 18, 1728, 
+18, 18, 1730, 
+18, 18, 1747, 
+20, 20, 2345, 
+20, 20, 2353, 
+20, 20, 2356, 
+21, 22, 2507, 
+  2508, 
+23, 25, 2888, 2891, 2892, 
+26, 26, 2964, 
+26, 27, 3020, 3018, 
+27, 27, 3019, 
+28, 28, 
+  3144, 
+29, 29, 3264, 
+29, 31, 3271, 3272, 3274, 
+29, 29, 3275, 
+32, 33, 3402, 3404, 
+32, 32, 
+  3403, 
+34, 36, 3546, 3548, 3550, 
+34, 34, 3549, 
+37, 37, 4134, 
+38, 38, 6918, 
+38, 38, 6920, 
+38, 38, 
+  6922, 
+38, 38, 6924, 
+38, 38, 6926, 
+38, 38, 6930, 
+38, 38, 6971, 
+38, 38, 6973, 
+38, 38, 6976, 
+38, 38, 6977, 
+38, 38, 
+  6979, 
+10, 41, 7682, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7684, 
+  7686, 
+10, 41, 7683, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7685, 
+  7687, 
+1, 1, 7688, 
+1, 1, 7689, 
+0, 1, 7700, 7702, 
+0, 1, 7701, 7703, 
+8, 8, 7708, 
+8, 8, 
+  7709, 
+10, 10, 7710, 
+10, 10, 7711, 
+1, 1, 7726, 
+1, 1, 7727, 
+7, 7, 7736, 
+7, 7, 7737, 
+1, 40, 7742, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7744, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7746, 
+1, 40, 7743, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7745, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7747, 
+0, 1, 7760, 
+  7762, 
+0, 1, 7761, 7763, 
+1, 10, 7764, 0, 0, 0, 0, 
+  0, 0, 0, 0, 7766, 
+1, 10, 7765, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7767, 
+7, 7, 7772, 
+7, 7, 
+  7773, 
+10, 10, 7780, 
+10, 10, 7781, 
+10, 10, 7782, 
+10, 10, 7783, 
+10, 10, 7784, 
+10, 10, 7785, 
+1, 1, 7800, 
+1, 1, 
+  7801, 
+4, 4, 7802, 
+4, 4, 7803, 
+3, 40, 7804, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7806, 
+3, 40, 7805, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7807, 
+4, 10, 7820, 
+  0, 0, 0, 0, 0, 7818, 
+4, 10, 7821, 0, 
+  0, 0, 0, 0, 7819, 
+10, 10, 7835, 
+0, 46, 7846, 7844, 
+  0, 7850, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 7848, 
+0, 46, 7847, 7845, 0, 
+  7851, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7849, 
+2, 8, 7852, 0, 0, 0, 
+  0, 0, 7862, 
+2, 8, 7853, 0, 0, 0, 0, 
+  0, 7863, 
+0, 46, 7856, 7854, 0, 7860, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7858, 
+0, 46, 7857, 7855, 0, 7861, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7859, 
+0, 46, 
+  7872, 7870, 0, 7876, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7874, 
+0, 46, 7873, 
+  7871, 0, 7877, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 7875, 
+2, 2, 7878, 
+2, 2, 7879, 
+0, 46, 
+  7890, 7888, 0, 7894, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7892, 
+0, 46, 7891, 
+  7889, 0, 7895, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 7893, 
+2, 2, 7896, 
+2, 2, 7897, 
+0, 46, 
+  7900, 7898, 0, 7904, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7906, 0, 0, 0, 0, 0, 7902, 
+0, 46, 7901, 
+  7899, 0, 7905, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7907, 
+  0, 0, 0, 0, 0, 7903, 
+0, 46, 7914, 7912, 
+  0, 7918, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7920, 0, 
+  0, 0, 0, 0, 7916, 
+0, 46, 7915, 7913, 0, 
+  7919, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 7921, 0, 0, 
+  0, 0, 0, 7917, 
+0, 50, 7938, 7940, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 7942, 8064, 
+0, 50, 7939, 
+  7941, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  7943, 8065, 
+0, 50, 7946, 7948, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7950, 8072, 
+0, 50, 7947, 7949, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 7951, 8073, 
+0, 1, 
+  7954, 7956, 
+0, 1, 7955, 7957, 
+0, 1, 7962, 7964, 
+0, 1, 7963, 7965, 
+0, 50, 
+  7970, 7972, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 7974, 8080, 
+0, 50, 7971, 7973, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 7975, 8081, 
+0, 50, 7978, 7980, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7982, 
+  8088, 
+0, 50, 7979, 7981, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 7983, 8089, 
+0, 49, 7986, 7988, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 7990, 
+0, 49, 7987, 7989, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 7991, 
+0, 49, 
+  7994, 7996, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 7998, 
+0, 49, 7995, 7997, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 7999, 
+0, 1, 8002, 8004, 
+0, 1, 8003, 8005, 
+0, 1, 
+  8010, 8012, 
+0, 1, 8011, 8013, 
+0, 49, 8018, 8020, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 8022, 
+0, 49, 8019, 8021, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 8023, 
+0, 49, 
+  8027, 8029, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 8031, 
+0, 50, 8034, 8036, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 8038, 8096, 
+0, 50, 8035, 8037, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 8039, 8097, 
+0, 50, 
+  8042, 8044, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 8046, 8104, 
+0, 50, 8043, 8045, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 8047, 8105, 
+50, 50, 8066, 
+50, 50, 8067, 
+50, 50, 
+  8068, 
+50, 50, 8069, 
+50, 50, 8070, 
+50, 50, 8071, 
+50, 50, 8074, 
+50, 50, 8075, 
+50, 50, 8076, 
+50, 50, 8077, 
+50, 50, 
+  8078, 
+50, 50, 8079, 
+50, 50, 8082, 
+50, 50, 8083, 
+50, 50, 8084, 
+50, 50, 8085, 
+50, 50, 8086, 
+50, 50, 8087, 
+50, 50, 
+  8090, 
+50, 50, 8091, 
+50, 50, 8092, 
+50, 50, 8093, 
+50, 50, 8094, 
+50, 50, 8095, 
+50, 50, 8098, 
+50, 50, 8099, 
+50, 50, 
+  8100, 
+50, 50, 8101, 
+50, 50, 8102, 
+50, 50, 8103, 
+50, 50, 8106, 
+50, 50, 8107, 
+50, 50, 8108, 
+50, 50, 8109, 
+50, 50, 
+  8110, 
+50, 50, 8111, 
+50, 50, 8114, 
+50, 50, 8116, 
+50, 50, 8119, 
+50, 50, 8130, 
+50, 50, 8132, 
+50, 50, 8135, 
+0, 49, 
+  8141, 8142, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 8143, 
+0, 49, 8157, 8158, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 0, 0, 0, 0, 0, 
+  0, 0, 0, 8159, 
+47, 48, 8164, 8165, 
+48, 48, 8172, 
+50, 50, 8178, 
+50, 50, 
+  8180, 
+50, 50, 8183, 
+51, 51, 8602, 
+51, 51, 8603, 
+51, 51, 8622, 
+51, 51, 8653, 
+51, 51, 8654, 
+51, 51, 8655, 
+51, 51, 
+  8708, 
+51, 51, 8713, 
+51, 51, 8716, 
+51, 51, 8740, 
+51, 51, 8742, 
+51, 51, 8769, 
+51, 51, 8772, 
+51, 51, 8775, 
+51, 51, 
+  8777, 
+51, 51, 8800, 
+51, 51, 8802, 
+51, 51, 8813, 
+51, 51, 8814, 
+51, 51, 8815, 
+51, 51, 8816, 
+51, 51, 8817, 
+51, 51, 
+  8820, 
+51, 51, 8821, 
+51, 51, 8824, 
+51, 51, 8825, 
+51, 51, 8832, 
+51, 51, 8833, 
+51, 51, 8836, 
+51, 51, 8837, 
+51, 51, 
+  8840, 
+51, 51, 8841, 
+51, 51, 8876, 
+51, 51, 8877, 
+51, 51, 8878, 
+51, 51, 8879, 
+51, 51, 8928, 
+51, 51, 8929, 
+51, 51, 
+  8930, 
+51, 51, 8931, 
+51, 51, 8938, 
+51, 51, 8939, 
+51, 51, 8940, 
+51, 51, 8941, 
+51, 51, 10972, 
+52, 52, 12364, 
+52, 52, 
+  12366, 
+52, 52, 12368, 
+52, 52, 12370, 
+52, 52, 12372, 
+52, 52, 12374, 
+52, 52, 12376, 
+52, 52, 12378, 
+52, 52, 12380, 
+52, 52, 
+  12382, 
+52, 52, 12384, 
+52, 52, 12386, 
+52, 52, 12389, 
+52, 52, 12391, 
+52, 52, 12393, 
+52, 53, 12400, 12401, 
+52, 53, 
+  12403, 12404, 
+52, 53, 12406, 12407, 
+52, 53, 12409, 12410, 
+52, 53, 12412, 12413, 
+52, 52, 
+  12436, 
+52, 52, 12446, 
+52, 52, 12460, 
+52, 52, 12462, 
+52, 52, 12464, 
+52, 52, 12466, 
+52, 52, 12468, 
+52, 52, 12470, 
+52, 52, 
+  12472, 
+52, 52, 12474, 
+52, 52, 12476, 
+52, 52, 12478, 
+52, 52, 12480, 
+52, 52, 12482, 
+52, 52, 12485, 
+52, 52, 12487, 
+52, 52, 
+  12489, 
+52, 53, 12496, 12497, 
+52, 53, 12499, 12500, 
+52, 53, 12502, 12503, 
+52, 53, 12505, 
+  12506, 
+52, 53, 12508, 12509, 
+52, 52, 12532, 
+52, 52, 12535, 
+52, 52, 12536, 
+52, 52, 12537, 
+52, 52, 12538, 
+52, 52, 
+  12542, 
+54, 55, 1, 4250, 
+54, 55, 1, 4252, 
+54, 55, 1, 4267, 
+56, 57, 1, 4398, 
+56, 57, 1, 4399, 
+58, 61, 1, 4939, 1, 4940, 
+62, 67, 
+  1, 5307, 1, 5308, 1, 5310, 
+68, 69, 1, 5562, 
+68, 69, 1, 5563, 
+70, 71, 1, 53598, 
+70, 71, 1, 53599, 
+72, 81, 1, 53600, 
+  1, 53601, 1, 53602, 1, 53603, 1, 53604, 
+70, 71, 1, 53691, 
+70, 71, 1, 53692, 
+72, 75, 1, 53693, 1, 53695, 
+72, 75, 
+  1, 53694, 1, 53696, 
+};
+
diff --git a/src/drivers/common/utils.c b/src/drivers/common/utils.c
new file mode 100644
index 0000000..fc2b65e
--- /dev/null
+++ b/src/drivers/common/utils.c
@@ -0,0 +1,61 @@
+/*
+ *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: utils.c 3434 2017-09-29 17:48:31Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnetcdf.h>
+#include <dispatch.h>
+#include <pnc_debug.h>
+#include <common.h>
+
+/*----< ncmpii_nc2mpitype() >------------------------------------------------*/
+MPI_Datatype
+ncmpii_nc2mpitype(nc_type xtype)
+{
+    switch(xtype){
+        case NC_CHAR :   return MPI_CHAR;
+        case NC_BYTE :   return MPI_SIGNED_CHAR;
+        case NC_SHORT :  return MPI_SHORT;
+        case NC_INT :    return MPI_INT;
+        case NC_FLOAT :  return MPI_FLOAT;
+        case NC_DOUBLE : return MPI_DOUBLE;
+        case NC_UBYTE :  return MPI_UNSIGNED_CHAR;
+        case NC_USHORT : return MPI_UNSIGNED_SHORT;
+        case NC_UINT :   return MPI_UNSIGNED;
+        case NC_INT64 :  return MPI_LONG_LONG_INT;
+        case NC_UINT64 : return MPI_UNSIGNED_LONG_LONG;
+        default:         return MPI_DATATYPE_NULL;
+    }
+}
+
+/*----< ncmpii_xlen_nc_type() >----------------------------------------------*/
+/* return the length of external NC data type */
+int
+ncmpii_xlen_nc_type(nc_type xtype, int *size)
+{
+    switch(xtype) {
+        case NC_BYTE:
+        case NC_CHAR:
+        case NC_UBYTE:  *size = 1; return NC_NOERR;
+        case NC_SHORT:
+        case NC_USHORT: *size = 2; return NC_NOERR;
+        case NC_INT:
+        case NC_UINT:
+        case NC_FLOAT:  *size = 4; return NC_NOERR;
+        case NC_DOUBLE:
+        case NC_INT64:
+        case NC_UINT64: *size = 8; return NC_NOERR;
+        default: DEBUG_RETURN_ERROR(NC_EBADTYPE);
+    }
+}
diff --git a/src/drivers/include/Makefile.am b/src/drivers/include/Makefile.am
new file mode 100644
index 0000000..e1d7e29
--- /dev/null
+++ b/src/drivers/include/Makefile.am
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2815 2017-01-01 23:06:33Z wkliao $
+#
+# @configure_input@
+
+M4_HFILES = ncx_h.m4
+
+M4FLAGS += -I${top_srcdir}/m4
+
+ncx.h: ncx_h.m4 Makefile
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# and 'make install'. This means you cannot build a specific target (e.g.,
+# 'make foo') in a clean tree if it depends on a built source."
+BUILT_SOURCES = ncx.h
+
+EXTRA_DIST = common.h $(M4_HFILES)
+
+CLEANFILES = ncx.h
+
+tests-local: all
+
diff --git a/src/drivers/include/Makefile.in b/src/drivers/include/Makefile.in
new file mode 100644
index 0000000..e2d0b4f
--- /dev/null
+++ b/src/drivers/include/Makefile.in
@@ -0,0 +1,551 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2815 2017-01-01 23:06:33Z wkliao $
+#
+# @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/drivers/include
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+M4_HFILES = ncx_h.m4
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# and 'make install'. This means you cannot build a specific target (e.g.,
+# 'make foo') in a clean tree if it depends on a built source."
+BUILT_SOURCES = ncx.h
+EXTRA_DIST = common.h $(M4_HFILES)
+CLEANFILES = ncx.h
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers/include/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/drivers/include/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile
+installdirs:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags-am distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags-am tests-am tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ncx.h: ncx_h.m4 Makefile
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/drivers/include/common.h b/src/drivers/include/common.h
new file mode 100644
index 0000000..a2370b8
--- /dev/null
+++ b/src/drivers/include/common.h
@@ -0,0 +1,207 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: common.h 3440 2017-10-15 18:46:02Z wkliao $ */
+
+#ifndef _COMMON_H
+#define _COMMON_H
+
+#include <mpi.h>
+#include <pnetcdf.h>
+
+/*
+ * Macros for dealing with flag bits.
+ */
+#define fSet(t, f)      ((t) |=  (f))
+#define fClr(t, f)      ((t) &= ~(f))
+#define fIsSet(t, f)    ((t) &   (f))
+#define fMask(t, f)     ((t) & ~ (f))
+
+#ifndef MAX
+#define MAX(mm,nn) (((mm) > (nn)) ? (mm) : (nn))
+#endif
+#ifndef MIN
+#define MIN(mm,nn) (((mm) < (nn)) ? (mm) : (nn))
+#endif
+
+/* useful for aligning memory */
+#define _RNDUP(x, unit)      ((((x) + (unit) - 1) / (unit)) * (unit))
+#define _RNDDOWN(x, unit)    ((x) - ((x)%(unit)))
+
+/* #define M_RND_UNIT   (sizeof(double))
+ * SIZEOF_DOUBLE is defined in config.h
+ */
+#define M_RND_UNIT        SIZEOF_DOUBLE
+#define M_RNDUP(x)        _RNDUP(x, M_RND_UNIT)
+#define M_RNDDOWN(x)      _RNDDOWN(x, M_RND_UNIT)
+#define D_RNDUP(x, align) _RNDUP(x, (off_t)(align))
+
+/* for put request less than 4KB, copy it to a buffer and do byte swap there,
+ * so if the user buffer is immutable (assuming smaller than 4KB), it will not
+ * cause seg fault. Not a perfect solution, but should be sufficient for most
+ * of the cases.
+ */
+#define NC_BYTE_SWAP_BUFFER_SIZE 4096
+
+extern void *
+NCI_Malloc_fn(size_t size, const int lineno, const char *func,
+              const char *filename);
+
+extern void *
+NCI_Calloc_fn(size_t nelem, size_t elsize, const int lineno, const char *func,
+              const char *filename);
+
+extern void *
+NCI_Realloc_fn(void *ptr, size_t size, const int lineno, const char *func,
+               const char *filename);
+
+extern void
+NCI_Free_fn(void *ptr, const int lineno, const char *func,
+            const char *filename);
+
+#define NCI_Malloc(a)    NCI_Malloc_fn(a,__LINE__,__func__,__FILE__)
+#define NCI_Calloc(a,b)  NCI_Calloc_fn(a,b,__LINE__,__func__,__FILE__)
+#define NCI_Realloc(a,b) NCI_Realloc_fn(a,b,__LINE__,__func__,__FILE__)
+#define NCI_Free(a)      NCI_Free_fn(a,__LINE__,__func__,__FILE__)
+
+extern int
+ncmpii_inq_malloc_size(size_t *size);
+
+extern int
+ncmpii_inq_malloc_max_size(size_t *size);
+
+extern int
+ncmpii_inq_malloc_list(void);
+
+extern int
+ncmpii_dtype_decode(MPI_Datatype dtype, MPI_Datatype *ptype, int *el_size,
+                    MPI_Offset *nelems, int *isderived,
+                    int *iscontig_of_ptypes);
+
+extern int
+ncmpii_create_imaptype(int ndims, const MPI_Offset *count,
+                       const MPI_Offset *imap, MPI_Datatype ptype,
+                       MPI_Datatype *imaptype);
+
+extern int
+ncmpii_error_mpi2nc(int mpi_errorcode, char *msg);
+
+extern int
+ncmpii_check_name(const char *name, int file_ver);
+
+extern MPI_Datatype
+ncmpii_nc2mpitype(nc_type xtype);
+
+extern int
+ncmpii_xlen_nc_type(nc_type xtype, int *size);
+
+extern int
+ncmpii_buftype_decode(int ndims, nc_type xtype, const MPI_Offset *count,
+                      MPI_Offset bufcount, MPI_Datatype buftype,
+                      MPI_Datatype *etype, int *esize, MPI_Offset *nelems,
+                      MPI_Offset *xnbytes, int *isContig);
+
+extern int
+ncmpii_pack(int ndims, const MPI_Offset *count, const MPI_Offset *imap,
+            void *buf, MPI_Offset bufcount, MPI_Datatype buftype,
+            MPI_Offset *bnelems, MPI_Datatype *ptype, void **cbuf);
+
+#if 0
+extern int    
+ncmpii_put_cast_swap(int format, MPI_Offset nelems, nc_type xtype,
+                     MPI_Datatype itype, void *fillp, void *ibuf,
+                     int isNewBuf, void **xbuf);
+
+extern int
+ncmpii_get_cast_swap(int format, MPI_Offset nelems, nc_type xtype,
+                     MPI_Datatype etype, void *buf, void *xbuf, void **ibuf);
+#endif
+
+extern int
+ncmpii_need_convert(int format, nc_type xtype, MPI_Datatype mpitype);
+
+extern int
+ncmpii_need_swap(nc_type xtype, MPI_Datatype mpitype);
+
+extern void
+ncmpii_in_swapn(void *buf, MPI_Offset nelems, int esize);
+
+extern int
+ncmpii_putn_NC_CHAR  (void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_putn_NC_BYTE  (int cdf_ver,
+                      void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_UBYTE (void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_SHORT (void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_USHORT(void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_INT   (void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_UINT  (void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_FLOAT (void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_DOUBLE(void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_INT64 (void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+extern int
+ncmpii_putn_NC_UINT64(void *xbuf, const void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype, void *fillp);
+
+extern int
+ncmpii_getn_NC_CHAR  (const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_BYTE  (int cdf_ver,
+                      const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_UBYTE (const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_SHORT (const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_USHORT(const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_INT   (const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_UINT  (const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_FLOAT (const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_DOUBLE(const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_INT64 (const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+extern int
+ncmpii_getn_NC_UINT64(const void *xbuf, void *buf, MPI_Offset nelems,
+                      MPI_Datatype datatype);
+
+extern int
+ncmpii_utf8_normalize(const char *str, char **normalp);
+
+extern int
+ncmpii_utf8_validate(const char* name);
+
+#endif
+
diff --git a/src/lib/ncx_h.m4 b/src/drivers/include/ncx_h.m4
similarity index 91%
rename from src/lib/ncx_h.m4
rename to src/drivers/include/ncx_h.m4
index e61a01a..6fa936f 100644
--- a/src/lib/ncx_h.m4
+++ b/src/drivers/include/ncx_h.m4
@@ -7,21 +7,21 @@ dnl
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* "$Id: ncx_h.m4 2582 2016-10-27 18:40:10Z wkliao $" */
+/* "$Id: ncx_h.m4 3407 2017-09-22 18:26:27Z wkliao $" */
 
-#ifndef _NCX_H_
-#define _NCX_H_
+#ifndef _NCX_H
+#define _NCX_H
+
+#include <stddef.h>    /* size_t */
+#include <sys/types.h> /* off_t */
+#include <errno.h>
 
 #include <mpi.h>
 
-#include "nc.h"
-#include "ncio.h"
-#include "fbits.h"
-#include "nctypes.h"
+#include <common.h>
 
 /*
  * An external data representation interface.
-
  *
  * This started out as a general replacement for ONC XDR,
  * specifically, the xdrmem family of functions.
@@ -35,21 +35,16 @@ dnl
  *
  */
 
-#include "rnd.h"
-#include <stddef.h> /* size_t */
-#include <errno.h>
-#include <sys/types.h> /* off_t */
-
-
 #if defined(_CRAY) && !defined(_CRAYIEEE) && !defined(__crayx1)
 #define CRAYFLOAT 1 /* CRAY Floating point */
-#elif defined(_SX) && defined(_FLOAT2)	/* NEC SUPER-UX in CRAY mode */
+#elif defined(_SX) && defined(_FLOAT2) /* NEC SUPER-UX in CRAY mode */
 #define CRAYFLOAT 1 /* CRAY Floating point */
 #endif
 
 /*
  * External sizes of the primitive elements.
  */
+#define X_SIZEOF_BYTE		1
 #define X_SIZEOF_CHAR		1
 #define X_SIZEOF_SHORT		2
 #define X_SIZEOF_INT		4	/* xdr_int */
@@ -75,7 +70,7 @@ dnl
  * using 64 bit offsets.
  *  see also X_SIZE_MAX, X_OFF_MAX below
  */
-/* #define X_SIZEOF_OFF_T		(sizeof(off_t)) */
+/* #define X_SIZEOF_OFF_T	(sizeof(off_t)) */
 #define X_SIZEOF_OFF_T		SIZEOF_OFF_T
 #define X_SIZEOF_SIZE_T		X_SIZEOF_INT
 
@@ -94,15 +89,15 @@ dnl
 #define X_INT_MIN	(-2147483647-1)
 #define X_INT_MAX	2147483647
 #define X_UINT_MAX	4294967295U
-#define X_LONGLONG_MIN	(-9223372036854775807LL-1LL)
-#define X_LONGLONG_MAX	9223372036854775807LL
-#define X_ULONGLONG_MAX	18446744073709551615ULL
+#define X_INT64_MIN	(-9223372036854775807LL-1LL)
+#define X_INT64_MAX	9223372036854775807LL
+#define X_UINT64_MAX	18446744073709551615ULL
 #define X_FLOAT_MAX	3.402823466e+38f
 #define X_FLOAT_MIN	(-X_FLOAT_MAX)
 #define X_FLT_MAX	X_FLOAT_MAX	/* alias compatible with limits.h */
 #if defined(CRAYFLOAT) && CRAYFLOAT != 0
 /* ldexp(1. - ldexp(.5 , -46), 1024) */
-#define X_DOUBLE_MAX    1.79769313486230e+308
+#define X_DOUBLE_MAX	1.79769313486230e+308
 #else
 /* scalb(1. - scalb(.5 , -52), 1024) */
 #define X_DOUBLE_MAX	1.7976931348623157e+308
@@ -121,7 +116,7 @@ dnl
  * These give the length of an array of nelems of the type.
  * N.B. The 'char' and 'short' interfaces give the X_ALIGNED length.
  */
-#define X_ALIGN			4	/* a.k.a. BYTES_PER_XDR_UNIT */
+#define X_ALIGN		4	/* a.k.a. BYTES_PER_XDR_UNIT */
 
 #define ncmpix_len_char(nelems) \
 	_RNDUP((nelems), X_ALIGN)
@@ -158,16 +153,6 @@ dnl
 
 /* End ncmpix_len */
 
-#if defined(__CHAR_UNSIGNED__) && __CHAR_UNSIGNED__ != 0
-	/* 'char' is unsigned, declare ncbyte as 'signed char' */
-typedef signed char schar;
-
-#else
-	/* 'char' is signed */
-typedef signed char schar;
-
-#endif	/* __CHAR_UNSIGNED__ */
-
 /*
  * Primitive numeric conversion functions.
  * The ``put'' functions convert from native internal
@@ -202,6 +187,7 @@ typedef signed char schar;
  *      	uchar
  *      	short
  *      	int
+ *      	long
  *      	float
  *      	double
  *      	ushort
@@ -220,10 +206,10 @@ typedef signed char schar;
  *
  * Storage for a single element of internal type is at ``ip'' argument.
  *
- * These functions return NC_NOERR when no error occured,
+ * These functions return NC_NOERR when no error occurred,
  * or NC_ERANGE when the value being converted is too large.
  * When NC_ERANGE occurs, an undefined (implementation dependent)
- * conversion may have occured.
+ * conversion may have occurred.
  *
  * Note that loss of precision may occur silently.
  *
@@ -258,6 +244,15 @@ ncmpix_put_uint32(void **xpp, const unsigned int ip);
 extern int
 ncmpix_put_uint64(void **xpp, const unsigned long long ip);
 
+extern int
+ncmpix_getn_uint32(const void **xpp, unsigned int *ip, int nelems);
+extern int
+ncmpix_getn_uint64(const void **xpp, unsigned long long *ip, int nelems);
+extern int
+ncmpix_putn_uint32(void **xpp, const unsigned int *ip, int nelems);
+extern int
+ncmpix_putn_uint64(void **xpp, const unsigned long long *ip, int nelems);
+
 
 /*
  * Aggregate numeric conversion functions.
diff --git a/src/drivers/ncfoo/Makefile.am b/src/drivers/ncfoo/Makefile.am
new file mode 100644
index 0000000..1c99d76
--- /dev/null
+++ b/src/drivers/ncfoo/Makefile.am
@@ -0,0 +1,55 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3283 2017-07-30 21:10:11Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .a .o .c .m4 .h
+
+AM_CPPFLAGS  = -I${top_srcdir}/src/include
+AM_CPPFLAGS += -I${top_builddir}/src/include
+AM_CPPFLAGS += -I${top_srcdir}/src/drivers/include
+AM_CPPFLAGS += -I${top_builddir}/src/drivers/include
+
+if PNETCDF_DEBUG
+   AM_CPPFLAGS += -DPNETCDF_DEBUG
+endif
+
+noinst_LTLIBRARIES = libncfoo.la
+
+M4FLAGS += -I${top_srcdir}/m4
+if ENABLE_ERANGE_FILL
+M4FLAGS += -DERANGE_FILL
+endif
+
+M4_SRCS = 
+
+H_SRCS = ncfoo_driver.h
+
+C_SRCS = ncfoo_attr.c \
+         ncfoo_dim.c \
+         ncfoo_driver.c \
+         ncfoo_file.c \
+         ncfoo_var.c
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+libncfoo_la_SOURCES = $(C_SRCS) $(H_SRCS)
+nodist_libncfoo_la_SOURCES = $(M4_SRCS:.m4=.c)
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# and 'make install'. This means you cannot build a specific target (e.g.,
+# 'make target') in a clean tree if it depends on a built source."
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+
+CLEANFILES = $(M4_SRCS:.m4=.c) *.gcno
+
+EXTRA_DIST = $(M4_HFILES) $(M4_SRCS)
+
+tests-local: all
+
diff --git a/src/drivers/ncfoo/Makefile.in b/src/drivers/ncfoo/Makefile.in
new file mode 100644
index 0000000..d7bece1
--- /dev/null
+++ b/src/drivers/ncfoo/Makefile.in
@@ -0,0 +1,726 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3283 2017-07-30 21:10:11Z wkliao $
+#
+# @configure_input@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at PNETCDF_DEBUG_TRUE@am__append_1 = -DPNETCDF_DEBUG
+ at ENABLE_ERANGE_FILL_TRUE@am__append_2 = -DERANGE_FILL
+subdir = src/drivers/ncfoo
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libncfoo_la_LIBADD =
+am__objects_1 = ncfoo_attr.lo ncfoo_dim.lo ncfoo_driver.lo \
+	ncfoo_file.lo ncfoo_var.lo
+am__objects_2 =
+am_libncfoo_la_OBJECTS = $(am__objects_1) $(am__objects_2)
+nodist_libncfoo_la_OBJECTS = $(am__objects_2)
+libncfoo_la_OBJECTS = $(am_libncfoo_la_OBJECTS) \
+	$(nodist_libncfoo_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libncfoo_la_SOURCES) $(nodist_libncfoo_la_SOURCES)
+DIST_SOURCES = $(libncfoo_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4 $(am__append_2)
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .a .o .c .m4 .h
+AM_CPPFLAGS = -I${top_srcdir}/src/include \
+	-I${top_builddir}/src/include \
+	-I${top_srcdir}/src/drivers/include \
+	-I${top_builddir}/src/drivers/include $(am__append_1)
+noinst_LTLIBRARIES = libncfoo.la
+M4_SRCS = 
+H_SRCS = ncfoo_driver.h
+C_SRCS = ncfoo_attr.c \
+         ncfoo_dim.c \
+         ncfoo_driver.c \
+         ncfoo_file.c \
+         ncfoo_var.c
+
+libncfoo_la_SOURCES = $(C_SRCS) $(H_SRCS)
+nodist_libncfoo_la_SOURCES = $(M4_SRCS:.m4=.c)
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# and 'make install'. This means you cannot build a specific target (e.g.,
+# 'make target') in a clean tree if it depends on a built source."
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+CLEANFILES = $(M4_SRCS:.m4=.c) *.gcno
+EXTRA_DIST = $(M4_HFILES) $(M4_SRCS)
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .a .o .c .m4 .h .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers/ncfoo/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/drivers/ncfoo/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libncfoo.la: $(libncfoo_la_OBJECTS) $(libncfoo_la_DEPENDENCIES) $(EXTRA_libncfoo_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(LINK)  $(libncfoo_la_OBJECTS) $(libncfoo_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncfoo_attr.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncfoo_dim.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncfoo_driver.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncfoo_file.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncfoo_var.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/drivers/ncfoo/ncfoo_attr.c b/src/drivers/ncfoo/ncfoo_attr.c
new file mode 100644
index 0000000..7637d75
--- /dev/null
+++ b/src/drivers/ncfoo/ncfoo_attr.c
@@ -0,0 +1,160 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncfoo_attr.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the following PnetCDF APIs.
+ *
+ * ncmpi_inq_attname() : dispatcher->inq_attname()
+ * ncmpi_inq_attid()   : dispatcher->inq_attid()
+ * ncmpi_inq_att()     : dispatcher->inq_att()
+ * ncmpi_rename_att()  : dispatcher->inq_rename_att()
+ * ncmpi_copy_att()    : dispatcher->inq_copy_att()
+ * ncmpi_del_att()     : dispatcher->inq_del_att()
+ * ncmpi_get_att()     : dispatcher->inq_get_att()
+ * ncmpi_put_att()     : dispatcher->inq_put_arr()
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpi.h>
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncfoo_driver.h>
+
+int
+ncfoo_inq_attname(void *ncdp,
+                  int   varid,
+                  int   attid,
+                  char *name)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq_attname(foo->ncp, varid, attid, name);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_inq_attid(void       *ncdp,
+                int         varid,
+                const char *name,
+                int        *attidp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq_attid(foo->ncp, varid, name, attidp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_inq_att(void       *ncdp,
+              int         varid,
+              const char *name,
+              nc_type    *datatypep,
+              MPI_Offset *lenp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq_att(foo->ncp, varid, name, datatypep, lenp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_rename_att(void       *ncdp,
+                 int         varid,
+                 const char *name,
+                 const char *newname)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->rename_att(foo->ncp, varid, name, newname);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+
+int
+ncfoo_copy_att(void       *ncdp_in,
+               int         varid_in,
+               const char *name,
+               void       *ncdp_out,
+               int         varid_out)
+{
+    int err;
+    NC_foo *foo_in  = (NC_foo*)ncdp_in;
+    NC_foo *foo_out = (NC_foo*)ncdp_out;
+    
+    err = foo_in->driver->copy_att(foo_in->ncp,  varid_in, name,
+                                   foo_out->ncp, varid_out);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_del_att(void       *ncdp,
+              int         varid,
+              const char *name)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->del_att(foo->ncp, varid, name);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_get_att(void         *ncdp,
+              int           varid,
+              const char   *name,
+              void         *buf,
+              MPI_Datatype  itype)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->get_att(foo->ncp, varid, name, buf, itype);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_put_att(void         *ncdp,
+              int           varid,
+              const char   *name,
+              nc_type       xtype,
+              MPI_Offset    nelems,
+              const void   *buf,
+              MPI_Datatype  itype)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->put_att(foo->ncp, varid, name, xtype, nelems, buf,
+                               itype);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
diff --git a/src/drivers/ncfoo/ncfoo_dim.c b/src/drivers/ncfoo/ncfoo_dim.c
new file mode 100644
index 0000000..46321c5
--- /dev/null
+++ b/src/drivers/ncfoo/ncfoo_dim.c
@@ -0,0 +1,85 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncfoo_dim.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the following PnetCDF APIs.
+ *
+ * ncmpi_def_dim()    : dispatcher->def_dim()
+ * ncmpi_inq_dimid()  : dispatcher->inq_dimid()
+ * ncmpi_inq_dim()    : dispatcher->inq_dim()
+ * ncmpi_rename_dim() : dispatcher->rename_dim()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncfoo_driver.h>
+
+int
+ncfoo_def_dim(void       *ncdp,
+              const char *name,
+              MPI_Offset  size,
+              int        *dimidp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->def_dim(foo->ncp, name, size, dimidp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_inq_dimid(void       *ncdp,
+                const char *name,
+                int        *dimid)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq_dimid(foo->ncp, name, dimid);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_inq_dim(void       *ncdp,
+              int         dimid,
+              char       *name,
+              MPI_Offset *sizep)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq_dim(foo->ncp, dimid, name, sizep);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_rename_dim(void       *ncdp,
+                 int         dimid,
+                 const char *newname)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->rename_dim(foo->ncp, dimid, newname);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
diff --git a/src/drivers/ncfoo/ncfoo_driver.c b/src/drivers/ncfoo/ncfoo_driver.c
new file mode 100644
index 0000000..405c320
--- /dev/null
+++ b/src/drivers/ncfoo/ncfoo_driver.c
@@ -0,0 +1,76 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncfoo_driver.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <dispatch.h>
+#include <ncfoo_driver.h>
+
+static PNC_driver ncfoo_driver = {
+    /* FILE APIs */
+    ncfoo_create,
+    ncfoo_open,
+    ncfoo_close,
+    ncfoo_enddef,
+    ncfoo__enddef,
+    ncfoo_redef,
+    ncfoo_sync,
+    ncfoo_abort,
+    ncfoo_set_fill,
+    ncfoo_inq,
+    ncfoo_inq_misc,
+    ncfoo_sync_numrecs,
+    ncfoo_begin_indep_data,
+    ncfoo_end_indep_data,
+
+    /* DIMENSION APIs */
+    ncfoo_def_dim,
+    ncfoo_inq_dimid,
+    ncfoo_inq_dim,
+    ncfoo_rename_dim,
+
+    /* ATTRIBUTE APIs */
+    ncfoo_inq_att,
+    ncfoo_inq_attid,
+    ncfoo_inq_attname,
+    ncfoo_copy_att,
+    ncfoo_rename_att,
+    ncfoo_del_att,
+    ncfoo_get_att,
+    ncfoo_put_att,
+
+    /* VARIABLE APIs */
+    ncfoo_def_var,
+    ncfoo_def_var_fill,
+    ncfoo_fill_var_rec,
+    ncfoo_inq_var,
+    ncfoo_inq_varid,
+    ncfoo_rename_var,
+    ncfoo_get_var,
+    ncfoo_put_var,
+    ncfoo_get_varn,
+    ncfoo_put_varn,
+    ncfoo_get_vard,
+    ncfoo_put_vard,
+    ncfoo_iget_var,
+    ncfoo_iput_var,
+    ncfoo_bput_var,
+    ncfoo_iget_varn,
+    ncfoo_iput_varn,
+    ncfoo_bput_varn,
+
+    ncfoo_buffer_attach,
+    ncfoo_buffer_detach,
+    ncfoo_wait,
+    ncfoo_cancel
+};
+
+PNC_driver* ncfoo_inq_driver(void) {
+    return &ncfoo_driver;
+}
+
diff --git a/src/drivers/ncfoo/ncfoo_driver.h b/src/drivers/ncfoo/ncfoo_driver.h
new file mode 100644
index 0000000..d8ca628
--- /dev/null
+++ b/src/drivers/ncfoo/ncfoo_driver.h
@@ -0,0 +1,174 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncfoo_driver.h 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifndef _NCFOO_DRIVER_H
+#define _NCFOO_DRIVER_H
+
+#include <mpi.h>
+#include <pnetcdf.h>
+#include <dispatch.h>
+
+typedef struct NC_foo NC_foo; /* forward reference */
+struct NC_foo {
+    int                mode;        /* file _open/_create mode */
+    int                flag;        /* define/data/collective/indep mode */
+    char              *path;        /* path name */
+    MPI_Comm           comm;        /* MPI communicator */
+    void              *ncp;         /* pointer to driver's internal object */
+    struct PNC_driver *driver;
+};
+
+extern int
+ncfoo_create(MPI_Comm comm, const char *path, int cmode, int ncid, MPI_Info info, void **ncdp);
+
+extern int
+ncfoo_open(MPI_Comm comm, const char *path, int omode, int ncid, MPI_Info info, void **ncdp);
+
+extern int
+ncfoo_close(void *ncdp);
+
+extern int
+ncfoo_enddef(void *ncdp);
+
+extern int
+ncfoo__enddef(void *ncdp, MPI_Offset h_minfree, MPI_Offset v_align, MPI_Offset v_minfree, MPI_Offset r_align);
+
+extern int
+ncfoo_redef(void *ncdp);
+
+extern int
+ncfoo_sync(void *ncdp);
+
+extern int
+ncfoo_abort(void *ncdp);
+
+extern int
+ncfoo_set_fill(void *ncdp, int fill_mode, int *old_fill_mode);
+
+extern int
+ncfoo_fill_var_rec(void *ncdp, int varid, MPI_Offset recno);
+
+extern int
+ncfoo_inq(void *ncdp, int *ndimsp, int *nvarsp, int *nattsp, int *xtendimp);
+
+extern int
+ncfoo_inq_misc(void *ncdp, int *pathlen, char *path, int *num_fix_varsp,
+               int *num_rec_varsp, int *striping_size, int *striping_count,
+               MPI_Offset *header_size, MPI_Offset *header_extent,
+               MPI_Offset *recsize, MPI_Offset *put_size, MPI_Offset *get_size,
+               MPI_Info *info_used, int *nreqs, MPI_Offset *usage,
+               MPI_Offset *buf_size);
+
+extern int
+ncfoo_sync_numrecs(void *ncdp);
+
+extern int
+ncfoo_begin_indep_data(void *ncdp);
+
+extern int
+ncfoo_end_indep_data(void *ncdp);
+
+extern int
+ncfoo_def_dim(void *ncdp, const char *name, MPI_Offset size, int *dimidp);
+
+extern int
+ncfoo_inq_dimid(void *ncdp, const char *name, int *dimidp);
+
+extern int
+ncfoo_inq_dim(void *ncdp, int dimid, char *name, MPI_Offset *lengthp);
+
+extern int
+ncfoo_rename_dim(void *ncdp, int dimid, const char *newname);
+
+extern int
+ncfoo_inq_att(void *ncdp, int varid, const char *name, nc_type *xtypep, MPI_Offset *lenp);
+
+extern int
+ncfoo_inq_attid(void *ncdp, int varid, const char *name, int *idp); 
+
+extern int
+ncfoo_inq_attname(void *ncdp, int varid, int attnum, char *name);
+
+extern int
+ncfoo_copy_att(void *ncdp_in, int varid_in, const char *name, void *ncdp_out, int varid_out);
+
+extern int
+ncfoo_rename_att(void *ncdp, int varid, const char *name, const char *newname);
+
+extern int
+ncfoo_del_att(void *ncdp, int varid, const char *name);
+
+extern int
+ncfoo_get_att(void *ncdp, int varid, const char *name, void *value, MPI_Datatype itype);
+
+extern int
+ncfoo_put_att(void *ncdp, int varid, const char *name, nc_type xtype, MPI_Offset nelems, const void *value, MPI_Datatype itype);
+
+extern int
+ncfoo_def_var(void *ncdp, const char *name, nc_type type, int ndims, const int *dimids, int *varidp);
+
+extern int
+ncfoo_def_var_fill(void *ncdp, int varid, int nofill, const void *fill_value);
+
+extern int
+ncfoo_inq_var(void *ncdp, int varid, char *name, nc_type *xtypep, int *ndimsp,
+               int *dimids, int *nattsp, MPI_Offset *offsetp, int *no_fill, void *fill_value);
+
+extern int
+ncfoo_inq_varid(void *ncdp, const char *name, int *varid);
+
+extern int
+ncfoo_rename_var(void *ncdp, int varid, const char *newname);
+
+extern int
+ncfoo_get_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncfoo_put_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncfoo_get_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncfoo_put_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncfoo_get_vard(void *ncdp, int varid, MPI_Datatype filetype, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncfoo_put_vard(void *ncdp, int varid, MPI_Datatype filetype, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncfoo_iget_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *req, int reqMode);
+
+extern int
+ncfoo_iput_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *req, int reqMode);
+
+extern int
+ncfoo_bput_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *req, int reqMode);
+
+extern int
+ncfoo_iget_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *reqid, int reqMode);
+
+extern int
+ncfoo_iput_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *reqid, int reqMode);
+
+extern int
+ncfoo_bput_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *reqid, int reqMode);
+
+extern int
+ncfoo_buffer_attach(void *ncdp, MPI_Offset bufsize);
+
+extern int
+ncfoo_buffer_detach(void *ncdp);
+
+extern int
+ncfoo_wait(void *ncdp, int num_reqs, int *req_ids, int *statuses, int reqMode);
+
+extern int
+ncfoo_cancel(void *ncdp, int num_reqs, int *req_ids, int *statuses);
+
+#endif
diff --git a/src/drivers/ncfoo/ncfoo_file.c b/src/drivers/ncfoo/ncfoo_file.c
new file mode 100644
index 0000000..f1efef3
--- /dev/null
+++ b/src/drivers/ncfoo/ncfoo_file.c
@@ -0,0 +1,378 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncfoo_file.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the following PnetCDF APIs
+ *
+ * ncmpi_create()           : dispatcher->create()
+ * ncmpi_open()             : dispatcher->open()
+ * ncmpi_close()            : dispatcher->close()
+ * ncmpi_enddef()           : dispatcher->enddef()
+ * ncmpi__enddef()          : dispatcher->_enddef()
+ * ncmpi_redef()            : dispatcher->redef()
+ * ncmpi_begin_indep_data() : dispatcher->begin_indep_data()
+ * ncmpi_end_indep_data()   : dispatcher->end_indep_data()
+ * ncmpi_abort()            : dispatcher->abort()
+ * ncmpi_inq()              : dispatcher->inq()
+ * ncmpi_inq_misc()         : dispatcher->inq_misc()
+ * ncmpi_wait()             : dispatcher->wait()
+ * ncmpi_wait_all()         : dispatcher->wait()
+ * ncmpi_cancel()           : dispatcher->cancel()
+ *
+ * ncmpi_set_fill()         : dispatcher->set_fill()
+ * ncmpi_fill_var_rec()     : dispatcher->fill_rec()
+ * ncmpi_def_var_fill()     : dispatcher->def_var_fill()
+ * ncmpi_inq_var_fill()     : dispatcher->inq()
+ *
+ * ncmpi_sync()             : dispatcher->sync()
+ * ncmpi_sync_numrecs()     : dispatcher->sync_numrecs()
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h> /* strlen() */
+
+#include <mpi.h>
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncfoo_driver.h>
+
+int
+ncfoo_create(MPI_Comm     comm,
+             const char  *path,
+             int          cmode,
+             int          ncid,
+             MPI_Info     info,
+             void       **ncpp)  /* OUT */
+{
+    int err;
+    void *ncp=NULL;
+    NC_foo *foo;
+    PNC_driver *driver=NULL;
+
+    /* TODO: use comde to determine the true driver */
+    driver = ncmpio_inq_driver();
+    if (driver == NULL) return NC_ENOTNC;
+
+    err = driver->create(comm, path, cmode, ncid, info, &ncp);
+    if (err != NC_NOERR) return err;
+
+    /* Create a NC_foo object and save its driver pointer */
+    foo = (NC_foo*) NCI_Malloc(sizeof(NC_foo));
+    if (foo == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    foo->path = (char*) NCI_Malloc(strlen(path)+1);
+    if (foo->path == NULL) {
+        NCI_Free(foo);
+        DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    strcpy(foo->path, path);
+    foo->mode       = cmode;
+    foo->driver     = driver;
+    foo->flag       = 0;
+    foo->ncp        = ncp;
+    MPI_Comm_dup(comm, &foo->comm);
+
+    *ncpp = foo;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_open(MPI_Comm     comm,
+           const char  *path,
+           int          omode,
+           int          ncid,
+           MPI_Info     info,
+           void       **ncpp)
+{
+    int err, format;
+    void *ncp=NULL;
+    NC_foo *foo;
+    PNC_driver *driver=NULL;
+
+    err = ncmpi_inq_file_format(path, &format);
+    if (err != NC_NOERR) return err;
+
+    if (format == NC_FORMAT_CLASSIC ||
+        format == NC_FORMAT_CDF2 ||
+        format == NC_FORMAT_CDF5) {
+        driver = ncmpio_inq_driver();
+    }
+    if (driver == NULL) return NC_ENOTNC;
+
+    err = driver->open(comm, path, omode, ncid, info, &ncp);
+    if (err != NC_NOERR) return err;
+
+    /* Create a NC_foo object and save its driver pointer */
+    foo = (NC_foo*) NCI_Malloc(sizeof(NC_foo));
+    if (foo == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    foo->path = (char*) NCI_Malloc(strlen(path)+1);
+    if (foo->path == NULL) {
+        NCI_Free(foo);
+        DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    strcpy(foo->path, path);
+    foo->mode       = omode;
+    foo->driver     = driver;
+    foo->flag       = 0;
+    foo->ncp        = ncp;
+    MPI_Comm_dup(comm, &foo->comm);
+
+    *ncpp = foo;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_close(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+
+    if (foo == NULL) DEBUG_RETURN_ERROR(NC_EBADID)
+
+    err = foo->driver->close(foo->ncp);
+
+    MPI_Comm_free(&foo->comm);
+    NCI_Free(foo->path);
+    NCI_Free(foo);
+
+    return err;
+}
+
+int
+ncfoo_enddef(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->enddef(foo->ncp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo__enddef(void       *ncdp,
+              MPI_Offset  h_minfree,
+              MPI_Offset  v_align,
+              MPI_Offset  v_minfree,
+              MPI_Offset  r_align)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->_enddef(foo->ncp, h_minfree, v_align, v_minfree,
+                               r_align);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_redef(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->redef(foo->ncp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_begin_indep_data(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->begin_indep_data(foo->ncp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_end_indep_data(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->end_indep_data(foo->ncp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_abort(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    if (foo == NULL) DEBUG_RETURN_ERROR(NC_EBADID)
+
+    err = foo->driver->abort(foo->ncp);
+
+    MPI_Comm_free(&foo->comm);
+    NCI_Free(foo->path);
+    NCI_Free(foo);
+
+    return err;
+}
+
+int
+ncfoo_inq(void *ncdp,
+          int  *ndimsp,
+          int  *nvarsp,
+          int  *nattsp,
+          int  *xtendimp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq(foo->ncp, ndimsp, nvarsp, nattsp, xtendimp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_inq_misc(void       *ncdp,
+               int        *pathlen,
+               char       *path,
+               int        *num_fix_varsp,
+               int        *num_rec_varsp,
+               int        *striping_size,
+               int        *striping_count,
+               MPI_Offset *header_size,
+               MPI_Offset *header_extent,
+               MPI_Offset *recsize,
+               MPI_Offset *put_size,
+               MPI_Offset *get_size,
+               MPI_Info   *info_used,
+               int        *nreqs,
+               MPI_Offset *usage,
+               MPI_Offset *buf_size)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq_misc(foo->ncp, pathlen, path, num_fix_varsp,
+                                num_rec_varsp, striping_size, striping_count,
+                                header_size, header_extent, recsize, put_size,
+                                get_size, info_used, nreqs, usage, buf_size);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_cancel(void *ncdp,
+             int   num_req,
+             int  *req_ids,
+             int  *statuses)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->cancel(foo->ncp, num_req, req_ids, statuses);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_wait(void *ncdp,
+           int   num_reqs,
+           int  *req_ids,
+           int  *statuses,
+           int   reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->wait(foo->ncp, num_reqs, req_ids, statuses, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_set_fill(void *ncdp,
+               int   fill_mode,
+               int  *old_fill_mode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->set_fill(foo->ncp, fill_mode, old_fill_mode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_fill_var_rec(void      *ncdp,
+                   int        varid,
+                   MPI_Offset recno)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->fill_var_rec(foo->ncp, varid, recno);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_def_var_fill(void       *ncdp,
+                   int         varid,
+                   int         no_fill,
+                   const void *fill_value)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->def_var_fill(foo->ncp, varid, no_fill, fill_value);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_sync_numrecs(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->sync_numrecs(foo->ncp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_sync(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->sync(foo->ncp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
diff --git a/src/drivers/ncfoo/ncfoo_var.c b/src/drivers/ncfoo/ncfoo_var.c
new file mode 100644
index 0000000..855efa9
--- /dev/null
+++ b/src/drivers/ncfoo/ncfoo_var.c
@@ -0,0 +1,438 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncfoo_var.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the following PnetCDF APIs.
+ *
+ * ncmpi_def_var()                  : dispatcher->def_var()
+ * ncmpi_inq_varid()                : dispatcher->inq_varid()
+ * ncmpi_inq_var()                  : dispatcher->inq_var()
+ * ncmpi_rename_var()               : dispatcher->rename_var()
+ *
+ * ncmpi_get_var<kind>()            : dispatcher->get_var()
+ * ncmpi_put_var<kind>()            : dispatcher->put_var()
+ * ncmpi_get_var<kind>_<type>()     : dispatcher->get_var()
+ * ncmpi_put_var<kind>_<type>()     : dispatcher->put_var()
+ * ncmpi_get_var<kind>_all()        : dispatcher->get_var()
+ * ncmpi_put_var<kind>_all()        : dispatcher->put_var()
+ * ncmpi_get_var<kind>_<type>_all() : dispatcher->get_var()
+ * ncmpi_put_var<kind>_<type>_all() : dispatcher->put_var()
+ *
+ * ncmpi_iget_var<kind>()           : dispatcher->iget_var()
+ * ncmpi_iput_var<kind>()           : dispatcher->iput_var()
+ * ncmpi_iget_var<kind>_<type>()    : dispatcher->iget_var()
+ * ncmpi_iput_var<kind>_<type>()    : dispatcher->iput_var()
+ *
+ * ncmpi_buffer_attach()            : dispatcher->buffer_attach()
+ * ncmpi_buffer_detach()            : dispatcher->buffer_detach()
+ * ncmpi_bput_var<kind>_<type>()    : dispatcher->bput_var()
+ *
+ * ncmpi_get_varn_<type>()          : dispatcher->get_varn()
+ * ncmpi_put_varn_<type>()          : dispatcher->put_varn()
+ *
+ * ncmpi_iget_varn_<type>()         : dispatcher->iget_varn()
+ * ncmpi_iput_varn_<type>()         : dispatcher->iput_varn()
+ * ncmpi_bput_varn_<type>()         : dispatcher->bput_varn()
+ *
+ * ncmpi_get_vard()                 : dispatcher->get_vard()
+ * ncmpi_put_vard()                 : dispatcher->put_vard()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncfoo_driver.h>
+
+int
+ncfoo_def_var(void       *ncdp,
+              const char *name,
+              nc_type     xtype,
+              int         ndims,
+              const int  *dimids,
+              int        *varidp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->def_var(foo->ncp, name, xtype, ndims, dimids, varidp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_inq_varid(void       *ncdp,
+                const char *name,
+                int        *varid)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq_varid(foo->ncp, name, varid);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_inq_var(void       *ncdp,
+              int         varid,
+              char       *name,
+              nc_type    *xtypep,
+              int        *ndimsp,
+              int        *dimids,
+              int        *nattsp,
+              MPI_Offset *offsetp,
+              int        *no_fillp,
+              void       *fill_valuep)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->inq_var(foo->ncp, varid, name, xtypep, ndimsp, dimids,
+                               nattsp, offsetp, no_fillp, fill_valuep);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_rename_var(void       *ncdp,
+                 int         varid,
+                 const char *newname)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->rename_var(foo->ncp, varid, newname);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_get_var(void             *ncdp,
+              int               varid,
+              const MPI_Offset *start,
+              const MPI_Offset *count,
+              const MPI_Offset *stride,
+              const MPI_Offset *imap,
+              void             *buf,
+              MPI_Offset        bufcount,
+              MPI_Datatype      buftype,
+              int               reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->get_var(foo->ncp, varid, start, count, stride, imap,
+                               buf, bufcount, buftype, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_put_var(void             *ncdp,
+              int               varid,
+              const MPI_Offset *start,
+              const MPI_Offset *count,
+              const MPI_Offset *stride,
+              const MPI_Offset *imap,
+              const void       *buf,
+              MPI_Offset        bufcount,
+              MPI_Datatype      buftype,
+              int               reqMode)
+{
+    int err=NC_NOERR, status;
+    void *cbuf=(void*)buf;
+    NC_foo *foo = (NC_foo*)ncdp;
+
+    if (imap != NULL || bufcount != -1) {
+        /* pack buf to cbuf -------------------------------------------------*/
+        /* If called from a true varm API or a flexible API, ncmpii_pack()
+         * packs user buf into a contiguous cbuf (need to be freed later).
+         * Otherwise, cbuf is simply set to buf. ncmpii_pack() also returns
+         * etype (MPI primitive datatype in buftype), and nelems (number of
+         * etypes in buftype * bufcount)
+         */
+        int ndims;
+        MPI_Offset nelems;
+        MPI_Datatype etype;
+
+        err = foo->driver->inq_var(foo->ncp, varid, NULL, NULL, &ndims, NULL,
+                                   NULL, NULL, NULL, NULL);
+        if (err != NC_NOERR) goto err_check;
+
+        err = ncmpii_pack(ndims, count, imap, (void*)buf, bufcount, buftype,
+                          &nelems, &etype, &cbuf);
+        if (err != NC_NOERR) goto err_check;
+
+        imap     = NULL;
+        bufcount = (nelems == 0) ? 0 : -1;  /* make it a high-level API */
+        buftype  = etype;                   /* an MPI primitive type */
+    }
+
+err_check:
+    if (err != NC_NOERR) {
+        if (reqMode & NC_REQ_INDEP) return err;
+        reqMode |= NC_REQ_ZERO; /* participate collective call */
+    }
+
+    status = foo->driver->put_var(foo->ncp, varid, start, count, stride, imap,
+                                  cbuf, bufcount, buftype, reqMode);
+    if (cbuf != buf) NCI_Free(cbuf);
+
+    return (err == NC_NOERR) ? status : err; /* first error encountered */
+}
+
+int
+ncfoo_iget_var(void             *ncdp,
+               int               varid,
+               const MPI_Offset *start,
+               const MPI_Offset *count,
+               const MPI_Offset *stride,
+               const MPI_Offset *imap,
+               void             *buf,
+               MPI_Offset        bufcount,
+               MPI_Datatype      buftype,
+               int              *reqid,
+               int               reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->iget_var(foo->ncp, varid, start, count, stride, imap,
+                                buf, bufcount, buftype, reqid, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_iput_var(void             *ncdp,
+               int               varid,
+               const MPI_Offset *start,
+               const MPI_Offset *count,
+               const MPI_Offset *stride,
+               const MPI_Offset *imap,
+               const void       *buf,
+               MPI_Offset        bufcount,
+               MPI_Datatype      buftype,
+               int              *reqid,
+               int               reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->iput_var(foo->ncp, varid, start, count, stride, imap,
+                                buf, bufcount, buftype, reqid, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_buffer_attach(void       *ncdp,
+                    MPI_Offset  bufsize)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->buffer_attach(foo->ncp, bufsize);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_buffer_detach(void *ncdp)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->buffer_detach(foo->ncp);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_bput_var(void             *ncdp,
+               int               varid,
+               const MPI_Offset *start,
+               const MPI_Offset *count,
+               const MPI_Offset *stride,
+               const MPI_Offset *imap,
+               const void       *buf,
+               MPI_Offset        bufcount,
+               MPI_Datatype      buftype,
+               int              *reqid,
+               int               reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->bput_var(foo->ncp, varid, start, count, stride, imap,
+                                buf, bufcount, buftype, reqid, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+int
+ncfoo_get_varn(void              *ncdp,
+               int                varid,
+               int                num,
+               MPI_Offset* const *starts,
+               MPI_Offset* const *counts,
+               void              *buf,
+               MPI_Offset         bufcount,
+               MPI_Datatype       buftype,
+               int                reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->get_varn(foo->ncp, varid, num, starts, counts, buf,
+                                bufcount, buftype, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_put_varn(void              *ncdp,
+               int                varid,
+               int                num,
+               MPI_Offset* const *starts,
+               MPI_Offset* const *counts,
+               const void        *buf,
+               MPI_Offset         bufcount,
+               MPI_Datatype       buftype,
+               int                reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->put_varn(foo->ncp, varid, num, starts, counts, buf,
+                                bufcount, buftype, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_iget_varn(void               *ncdp,
+                int                 varid,
+                int                 num,
+                MPI_Offset* const  *starts,
+                MPI_Offset* const  *counts,
+                void               *buf,
+                MPI_Offset          bufcount,
+                MPI_Datatype        buftype,
+                int                *reqid,
+                int                 reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->iget_varn(foo->ncp, varid, num, starts, counts, buf,
+                                 bufcount, buftype, reqid, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_iput_varn(void               *ncdp,
+                int                 varid,
+                int                 num,
+                MPI_Offset* const  *starts,
+                MPI_Offset* const  *counts,
+                const void         *buf,
+                MPI_Offset          bufcount,
+                MPI_Datatype        buftype,
+                int                *reqid,
+                int                 reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->iput_varn(foo->ncp, varid, num, starts, counts, buf,
+                                 bufcount, buftype, reqid, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_bput_varn(void               *ncdp,
+                int                 varid,
+                int                 num,
+                MPI_Offset* const  *starts,
+                MPI_Offset* const  *counts,
+                const void         *buf,
+                MPI_Offset          bufcount,
+                MPI_Datatype        buftype,
+                int                *reqid,
+                int                 reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->bput_varn(foo->ncp, varid, num, starts, counts, buf,
+                                 bufcount, buftype, reqid, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_get_vard(void         *ncdp,
+               int           varid,
+               MPI_Datatype  filetype,
+               void         *buf,
+               MPI_Offset    bufcount,
+               MPI_Datatype  buftype,
+               int           reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->get_vard(foo->ncp, varid, filetype, buf, bufcount,
+                                buftype, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
+int
+ncfoo_put_vard(void         *ncdp,
+               int           varid,
+               MPI_Datatype  filetype,
+               const void   *buf,
+               MPI_Offset    bufcount,
+               MPI_Datatype  buftype,
+               int           reqMode)
+{
+    int err;
+    NC_foo *foo = (NC_foo*)ncdp;
+    
+    err = foo->driver->put_vard(foo->ncp, varid, filetype, buf, bufcount,
+                                buftype, reqMode);
+    if (err != NC_NOERR) return err;
+
+    return NC_NOERR;
+}
+
diff --git a/src/drivers/ncmpio/Makefile.am b/src/drivers/ncmpio/Makefile.am
new file mode 100644
index 0000000..e34a7d7
--- /dev/null
+++ b/src/drivers/ncmpio/Makefile.am
@@ -0,0 +1,80 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .a .o .c .m4 .h
+
+AM_CPPFLAGS  = -I${top_srcdir}/src/include
+AM_CPPFLAGS += -I${top_builddir}/src/include
+AM_CPPFLAGS += -I${top_srcdir}/src/drivers/include
+AM_CPPFLAGS += -I${top_builddir}/src/drivers/include
+
+if PNETCDF_DEBUG
+   AM_CPPFLAGS += -DPNETCDF_DEBUG
+endif
+
+noinst_LTLIBRARIES = libncmpio.la
+
+M4FLAGS += -I${top_srcdir}/m4
+if ENABLE_ERANGE_FILL
+M4FLAGS += -DERANGE_FILL
+endif
+
+M4_SRCS   = ncmpio_getput.m4 \
+            ncmpio_i_getput.m4 \
+            ncmpio_varn.m4 \
+            ncmpio_i_varn.m4 \
+            ncmpio_attr.m4
+
+H_SRCS = ncmpio_driver.h \
+         ncmpio_NC.h \
+         ncmpio_subfile.h
+
+C_SRCS = ncmpio_driver.c \
+         ncmpio_create.c \
+         ncmpio_open.c \
+         ncmpio_enddef.c \
+         ncmpio_close.c \
+         ncmpio_sync.c \
+         ncmpio_file_misc.c \
+         ncmpio_header_get.c \
+         ncmpio_header_put.c \
+         ncmpio_dim.c \
+         ncmpio_var.c \
+         ncmpio_bput.c \
+         ncmpio_filetype.c \
+         ncmpio_wait.c   \
+         ncmpio_vard.c \
+         ncmpio_fill.c \
+         ncmpio_util.c \
+         ncmpio_hash_func.c
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+libncmpio_la_SOURCES = $(C_SRCS) $(H_SRCS)
+nodist_libncmpio_la_SOURCES = $(M4_SRCS:.m4=.c)
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# and 'make install'. This means you cannot build a specific target (e.g.,
+# 'make foo') in a clean tree if it depends on a built source."
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+
+if ENABLE_SUBFILING
+libncmpio_la_SOURCES += ncmpio_subfile.c
+endif
+
+CLEANFILES = $(M4_SRCS:.m4=.c) *.gcno
+
+EXTRA_DIST = $(M4_HFILES) \
+             $(M4_SRCS) \
+             ncmpio_subfile.c
+
+tests-local: all
+
diff --git a/src/drivers/ncmpio/Makefile.in b/src/drivers/ncmpio/Makefile.in
new file mode 100644
index 0000000..79d394b
--- /dev/null
+++ b/src/drivers/ncmpio/Makefile.in
@@ -0,0 +1,785 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at PNETCDF_DEBUG_TRUE@am__append_1 = -DPNETCDF_DEBUG
+ at ENABLE_ERANGE_FILL_TRUE@am__append_2 = -DERANGE_FILL
+ at ENABLE_SUBFILING_TRUE@am__append_3 = ncmpio_subfile.c
+subdir = src/drivers/ncmpio
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libncmpio_la_LIBADD =
+am__libncmpio_la_SOURCES_DIST = ncmpio_driver.c ncmpio_create.c \
+	ncmpio_open.c ncmpio_enddef.c ncmpio_close.c ncmpio_sync.c \
+	ncmpio_file_misc.c ncmpio_header_get.c ncmpio_header_put.c \
+	ncmpio_dim.c ncmpio_var.c ncmpio_bput.c ncmpio_filetype.c \
+	ncmpio_wait.c ncmpio_vard.c ncmpio_fill.c ncmpio_util.c \
+	ncmpio_hash_func.c ncmpio_driver.h ncmpio_NC.h \
+	ncmpio_subfile.h ncmpio_subfile.c
+am__objects_1 = ncmpio_driver.lo ncmpio_create.lo ncmpio_open.lo \
+	ncmpio_enddef.lo ncmpio_close.lo ncmpio_sync.lo \
+	ncmpio_file_misc.lo ncmpio_header_get.lo ncmpio_header_put.lo \
+	ncmpio_dim.lo ncmpio_var.lo ncmpio_bput.lo ncmpio_filetype.lo \
+	ncmpio_wait.lo ncmpio_vard.lo ncmpio_fill.lo ncmpio_util.lo \
+	ncmpio_hash_func.lo
+am__objects_2 =
+ at ENABLE_SUBFILING_TRUE@am__objects_3 = ncmpio_subfile.lo
+am_libncmpio_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+	$(am__objects_3)
+am__objects_4 = ncmpio_getput.lo ncmpio_i_getput.lo ncmpio_varn.lo \
+	ncmpio_i_varn.lo ncmpio_attr.lo
+nodist_libncmpio_la_OBJECTS = $(am__objects_4)
+libncmpio_la_OBJECTS = $(am_libncmpio_la_OBJECTS) \
+	$(nodist_libncmpio_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libncmpio_la_SOURCES) $(nodist_libncmpio_la_SOURCES)
+DIST_SOURCES = $(am__libncmpio_la_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp TODO
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4 $(am__append_2)
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .a .o .c .m4 .h
+AM_CPPFLAGS = -I${top_srcdir}/src/include \
+	-I${top_builddir}/src/include \
+	-I${top_srcdir}/src/drivers/include \
+	-I${top_builddir}/src/drivers/include $(am__append_1)
+noinst_LTLIBRARIES = libncmpio.la
+M4_SRCS = ncmpio_getput.m4 \
+            ncmpio_i_getput.m4 \
+            ncmpio_varn.m4 \
+            ncmpio_i_varn.m4 \
+            ncmpio_attr.m4
+
+H_SRCS = ncmpio_driver.h \
+         ncmpio_NC.h \
+         ncmpio_subfile.h
+
+C_SRCS = ncmpio_driver.c \
+         ncmpio_create.c \
+         ncmpio_open.c \
+         ncmpio_enddef.c \
+         ncmpio_close.c \
+         ncmpio_sync.c \
+         ncmpio_file_misc.c \
+         ncmpio_header_get.c \
+         ncmpio_header_put.c \
+         ncmpio_dim.c \
+         ncmpio_var.c \
+         ncmpio_bput.c \
+         ncmpio_filetype.c \
+         ncmpio_wait.c   \
+         ncmpio_vard.c \
+         ncmpio_fill.c \
+         ncmpio_util.c \
+         ncmpio_hash_func.c
+
+libncmpio_la_SOURCES = $(C_SRCS) $(H_SRCS) $(am__append_3)
+nodist_libncmpio_la_SOURCES = $(M4_SRCS:.m4=.c)
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# and 'make install'. This means you cannot build a specific target (e.g.,
+# 'make foo') in a clean tree if it depends on a built source."
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+CLEANFILES = $(M4_SRCS:.m4=.c) *.gcno
+EXTRA_DIST = $(M4_HFILES) \
+             $(M4_SRCS) \
+             ncmpio_subfile.c
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .a .o .c .m4 .h .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/drivers/ncmpio/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/drivers/ncmpio/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libncmpio.la: $(libncmpio_la_OBJECTS) $(libncmpio_la_DEPENDENCIES) $(EXTRA_libncmpio_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(LINK)  $(libncmpio_la_OBJECTS) $(libncmpio_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_attr.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_bput.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_close.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_create.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_dim.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_driver.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_enddef.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_file_misc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_filetype.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_fill.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_getput.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_hash_func.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_header_get.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_header_put.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_i_getput.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_i_varn.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_open.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_subfile.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_sync.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_util.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_var.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_vard.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_varn.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpio_wait.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/drivers/ncmpio/TODO b/src/drivers/ncmpio/TODO
new file mode 100644
index 0000000..df37ab3
--- /dev/null
+++ b/src/drivers/ncmpio/TODO
@@ -0,0 +1,49 @@
+#
+# Unimplemented functions, approaches we have to revisit, and other unfinished
+# tasks
+#
+# $Id: TODO 3341 2017-08-25 22:29:08Z wkliao $
+
+DATA MODE FUNCTIONS: U == unimplemented I == implemented
+
+ncmpi_get  text uchar schar short int long float double ushort uint int64 uint64
+var1         I   I      I    I     I   I    I      I      I     I     I     I
+var1_all     I   I      I    I     I   I    I      I      I     I     I     I
+var          I   I      I    I     I   I    I      I      I     I     I     I
+var_all      I   I      I    I     I   I    I      I      I     I     I     I
+vara         I   I      I    I     I   I    I      I      I     I     I     I
+vara_all     I   I      I    I     I   I    I      I      I     I     I     I
+vars         I   I      I    I     I   I    I      I      I     I     I     I
+vars_all     I   I      I    I     I   I    I      I      I     I     I     I
+varm         I   I      I    I     I   I    I      I      I     I     I     I
+varm_all     I   I      I    I     I   I    I      I      I     I     I     I
+varn         I   I      I    I     I   I    I      I      I     I     I     I
+varn_all     I   I      I    I     I   I    I      I      I     I     I     I
+vard         I   I      I    I     I   I    I      I      I     I     I     I
+vard_all     I   I      I    I     I   I    I      I      I     I     I     I
+
+ncmpi_put  text uchar schar short int long float double ushort uint int64 uint64
+var1         I   I      I    I     I   I    I      I      I     I     I     I
+var1_all     I   I      I    I     I   I    I      I      I     I     I     I
+var          I   I      I    I     I   I    I      I      I     I     I     I
+var_all [1]  I   I      I    I     I   I    I      I      I     I     I     I
+vara         I   I      I    I     I   I    I      I      I     I     I     I
+vara_all     I   I      I    I     I   I    I      I      I     I     I     I
+vars         I   I      I    I     I   I    I      I      I     I     I     I
+vars_all     I   I      I    I     I   I    I      I      I     I     I     I
+varm         I   I      I    I     I   I    I      I      I     I     I     I
+varm_all     I   I      I    I     I   I    I      I      I     I     I     I
+varn         I   I      I    I     I   I    I      I      I     I     I     I
+varn_all     I   I      I    I     I   I    I      I      I     I     I     I
+vard         I   I      I    I     I   I    I      I      I     I     I     I
+vard_all     I   I      I    I     I   I    I      I      I     I     I     I
+
+[1] ncmpi_put_var_all may not make much sense, as multiple MPI processes
+    concurrently write to the same variable in the file, but we keep it
+    just for completeness.
+
+OTHER FUNCTIONS:
+
+Not yet implemented:
+*
+
diff --git a/src/drivers/ncmpio/ncmpio_NC.h b/src/drivers/ncmpio/ncmpio_NC.h
new file mode 100644
index 0000000..0a61504
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_NC.h
@@ -0,0 +1,547 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_NC.h 3428 2017-09-26 22:57:06Z wkliao $ */
+
+#ifndef _NC_H
+#define _NC_H
+
+/*
+ * netcdf library 'private' data structures, objects and interfaces
+ */
+
+#include <stddef.h>     /* size_t */
+#include <sys/types.h>  /* off_t */
+
+#include <dispatch.h>
+#include "ncmpio_driver.h"
+
+#define FILE_ALIGNMENT_DEFAULT 512
+#define FILE_ALIGNMENT_LB      4
+
+/* define MPI_OFFSET if not defined */
+#ifndef HAVE_DECL_MPI_OFFSET
+    #ifdef HAVE_DECL_MPI_LONG_LONG_INT
+        #define MPI_OFFSET MPI_LONG_LONG_INT
+    #else
+        #define MPI_OFFSET MPI_INT
+    #endif
+#endif
+
+/* XXX: this seems really low.  do we end up spending a ton of time mallocing?
+ * could we reduce that by increasing this to something 21st century? */
+#ifndef NC_ARRAY_GROWBY
+#define NC_ARRAY_GROWBY 64
+#endif
+
+/* ncmpi_create/ncmpi_open set up header to be 'chunksize' big and to grow
+ * by 'chunksize' as new items added. This used to be 4k. 256k lets us read
+ * in an entire climate header in one go */
+#define NC_DEFAULT_CHUNKSIZE 262144
+
+/* when variable's nctype is NC_CHAR, I/O buffer's MPI type must be MPI_CHAR
+ * and vice versa */
+#define NCMPII_ECHAR(nctype, mpitype) ((((nctype) == NC_CHAR) == ((mpitype) != MPI_CHAR)) ? NC_ECHAR : NC_NOERR)
+
+/*
+ * The extern size of an empty
+ * netcdf version 1 file.
+ * The initial value of ncp->xsz.
+ */
+#define MIN_NC_XSZ 32
+
+typedef enum {
+    NC_UNSPECIFIED =  0,  /* ABSENT */
+    NC_DIMENSION   = 10,  /* \x00 \x00 \x00 \x0A */
+    NC_VARIABLE    = 11,  /* \x00 \x00 \x00 \x0B */
+    NC_ATTRIBUTE   = 12   /* \x00 \x00 \x00 \x0C */
+} NC_tag;
+
+/* netcdf file format:
+     netcdf_file  = header  data
+     header       = magic  numrecs  dim_list  gatt_list  var_list
+     magic        = 'C'  'D'  'F'  VERSION
+     VERSION      = \x01 | \x02 | \x05
+     numrecs      = NON_NEG | STREAMING
+     dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
+     gatt_list    = att_list
+     att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
+     var_list     = ABSENT | NC_VARIABLE   nelems  [var ...]
+     ABSENT       = ZERO  ZERO                  // Means list is not present
+     ZERO         = \x00 \x00 \x00 \x00         // 32-bit zero
+
+  Minimum happens when nothing is defined, i.e.
+     magic              -- 4 bytes
+     numrecs            -- 4 bytes for CDF-1 and CDF-2, 8 bytes for CDF-5
+     dim_list = ABSENT  -- 8 bytes
+     gatt_list = ABSENT -- 8 bytes
+     var_list = ABSENT  -- 8 bytes
+*/
+
+typedef struct NC NC; /* forward reference */
+
+#define NC_NAME_TABLE_CHUNK 16
+#define HASH_TABLE_SIZE 256
+/*
+#define HASH_FUNC(x) ncmpio_jenkins_one_at_a_time_hash(x)
+#define HASH_FUNC(x) ncmpio_additive_hash(x)
+#define HASH_FUNC(x) ncmpio_rotating_hash(x)
+#define HASH_FUNC(x) ncmpio_Pearson_hash(x)
+*/
+#define HASH_FUNC(x) ncmpio_Bernstein_hash(x)
+/* Look like Bernstein's hashing function performs the best */
+
+/* For the initial naive implementation of hashing:
+ * #define HASH_FUNC(x) (unsigned char)x[0]
+ * if used this simple hash function, HASH_TABLE_SIZE must be 256 which is the
+ * number of possible keys can be stored in an unsigned char
+ */
+
+typedef struct NC_nametable {
+    int  num;  /* number of elements added in the list array. Its value starts
+                  with zero and incremented with new name is created. When its
+                  value becomes a multiple of NC_NAME_TABLE_CHUNK, list will be
+                  reallocated to a space of size (num + NC_NAME_TABLE_CHUNK) */
+    int *list; /* dimension or variable IDs */
+} NC_nametable;
+
+/*
+ * NC dimension structure
+ */
+typedef struct {
+    MPI_Offset  size;
+    size_t      name_len; /* strlen(name), for faster string compare */
+    char       *name;
+} NC_dim;
+
+/* The dimension ID returned from ncmpi_def_dim() is a pointer to type "int"
+ * which means the total number of defined dimension allowed in a file
+ * is up to 2^31-1. Thus, the member ndefined below should be of type int.
+ * In fact, the value of ndefined should be between 0 and NC_MAX_DIMS.
+ *
+ * We use name ndefined for number of defined dimensions, instead of "nelems"
+ * used in the CDF format specifications because the number can only be of
+ * data type int (signed 4-byte integer). Other "nelems" in the format
+ * specifications can be of type 8-byte integers.
+ */
+typedef struct NC_dimarray {
+    int            ndefined;      /* number of defined dimensions */
+    int            unlimited_id;  /* -1 for not defined, otherwise >= 0 */
+    NC_dim       **value;
+    NC_nametable   nameT[HASH_TABLE_SIZE]; /* table for quick name lookup.
+                    * indices 0, 1, ... HASH_TABLE_SIZE-1 are the hash keys.
+                    * nameT[i].num is the number of hash collisions. The IDs of
+                    * dimensions with names producing the same hash key i are
+                    * stored in nameT[i].list[*]
+                    */
+} NC_dimarray;
+
+/* Begin defined in dim.c ---------------------------------------------------*/
+extern void
+ncmpio_free_NC_dimarray(NC_dimarray *ncap);
+
+extern int
+ncmpio_dup_NC_dimarray(NC_dimarray *ncap, const NC_dimarray *ref);
+
+/*
+ * NC attribute
+ */
+typedef struct {
+    MPI_Offset nelems;   /* number of attribute elements */
+    MPI_Offset xsz;      /* amount of space at xvalue (4-byte aligned) */
+    nc_type    xtype;    /* external NC data type of the attribute */
+    size_t     name_len; /* strlen(name) for faster string compare */
+    char      *name;     /* name of the attributes */
+    void      *xvalue;   /* the actual data, in external representation */
+} NC_attr;
+
+/* Number of attributes is limited by 2^31-1 because the argument ngattsp in
+ * API ncmpi_inq()/nc_inq() is a signed 4-byte integer. Similarly for argument
+ * ngattsp in API ncmpi_inq_natts()/nc_inq_natts(). In fact, the value of
+ * ndefined should be between 0 and NC_MAX_ATTRS.
+ *
+ * We use name ndefined for number of defined attributes, instead of "nelems"
+ * used in the CDF format specifications, because the number can only be of
+ * data type int (signed 4-byte integer). Other "nelems" in the format
+ * specifications can be of type 8-byte integers.
+ */
+typedef struct NC_attrarray {
+    int            ndefined;  /* number of defined attributes */
+    NC_attr      **value;
+    NC_nametable   nameT[HASH_TABLE_SIZE]; /* table for quick name lookup.
+                    * indices 0, 1, ... HASH_TABLE_SIZE-1 are the hash keys.
+                    * nameT[i].num is the number of hash collisions. The IDs of
+                    * variables with names producing the same hash key i are
+                    * stored in nameT[i].list[*]
+                    */
+} NC_attrarray;
+
+/* Begin defined in attr.c --------------------------------------------------*/
+extern int
+ncmpio_new_NC_attr(char *name, nc_type xtype, MPI_Offset nelems, NC_attr **attrp);
+
+extern int
+ncmpio_NC_findattr(const NC_attrarray *ncap, const char *uname);
+
+extern void
+ncmpio_free_NC_attr(NC_attr *attrp);
+
+extern void
+ncmpio_free_NC_attrarray(NC_attrarray *ncap);
+
+extern int
+ncmpio_dup_NC_attrarray(NC_attrarray *ncap, const NC_attrarray *ref);
+
+/*
+ * NC variable: description and data
+ */
+typedef struct {
+    int           varid;   /* variable ID */
+    int           xsz;     /* byte size of 1 array element */
+    nc_type       xtype;   /* variable's external NC data type */
+    int           no_fill; /* whether fill mode is disabled */
+    size_t        name_len;/* strlen(name) for faster string compare */
+    char         *name;    /* name of the variable */
+    int           ndims;   /* number of dimensions */
+    int          *dimids;  /* [ndims] array of dimension IDs */
+    MPI_Offset   *shape;   /* [ndims] dim->size of each dim
+                              shape[0] == NC_UNLIMITED if record variable */
+    MPI_Offset   *dsizes;  /* [ndims] the right to left product of shape */
+    MPI_Offset    begin;   /* starting file offset of this variable */
+    MPI_Offset    len;     /* this is the "vsize" defined in header format, the
+                              total size in bytes of the array variable.
+                              For record variable, this is the record size */
+    NC_attrarray  attrs;   /* attribute array */
+#ifdef ENABLE_SUBFILING
+    int           num_subfiles;
+    int           ndims_org;  /* ndims before subfiling */
+    int          *dimids_org; /* dimids before subfiling */
+#endif
+} NC_var;
+
+/*
+ * Number of variables is limited by 2^31-1 because the argument nvarsp in
+ * API ncmpi_inq()/nc_inq() is a signed 4-byte integer and argument varid in
+ * API ncmpi_def_var()/nc_def_var() is also a signed 4-byte int. In fact,
+ * the value of ndefined should be between 0 and NC_MAX_VARS.
+ *
+ * We use name ndefined for number of defined variables, instead of "nelems"
+ * used in the CDF format specifications, because the number can only be of
+ * data type int (signed 4-byte integer). Other "nelems" in the format
+ * specifications can be of type 8-byte integers.
+ */
+/* note: we only allow less than 2^31-1 variables defined in a file */
+typedef struct NC_vararray {
+    int            ndefined;    /* number of defined variables */
+    int            num_rec_vars;/* number of defined record variables */
+    NC_var       **value;
+    NC_nametable   nameT[HASH_TABLE_SIZE]; /* table for quick name lookup.
+                    * indices 0, 1, ... HASH_TABLE_SIZE-1 are the hash keys.
+                    * nameT[i].num is the number of hash collisions. The IDs of
+                    * variables with names producing the same hash key i are
+                    * stored in nameT[i].list[*]
+                    */
+} NC_vararray;
+
+/* Begin defined in var.c ---------------------------------------------------*/
+extern void
+ncmpio_free_NC_var(NC_var *varp);
+
+extern NC_var *
+ncmpio_new_NC_var(char *name, int ndims);
+
+extern void
+ncmpio_free_NC_vararray(NC_vararray *ncap);
+
+extern int
+ncmpio_dup_NC_vararray(NC_vararray *ncap, const NC_vararray *ref);
+
+extern int
+ncmpio_NC_var_shape64(NC_var *varp, const NC_dimarray *dims);
+
+extern int
+ncmpio_NC_lookupvar(NC *ncp, int varid, NC_var **varp);
+
+#define IS_RECVAR(vp) \
+        ((vp)->shape != NULL ? (*(vp)->shape == NC_UNLIMITED) : 0 )
+
+/*
+ *  The PnetCDF non-blocking I/O request type
+ */
+typedef struct NC_req {
+    int            id;          /* even number for write, odd for read */
+    int            buftype_is_contig;
+    int            need_swap_back_buf;
+    int            abuf_index;  /* index in the abuf occupy_table
+                                   -1 means not using attached buffer */
+    MPI_Offset     num_recs;    /* number of records requested (1 for
+                                   fixed-size variable) */
+    void          *buf;         /* the original user buffer */
+    void          *xbuf;        /* the buffer used to read/write, may point to
+                                   the same address as buf */
+    void          *tmpBuf;      /* tmp buffer to be freed, used only by
+                                   nonblocking varn when buftype is noncontig */
+    void          *userBuf;     /* user buffer to be unpacked from tmpBuf. used
+                                   only by by nonblocking varn when buftype is
+                                   noncontig */
+    NC_var        *varp;
+    MPI_Offset    *start;        /* [varp->ndims] */
+    MPI_Offset    *count;        /* [varp->ndims] */
+    MPI_Offset    *stride;       /* [varp->ndims] */
+    MPI_Offset     bnelems;      /* number of elements in user buffer */
+    MPI_Offset     offset_start; /* starting of aggregate access region */
+    MPI_Offset     offset_end;   /*   ending of aggregate access region */
+    MPI_Offset     bufcount;     /* the number of buftype in this request */
+    MPI_Datatype   buftype;      /* user defined derived data type */
+    MPI_Datatype   ptype;        /* element data type in buftype */
+    MPI_Datatype   imaptype;     /* derived data type constructed from imap */
+    int           *status;       /* pointer to user's status */
+} NC_req;
+
+#define NC_ABUF_DEFAULT_TABLE_SIZE 128
+
+typedef struct NC_buf_status {
+    MPI_Aint   buf_addr;
+    MPI_Offset req_size;
+    int        is_used;
+} NC_buf_status;
+
+typedef struct NC_buf {
+    MPI_Offset     size_allocated;
+    MPI_Offset     size_used;
+    int            table_size;
+    int            tail;         /* index of last free entry */
+    NC_buf_status *occupy_table; /* [table_size] */
+    void          *buf;
+} NC_buf;
+
+/* chunk size for allocating read/write nonblocking request lists */
+#define NC_REQUEST_CHUNK 1024
+
+/* various file modes stored in flags */
+#define NC_NSYNC  0x100000  /* synchronise numrecs on change */
+#define NC_HSYNC  0x200000  /* synchronise whole header on change */
+#define NC_NDIRTY 0x400000  /* numrecs has changed */
+#define NC_HDIRTY 0x800000  /* header info has changed */
+struct NC {
+    int           ncid;         /* file ID */
+    int           flags;        /* various modes, i.e. define/data, fill,
+                                   indep/coll, header dirty, etc */
+    int           iomode;       /* cmode or omode used in ncmpi_create/open */
+    int           mpiomode;     /* mode used in MPI_File_open, passed from
+                                 * collective open to independent open */
+    int           format;       /* 1, 2, or 5 corresponding to CDF-1, 2, or 5 */
+    int           safe_mode;    /* 0 or 1, for parameter consistency check */
+    int           numGetReqs;   /* number of pending nonblocking get requests */
+    int           numPutReqs;   /* number of pending nonblocking put requests */
+#ifdef ENABLE_SUBFILING
+    int           subfile_mode; /* 0 or 1, for disable/enable subfiling */
+    int           num_subfiles; /* number of subfiles */
+    struct NC    *ncp_sf;       /* ncp of subfile */
+#endif
+    int           striping_unit; /* file stripe size of the file */
+    int           chunk;       /* chunk size for reading header */
+    MPI_Offset    h_align;     /* file alignment for header */
+    MPI_Offset    v_align;     /* file alignment for each fixed variable */
+    MPI_Offset    r_align;     /* file alignment for record variable section */
+    MPI_Offset    h_minfree;   /* pad at the end of the header section */
+    MPI_Offset    v_minfree;   /* pad at the end of the data section for fixed-size variables */
+    MPI_Offset    xsz;       /* external size of this header, <= var[0].begin */
+    MPI_Offset    begin_var; /* file offset of the first (non-record) var */
+    MPI_Offset    begin_rec; /* file offset of the first 'record' */
+
+    MPI_Offset    recsize;   /* length of 'record': sum of single record sizes
+                                of all the record variables */
+    MPI_Offset    numrecs;   /* number of 'records' allocated */
+    MPI_Offset    put_size;  /* amount of writes committed so far in bytes */
+    MPI_Offset    get_size;  /* amount of reads  committed so far in bytes */
+
+    MPI_Comm      comm;           /* MPI communicator */
+    MPI_Info      mpiinfo;        /* used MPI info object */
+    MPI_File      collective_fh;  /* file handle for collective mode */
+    MPI_File      independent_fh; /* file handle for independent mode */
+
+    NC_dimarray   dims;     /* dimensions defined */
+    NC_attrarray  attrs;    /* global attributes defined */
+    NC_vararray   vars;     /* variables defined */
+
+    NC_req       *get_list; /* list of nonblocking read requests */
+    NC_req       *put_list; /* list of nonblocking write requests */
+    NC_buf       *abuf;     /* attached buffer, used by bput APIs */
+
+    char         *path;     /* file name */
+    struct NC    *old;      /* contains the previous NC during redef. */
+};
+
+#define NC_readonly(ncp)   fIsSet((ncp)->flags, NC_MODE_RDONLY)
+#define NC_IsNew(ncp)      fIsSet((ncp)->flags, NC_MODE_CREATE)
+#define NC_indef(ncp)      fIsSet((ncp)->flags, NC_MODE_DEF)
+#define NC_indep(ncp)      fIsSet((ncp)->flags, NC_MODE_INDEP)
+#define NC_dofill(ncp)     fIsSet((ncp)->flags, NC_MODE_FILL)
+
+#define set_NC_ndirty(ncp)   fSet((ncp)->flags, NC_NDIRTY)
+#define NC_ndirty(ncp)     fIsSet((ncp)->flags, NC_NDIRTY)
+#define set_NC_hdirty(ncp)   fSet((ncp)->flags, NC_HDIRTY)
+#define NC_hdirty(ncp)     fIsSet((ncp)->flags, NC_HDIRTY)
+#define NC_doFsync(ncp)    fIsSet((ncp)->iomode, NC_SHARE)
+#define NC_doHsync(ncp)    fIsSet((ncp)->flags, NC_HSYNC)
+#define NC_doNsync(ncp)    fIsSet((ncp)->flags, NC_NSYNC)
+
+#define ErrIsHeaderDiff(err) \
+        (NC_EMULTIDEFINE_FIRST >= (err) && (err) >= NC_EMULTIDEFINE_LAST)
+
+/* Begin defined in nc.c ----------------------------------------------------*/
+extern void
+ncmpio_free_NC(NC *ncp);
+
+extern int
+ncmpio_NC_check_vlen(NC_var *varp, MPI_Offset vlen_max);
+
+extern int
+ncmpio_NC_check_vlens(NC *ncp);
+
+extern int
+ncmpio_NC_check_voffs(NC *ncp);
+
+/* Begin defined in ncmpio_header_get.c -------------------------------------*/
+typedef struct bufferinfo {
+    MPI_Comm    comm;
+    MPI_File    collective_fh;
+    MPI_Offset  get_size; /* amount of file read n bytes so far */
+    MPI_Offset  offset;   /* current read/write offset in the file */
+    int         size;     /* allocated size of the buffer */
+    int         version;  /* 1, 2, and 5 for CDF-1, 2, and 5 respectively */
+    int         safe_mode;/* 0: disabled, 1: enabled */
+    void       *base;     /* beginning of read/write buffer */
+    void       *pos;      /* current position in buffer */
+} bufferinfo;
+
+extern MPI_Offset
+ncmpio_hdr_len_NC(const NC *ncp);
+
+extern int
+ncmpio_hdr_get_NC(NC *ncp);
+
+/* Begin defined in ncmpio_header_put.c -------------------------------------*/
+extern int
+ncmpio_hdr_put_NC(NC *ncp, void *buf);
+
+extern int
+ncmpio_write_header(NC *ncp);
+
+/* Begin defined in ncmpio_sync.c -------------------------------------------*/
+extern int
+ncmpio_file_sync(NC *ncp);
+
+extern int
+ncmpio_write_numrecs(NC *ncp, MPI_Offset new_numrecs);
+
+/* Begin defined in ncmpio_filetype.c ---------------------------------------*/
+extern int
+ncmpio_filetype_create_vars(const NC* ncp, const NC_var* varp,
+                const MPI_Offset start[], const MPI_Offset count[],
+                const MPI_Offset stride[], int rw_flag, int *blocklen,
+                MPI_Offset *offset, MPI_Datatype *filetype,
+                int *is_filetype_contig);
+
+extern int                
+ncmpio_file_set_view(const NC *ncp, MPI_File fh, MPI_Offset *offset,
+                MPI_Datatype filetype);
+
+/* Begin defined in ncmpio_igetput.m4 ---------------------------------------*/
+extern int
+ncmpio_igetput_varm(NC *ncp, NC_var *varp, const MPI_Offset *start,
+                const MPI_Offset *stride, const MPI_Offset *imap,
+                const MPI_Offset *count, void *buf, MPI_Offset bufcount,
+                MPI_Datatype datatype, int *reqid, int reqMode,
+                int isSameGroup);
+
+/* Begin defined in ncmpio_hash_func.c --------------------------------------*/
+extern int
+ncmpio_jenkins_one_at_a_time_hash(const char *str_name);
+
+extern int
+ncmpio_additive_hash(const char *str_name);
+
+extern int
+ncmpio_rotating_hash(const char *str_name);
+
+extern int
+ncmpio_Bernstein_hash(const char *str_name);
+
+extern int
+ncmpio_Pearson_hash(const char *str_name);
+
+extern int
+ncmpio_update_name_lookup_table(NC_nametable *nameT, const int id,
+                                const char *oldname, const char *newname);
+
+extern void
+ncmpio_hash_insert(NC_nametable *nameT, const char *name, int id);
+
+extern int
+ncmpio_hash_delete(NC_nametable *nameT, const char *name, int id);
+
+extern int
+ncmpio_hash_replace(NC_nametable *nameT, const char *old_name,
+                    const char *new_name, int id);
+
+extern void
+ncmpio_hash_table_copy(NC_nametable *dest, const NC_nametable *src);
+
+extern void
+ncmpio_hash_table_free(NC_nametable *nameT);
+
+extern void
+ncmpio_hash_table_populate_NC_var(NC_vararray *varsp);
+
+extern void
+ncmpio_hash_table_populate_NC_dim(NC_dimarray *dimsp);
+
+extern void
+ncmpio_hash_table_populate_NC_attr(NC *ncp);
+
+/* Begin defined in ncmpio_fill.c -------------------------------------------*/
+extern int
+ncmpio_inq_default_fill_value(int type, void *fill_value);
+
+extern int
+ncmpio_inq_var_fill(NC_var *varp, void *fill_value);
+
+extern int
+ncmpio_fill_vars(NC *ncp);
+
+/* Begin defined in ncmpio_nonblocking.c ------------------------------------*/
+extern int
+ncmpio_getput_zero_req(NC *ncp, int rw_flag);
+
+/* Begin defined in ncmpio_close.c */
+extern int
+ncmpio_close_files(NC *ncp, int doUnlink);
+
+/* Begin defined in ncmpio_utils.c ------------------------------------------*/
+extern void
+ncmpio_set_pnetcdf_hints(NC *ncp, MPI_Info info);
+
+extern int
+ncmpio_NC_check_name(const char *name, int file_ver);
+
+extern int
+ncmpio_last_offset(const NC *ncp, const NC_var *varp, const MPI_Offset starts[],
+                   const MPI_Offset counts[], const MPI_Offset strides[],
+                   const int rw_flag, MPI_Offset *offset_ptr);
+
+extern int
+ncmpio_pack_xbuf(int format, NC_var *varp, MPI_Offset bufcount,
+                 MPI_Datatype buftype, int buftype_is_contig, MPI_Offset nelems,
+                 MPI_Datatype etype, MPI_Datatype imaptype, int need_convert,
+                 int need_swap, size_t xbuf_size, void *buf, void *xbuf);
+
+extern int
+ncmpio_unpack_xbuf(int format, NC_var *varp, MPI_Offset bufcount,
+                 MPI_Datatype buftype, int buftype_is_contig, MPI_Offset nelems,
+                 MPI_Datatype etype, MPI_Datatype imaptype, int need_convert,
+                 int need_swap, void *buf, void *xbuf);
+
+#endif /* _NC_H */
diff --git a/src/drivers/ncmpio/ncmpio_attr.m4 b/src/drivers/ncmpio/ncmpio_attr.m4
new file mode 100644
index 0000000..af46630
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_attr.m4
@@ -0,0 +1,1164 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_attr.m4 3440 2017-10-15 18:46:02Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/attribute.c and src/dispatchers/attr_getput.m4
+ *
+ * ncmpi_inq_att()     : dispatcher->inq_att()
+ * ncmpi_inq_attid()   : dispatcher->inq_attid()
+ * ncmpi_inq_attname() : dispatcher->inq_attname()
+ * ncmpi_copy_att()    : dispatcher->copy_att()
+ * ncmpi_rename_att()  : dispatcher->rename_att()
+ * ncmpi_del_att()     : dispatcher->del_att()
+ * ncmpi_put_att()     : dispatcher->put_att()
+ * ncmpi_get_att()     : dispatcher->get_att()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
+
+include(`foreach.m4')dnl
+include(`utils.m4')dnl
+
+/*----< x_len_NC_attrV() >---------------------------------------------------*/
+/* How much space will 'nelems' of 'xtype' take in external representation.
+ * Note the space is aligned in 4-byte boundary.
+ */
+inline static MPI_Offset
+x_len_NC_attrV(nc_type    xtype,
+               MPI_Offset nelems)
+{
+    switch(xtype) {
+        case NC_BYTE:
+        case NC_CHAR:
+        case NC_UBYTE:  return _RNDUP(nelems, 4);
+        case NC_SHORT:
+        case NC_USHORT: return ((nelems + nelems%2) * 2);
+        case NC_INT:
+        case NC_UINT:
+        case NC_FLOAT:  return (nelems * 4);
+        case NC_DOUBLE:
+        case NC_INT64:
+        case NC_UINT64: return (nelems * 8);
+        default: fprintf(stderr, "Error: bad type(%d) in %s\n",xtype,__func__);
+    }
+    return 0;
+}
+
+/*----< ncmpio_new_NC_attr() >-----------------------------------------------*/
+/*
+ * IN:  name is an already normalized attribute name (NULL terminated)
+ * OUT: (*attrp)->xvalue is malloc-ed
+ */
+int
+ncmpio_new_NC_attr(char        *name,
+                   nc_type      xtype,
+                   MPI_Offset   nelems,
+                   NC_attr    **attrp)
+{
+    *attrp = (NC_attr*) NCI_Malloc(sizeof(NC_attr));
+    if (*attrp == NULL ) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    (*attrp)->xtype    = xtype;
+    (*attrp)->xsz      = 0;
+    (*attrp)->nelems   = nelems;
+    (*attrp)->xvalue   = NULL;
+    (*attrp)->name     = name;
+    (*attrp)->name_len = strlen(name);
+
+    if (nelems > 0) {
+        /* obtain 4-byte aligned size of space to store the values */
+        MPI_Offset xsz = x_len_NC_attrV(xtype, nelems);
+        (*attrp)->xsz    = xsz;
+        (*attrp)->xvalue = NCI_Malloc((size_t)xsz);
+        if ((*attrp)->xvalue == NULL) {
+            NCI_Free(*attrp);
+            *attrp = NULL;
+            DEBUG_RETURN_ERROR(NC_ENOMEM)
+        }
+    }
+    return NC_NOERR;
+}
+
+/*----< ncmpio_free_NC_attr() >----------------------------------------------*/
+void
+ncmpio_free_NC_attr(NC_attr *attrp)
+{
+    assert(attrp != NULL);
+
+    if (attrp->xvalue != NULL)
+        NCI_Free(attrp->xvalue);
+    NCI_Free(attrp->name);
+}
+
+/*----< dup_NC_attr() >------------------------------------------------------*/
+/* duplicate an NC_attr object */
+static int
+dup_NC_attr(const NC_attr *rattrp, NC_attr **attrp)
+{
+    char *name;
+
+    /* rattrp->name has already been normalized */
+    name = (char*) NCI_Malloc(strlen(rattrp->name)+1);
+    if (name == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    strcpy(name, rattrp->name);
+
+    return ncmpio_new_NC_attr(name, rattrp->xtype, rattrp->nelems, attrp);
+}
+
+/* attrarray */
+
+/*----< ncmpio_free_NC_attrarray() >-----------------------------------------*/
+/* Free NC_attrarray values. */
+void
+ncmpio_free_NC_attrarray(NC_attrarray *ncap)
+{
+    int i;
+
+    assert(ncap != NULL);
+
+    for (i=0; i<ncap->ndefined; i++) {
+        ncmpio_free_NC_attr(ncap->value[i]);
+        NCI_Free(ncap->value[i]);
+    }
+
+    /* attributes can be deleted, thus ncap->value can still be allocated
+     * while ncap->ndefined == 0 */
+    if (ncap->value != NULL) {
+        NCI_Free(ncap->value);
+        ncap->value = NULL;
+    }
+    ncap->ndefined = 0;
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* free space allocated for attribute name lookup table */
+    ncmpio_hash_table_free(ncap->nameT);
+#endif
+}
+
+/*----< ncmpio_dup_NC_attrarray() >------------------------------------------*/
+int
+ncmpio_dup_NC_attrarray(NC_attrarray *ncap, const NC_attrarray *ref)
+{
+    int i, status=NC_NOERR;
+
+    assert(ref != NULL);
+    assert(ncap != NULL);
+
+    if (ref->ndefined == 0) { /* return now, if no attribute is defined */
+        ncap->ndefined = 0;
+        ncap->value    = NULL;
+        return NC_NOERR;
+    }
+
+    if (ref->ndefined > 0) {
+        size_t alloc_size = _RNDUP(ref->ndefined, NC_ARRAY_GROWBY);
+        ncap->value = (NC_attr **) NCI_Calloc(alloc_size, sizeof(NC_attr*));
+        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+
+    ncap->ndefined = 0;
+    for (i=0; i<ref->ndefined; i++) {
+        status = dup_NC_attr(ref->value[i], &ncap->value[i]);
+        if (status != NC_NOERR) {
+            ncmpio_free_NC_attrarray(ncap);
+            return status;
+        }
+        ncap->ndefined++;
+    }
+
+    assert(ncap->ndefined == ref->ndefined);
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* duplicate attribute name lookup table */
+    ncmpio_hash_table_copy(ncap->nameT, ref->nameT);
+#endif
+
+    return NC_NOERR;
+}
+
+/*----< incr_NC_attrarray() >------------------------------------------------*/
+/* Add a new handle at the end of an array of handles */
+static int
+incr_NC_attrarray(NC_attrarray *ncap, NC_attr *new_attr)
+{
+    assert(ncap != NULL);
+    assert(new_attr != NULL);
+
+    if (ncap->ndefined % NC_ARRAY_GROWBY == 0) {
+        /* grow the array to accommodate the new handle */
+        size_t alloc_size = (size_t)ncap->ndefined + NC_ARRAY_GROWBY;
+
+        ncap->value = (NC_attr **) NCI_Realloc(ncap->value,
+                                   alloc_size * sizeof(NC_attr*));
+        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+
+    ncap->value[ncap->ndefined++] = new_attr;
+
+    return NC_NOERR;
+}
+
+/* End attrarray per se */
+
+/*----< NC_attrarray0() >----------------------------------------------------*/
+/* Given ncp and varid, return pointer to array of attributes
+ * else NULL on error. This can also be used to validate varid.
+ */
+static NC_attrarray *
+NC_attrarray0(NC *ncp, int varid)
+{
+    if (varid == NC_GLOBAL) /* Global attribute */
+        return &ncp->attrs;
+
+    if (varid >= 0 && varid < ncp->vars.ndefined)
+        return &ncp->vars.value[varid]->attrs;
+
+    return NULL;
+}
+
+/*----< ncmpio_NC_findattr() >------------------------------------------------*/
+/* Step thru NC_ATTRIBUTE array, seeking match on name.
+ * return match or -1 if Not Found.
+ */
+int
+ncmpio_NC_findattr(const NC_attrarray *ncap,
+                   const char         *name) /* normalized string */
+{
+    int i, key;
+    size_t nchars;
+
+    assert(ncap != NULL);
+
+    if (ncap->ndefined == 0) return -1; /* none created yet */
+
+#ifdef SEARCH_NAME_LINEARLY
+    /* we assume the number of attributes is small and use the
+     * following linear search. If the number is expected to be large, then
+     * it is better to use the hashing as for variables and dimensions.
+     */
+    nchars = strlen(name);
+    for (i=0; i<ncap->ndefined; i++) {
+        if (ncap->value[i]->name_len == nchars &&
+            strcmp(ncap->value[i]->name, name) == 0)
+            return i;
+    }
+#else
+    /* hash name into a key for name lookup */
+    key = HASH_FUNC(name);
+
+    /* check the list (all names sharing the same key) using linear search */
+    nchars = strlen(name);
+    for (i=0; i<ncap->nameT[key].num; i++) {
+        int attr_id = ncap->nameT[key].list[i];
+        if (ncap->value[attr_id]->name_len == nchars &&
+            strcmp(name, ncap->value[attr_id]->name) == 0) {
+            return attr_id; /* the name already exists */
+        }
+    }
+#endif
+    return -1; /* the name has never been used */
+}
+
+/*----< NC_lookupattr() >----------------------------------------------------*/
+/* Look up by ncid, ncap, and name */
+static int
+NC_lookupattr(const NC_attrarray  *ncap,
+              const char          *name,   /* normalized attribute name */
+              NC_attr            **attrpp) /* modified on return */
+{
+    int indx;
+
+    /* requires validity of ncid and ncap already been checked */
+
+    indx = ncmpio_NC_findattr(ncap, name);
+    if (indx == -1) DEBUG_RETURN_ERROR(NC_ENOTATT)
+
+    if (attrpp != NULL)
+        *attrpp = ncap->value[indx];
+
+    return NC_NOERR;
+}
+
+/* Public */
+
+/*----< ncmpio_inq_attname() >-----------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpio_inq_attname(void *ncdp,
+                   int   varid,
+                   int   attid,
+                   char *name)   /* out */
+{
+    NC *ncp=(NC*)ncdp;
+    NC_attrarray *ncap;
+    NC_attr *attrp;
+
+    /* check varid and get pointer to the NC_attrarray */
+    ncap = NC_attrarray0(ncp, varid);
+    if (ncap == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* check attribute ID */
+    if ((attid < 0) || ncap->ndefined == 0 || attid >= ncap->ndefined)
+        DEBUG_RETURN_ERROR(NC_ENOTATT)
+
+    assert(ncap->value != NULL);
+
+    attrp = ncap->value[attid];
+
+    if (name == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
+
+    /* in PnetCDF, attrp->name is always NULL character terminated */
+    strcpy(name, attrp->name);
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_inq_attid() >-------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpio_inq_attid(void       *ncdp,
+                 int         varid,
+                 const char *name,
+                 int        *attidp)  /* out */
+{
+    int indx, err;
+    char *nname=NULL; /* normalized name */
+    NC *ncp=(NC*)ncdp;
+    NC_attrarray *ncap;
+
+    ncap = NC_attrarray0(ncp, varid);
+    if (ncap == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) return err;
+
+    indx = ncmpio_NC_findattr(ncap, nname);
+    NCI_Free(nname);
+    if (indx == -1) DEBUG_RETURN_ERROR(NC_ENOTATT)
+
+    if (attidp != NULL) *attidp = indx;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_inq_att() >---------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpio_inq_att(void       *ncdp,
+               int         varid,
+               const char *name, /* input, attribute name */
+               nc_type    *datatypep,
+               MPI_Offset *lenp)
+{
+    int err;
+    char *nname=NULL;    /* normalized name */
+    NC *ncp=(NC*)ncdp;
+    NC_attr *attrp;
+    NC_attrarray *ncap;
+
+    ncap = NC_attrarray0(ncp, varid);
+    if (ncap == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) return err;
+
+    err = NC_lookupattr(ncap, nname, &attrp);
+    NCI_Free(nname);
+    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+
+    if (datatypep != NULL) *datatypep = attrp->xtype;
+
+    if (lenp != NULL) *lenp = attrp->nelems;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_rename_att() >-------------------------------------------------*/
+/* This API is collective. If the new name is longer than the old name, this
+ * API must be called in define mode.
+ */
+int
+ncmpio_rename_att(void       *ncdp,
+                  int         varid,
+                  const char *name,
+                  const char *newname)
+{
+    int attr_id, err;
+    char *nname=NULL;    /* normalized name */
+    char *nnewname=NULL; /* normalized newname */
+    size_t nnewname_len=0;
+    NC *ncp=(NC*)ncdp;
+    NC_attrarray *ncap=NULL;
+    NC_attr *attrp=NULL;
+
+    ncap = NC_attrarray0(ncp, varid);
+    if (ncap == NULL) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) goto err_check;
+
+    attr_id = ncmpio_NC_findattr(ncap, nname);
+    if (attr_id < 0) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTATT)
+        goto err_check;
+    }
+
+    attrp = ncap->value[attr_id];
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(newname, &nnewname);
+    if (err != NC_NOERR) goto err_check;
+
+    nnewname_len = strlen(nnewname);
+
+    if (ncmpio_NC_findattr(ncap, nnewname) >= 0) {
+        /* name in use */
+        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
+        goto err_check;
+    }
+
+    if (! NC_indef(ncp) && attrp->name_len < nnewname_len) {
+        /* when data mode, nnewname cannot be longer than the old one */
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+err_check:
+    if (nname != NULL) NCI_Free(nname);
+    if (ncp->safe_mode) {
+        int minE, mpireturn;
+
+        /* check error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            if (nnewname != NULL) NCI_Free(nnewname);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        }
+        if (minE != NC_NOERR) {
+            if (nnewname != NULL) NCI_Free(nnewname);
+            return minE;
+        }
+    }
+
+    if (err != NC_NOERR) {
+        if (nnewname != NULL) NCI_Free(nnewname);
+        return err;
+    }
+
+    assert(attrp != NULL);
+
+#ifndef SEARCH_NAME_LINEARLY
+    ncmpio_hash_replace(ncap->nameT, attrp->name, nnewname, attr_id);
+#endif
+
+    /* replace the old name with new name */
+    NCI_Free(attrp->name);
+    attrp->name     = nnewname;
+    attrp->name_len = nnewname_len;
+
+    if (! NC_indef(ncp)) { /* when file is in data mode */
+        /* Let root write the entire header to the file. Note that we cannot
+         * just update the variable name in its space occupied in the file
+         * header, because if the file space occupied by the name shrinks, all
+         * the metadata following it must be moved ahead.
+         */
+        err = ncmpio_write_header(ncp);
+        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+    }
+
+    return err;
+}
+
+
+/*----< ncmpio_copy_att() >---------------------------------------------------*/
+/* This API is collective for processes that opened ncdp_out.
+ * If the attribute does not exist in ncdp_out, then this API must be called
+ * when ncdp_out is in define mode.
+ * If the attribute does exist in ncdp_out and the attribute in ncdp_in is
+ * larger than the one in ncdp_out, then this API must be called when ncdp_out
+ * is in define mode.
+ */
+int
+ncmpio_copy_att(void       *ncdp_in,
+                int         varid_in,
+                const char *name,
+                void       *ncdp_out,
+                int         varid_out)
+{
+    int indx=0, err;
+    char *nname=NULL;    /* normalized name */
+    NC *ncp_in=(NC*)ncdp_in, *ncp_out=(NC*)ncdp_out;
+    NC_attrarray *ncap_out=NULL, *ncap_in;
+    NC_attr *iattrp=NULL, *attrp=NULL;
+
+    ncap_in = NC_attrarray0(ncp_in, varid_in);
+    if (ncap_in == NULL) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    ncap_out = NC_attrarray0(ncp_out, varid_out);
+    if (ncap_out == NULL) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) goto err_check;
+
+    err = NC_lookupattr(ncap_in, nname, &iattrp);
+    if (err != NC_NOERR) {
+        assert(iattrp == NULL);
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+
+    if (iattrp->xsz != (int)iattrp->xsz) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
+        goto err_check;
+    }
+
+    indx = ncmpio_NC_findattr(ncap_out, nname);
+
+    if (indx >= 0) { /* name in use in ncap_out */
+        if (ncdp_in == ncdp_out && varid_in == varid_out)
+            /* self copy is not considered an error */
+            goto err_check;
+
+        if (!NC_indef(ncp_out) &&  /* not allowed in data mode */
+            iattrp->xsz > ncap_out->value[indx]->xsz) {
+            DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+            goto err_check;
+        }
+    }
+    else { /* attribute does not exit in ncdp_out */
+        if (!NC_indef(ncp_out)) {
+            /* add new attribute is not allowed in data mode */
+            DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+            goto err_check;
+        }
+        /* Note we no longer limit the number of attributes, as CDF file
+         * formats impose no such limit. Thus, the value of NC_MAX_ATTRS has
+         * been changed NC_MAX_INT, as NC_attrarray.ndefined is of type signed
+         * int and so is natts argument in ncmpi_inq_varnatts()
+         */
+        if (ncap_out->ndefined == NC_MAX_ATTRS) {
+            DEBUG_ASSIGN_ERROR(err, NC_EMAXATTS)
+            goto err_check;
+        }
+    }
+
+err_check:
+    if (ncp_out->safe_mode) {
+        int minE, mpireturn;
+
+        /* check the error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN,
+                                  ncp_out->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            if (nname != NULL) NCI_Free(nname);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        }
+        if (minE != NC_NOERR) {
+            if (nname != NULL) NCI_Free(nname);
+            return minE;
+        }
+    }
+
+    if (err != NC_NOERR) {
+        if (nname != NULL) NCI_Free(nname);
+        return err;
+    }
+    assert(ncap_out != NULL);
+    assert(nname != NULL);
+
+    if (indx >= 0) { /* name in use in ncdp_out */
+        NCI_Free(nname);
+        if (ncdp_in == ncdp_out && varid_in == varid_out) {
+            /* self copy is not considered an error */
+            return NC_NOERR;
+        }
+
+        /* reuse existing attribute array slot without redef */
+        attrp = ncap_out->value[indx];
+
+        if (iattrp->xsz > attrp->xsz) {
+            if (attrp->xvalue != NULL) NCI_Free(attrp->xvalue);
+            attrp->xvalue = NCI_Malloc((size_t)iattrp->xsz);
+            if (attrp->xvalue == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+        }
+        attrp->xsz    = iattrp->xsz;
+        attrp->xtype  = iattrp->xtype;
+        attrp->nelems = iattrp->nelems;
+    }
+    else { /* attribute does not exit in ncdp_out */
+        err = ncmpio_new_NC_attr(nname, iattrp->xtype, iattrp->nelems, &attrp);
+        if (err != NC_NOERR) return err;
+
+#ifndef SEARCH_NAME_LINEARLY
+        ncmpio_hash_insert(ncap_out->nameT, nname, ncap_out->ndefined);
+#endif
+
+        err = incr_NC_attrarray(ncap_out, attrp);
+        if (err != NC_NOERR) return err;
+    }
+
+    if (iattrp->xsz > 0)
+        memcpy(attrp->xvalue, iattrp->xvalue, (size_t)iattrp->xsz);
+
+    if (!NC_indef(ncp_out)) { /* called in data mode */
+        /* Let root write the entire header to the file. Note that we
+         * cannot just update the variable name in its space occupied in
+         * the file header, because if the file space occupied by the name
+         * shrinks, all the metadata following it must be moved ahead.
+         */
+        err = ncmpio_write_header(ncp_out); /* update file header */
+        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+    }
+
+    return err;
+}
+
+/*----< ncmpio_del_att() >---------------------------------------------------*/
+/* This is a collective subroutine and must be called in define mode */
+int
+ncmpio_del_att(void       *ncdp,
+               int         varid,
+               const char *name)
+{
+    int err, attrid=-1;
+    char *nname=NULL; /* normalized name */
+    NC *ncp=(NC*)ncdp;
+    NC_attrarray *ncap=NULL;
+
+    /* check NC_ENOTVAR */
+    ncap = NC_attrarray0(ncp, varid);
+    if (ncap == NULL) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
+        goto err_check;
+    }
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) goto err_check;
+
+    attrid = ncmpio_NC_findattr(ncap, nname);
+    if (attrid == -1) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTATT)
+        goto err_check;
+    }
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* delete name entry from hash table */
+    err = ncmpio_hash_delete(ncap->nameT, nname, attrid);
+    if (err != NC_NOERR) goto err_check;
+#endif
+
+err_check:
+    if (nname != NULL) NCI_Free(nname);
+    if (ncp->safe_mode) {
+        int minE, mpireturn;
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN,ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (minE != NC_NOERR) return minE;
+    }
+
+    if (err != NC_NOERR) return err;
+    assert(ncap != NULL);
+
+    /* delete attribute */
+    if (ncap->value[attrid]->xvalue != NULL)
+        NCI_Free(ncap->value[attrid]->xvalue);
+    NCI_Free(ncap->value[attrid]->name);
+    NCI_Free(ncap->value[attrid]);
+
+    /* shuffle down */
+    for (; attrid < ncap->ndefined-1; attrid++)
+        ncap->value[attrid] = ncap->value[attrid+1];
+
+    /* decrement count */
+    ncap->ndefined--;
+
+    return NC_NOERR;
+}
+
+dnl
+dnl GET_ATT(fntype)
+dnl
+define(`GET_ATT',dnl
+`dnl
+/*----< get_att_$1() >-------------------------------------------------------*/
+/* This is an independent subroutine */
+static int
+get_att_$1(nc_type       xtype,
+           const void  **xp,
+           MPI_Offset    nelems,
+           NC2ITYPE($1) *buf)
+{
+    switch(xtype) {
+        /* possible error returned of this switch block is NC_ERANGE */
+        case NC_BYTE:
+            return ncmpix_pad_getn_NC_BYTE_$1  (xp, nelems, buf);
+        case NC_UBYTE:
+            return ncmpix_pad_getn_NC_UBYTE_$1 (xp, nelems, buf);
+        case NC_SHORT:
+            return ncmpix_pad_getn_NC_SHORT_$1 (xp, nelems, buf);
+        case NC_USHORT:
+            return ncmpix_pad_getn_NC_USHORT_$1(xp, nelems, buf);
+        case NC_INT:
+            return ncmpix_getn_NC_INT_$1       (xp, nelems, buf);
+        case NC_UINT:
+            return ncmpix_getn_NC_UINT_$1      (xp, nelems, buf);
+        case NC_FLOAT:
+            return ncmpix_getn_NC_FLOAT_$1     (xp, nelems, buf);
+        case NC_DOUBLE:
+            return ncmpix_getn_NC_DOUBLE_$1    (xp, nelems, buf);
+        case NC_INT64:
+            return ncmpix_getn_NC_INT64_$1     (xp, nelems, buf);
+        case NC_UINT64:
+            return ncmpix_getn_NC_UINT64_$1    (xp, nelems, buf);
+        default:
+            /* this error is unlikely, but an internal error if happened */
+            fprintf(stderr, "Error: bad attrp->xtype(%d) in %s\n",
+                    xtype,__func__);
+            return NC_EBADTYPE;
+    }
+}
+')dnl
+dnl
+foreach(`iType', (schar,uchar,short,ushort,int,uint,float,double,longlong,ulonglong),
+        `GET_ATT(iType)dnl
+')dnl
+dnl
+/*----< ncmpio_get_att() >---------------------------------------------------*/
+/* This is an independent subroutine.
+ * itype: the internal data type of buf. Its value can be MPI_DATATYPE_NULL or
+ *        MPI promitive data type. For MPI_DATATYPE_NULL, it means the data
+ *        type of buf matches the external type of attribute defined in file.
+ *        For other MPI promitive data type, it corresponds to the type names
+ *        shown in the API name.
+ */
+int
+ncmpio_get_att(void         *ncdp,
+               int           varid,
+               const char   *name,
+               void         *buf,
+               MPI_Datatype  itype)
+{
+    int           err;
+    char         *nname=NULL; /* normalized name */
+    NC           *ncp=(NC*)ncdp;
+    NC_attr      *attrp;
+    NC_attrarray *ncap=NULL;
+    const void   *xp;
+    nc_type       xtype;
+    MPI_Offset    nelems;
+
+    /* sanity checks for varid and name has been done in dispatcher */
+
+    /* obtain NC_attrarray object pointer */
+    if (varid == NC_GLOBAL) ncap = &ncp->attrs;
+    else                    ncap = &ncp->vars.value[varid]->attrs;
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) return err;
+
+    /* whether the attr exists (check NC_ENOTATT) */
+    err = NC_lookupattr(ncap, nname, &attrp);
+    NCI_Free(nname);
+    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+
+    if (attrp->nelems == 0) return NC_NOERR;
+
+    if (itype == MPI_DATATYPE_NULL)
+        /* this is called from API ncmpi_get_att() where the internal and
+         * external data types match */
+        itype = ncmpii_nc2mpitype(attrp->xtype);
+
+    /* No character conversions are allowed. */
+    if ((attrp->xtype == NC_CHAR && itype != MPI_CHAR) ||
+        (attrp->xtype != NC_CHAR && itype == MPI_CHAR))
+        DEBUG_RETURN_ERROR(NC_ECHAR)
+
+    if (buf == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
+
+    /* must use xp, as ncmpix_pad_getn_text moves xp ahead */
+    xp     = attrp->xvalue;
+    xtype  = attrp->xtype;
+    nelems = attrp->nelems;
+
+    /* cannot use switch statement, as MPI_Datatype may not be int,
+     * for instance, it is a C struct in OpenMPI
+     */
+    if (itype == MPI_CHAR)
+        return ncmpix_pad_getn_text    (&xp, nelems,      (char*)buf);
+    else if (itype == MPI_SIGNED_CHAR)
+        return get_att_schar    (xtype, &xp, nelems,     (schar*)buf);
+    else if (itype == MPI_UNSIGNED_CHAR) {
+        if (xtype == NC_BYTE && ncp->format < NC_FORMAT_CDF5)
+            xtype = NC_UBYTE; /* special case: no NC_ERANGE check */
+        return get_att_uchar    (xtype, &xp, nelems,     (uchar*)buf);
+    }
+    else if (itype == MPI_SHORT)
+        return get_att_short    (xtype, &xp, nelems,     (short*)buf);
+    else if (itype == MPI_UNSIGNED_SHORT)
+        return get_att_ushort   (xtype, &xp, nelems,    (ushort*)buf);
+    else if (itype == MPI_INT)
+        return get_att_int      (xtype, &xp, nelems,       (int*)buf);
+    else if (itype == MPI_UNSIGNED)
+        return get_att_uint     (xtype, &xp, nelems,      (uint*)buf);
+    else if (itype == MPI_FLOAT)
+        return get_att_float    (xtype, &xp, nelems,     (float*)buf);
+    else if (itype == MPI_DOUBLE)
+        return get_att_double   (xtype, &xp, nelems,    (double*)buf);
+    else if (itype == MPI_LONG_LONG_INT)
+        return get_att_longlong (xtype, &xp, nelems,  (longlong*)buf);
+    else if (itype == MPI_UNSIGNED_LONG_LONG)
+        return get_att_ulonglong(xtype, &xp, nelems, (ulonglong*)buf);
+    return NC_EBADTYPE;
+}
+
+dnl
+dnl PUTN_ITYPE(_pad, itype)
+dnl
+define(`PUTN_ITYPE',dnl
+`dnl
+/*----< putn_$1() >----------------------------------------------------------*/
+/* This is a collective subroutine */
+static int
+putn_$1(void       **xpp,    /* buffer to be written to file */
+        MPI_Offset   nelems, /* no. elements in user buffer */
+        const $1    *buf,    /* user buffer of type $1 */
+        nc_type      xtype,  /* external NC type */
+        void        *fillp)  /* fill value in internal representation */
+{
+    switch(xtype) {
+        case NC_BYTE:
+            return ncmpix_pad_putn_NC_BYTE_$1  (xpp, nelems, buf, fillp);
+        case NC_UBYTE:
+            return ncmpix_pad_putn_NC_UBYTE_$1 (xpp, nelems, buf, fillp);
+        case NC_SHORT:
+            return ncmpix_pad_putn_NC_SHORT_$1 (xpp, nelems, buf, fillp);
+        case NC_USHORT:
+            return ncmpix_pad_putn_NC_USHORT_$1(xpp, nelems, buf, fillp);
+        case NC_INT:
+            return ncmpix_putn_NC_INT_$1       (xpp, nelems, buf, fillp);
+        case NC_UINT:
+            return ncmpix_putn_NC_UINT_$1      (xpp, nelems, buf, fillp);
+        case NC_FLOAT:
+            return ncmpix_putn_NC_FLOAT_$1     (xpp, nelems, buf, fillp);
+        case NC_DOUBLE:
+            return ncmpix_putn_NC_DOUBLE_$1    (xpp, nelems, buf, fillp);
+        case NC_INT64:
+            return ncmpix_putn_NC_INT64_$1     (xpp, nelems, buf, fillp);
+        case NC_UINT64:
+            return ncmpix_putn_NC_UINT64_$1    (xpp, nelems, buf, fillp);
+        case NC_CHAR:
+            return NC_ECHAR; /* NC_ECHAR check is done earlier */
+        default: fprintf(stderr, "Error: bad xtype(%d) in %s\n",xtype,__func__);
+            return NC_EBADTYPE;
+    }
+}
+')dnl
+dnl
+foreach(`iType', (schar,uchar,short,ushort,int,uint,float,double,longlong,ulonglong),
+        `PUTN_ITYPE(iType)dnl
+')dnl
+
+/* For netCDF, the type mapping between file types and buffer types
+ * are based on netcdf4. Check APIs of nc_put_att_xxx from source files
+ *     netCDF/netcdf-x.x.x/libdispatch/att.c
+ *     netCDF/netcdf-x.x.x/libsrc4/nc4attr.c
+ *
+ * Note that schar means signed 1-byte integers in attributes. Hence the call
+ * below is illegal (NC_ECHAR will return), indicating the error on trying
+ * type conversion between characters and numbers.
+ *
+ * ncmpi_put_att_schar(ncid, varid, "attr name", NC_CHAR, strlen(attrp), attrp);
+ *
+ * This rule and mapping apply for variables as well. See APIs of
+ * nc_put_vara_xxx from source files
+ *     netCDF/netcdf-x.x.x/libdispatch/var.c
+ *     netCDF/netcdf-x.x.x/libsrc4/nc4var.c
+ *
+ */
+
+/*----< ncmpio_put_att() >---------------------------------------------------*/
+/* This is a collective subroutine, all arguments should be consistent among
+ * all processes.
+ *
+ * If attribute name has already existed, it means to overwrite the attribute.
+ * In this case, if the new attribute is larger than the old one, then this
+ * API must be called when the file is in define mode.
+ *
+ * Note from netCDF user guide:
+ * Attributes are always single values or one-dimensional arrays. This works
+ * out well for a string, which is a one-dimensional array of ASCII characters
+ *
+ * Note ncmpi_put_att_text will never return NC_ERANGE error, as text is not
+ * convertible to numerical types.
+ *
+ * itype: the internal data type of buf. Its value can be MPI_DATATYPE_NULL or
+ *        MPI promitive data type. For MPI_DATATYPE_NULL, it means the data
+ *        type of buf matches the external type of attribute defined in file.
+ *        For other MPI promitive data type, it corresponds to the type names
+ *        shown in the API name.
+ */
+int
+ncmpio_put_att(void         *ncdp,
+               int           varid,
+               const char   *name,
+               nc_type       xtype,  /* external (file/NC) data type */
+               MPI_Offset    nelems,
+               const void   *buf,
+               MPI_Datatype  itype)  /* internal (memory) data type */
+{
+    int indx=0, err;
+    char *nname=NULL; /* normalized name */
+    MPI_Offset xsz=0;
+    NC *ncp=(NC*)ncdp;
+    NC_attrarray *ncap=NULL;
+    NC_attr *attrp=NULL;
+
+    /* sanity checks for varid, name, xtype has been done in dispatcher */
+
+    /* If this is the _FillValue attribute, then let PnetCDF return the
+     * same error codes as netCDF
+     */
+    if (varid != NC_GLOBAL && !strcmp(name, _FillValue)) {
+        /* Fill value must be of the same data type */
+        if (xtype != ncp->vars.value[varid]->xtype) {
+            DEBUG_ASSIGN_ERROR(err, NC_EBADTYPE)
+            goto err_check;
+        }
+
+        /* Fill value must have exactly one value */
+        if (nelems != 1) {
+            DEBUG_ASSIGN_ERROR(err, NC_EINVAL)
+            goto err_check;
+        }
+
+        /* Only allowed in initial define mode (i.e. variable is newly defined) */
+        if (ncp->old != NULL && varid < ncp->old->vars.ndefined) {
+            DEBUG_ASSIGN_ERROR(err, NC_ELATEFILL)
+            goto err_check;
+        }
+    }
+
+    xsz = x_len_NC_attrV(xtype, nelems);
+    /* xsz is the total aligned size of this attribute */
+
+    if (xsz != (int)xsz) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
+        goto err_check;
+    }
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) goto err_check;
+
+    /* obtain NC_attrarray object pointer, ncap */
+    if (varid == NC_GLOBAL) ncap = &ncp->attrs;
+    else                    ncap = &ncp->vars.value[varid]->attrs;
+
+    /* check whether attribute already exists */
+    indx = ncmpio_NC_findattr(ncap, nname);
+
+    if (indx >= 0) { /* name in use */
+        /* xsz is the total size of this attribute */
+        if (!NC_indef(ncp) && xsz > ncap->value[indx]->xsz) {
+            /* The new attribute requires a larger space, which is not allowed
+             * in data mode */
+            DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+            goto err_check;
+        }
+    }
+    else { /* attribute does not exit in ncid */
+        if (!NC_indef(ncp)) {
+            /* add new attribute is not allowed in data mode */
+            DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+            goto err_check;
+        }
+        /* Note we no longer limit the number of attributes, as CDF file formats
+         * impose no such limit. Thus, the value of NC_MAX_ATTRS has been
+         * changed NC_MAX_INT, as NC_attrarray.ndefined is of type signed int
+         * and so is natts argument in ncmpi_inq_varnatts()
+         */
+        if (ncap->ndefined == NC_MAX_ATTRS) {
+            DEBUG_ASSIGN_ERROR(err, NC_EMAXATTS)
+            goto err_check;
+        }
+    }
+
+err_check:
+    if (ncp->safe_mode) { /* check the error code across processes */
+        int minE, mpireturn;
+
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            if (nname != NULL) NCI_Free(nname);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        }
+        if (minE != NC_NOERR) {
+            if (nname != NULL) NCI_Free(nname);
+            return minE;
+        }
+        /* argument consistency check has been done at the dispatchers */
+    }
+
+    if (err != NC_NOERR) {
+        if (nname != NULL) NCI_Free(nname);
+        return err;
+    }
+    assert(ncap != NULL);
+    assert(nname != NULL);
+
+    if (indx >= 0) { /* name in use */
+        NCI_Free(nname);
+        attrp = ncap->value[indx]; /* convenience */
+
+        if (xsz > attrp->xsz) { /* new attribute requires a larger space */
+            if (attrp->xvalue != NULL) NCI_Free(attrp->xvalue);
+            attrp->xvalue = NCI_Malloc((size_t)xsz);
+            if (attrp->xvalue == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+        }
+        attrp->xsz    = xsz;
+        attrp->xtype  = xtype;
+        attrp->nelems = nelems;
+    }
+    else { /* attribute does not exit in ncid */
+        err = ncmpio_new_NC_attr(nname, xtype, nelems, &attrp);
+        if (err != NC_NOERR) return err;
+
+#ifndef SEARCH_NAME_LINEARLY
+        ncmpio_hash_insert(ncap->nameT, nname, ncap->ndefined);
+#endif
+
+        err = incr_NC_attrarray(ncap, attrp);
+        if (err != NC_NOERR) return err;
+    }
+
+    if (nelems != 0 && buf != NULL) { /* non-zero length attribute */
+        /* using xp below to prevent change the pointer attr->xvalue, as
+         * ncmpix_pad_putn_<type>() advances the first argument with nelems
+         * elements. Note that attrp->xvalue is malloc-ed with a buffer of
+         * size that is aligned with a 4-byte boundary.
+         */
+        unsigned char fill[8]; /* fill value in internal representation */
+        void *xp = attrp->xvalue;
+
+        if (itype == MPI_CHAR) {
+            err = ncmpix_pad_putn_text(&xp, nelems, buf);
+        }
+        else if (ncp->format < 5 && itype == MPI_UNSIGNED_CHAR &&
+                 xtype == NC_BYTE) { /* special case: no NC_ERANGE check */
+            /* find the fill value of NC_UBYTE */
+            err = ncmpio_inq_default_fill_value(NC_UBYTE, &fill);
+            if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+            err = putn_uchar(&xp, nelems, buf, NC_UBYTE, &fill);
+        }
+        else {
+            /* find the fill value */
+            err = ncmpio_inq_default_fill_value(xtype, &fill);
+            if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+
+            /* cannot use switch statement, as MPI_Datatype may not be int,
+             * for instance, it is a C struct in OpenMPI
+             */
+            /* MPI_CHAR: _text API has been handled above */
+            if (itype == MPI_SIGNED_CHAR)
+                err = putn_schar    (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_UNSIGNED_CHAR)
+                err = putn_uchar    (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_SHORT)
+                err = putn_short    (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_UNSIGNED_SHORT)
+                err = putn_ushort   (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_INT)
+                err = putn_int      (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_UNSIGNED)
+                err = putn_uint     (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_FLOAT)
+                err = putn_float    (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_DOUBLE)
+                err = putn_double   (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_LONG_LONG_INT)
+                err = putn_longlong (&xp, nelems, buf, xtype, &fill);
+            else if (itype == MPI_UNSIGNED_LONG_LONG)
+                err = putn_ulonglong(&xp, nelems, buf, xtype, &fill);
+            else err = NC_EBADTYPE;
+        }
+
+        /* no immediately return error code here? Strange ...
+         * Instead, we continue and call incr_NC_attrarray() to add
+         * this attribute (for create case) as it is legal. But if
+         * we return error and reject this attribute, then nc_test will
+         * fail with this error message below:
+         * FAILURE at line 252 of test_read.c: ncmpi_inq: wrong number
+         * of global atts returned, 3
+         * Check netCDF-4, it is doing the same thing!
+         *
+         * One of the error codes returned from ncmpix_pad_putn_<type>() is
+         * NC_ERANGE, meaning one or more elements are type overflow.
+         * Should we reject the entire attribute array if only part of
+         * the array overflow? For netCDF4, the answer is NO.
+         */
+/*
+        if (err != NC_NOERR) {
+            if (attrp->xvalue != NULL) NCI_Free(attrp->xvalue);
+            NCI_Free(attrp->name);
+            NCI_Free(attrp);
+            DEBUG_RETURN_ERROR(err)
+        }
+*/
+    }
+
+    if (!NC_indef(ncp)) { /* called in data mode */
+        /* Let root write the entire header to the file. Note that we
+         * cannot just update the attribute in its space occupied in the
+         * file header, because if the file space occupied by the attribute
+         * shrinks, all the metadata following it must be moved ahead.
+         */
+        int status;
+        status = ncmpio_write_header(ncp); /* update file header */
+        if (err == NC_NOERR) err = status;
+    }
+
+    return err;
+}
diff --git a/src/drivers/ncmpio/ncmpio_bput.c b/src/drivers/ncmpio/ncmpio_bput.c
new file mode 100644
index 0000000..a33285a
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_bput.c
@@ -0,0 +1,146 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_bput.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/file.c
+ *
+ * ncmpi_buffer_attach()         : dispatcher->buffer_attach()
+ * ncmpi_buffer_detach()         : dispatcher->buffer_detach()
+ *
+ * and src/dispatchers/var_getput.m4
+ * ncmpi_bput_var<kind>_<type>() : dispatcher->bput_var()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+
+/*----< ncmpio_buffer_attach() >---------------------------------------------*/
+int
+ncmpio_buffer_attach(void       *ncdp,
+                     MPI_Offset  bufsize)
+{
+    NC *ncp=(NC*)ncdp;
+
+    if (bufsize <= 0) DEBUG_RETURN_ERROR(NC_ENULLBUF)
+
+    /* check if the buffer has been previously attached
+     * note that in nc.c, the NC object is allocated with calloc, so
+     * abuf should be initialized to NULL then
+     */
+    if (ncp->abuf != NULL) DEBUG_RETURN_ERROR(NC_EPREVATTACHBUF)
+
+    ncp->abuf = (NC_buf*) NCI_Malloc(sizeof(NC_buf));
+
+    ncp->abuf->size_allocated = bufsize;
+    ncp->abuf->size_used = 0;
+    ncp->abuf->table_size = NC_ABUF_DEFAULT_TABLE_SIZE;
+    ncp->abuf->occupy_table = (NC_buf_status*)
+               NCI_Calloc(NC_ABUF_DEFAULT_TABLE_SIZE, sizeof(NC_buf_status));
+    ncp->abuf->tail = 0;
+    ncp->abuf->buf = NCI_Malloc((size_t)bufsize);
+    return NC_NOERR;
+}
+
+/*----< ncmpio_buffer_detach() >---------------------------------------------*/
+int
+ncmpio_buffer_detach(void *ncdp)
+{
+    int  i;
+    NC  *ncp=(NC*)ncdp;
+
+    /* check if the buffer has been previously attached */
+    if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
+
+    /* this API assumes users are responsible for no pending bput */
+    for (i=0; i<ncp->numPutReqs; i++) {
+        if (ncp->put_list[i].abuf_index >= 0) /* check for a pending bput */
+            DEBUG_RETURN_ERROR(NC_EPENDINGBPUT)
+            /* return now, so users can call wait and try detach again */
+    }
+
+    NCI_Free(ncp->abuf->buf);
+    NCI_Free(ncp->abuf->occupy_table);
+    NCI_Free(ncp->abuf);
+    ncp->abuf = NULL;
+
+    return NC_NOERR;
+}
+
+#ifdef THIS_SEEMS_OVER_DONE_IT
+/*----< ncmpio_buffer_detach() >---------------------------------------------*/
+/* mimic MPI_Buffer_detach()
+ * Note from MPI: Even though the 'bufferptr' argument is declared as
+ * 'void *', it is really the address of a void pointer.
+ */
+int
+ncmpio_buffer_detach(void       *ncdp,
+                     void       *bufptr,
+                     MPI_Offset *bufsize)
+{
+    int  i;
+    NC  *ncp=(NC*)ncdp;
+
+    /* check if the buffer has been previously attached */
+    if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
+
+    /* check MPICH2 src/mpi/pt2pt/bsendutil.c for why the bufptr is void* */
+    *(void **)bufptr = ncp->abuf->buf;
+    *bufsize         = ncp->abuf->size_allocated;
+
+    /* this API assumes users are responsible for no pending bput when called */
+    for (i=0; i<ncp->numPutReqs; i++) {
+        if (ncp->put_list[i].abuf_index >= 0) /* check for a pending bput */
+            DEBUG_RETURN_ERROR(NC_EPENDINGBPUT)
+            /* return now, so users can call wait and try detach again */
+    }
+
+    NCI_Free(ncp->abuf->occupy_table);
+    NCI_Free(ncp->abuf);
+    ncp->abuf = NULL;
+
+    return NC_NOERR;
+}
+#endif
+
+/*----< ncmpio_bput_var() >--------------------------------------------------*/
+int
+ncmpio_bput_var(void             *ncdp,
+                int               varid,
+                const MPI_Offset *start,
+                const MPI_Offset *count,
+                const MPI_Offset *stride,
+                const MPI_Offset *imap,
+                const void       *buf,
+                MPI_Offset        bufcount,
+                MPI_Datatype      buftype,
+                int              *reqid,
+                int               reqMode)
+{
+    NC *ncp=(NC*)ncdp;
+
+    /* buffer has not been attached yet */
+    if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
+
+    /* Note sanity check for ncdp and varid has been done in dispatchers */
+
+    return ncmpio_igetput_varm(ncp, ncp->vars.value[varid], start, count,
+                               stride, imap, (void*)buf, bufcount, buftype,
+                               reqid, reqMode, 0);
+}
diff --git a/src/drivers/ncmpio/ncmpio_close.c b/src/drivers/ncmpio/ncmpio_close.c
new file mode 100644
index 0000000..2917bcf
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_close.c
@@ -0,0 +1,159 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_close.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in src/dispatchers/file.c
+ *
+ * ncmpi_close() : dispatcher->close()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <errno.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+#ifdef ENABLE_SUBFILING
+#include "ncmpio_subfile.h"
+#endif
+
+/*----< ncmpio_free_NC() >----------------------------------------------------*/
+void
+ncmpio_free_NC(NC *ncp)
+{
+    if (ncp == NULL) return;
+
+    ncmpio_free_NC_dimarray(&ncp->dims);
+    ncmpio_free_NC_attrarray(&ncp->attrs);
+    ncmpio_free_NC_vararray(&ncp->vars);
+
+    if (ncp->comm    != MPI_COMM_NULL) MPI_Comm_free(&ncp->comm);
+    if (ncp->mpiinfo != MPI_INFO_NULL) MPI_Info_free(&ncp->mpiinfo);
+
+    if (ncp->get_list != NULL) NCI_Free(ncp->get_list);
+    if (ncp->put_list != NULL) NCI_Free(ncp->put_list);
+    if (ncp->abuf     != NULL) NCI_Free(ncp->abuf);
+    if (ncp->path     != NULL) NCI_Free(ncp->path);
+
+    NCI_Free(ncp);
+}
+
+/*----< ncmpio_close_files() >-----------------------------------------------*/
+int
+ncmpio_close_files(NC *ncp, int doUnlink) {
+    int mpireturn;
+
+    assert(ncp != NULL); /* this should never occur */
+
+    if (ncp->independent_fh != MPI_FILE_NULL) {
+        TRACE_IO(MPI_File_close)(&ncp->independent_fh);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_File_close");
+    }
+
+    if (ncp->collective_fh != MPI_FILE_NULL) {
+        TRACE_IO(MPI_File_close)(&ncp->collective_fh);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_File_close");
+    }
+
+    if (doUnlink) {
+        /* called from ncmpi_abort, if the file is being created and is still
+         * in define mode, the file is deleted */
+        TRACE_IO(MPI_File_delete)((char *)ncp->path, ncp->mpiinfo);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_File_delete");
+    }
+    return NC_NOERR;
+}
+
+/*----< ncmpio_close() >------------------------------------------------------*/
+/* This function is collective */
+int
+ncmpio_close(void *ncdp)
+{
+    int err=NC_NOERR, status=NC_NOERR;
+    NC *ncp = (NC*)ncdp;
+
+    if (NC_indef(ncp)) { /* currently in define mode */
+        status = ncmpio__enddef(ncp, 0, 0, 0, 0); /* TODO: defaults */
+
+        if (status != NC_NOERR ) {
+            /* To do: Abort new definition, if any */
+            if (ncp->old != NULL) {
+                ncmpio_free_NC(ncp->old);
+                ncp->old = NULL;
+                fClr(ncp->flags, NC_MODE_DEF);
+            }
+        }
+    }
+
+    if (!NC_readonly(ncp) &&  /* file is open for write */
+         NC_indep(ncp)) {     /* exit independent data mode will sync header */
+        err = ncmpio_end_indep_data(ncp);
+        if (status == NC_NOERR ) status = err;
+    }
+
+    /* if entering this function in  collective data mode, we do not have to
+     * update header in file, as file header is always up-to-date */
+
+#ifdef ENABLE_SUBFILING
+    /* ncmpio__enddef() will update ncp->num_subfiles */
+    /* TODO: should check ncid_sf? */
+    /* if the file has subfiles, close them first */
+    if (ncp->num_subfiles > 1)
+        ncmpio_subfile_close(ncp);
+#endif
+
+    /* We can cancel or complete all outstanding nonblocking I/O.
+     * For now, cancelling makes more sense. */
+#ifdef COMPLETE_NONBLOCKING_IO
+    if (ncp->numGetReqs > 0) {
+        ncmpio_wait(ncp, NC_GET_REQ_ALL, NULL, NULL, NC_REQ_INDEP);
+        if (status == NC_NOERR ) status = NC_EPENDING;
+    }
+    if (ncp->numPutReqs > 0) {
+        ncmpio_wait(ncp, NC_PUT_REQ_ALL, NULL, NULL, NC_REQ_INDEP);
+        if (status == NC_NOERR ) status = NC_EPENDING;
+    }
+#else
+    if (ncp->numGetReqs > 0) {
+        int rank;
+        MPI_Comm_rank(ncp->comm, &rank);
+        printf("PnetCDF warning: %d nonblocking get requests still pending on process %d. Cancelling ...\n",ncp->numGetReqs,rank);
+        ncmpio_cancel(ncp, NC_GET_REQ_ALL, NULL, NULL);
+        if (status == NC_NOERR ) status = NC_EPENDING;
+    }
+    if (ncp->numPutReqs > 0) {
+        int rank;
+        MPI_Comm_rank(ncp->comm, &rank);
+        printf("PnetCDF warning: %d nonblocking put requests still pending on process %d. Cancelling ...\n",ncp->numPutReqs,rank);
+        ncmpio_cancel(ncp, NC_PUT_REQ_ALL, NULL, NULL);
+        if (status == NC_NOERR ) status = NC_EPENDING;
+    }
+#endif
+
+    /* If the user wants a stronger data consistency by setting NC_SHARE */
+    if (NC_doFsync(ncp))
+        ncmpio_file_sync(ncp); /* calling MPI_File_sync() */
+
+    /* calling MPI_File_close() */
+    ncmpio_close_files(ncp, 0);
+
+    /* free up space occupied by the header metadata */
+    ncmpio_free_NC(ncp);
+
+    return status;
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_create.c b/src/drivers/ncmpio/ncmpio_create.c
new file mode 100644
index 0000000..2f3c740
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_create.c
@@ -0,0 +1,287 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_create.c 3482 2017-10-25 21:02:12Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in src/dispatchers/file.c
+ *
+ * ncmpi_create() : dispatcher->create()
+ * ncmpi_open()   : dispatcher->open()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>  /* strcpy(), strchr() */
+#ifdef HAVE_ACCESS
+#include <unistd.h>  /* access() */
+#endif
+#include <errno.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+
+/*----< ncmpio_create() >----------------------------------------------------*/
+int
+ncmpio_create(MPI_Comm     comm,
+              const char  *path,
+              int          cmode,
+              int          ncid,
+              MPI_Info     info, /* user's info and env info combined */
+              void       **ncpp)
+{
+    char *env_str;
+    int rank, mpiomode, err, mpireturn, default_format;
+    MPI_File fh;
+    MPI_Comm dup_comm;
+    MPI_Info info_used;
+    NC *ncp=NULL;
+
+    *ncpp = NULL;
+
+    /* Note path's validity and cmode consistency have been checked in
+     * ncmpi_create() in src/dispatchers/file.c and
+     * path consistency will be done in MPI_File_open */
+
+    /* First, check whether cmode is valid or supported ---------------------*/
+    /* NC_DISKLESS is not supported yet */
+    if (cmode & NC_DISKLESS) DEBUG_RETURN_ERROR(NC_EINVAL_CMODE)
+
+    /* NC_MMAP is not supported yet */
+    if (cmode & NC_MMAP) DEBUG_RETURN_ERROR(NC_EINVAL_CMODE)
+
+    /* Get default format, in case cmode does not include either
+     * NC_64BIT_OFFSET or NC_64BIT_DATA */
+    ncmpi_inq_default_format(&default_format);
+
+#if SIZEOF_MPI_OFFSET <  8
+    /* check cmode */
+    if (fIsSet(cmode, NC_64BIT_DATA)     || fIsSet(cmode, NC_64BIT_OFFSET)   ||
+        default_format == NC_FORMAT_CDF5 || default_format == NC_FORMAT_CDF2) {
+        /* unlike serial netcdf, we will not bother to support
+         * NC_64BIT_OFFSET on systems with off_t smaller than 8 bytes.
+         * serial netcdf has proven it's possible if datasets are small, but
+         * that's a hassle we don't want to worry about */
+        DEBUG_RETURN_ERROR(NC_ESMALL)
+    }
+#endif
+
+    /* It is illegal to have both NC_64BIT_OFFSET & NC_64BIT_DATA */
+    if ((cmode & (NC_64BIT_OFFSET|NC_64BIT_DATA)) ==
+                 (NC_64BIT_OFFSET|NC_64BIT_DATA))
+        DEBUG_RETURN_ERROR(NC_EINVAL_CMODE)
+
+    /* Handle file clobber --------------------------------------------------*/
+    MPI_Comm_rank(comm, &rank);
+
+    mpiomode = MPI_MODE_RDWR | MPI_MODE_CREATE;
+
+    if (fIsSet(cmode, NC_NOCLOBBER)) {
+        /* check if file exists: NC_EEXIST is returned if the file already
+         * exists and NC_NOCLOBBER mode is used in ncmpi_create */
+#ifdef HAVE_ACCESS
+        int file_exist;
+        /* if access() is available, use it to check whether file already exists
+         * rank 0 calls access() and broadcasts file_exist */
+        if (rank == 0) {
+            /* remove the file system type prefix name if there is any.
+             * For example, path=="lustre:/home/foo/testfile.nc",
+             * use "/home/foo/testfile.nc" when calling access()
+             */
+            char *filename = strchr(path, ':');
+            if (filename == NULL) filename = (char*)path; /* no prefix */
+            else                  filename++;
+
+            if (access(filename, F_OK) == 0) file_exist = 1;
+            else                             file_exist = 0;
+        }
+        TRACE_COMM(MPI_Bcast)(&file_exist, 1, MPI_INT, 0, comm);
+        if (file_exist) DEBUG_RETURN_ERROR(NC_EEXIST)
+#else
+        /* add MPI_MODE_EXCL mode for MPI_File_open to check file existence */
+        fSet(mpiomode, MPI_MODE_EXCL);
+        errno = 0; /* reset errno, as MPI_File_open may change it */
+#endif
+    }
+    else { /* NC_CLOBBER is the default mode in create */
+        /* rank 0 deletes the file and ignores error code.
+         * Note calling MPI_File_set_size is expensive as it calls truncate()
+         */
+        if (rank == 0) {
+#ifdef HAVE_UNLINK
+            char *filename = strchr(path, ':');
+            if (filename == NULL) filename = (char*)path; /* no prefix */
+            else                  filename++;
+
+            err = unlink(filename);
+            if (err < 0 && errno != ENOENT) /* ignore ENOENT: file not exist */
+                DEBUG_ASSIGN_ERROR(err, NC_EFILE) /* other error */
+            else
+                err = NC_NOERR;
+#else
+            err = NC_NOERR;
+            TRACE_IO(MPI_File_delete)((char*)path, MPI_INFO_NULL);
+            if (mpireturn != MPI_SUCCESS) {
+                int errorclass;
+                MPI_Error_class(mpireturn, &errorclass);
+                if (errorclass != MPI_ERR_NO_SUCH_FILE) /* ignore this error */
+                    err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_delete");
+            }
+#endif
+            if (errno == ENOENT) errno = 0; /* reset errno */
+        }
+        /* all processes must wait here until file deletion is completed */
+        TRACE_COMM(MPI_Bcast)(&err, 1, MPI_INT, 0, comm);
+        if (err != NC_NOERR) return err;
+    }
+
+    /* create file collectively -------------------------------------------- */
+    TRACE_IO(MPI_File_open)(comm, (char *)path, mpiomode, info, &fh);
+    if (mpireturn != MPI_SUCCESS) {
+#ifndef HAVE_ACCESS
+        if (fIsSet(cmode, NC_NOCLOBBER)) {
+            /* This is the case when NC_NOCLOBBER is used in file creation and
+             * function access() is not available. MPI_MODE_EXCL is set in open
+             * mode. When MPI_MODE_EXCL is used and the file already exists,
+             * MPI-IO should return error class MPI_ERR_FILE_EXISTS. But, some
+             * MPI-IO implementations (older ROMIO) do not correctly return
+             * this error class. In this case, we can do the followings: check
+             * errno to see if it set to EEXIST. Note usually rank 0 makes the
+             * file open call and can be the only one having errno set.
+             */
+            TRACE_COMM(MPI_Bcast)(&errno, 1, MPI_INT, 0, comm);
+            if (errno == EEXIST) DEBUG_RETURN_ERROR(NC_EEXIST)
+        }
+#endif
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_File_open");
+        /* for NC_NOCLOBBER, MPI_MODE_EXCL was added to mpiomode. If the file
+         * already exists, MPI-IO should return error class MPI_ERR_FILE_EXISTS
+         * which PnetCDF will return error code NC_EEXIST. This is checked
+         * inside of ncmpii_error_mpi2nc()
+         */
+    }
+    else
+        /* reset errno, as MPI_File_open may change it, even for MPI_SUCCESS */
+        errno = 0;
+
+    /* duplicate communicator as user may free it later */
+    mpireturn = MPI_Comm_dup(comm, &dup_comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Comm_dup");
+
+    /* get the file info actually used by MPI-IO (may alter user's info) */
+    mpireturn = MPI_File_get_info(fh, &info_used);
+    if (mpireturn != MPI_SUCCESS) {
+        MPI_Comm_free(&dup_comm);
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_File_get_info");
+    }
+
+    /* Now the file has been successfully created, allocate/set NC object */
+
+    /* allocate buffer for header object NC and initialize its contents */
+    ncp = (NC*) NCI_Calloc(1, sizeof(NC));
+    if (ncp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    /* set the file format version based on the create mode, cmode */
+         if (fIsSet(cmode, NC_64BIT_DATA))   ncp->format = 5;
+    else if (fIsSet(cmode, NC_64BIT_OFFSET)) ncp->format = 2;
+    else {
+             if (default_format == NC_FORMAT_CDF5) ncp->format = 5;
+        else if (default_format == NC_FORMAT_CDF2) ncp->format = 2;
+        else                                       ncp->format = 1;
+    }
+
+    fSet(ncp->flags, NC_MODE_CREATE);
+    /* create automatically enter write mode */
+    fClr(ncp->flags, NC_MODE_RDONLY);
+    /* create automatically enter define mode */
+    fSet(ncp->flags, NC_MODE_DEF);
+    /* PnetCDF default mode is no fill */
+    fClr(ncp->flags, NC_MODE_FILL);
+
+    ncp->ncid = ncid;
+
+    /* chunk size for reading header, set to default before check hints */
+    ncp->chunk = NC_DEFAULT_CHUNKSIZE;
+
+    /* calculate the true header size (not-yet aligned) */
+    ncp->xsz = ncmpio_hdr_len_NC(ncp);
+
+    /* initialize unlimited_id as no unlimited dimension yet defined */
+    ncp->dims.unlimited_id = -1;
+
+    /* extract I/O hints from user info */
+    ncmpio_set_pnetcdf_hints(ncp, info);
+
+#if 0
+    ncp->safe_mode    = 0;
+    ncp->numGetReqs   = 0; /* number of pending non-blocking get requests */
+    ncp->numPutReqs   = 0; /* number of pending non-blocking put requests */
+    ncp->h_align      = 0; /* value 0 indicates the hint is not set */
+    ncp->v_align      = 0;
+    ncp->r_align      = 0;
+    ncp->h_minfree    = 0;
+    ncp->v_minfree    = 0;
+    ncp->get_list     = NULL;
+    ncp->put_list     = NULL;
+    ncp->abuf         = NULL;
+    ncp->old          = NULL;
+    ncp->put_size     = 0;    /* bytes written so far */
+    ncp->get_size     = 0;    /* bytes read    so far */
+
+#ifndef SEARCH_NAME_LINEARLY
+    for (i=0; i<HASH_TABLE_SIZE; i++) {
+        /* initialize dim name lookup table */
+        ncp->dims.nameT[i].num = 0;
+        ncp->dims.nameT[i].list = NULL;
+        /* initialize var name lookup table */
+        ncp->vars.nameT[i].num = 0;
+        ncp->vars.nameT[i].list = NULL;
+    }
+#endif
+
+#ifdef ENABLE_SUBFILING
+    ncp->subfile_mode = 0;
+    ncp->num_subfiles = 0;
+    ncp->ncp_sf       = NULL; /* pointer to subfile NC object */
+#endif
+#endif
+
+    /* For file create, ignore if NC_NOWRITE set in cmode by user */
+    ncp->iomode         = cmode | NC_WRITE;
+    ncp->comm           = dup_comm;
+    ncp->mpiinfo        = info_used;
+    ncp->mpiomode       = mpiomode;
+    ncp->collective_fh  = fh;
+    ncp->independent_fh = MPI_FILE_NULL;
+    ncp->path = (char*) NCI_Malloc(strlen(path) + 1);
+    strcpy(ncp->path, path);
+
+#ifdef PNETCDF_DEBUG
+    /* PNETCDF_DEBUG is set at configure time, which will be overwritten by
+     * the run-time environment variable PNETCDF_SAFE_MODE */
+    ncp->safe_mode = 1;
+#endif
+    /* If environment variable PNETCDF_SAFE_MODE is set to 1, then we perform
+     * a strict consistent test, i.e. arguments used in def_dim/def_var APIs
+     */
+    if ((env_str = getenv("PNETCDF_SAFE_MODE")) != NULL) {
+        if (*env_str == '0') ncp->safe_mode = 0;
+        else                 ncp->safe_mode = 1;
+        /* if PNETCDF_SAFE_MODE is set but without a value, *env_str can
+         * be '\0' (null character). In this case, safe_mode is enabled */
+    }
+
+    *ncpp = (void*)ncp;
+
+    return NC_NOERR;
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_dim.c b/src/drivers/ncmpio/ncmpio_dim.c
new file mode 100644
index 0000000..144cfb7
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_dim.c
@@ -0,0 +1,364 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_dim.c 3440 2017-10-15 18:46:02Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/dimension.c
+ *
+ * ncmpi_def_dim()    : dispatcher->def_dim()
+ * ncmpi_inq_dimid()  : dispatcher->inq_dimid()
+ * ncmpi_inq_dim()    : dispatcher->inq_dim()
+ * ncmpi_rename_dim() : dispatcher->rename_dim()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+#include <ncx.h>
+
+/*----< dup_NC_dim() >-------------------------------------------------------*/
+static int
+dup_NC_dim(const NC_dim *rdimp, NC_dim **dimp)
+{
+    *dimp = (NC_dim*) NCI_Malloc(sizeof(NC_dim));
+    if (*dimp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    (*dimp)->size     = rdimp->size;
+    (*dimp)->name_len = strlen(rdimp->name)+1;
+    (*dimp)->name     = (char*) NCI_Malloc((*dimp)->name_len);
+    if ((*dimp)->name == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    strcpy((*dimp)->name, rdimp->name);
+
+    return NC_NOERR;
+}
+
+#ifdef SEARCH_NAME_LINEARLY
+/*----< NC_finddim() >-------------------------------------------------------*/
+/*
+ * Step thru NC_DIMENSION array, seeking match on name.
+ * If found, set the dim ID pointed by dimidp, otherwise return NC_EBADDIM
+ */
+static int
+NC_finddim(const NC_dimarray *ncap,
+           const char        *name,  /* normalized dim name */
+           int               *dimidp)
+{
+    int dimid;
+    size_t nchars;
+
+    if (ncap->ndefined == 0) return NC_EBADDIM;
+
+    /* note that the number of dimensions allowed is < 2^32 */
+    nchars = strlen(name);
+    for (dimid=0; dimid<ncap->ndefined; dimid++) {
+        if (ncap->value[dimid]->name_len == nchars &&
+            strcmp(ncap->value[dimid]->name, name) == 0) {
+            /* found the matched name */
+            if (dimidp != NULL) *dimidp = dimid;
+            return NC_NOERR; /* found it */
+        }
+    }
+    return NC_EBADDIM; /* the name is not found */
+}
+#else
+/*----< NC_finddim() >-------------------------------------------------------*/
+/*
+ * Search name from hash table ncap->nameT.
+ * If found, set the dim ID pointed by dimidp, otherwise return NC_EBADDIM
+ */
+static int
+NC_finddim(const NC_dimarray *ncap,
+           const char        *name,  /* normalized dim name */
+           int               *dimidp)
+{
+    int i, key, dimid;
+    size_t nchars;
+
+    if (ncap->ndefined == 0) return NC_EBADDIM;
+
+    /* hash the dim name into a key for name lookup */
+    key = HASH_FUNC(name);
+
+    /* check the list using linear search */
+    nchars = strlen(name);
+    for (i=0; i<ncap->nameT[key].num; i++) {
+        dimid = ncap->nameT[key].list[i];
+        if (ncap->value[dimid]->name_len == nchars &&
+            strcmp(name, ncap->value[dimid]->name) == 0) {
+            if (dimidp != NULL) *dimidp = dimid;
+            return NC_NOERR; /* the name already exists */
+        }
+    }
+    return NC_EBADDIM; /* the name has never been used */
+}
+#endif
+
+/* dimarray */
+
+/*----< ncmpio_free_NC_dimarray() >------------------------------------------*/
+inline void
+ncmpio_free_NC_dimarray(NC_dimarray *ncap)
+{
+    int i;
+
+    assert(ncap != NULL);
+    if (ncap->ndefined == 0) return;
+
+    assert(ncap->value != NULL);
+    for (i=0; i<ncap->ndefined; i++) {
+        NCI_Free(ncap->value[i]->name);
+        NCI_Free(ncap->value[i]);
+    }
+
+    NCI_Free(ncap->value);
+    ncap->value    = NULL;
+    ncap->ndefined = 0;
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* free space allocated for dim name lookup table */
+    ncmpio_hash_table_free(ncap->nameT);
+#endif
+}
+
+/*----< ncmpio_dup_NC_dimarray() >-------------------------------------------*/
+int
+ncmpio_dup_NC_dimarray(NC_dimarray *ncap, const NC_dimarray *ref)
+{
+    int i, status=NC_NOERR;
+
+    assert(ref != NULL);
+    assert(ncap != NULL);
+
+    if (ref->ndefined == 0) {
+        ncap->ndefined = 0;
+        ncap->value    = NULL;
+        return NC_NOERR;
+    }
+
+    /* allocate array of NC_dim objects */
+    if (ref->ndefined > 0) {
+        size_t alloc_size = _RNDUP(ref->ndefined, NC_ARRAY_GROWBY);
+        ncap->value = (NC_dim**) NCI_Calloc(alloc_size, sizeof(NC_dim*));
+        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+
+    /* duplicate each NC_dim objects */
+    ncap->ndefined = 0;
+    for (i=0; i<ref->ndefined; i++) {
+        status = dup_NC_dim(ref->value[i], &ncap->value[i]);
+        if (status != NC_NOERR) {
+            ncmpio_free_NC_dimarray(ncap);
+            return status;
+        }
+        ncap->ndefined++;
+    }
+    assert(ncap->ndefined == ref->ndefined);
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* duplicate dim name lookup table */
+    ncmpio_hash_table_copy(ncap->nameT, ref->nameT);
+#endif
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_def_dim() >---------------------------------------------------*/
+int
+ncmpio_def_dim(void       *ncdp,    /* IN:  NC object */
+               const char *name,    /* IN:  name of dimension */
+               MPI_Offset  size,    /* IN:  dimension size */
+               int        *dimidp)  /* OUT: dimension ID */
+{
+    int dimid, err=NC_NOERR;
+    char *nname=NULL;  /* normalized name */
+    NC *ncp=(NC*)ncdp;
+    NC_dim *dimp=NULL;
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) return err;
+
+    /* create a new dimension object (dimp->name points to nname) */
+    dimp = (NC_dim*) NCI_Malloc(sizeof(NC_dim));
+    if (dimp == NULL) {
+        NCI_Free(nname);
+        DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    dimp->size     = size;
+    dimp->name     = nname;
+    dimp->name_len = strlen(nname);
+
+    /* allocate/expand ncp->dims.value array */
+    if (ncp->dims.ndefined % NC_ARRAY_GROWBY == 0) {
+        size_t alloc_size = (size_t)ncp->dims.ndefined + NC_ARRAY_GROWBY;
+
+        ncp->dims.value = (NC_dim **) NCI_Realloc(ncp->dims.value,
+                                      alloc_size * sizeof(NC_dim*));
+        if (ncp->dims.value == NULL) {
+            NCI_Free(nname);
+            NCI_Free(dimp);
+            DEBUG_RETURN_ERROR(NC_ENOMEM)
+        }
+    }
+
+    dimid = ncp->dims.ndefined;
+
+    /* Add a new dim handle to the end of handle array */
+    ncp->dims.value[dimid] = dimp;
+
+    if (size == NC_UNLIMITED) ncp->dims.unlimited_id = dimid;
+
+    ncp->dims.ndefined++;
+
+#ifndef SEARCH_NAME_LINEARLY
+    ncmpio_hash_insert(ncp->dims.nameT, nname, dimid);
+#endif
+
+    if (dimidp != NULL) *dimidp = dimid;
+
+    return err;
+}
+
+/*----< ncmpio_inq_dimid() >-------------------------------------------------*/
+int
+ncmpio_inq_dimid(void       *ncdp,
+                 const char *name,
+                 int        *dimid)
+{
+    int err=NC_NOERR;
+    char *nname=NULL; /* normalized name */
+    NC *ncp=(NC*)ncdp;
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) return err;
+
+    err = NC_finddim(&ncp->dims, nname, dimid);
+    NCI_Free(nname);
+
+    return err;
+}
+
+/*----< ncmpio_inq_dim() >---------------------------------------------------*/
+int
+ncmpio_inq_dim(void       *ncdp,
+               int         dimid,
+               char       *name,
+               MPI_Offset *sizep)
+{
+    NC_dim *dimp;
+    NC *ncp=(NC*)ncdp;
+
+    /* sanity check for dimid has been done at dispatchers */
+    dimp = ncp->dims.value[dimid];
+
+    if (name != NULL)
+        /* in PnetCDF, name is always NULL character terminated */
+        strcpy(name, dimp->name);
+
+    if (sizep != NULL) {
+        if (dimp->size == NC_UNLIMITED)
+            *sizep = ncp->numrecs;
+        else
+            *sizep = dimp->size;
+    }
+    return NC_NOERR;
+}
+
+/*----< ncmpio_rename_dim() >-------------------------------------------------*/
+/* This API is collective and can be called in either define or data mode..
+ * If the new name is longer than the old name, the netCDF dataset must be in
+ * the define mode.
+ */
+int
+ncmpio_rename_dim(void       *ncdp,
+                  int         dimid,
+                  const char *newname)
+{
+    int err=NC_NOERR;
+    char *nnewname=NULL; /* normalized newname */
+    size_t nnewname_len=0;
+    NC *ncp=(NC*)ncdp;
+    NC_dim *dimp=NULL;
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(newname, &nnewname);
+    if (err != NC_NOERR) goto err_check;
+
+    nnewname_len = strlen(nnewname);
+
+    /* sanity check for dimid has been done at dispatchers */
+    dimp = ncp->dims.value[dimid];
+
+    if (! NC_indef(ncp) && dimp->name_len < nnewname_len) {
+        /* when in data mode, newname cannot be longer than the old one */
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* update dim name lookup table, by removing the old name and add
+     * the new name */
+    err = ncmpio_update_name_lookup_table(ncp->dims.nameT, dimid,
+                             ncp->dims.value[dimid]->name, nnewname);
+    if (err != NC_NOERR) {
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+#endif
+
+err_check:
+    if (ncp->safe_mode) {
+        int status, mpireturn;
+
+        /* check the error so far across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN,ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            NCI_Free(nnewname);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        }
+        if (status != NC_NOERR) {
+            NCI_Free(nnewname);
+            return status;
+        }
+    }
+
+    if (err != NC_NOERR) {
+        if (nnewname != NULL) NCI_Free(nnewname);
+        return err;
+    }
+
+    /* replace the old name with new name */
+    assert(dimp != NULL);
+    NCI_Free(dimp->name);
+    dimp->name     = nnewname;
+    dimp->name_len = nnewname_len;
+
+    if (! NC_indef(ncp)) { /* when file is in data mode */
+        /* Let root write the entire header to the file. Note that we cannot
+         * just update the variable name in its space occupied in the file
+         * header, because if the file space occupied by the name shrinks, all
+         * the metadata following it must be moved ahead.
+         */
+        err = ncmpio_write_header(ncp);
+        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+    }
+
+    return err;
+}
diff --git a/src/drivers/ncmpio/ncmpio_driver.c b/src/drivers/ncmpio/ncmpio_driver.c
new file mode 100644
index 0000000..1fb8bb5
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_driver.c
@@ -0,0 +1,77 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_driver.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <dispatch.h>
+#include <ncmpio_driver.h>
+#include "ncmpio_NC.h"
+
+static PNC_driver ncmpio_driver = {
+    /* FILE APIs */
+    ncmpio_create,
+    ncmpio_open,
+    ncmpio_close,
+    ncmpio_enddef,
+    ncmpio__enddef,
+    ncmpio_redef,
+    ncmpio_sync,
+    ncmpio_abort,
+    ncmpio_set_fill,
+    ncmpio_inq,
+    ncmpio_inq_misc,
+    ncmpio_sync_numrecs,
+    ncmpio_begin_indep_data,
+    ncmpio_end_indep_data,
+
+    /* DIMENSION APIs */
+    ncmpio_def_dim,
+    ncmpio_inq_dimid,
+    ncmpio_inq_dim,
+    ncmpio_rename_dim,
+
+    /* ATTRIBUTE APIs */
+    ncmpio_inq_att,
+    ncmpio_inq_attid,
+    ncmpio_inq_attname,
+    ncmpio_copy_att,
+    ncmpio_rename_att,
+    ncmpio_del_att,
+    ncmpio_get_att,
+    ncmpio_put_att,
+
+    /* VARIABLE APIs */
+    ncmpio_def_var,
+    ncmpio_def_var_fill,
+    ncmpio_fill_var_rec,
+    ncmpio_inq_var,
+    ncmpio_inq_varid,
+    ncmpio_rename_var,
+    ncmpio_get_var,
+    ncmpio_put_var,
+    ncmpio_get_varn,
+    ncmpio_put_varn,
+    ncmpio_get_vard,
+    ncmpio_put_vard,
+    ncmpio_iget_var,
+    ncmpio_iput_var,
+    ncmpio_bput_var,
+    ncmpio_iget_varn,
+    ncmpio_iput_varn,
+    ncmpio_bput_varn,
+
+    ncmpio_buffer_attach,
+    ncmpio_buffer_detach,
+    ncmpio_wait,
+    ncmpio_cancel
+};
+
+PNC_driver* ncmpio_inq_driver(void) {
+    return &ncmpio_driver;
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_driver.h b/src/drivers/ncmpio/ncmpio_driver.h
new file mode 100644
index 0000000..3c66d68
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_driver.h
@@ -0,0 +1,164 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_driver.h 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifndef _NCMPIO_DRIVER_H
+#define _NCMPIO_DRIVER_H
+
+#include <mpi.h>
+#include <pnetcdf.h>
+#include <dispatch.h>
+
+extern int
+ncmpio_create(MPI_Comm comm, const char *path, int cmode, int ncid, MPI_Info info, void **ncdp);
+
+extern int
+ncmpio_open(MPI_Comm comm, const char *path, int omode, int ncid, MPI_Info info, void **ncdp);
+
+extern int
+ncmpio_close(void *ncdp);
+
+extern int
+ncmpio_enddef(void *ncdp);
+
+extern int
+ncmpio__enddef(void *ncdp, MPI_Offset h_minfree, MPI_Offset v_align, MPI_Offset v_minfree, MPI_Offset r_align);
+
+extern int
+ncmpio_redef(void *ncdp);
+
+extern int
+ncmpio_sync(void *ncdp);
+
+extern int
+ncmpio_abort(void *ncdp);
+
+extern int
+ncmpio_set_fill(void *ncdp, int fill_mode, int *old_fill_mode);
+
+extern int
+ncmpio_fill_var_rec(void *ncdp, int varid, MPI_Offset recno);
+
+extern int
+ncmpio_inq(void *ncdp, int *ndimsp, int *nvarsp, int *nattsp, int *xtendimp);
+
+extern int
+ncmpio_inq_misc(void *ncdp, int *pathlen, char *path, int *num_fix_varsp,
+                int *num_rec_varsp, int *striping_size, int *striping_count,
+                MPI_Offset *header_size, MPI_Offset *header_extent,
+                MPI_Offset *recsize, MPI_Offset *put_size, MPI_Offset *get_size,
+                MPI_Info *info_used, int *nreqs, MPI_Offset *usage,
+                MPI_Offset *buf_size);
+
+extern int
+ncmpio_sync_numrecs(void *ncdp);
+
+extern int
+ncmpio_begin_indep_data(void *ncdp);
+
+extern int
+ncmpio_end_indep_data(void *ncdp);
+
+extern int
+ncmpio_def_dim(void *ncdp, const char *name, MPI_Offset size, int *dimidp);
+
+extern int
+ncmpio_inq_dimid(void *ncdp, const char *name, int *dimidp);
+
+extern int
+ncmpio_inq_dim(void *ncdp, int dimid, char *name, MPI_Offset *lengthp);
+
+extern int
+ncmpio_rename_dim(void *ncdp, int dimid, const char *newname);
+
+extern int
+ncmpio_inq_att(void *ncdp, int varid, const char *name, nc_type *xtypep, MPI_Offset *lenp);
+
+extern int
+ncmpio_inq_attid(void *ncdp, int varid, const char *name, int *idp); 
+
+extern int
+ncmpio_inq_attname(void *ncdp, int varid, int attnum, char *name);
+
+extern int
+ncmpio_copy_att(void *ncdp_in, int varid_in, const char *name, void *ncdp_out, int varid_out);
+
+extern int
+ncmpio_rename_att(void *ncdp, int varid, const char *name, const char *newname);
+
+extern int
+ncmpio_del_att(void *ncdp, int varid, const char *name);
+
+extern int
+ncmpio_get_att(void *ncdp, int varid, const char *name, void *value, MPI_Datatype itype);
+
+extern int
+ncmpio_put_att(void *ncdp, int varid, const char *name, nc_type xtype, MPI_Offset nelems, const void *value, MPI_Datatype itype);
+
+extern int
+ncmpio_def_var(void *ncdp, const char *name, nc_type type, int ndims, const int *dimids, int *varidp);
+
+extern int
+ncmpio_def_var_fill(void *ncdp, int varid, int nofill, const void *fill_value);
+
+extern int
+ncmpio_inq_var(void *ncdp, int varid, char *name, nc_type *xtypep, int *ndimsp,
+               int *dimids, int *nattsp, MPI_Offset *offsetp, int *no_fill, void *fill_value);
+
+extern int
+ncmpio_inq_varid(void *ncdp, const char *name, int *varid);
+
+extern int
+ncmpio_rename_var(void *ncdp, int varid, const char *newname);
+
+extern int
+ncmpio_get_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncmpio_put_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncmpio_get_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncmpio_put_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncmpio_get_vard(void *ncdp, int varid, MPI_Datatype filetype, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncmpio_put_vard(void *ncdp, int varid, MPI_Datatype filetype, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int reqMode);
+
+extern int
+ncmpio_iget_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *req, int reqMode);
+
+extern int
+ncmpio_iput_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *req, int reqMode);
+
+extern int
+ncmpio_bput_var(void *ncdp, int varid, const MPI_Offset *start, const MPI_Offset *count, const MPI_Offset *stride, const MPI_Offset *imap, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *req, int reqMode);
+
+extern int
+ncmpio_iget_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *reqid, int reqMode);
+
+extern int
+ncmpio_iput_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *reqid, int reqMode);
+
+extern int
+ncmpio_bput_varn(void *ncdp, int varid, int num, MPI_Offset* const *starts, MPI_Offset* const *counts, const void *buf, MPI_Offset bufcount, MPI_Datatype buftype, int *reqid, int reqMode);
+
+extern int
+ncmpio_buffer_attach(void *ncdp, MPI_Offset bufsize);
+
+extern int
+ncmpio_buffer_detach(void *ncdp);
+
+extern int
+ncmpio_wait(void *ncdp, int num_reqs, int *req_ids, int *statuses, int reqMode);
+
+extern int
+ncmpio_cancel(void *ncdp, int num_reqs, int *req_ids, int *statuses);
+
+#endif
diff --git a/src/drivers/ncmpio/ncmpio_enddef.c b/src/drivers/ncmpio/ncmpio_enddef.c
new file mode 100644
index 0000000..517b615
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_enddef.c
@@ -0,0 +1,1041 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_enddef.c 3395 2017-09-20 15:50:19Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in src/dispatchers/file.c
+ *
+ * ncmpi_enddef()  : dispatcher->enddef()
+ * ncmpi__enddef() : dispatcher->_enddef()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>  /* strtol() */
+#include <string.h>  /* memset() */
+#include <assert.h>
+#include <errno.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
+#ifdef ENABLE_SUBFILING
+#include "ncmpio_subfile.h"
+#endif
+
+
+/*----< move_file_block() >--------------------------------------------------*/
+static int
+move_file_block(NC         *ncp,
+                MPI_Offset  to,
+                MPI_Offset  from,
+                MPI_Offset  nbytes)
+{
+    int rank, nprocs, bufcount, mpireturn, err, status=NC_NOERR, min_st;
+    void *buf;
+    int chunk_size=1048576; /* move 1 MB per process at a time */
+    MPI_Status mpistatus;
+
+    MPI_Comm_size(ncp->comm, &nprocs);
+    MPI_Comm_rank(ncp->comm, &rank);
+
+    /* if the file striping unit size is known (obtained from MPI-IO), then
+     * we use that instead of 1 MB */
+    if (ncp->striping_unit > 0) chunk_size = ncp->striping_unit;
+
+    /* buf will be used as a temporal buffer to move data in chunks, i.e.
+     * read a chunk and later write to the new location */
+    buf = NCI_Malloc((size_t)chunk_size);
+    if (buf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    /* make fileview entire file visible */
+    TRACE_IO(MPI_File_set_view)(ncp->collective_fh, 0, MPI_BYTE, MPI_BYTE,
+                                "native", MPI_INFO_NULL);
+
+    /* move the variable starting from its tail toward its beginning */
+    while (nbytes > 0) {
+        int get_size=0;
+
+        /* calculate how much to move at each time */
+        bufcount = chunk_size;
+        if (nbytes < (MPI_Offset)nprocs * chunk_size) {
+            /* handle the last group of chunks */
+            MPI_Offset rem_chunks = nbytes / chunk_size;
+            if (rank > rem_chunks) /* these processes do not read/write */
+                bufcount = 0;
+            else if (rank == rem_chunks) /* this process reads/writes less */
+                bufcount = (int)(nbytes % chunk_size);
+            nbytes = 0;
+        }
+        else {
+            nbytes -= chunk_size*nprocs;
+        }
+
+        /* explicitly initialize mpistatus object to 0, see comments below */
+        memset(&mpistatus, 0, sizeof(MPI_Status));
+
+        /* read the original data @ from+nbytes+rank*chunk_size */
+        TRACE_IO(MPI_File_read_at_all)(ncp->collective_fh,
+                                       from+nbytes+rank*chunk_size,
+                                       buf, bufcount, MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at_all");
+            if (err == NC_EFILE) DEBUG_ASSIGN_ERROR(status, NC_EREAD)
+        }
+        else {
+            /* for zero-length read, MPI_Get_count may report incorrect result
+             * for some MPICH version, due to the uninitialized MPI_Status
+             * object passed to MPI-IO calls. Thus we initialize it above to
+             * work around. See MPICH ticket:
+             * https://trac.mpich.org/projects/mpich/ticket/2332
+             *
+             * Note we cannot set bufcount to get_size, as the actural size
+             * read from a file may be less than bufcount. Because we are
+             * moving whatever read to a new file offset, we must use the
+             * amount actually read to call MPI_File_write_at_all below.
+             */
+            MPI_Get_count(&mpistatus, MPI_BYTE, &get_size);
+            ncp->get_size += get_size;
+        }
+
+        /* MPI_Barrier(ncp->comm); */
+        /* important, in case new region overlaps old region */
+        TRACE_COMM(MPI_Allreduce)(&status, &min_st, 1, MPI_INT, MPI_MIN,
+                                  ncp->comm);
+        status = min_st;
+        if (status != NC_NOERR) break;
+
+        /* write to new location @ to+nbytes+rank*chunk_size
+         *
+         * Ideally, we should write the amount of get_size returned from a call
+         * to MPI_Get_count in the below MPI write. This is in case some
+         * variables are defined but never been written. The value returned by
+         * MPI_Get_count is supposed to be the actual amount read by the MPI
+         * read call. If partial data (or none) is available for read, then we
+         * should just write that amount. Note this MPI write is collective,
+         * and thus all processes must participate the call even if get_size
+         * is 0. However, in some MPICH versions MPI_Get_count fails to report
+         * the correct value due to an internal error that fails to initialize
+         * the MPI_Status object. Therefore, the solution can be either to
+         * explicitly initialize the status object to zeros, or to just use
+         * bufcount for write. Note that the latter will write the variables
+         * that have not been written before. Below uses the former option.
+         */
+#ifdef _USE_MPI_GET_COUNT
+        /* explicitly initialize mpistatus object to 0, see comments below */
+        memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+        TRACE_IO(MPI_File_write_at_all)(ncp->collective_fh,
+                                        to+nbytes+rank*chunk_size,
+                                        buf, get_size /* bufcount */,
+                                        MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at_all");
+            if (err == NC_EFILE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
+        }
+        else {
+            /* for zero-length read, MPI_Get_count may report incorrect result
+             * for some MPICH version, due to the uninitialized MPI_Status
+             * object passed to MPI-IO calls. Thus we initialize it above to
+             * work around.
+             */
+#ifdef _USE_MPI_GET_COUNT
+            int put_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
+            ncp->put_size += put_size;
+#else
+            ncp->put_size += get_size; /* or bufcount */
+#endif
+        }
+        TRACE_COMM(MPI_Allreduce)(&status, &min_st, 1, MPI_INT, MPI_MIN, ncp->comm);
+        status = min_st;
+        if (status != NC_NOERR) break;
+    }
+    NCI_Free(buf);
+    return status;
+}
+
+/*----< move_fixed_vars() >--------------------------------------------------*/
+/* move one fixed variable at a time, only when the new begin > old begin */
+static int
+move_fixed_vars(NC *ncp, NC *old)
+{
+    int i, err, status=NC_NOERR;
+
+    /* move starting from the last fixed variable */
+    for (i=old->vars.ndefined-1; i>=0; i--) {
+        if (IS_RECVAR(old->vars.value[i])) continue;
+
+        MPI_Offset from = old->vars.value[i]->begin;
+        MPI_Offset to   = ncp->vars.value[i]->begin;
+        if (to > from) {
+            err = move_file_block(ncp, to, from, ncp->vars.value[i]->len);
+            if (status == NC_NOERR) status = err;
+        }
+    }
+    return status;
+}
+
+/*----< move_record_vars() >-------------------------------------------------*/
+/* Move the record variables from lower offsets (old) to higher offsets. */
+static int
+move_record_vars(NC *ncp, NC *old) {
+    int err;
+    MPI_Offset recno;
+    MPI_Offset nrecs = ncp->numrecs;
+    MPI_Offset ncp_recsize = ncp->recsize;
+    MPI_Offset old_recsize = old->recsize;
+    MPI_Offset ncp_off = ncp->begin_rec;
+    MPI_Offset old_off = old->begin_rec;
+
+    assert(ncp_recsize >= old_recsize);
+
+    if (ncp_recsize == old_recsize) {
+        if (ncp_recsize == 0) /* no record variable defined yet */
+            return NC_NOERR;
+
+        /* No new record variable inserted, move the entire record variables
+         * as a whole */
+        err = move_file_block(ncp, ncp_off, old_off, ncp_recsize * nrecs);
+        if (err != NC_NOERR) return err;
+    } else {
+        /* new record variables inserted, move one whole record at a time */
+        for (recno = nrecs-1; recno >= 0; recno--) {
+            err = move_file_block(ncp, ncp_off+recno*ncp_recsize,
+                                       old_off+recno*old_recsize, old_recsize);
+            if (err != NC_NOERR) return err;
+        }
+    }
+    return NC_NOERR;
+}
+
+/*----< NC_begins() >--------------------------------------------------------*/
+/*
+ * This function is only called at enddef().
+ * It computes each variable's 'begin' offset, and sets/updates the followings:
+ *    ncp->xsz                   ---- header size
+ *    ncp->vars.value[*]->begin  ---- each variable's 'begin' offset
+ *    ncp->begin_var             ---- offset of first non-record variable
+ *    ncp->begin_rec             ---- offset of first     record variable
+ *    ncp->recsize               ---- sum of single records
+ *    ncp->numrecs               ---- number of records (set only if new file)
+ */
+static int
+NC_begins(NC *ncp)
+{
+    int i, j, rank, mpireturn;
+    MPI_Offset end_var=0;
+    NC_var *last = NULL;
+    NC_var *first_var = NULL;       /* first "non-record" var */
+
+    /* For CDF-1 and 2 formats, a variable's "begin" in the header is 4 bytes.
+     * For CDF-5, it is 8 bytes.
+     */
+
+    /* get the true header size (not header extent) */
+    MPI_Comm_rank(ncp->comm, &rank);
+    ncp->xsz = ncmpio_hdr_len_NC(ncp);
+
+    if (ncp->safe_mode) { /* this consistency check is redundant as metadata is
+                             kept consistent at all time when safe mode is on */
+        int err, status;
+        MPI_Offset root_xsz = ncp->xsz;
+
+        /* only root's header size matters */
+        TRACE_COMM(MPI_Bcast)(&root_xsz, 1, MPI_OFFSET, 0, ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast"); 
+            DEBUG_RETURN_ERROR(err)
+        }
+
+        err = NC_NOERR;
+        if (root_xsz != ncp->xsz) err = NC_EMULTIDEFINE;
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN,ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+            DEBUG_RETURN_ERROR(err)
+        }
+        if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
+    }
+
+    /* This function is called in ncmpi_enddef(), which can happen either when
+     * creating a new file or opening an existing file with metadata modified.
+     * For the former case, ncp->begin_var == 0 here.
+     * For the latter case, we set begin_var a new value only if the new header
+     * grows out of its extent or the start of non-record variables is not
+     * aligned as requested by ncp->h_align.
+     * Note ncp->xsz is header size and ncp->begin_var is header extent.
+     * Add the minimum header free space requested by user.
+     */
+    ncp->begin_var = D_RNDUP(ncp->xsz + ncp->h_minfree, ncp->h_align);
+
+    if (ncp->old != NULL) {
+        /* If this define mode was entered from a redef(), we check whether
+         * the new begin_var against the old begin_var. We do not shrink
+         * the header extent.
+         */
+        if (ncp->begin_var < ncp->old->begin_var)
+            ncp->begin_var = ncp->old->begin_var;
+    }
+
+    /* ncp->begin_var is the aligned starting file offset of the first
+       variable, also the extent of file header */
+
+    /* Now calculate the starting file offsets for all variables.
+       loop thru vars, first pass is for the 'non-record' vars */
+    end_var = ncp->begin_var;
+    for (j=0, i=0; i<ncp->vars.ndefined; i++) {
+        /* skip record variables on this pass */
+        if (IS_RECVAR(ncp->vars.value[i])) continue;
+
+        if (first_var == NULL) first_var = ncp->vars.value[i];
+
+        /* for CDF-1 check if over the file size limit 32-bit integer */
+        if (ncp->format == 1 && end_var > X_OFF_MAX)
+            DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+        /* this will pad out non-record variables with zero to the
+         * requested alignment.  record variables are a bit trickier.
+         * we don't do anything special with them */
+        ncp->vars.value[i]->begin = D_RNDUP(end_var, ncp->v_align);
+
+        if (ncp->old != NULL) {
+            /* move to the next fixed variable */
+            for (; j<ncp->old->vars.ndefined; j++)
+                if (!IS_RECVAR(ncp->old->vars.value[j]))
+                    break;
+            if (j < ncp->old->vars.ndefined) {
+                if (ncp->vars.value[i]->begin < ncp->old->vars.value[j]->begin)
+                    /* the first ncp->vars.ndefined non-record variables should
+                       be the same. If the new begin is smaller, reuse the old
+                       begin */
+                    ncp->vars.value[i]->begin = ncp->old->vars.value[j]->begin;
+                j++;
+            }
+        }
+        /* end_var is the end offset of variable i */
+        end_var = ncp->vars.value[i]->begin + ncp->vars.value[i]->len;
+    }
+
+    /* end_var now is pointing to the end of last non-record variable */
+
+    /* only (re)calculate begin_rec if there is not sufficient
+     * space at end of non-record variables or if start of record
+     * variables is not aligned as requested by ncp->r_align.
+     * If the existing begin_rec is already >= index, then leave the
+     * begin_rec as is (in case some non-record variables are deleted)
+     */
+    if (ncp->begin_rec < end_var ||
+        ncp->begin_rec != D_RNDUP(ncp->begin_rec, ncp->v_align))
+        ncp->begin_rec = D_RNDUP(end_var, ncp->v_align);
+
+    /* expand free space for fixed variable section */
+    if (ncp->begin_rec < end_var + ncp->v_minfree)
+        ncp->begin_rec = D_RNDUP(end_var + ncp->v_minfree, ncp->v_align);
+
+    /* align the starting offset for record variable section */
+    if (ncp->r_align > 1)
+        ncp->begin_rec = D_RNDUP(ncp->begin_rec, ncp->r_align);
+
+    if (ncp->old != NULL) {
+        /* check whether the new begin_rec is smaller */
+        if (ncp->begin_rec < ncp->old->begin_rec)
+            ncp->begin_rec = ncp->old->begin_rec;
+    }
+
+    if (first_var != NULL) ncp->begin_var = first_var->begin;
+    else                   ncp->begin_var = ncp->begin_rec;
+
+    end_var = ncp->begin_rec;
+    /* end_var now is pointing to the beginning of record variables
+     * note that this can be larger than the end of last non-record variable
+     */
+
+    ncp->recsize = 0;
+
+    /* TODO: alignment for record variables (maybe using a new hint) */
+
+    /* loop thru vars, second pass is for the 'record' vars,
+     * re-calculate the starting offset for each record variable */
+    for (j=0, i=0; i<ncp->vars.ndefined; i++) {
+        if (!IS_RECVAR(ncp->vars.value[i]))
+            /* skip non-record variables on this pass */
+            continue;
+
+        /* X_OFF_MAX is the max of 32-bit integer */
+        if (ncp->format == 1 && end_var > X_OFF_MAX)
+            DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+        /* A few attempts at aligning record variables have failed
+         * (either with range error or 'value read not that expected',
+         * or with an error in ncmpi_redef()).  Not sufficient to align
+         * 'begin', but haven't figured out what else to adjust */
+        ncp->vars.value[i]->begin = end_var;
+
+        if (ncp->old != NULL) {
+            /* move to the next record variable */
+            for (; j<ncp->old->vars.ndefined; j++)
+                if (IS_RECVAR(ncp->old->vars.value[j]))
+                    break;
+            if (j < ncp->old->vars.ndefined) {
+                if (ncp->vars.value[i]->begin < ncp->old->vars.value[j]->begin)
+                    /* if the new begin is smaller, use the old begin */
+                    ncp->vars.value[i]->begin = ncp->old->vars.value[j]->begin;
+                j++;
+            }
+        }
+        end_var += ncp->vars.value[i]->len;
+        /* end_var is the end offset of record variable i */
+
+        /* check if record size must fit in 32-bits (for CDF-1) */
+#if SIZEOF_OFF_T == SIZEOF_SIZE_T && SIZEOF_SIZE_T == 4
+        if (ncp->recsize > X_UINT_MAX - ncp->vars.value[i]->len)
+            DEBUG_RETURN_ERROR(NC_EVARSIZE)
+#endif
+        ncp->recsize += ncp->vars.value[i]->len;
+        last = ncp->vars.value[i];
+    }
+
+    /*
+     * for special case (Check CDF-1 and CDF-2 file format specifications.)
+     * "A special case: Where there is exactly one record variable, we drop the
+     * requirement that each record be four-byte aligned, so in this case there
+     * is no record padding."
+     */
+    if (last != NULL) {
+        if (ncp->recsize == last->len) {
+            /* exactly one record variable, pack value */
+            ncp->recsize = *last->dsizes * last->xsz;
+        }
+#if 0
+        else if (last->len == UINT32_MAX) { /* huge last record variable */
+            ncp->recsize += *last->dsizes * last->xsz;
+        }
+#endif
+    }
+
+/* below is only needed if alignment is performed on record variables */
+#if 0
+    /*
+     * for special case of exactly one record variable, pack value
+     */
+    /* if there is exactly one record variable, then there is no need to
+     * pad for alignment -- there's nothing after it */
+    if (last != NULL && ncp->recsize == last->len)
+        ncp->recsize = *last->dsizes * last->xsz;
+#endif
+
+    if (NC_IsNew(ncp)) ncp->numrecs = 0;
+
+    return NC_NOERR;
+}
+
+/*----< write_NC() >---------------------------------------------------------*/
+/*
+ * This function is collective and only called by enddef().
+ * Write out the header
+ * 1. Call ncmpio_hdr_put_NC() to copy the header object, ncp, to a buffer.
+ * 2. Call NC_check_header() to check if header is consistent across all
+ *    processes.
+ * 3. Process rank 0 writes the header to file.
+ * This is a collective call.
+ */
+static int
+write_NC(NC *ncp)
+{
+    void *buf;
+    int status, mpireturn, err, rank;
+    MPI_Offset local_xsz;
+
+    assert(!NC_readonly(ncp));
+
+    /* In NC_begins(), root's ncp->xsz, root's header size, has been
+     * broadcast, so ncp->xsz is now root's header size. To check any
+     * inconsistency in file header, we need to calculate local header
+     * size by calling ncmpio_hdr_len_NC()./
+     */
+    local_xsz = ncmpio_hdr_len_NC(ncp);
+
+    /* Note valgrind will complain about uninitialized buf below, but buf will
+     * be first filled with header of size ncp->xsz and later write to file.
+     * So, no need to change to NCI_Calloc for the sake of valgrind.
+     */
+    buf = NCI_Malloc((size_t)local_xsz); /* buffer for local header object */
+
+    /* copy the entire local header object to buf */
+    status = ncmpio_hdr_put_NC(ncp, buf);
+    if (status != NC_NOERR) { /* a fatal error */
+        NCI_Free(buf);
+        return status;
+    }
+
+    MPI_Comm_rank(ncp->comm, &rank);
+
+#ifdef _DIFF_HEADER
+    if (ncp->safe_mode == 0) {
+        int h_size=(int)ncp->xsz;
+        void *root_header;
+
+        /* check header against root's */
+        if (rank == 0) root_header = buf;
+        else           root_header = (void*) NCI_Malloc((size_t)h_size);
+
+        TRACE_COMM(MPI_Bcast)(root_header, h_size, MPI_BYTE, 0, ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+            DEBUG_RETURN_ERROR(err)
+        }
+
+        if (rank > 0) {
+            if (h_size != local_xsz || memcmp(buf, root_buf, h_size))
+                status = NC_EMULTIDEFINE;
+            NCI_Free(root_buf);
+        }
+
+        /* report error if header is inconsistency */
+        TRACE_COMM(MPI_Allreduce)(&status, &err, 1, MPI_INT, MPI_MIN,ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+            DEBUG_RETURN_ERROR(err)
+        }
+        if (err != NC_NOERR) {
+            /* TODO: this error return is harsh. Maybe relax for inconsistent
+             * attribute contents? */
+            if (status == NC_NOERR) status = err;
+            NCI_Free(buf);
+            return status;
+        }
+    }
+#endif
+
+#ifdef _CHECK_HEADER_CONSISTENCY
+    /* check the header consistency across all processes and sync header.
+     * When safe_mode is on:
+     *   The returned status on root can be either NC_NOERR (all headers are
+     *   consistent) or NC_EMULTIDEFINE (some headers are inconsistent).
+     *   The returned status on non-root processes can be NC_NOERR, fatal
+     *   error (>-250), or inconsistency error (-250 to -269).
+     * When safe_mode is off:
+     *   The returned status on root is always NC_NOERR
+     *   The returned status on non-root processes can be NC_NOERR, fatal
+     *   error (>-250), or inconsistency error (-250 to -269).
+     * For fatal error, we should stop. For others, we can continue.
+     */
+    int max_err;
+    status = NC_check_header(ncp, buf, local_xsz);
+
+    /* check for fatal error */
+    err =  (status != NC_NOERR && !ErrIsHeaderDiff(status)) ? 1 : 0;
+    max_err = err;
+
+    if (ncp->safe_mode == 1) {
+        TRACE_COMM(MPI_Allreduce)(&err, &max_err, 1, MPI_INT, MPI_MAX,
+                                  ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn,"MPI_Allreduce");
+            DEBUG_RETURN_ERROR(err)
+        }
+    }
+    if (max_err == 1) { /* some processes encounter a fatal error */
+        NCI_Free(buf);
+        return status;
+    }
+#endif
+    /* For non-fatal error, we continue to write header to the file, as now the
+     * header object in memory has been sync-ed across all processes. */
+
+    /* only rank 0's header gets written to the file */
+    if (rank == 0) {
+        /* rank 0's fileview already includes the file header */
+        MPI_Status mpistatus;
+        if (ncp->xsz != (int)ncp->xsz)
+            DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
+
+#ifdef _USE_MPI_GET_COUNT
+        /* explicitly initialize mpistatus object to 0, see comments below */
+        memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+        TRACE_IO(MPI_File_write_at)(ncp->collective_fh, 0, buf,
+                                    (int)ncp->xsz, MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at");
+            /* write has failed, which is more serious than inconsistency */
+            if (err == NC_EFILE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
+        }
+        else {
+#ifdef _USE_MPI_GET_COUNT
+            int put_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
+            ncp->put_size += put_size;
+#else
+            ncp->put_size += ncp->xsz;
+#endif
+        }
+    }
+
+    if (ncp->safe_mode == 1) {
+        /* broadcast root's status, because only root writes to the file */
+        int root_status = status;
+        TRACE_COMM(MPI_Bcast)(&root_status, 1, MPI_INT, 0, ncp->comm);
+        /* root's write has failed, which is more serious than inconsistency */
+        if (root_status == NC_EWRITE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
+    }
+
+    fClr(ncp->flags, NC_NDIRTY);
+    NCI_Free(buf);
+
+    return status;
+}
+
+/* Many subroutines called in ncmpio__enddef() are collective. We check the
+ * error codes of all processes only in safe mode, so the program can stop
+ * collectively, if any one process got an error. However, when safe mode is
+ * off, we simply return the error and program may hang if some processes
+ * do not get error and proceed to the next subroutine call.
+ */ 
+#define CHECK_ERROR(err) {                                              \
+    if (ncp->safe_mode == 1) {                                          \
+        int status;                                                     \
+        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN,   \
+                                  ncp->comm);                           \
+        if (mpireturn != MPI_SUCCESS) {                                 \
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");      \
+            DEBUG_RETURN_ERROR(err)                                     \
+        }                                                               \
+        if (status != NC_NOERR) return status;                          \
+    }                                                                   \
+    else if (err != NC_NOERR)                                           \
+        return err;                                                     \
+}
+
+/*----< ncmpio_NC_check_vlen() >---------------------------------------------*/
+/* Check whether variable size is less than or equal to vlen_max,
+ * without overflowing in arithmetic calculations.  If OK, return 1,
+ * else, return 0.  For CDF1 format or for CDF2 format on non-LFS
+ * platforms, vlen_max should be 2^31 - 4, but for CDF2 format on
+ * systems with LFS it should be 2^32 - 4.
+ */
+int
+ncmpio_NC_check_vlen(NC_var     *varp,
+                     MPI_Offset  vlen_max)
+{
+    int i;
+    MPI_Offset prod=varp->xsz;     /* product of xsz and dimensions so far */
+
+    for (i = IS_RECVAR(varp) ? 1 : 0; i < varp->ndims; i++) {
+        if (varp->shape[i] > vlen_max / prod) {
+            return 0;           /* size in bytes > vlen_max */
+        }
+        prod *= varp->shape[i];
+    }
+    return 1;
+}
+
+/*----< ncmpio_NC_check_vlens() >--------------------------------------------*/
+/* Given a valid ncp, check all variables for their sizes against the maximal
+ * allowable sizes. Different CDF formation versions have different maximal
+ * sizes. This function returns NC_EVARSIZE if any variable has a bad len
+ * (product of non-rec dim sizes too large), else return NC_NOERR.
+ */
+int
+ncmpio_NC_check_vlens(NC *ncp)
+{
+    int last = 0;
+    MPI_Offset i, vlen_max, rec_vars_count;
+    MPI_Offset large_fix_vars_count, large_rec_vars_count;
+    NC_var *varp;
+
+    if (ncp->vars.ndefined == 0) /* no variable defined */
+        return NC_NOERR;
+
+    /* maximum permitted variable size (or size of one record's worth
+       of a record variable) in bytes. It is different between format 1
+       2 and 5. */
+
+    if (ncp->format >= 5) /* CDF-5 format max */
+        vlen_max = X_INT64_MAX - 3; /* "- 3" handles rounded-up size */
+    else if (ncp->format == 2) /* CDF2 format */
+        vlen_max = X_UINT_MAX  - 3; /* "- 3" handles rounded-up size */
+    else
+        vlen_max = X_INT_MAX   - 3; /* CDF1 format */
+
+    /* Loop through vars, first pass is for non-record variables */
+    large_fix_vars_count = 0;
+    rec_vars_count = 0;
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        varp = ncp->vars.value[i];
+        if (IS_RECVAR(varp)) {
+            rec_vars_count++;
+            continue;
+        }
+
+        last = 0;
+        if (ncmpio_NC_check_vlen(varp, vlen_max) == 0) {
+            /* check this variable's shape product against vlen_max */
+
+            if (ncp->format >= 5) /* variable too big for CDF-5 */
+                DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+            large_fix_vars_count++;
+            last = 1;
+        }
+    }
+    /* OK if last non-record variable size too large, since not used to
+       compute an offset */
+    if (large_fix_vars_count > 1)  /* only one "too-large" variable allowed */
+        DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+    /* The only "too-large" variable must be the last one defined */
+    if (large_fix_vars_count == 1 && last == 0)
+        DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+    if (rec_vars_count == 0) return NC_NOERR;
+
+    /* if there is a "too-large" fixed-size variable, no record variable is
+     * allowed */
+    if (large_fix_vars_count == 1)
+        DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+    /* Loop through vars, second pass is for record variables.   */
+    large_rec_vars_count = 0;
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        varp = ncp->vars.value[i];
+        if (!IS_RECVAR(varp)) continue;
+
+        last = 0;
+        if (ncmpio_NC_check_vlen(varp, vlen_max) == 0) {
+            /* check this variable's shape product against vlen_max */
+
+            if (ncp->format >= 5) /* variable too big for CDF-5 */
+                DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+            large_rec_vars_count++;
+            last = 1;
+        }
+    }
+
+    /* For CDF-2, no record variable can require more than 2^32 - 4 bytes of
+     * storage for each record's worth of data, unless it is the last record
+     * variable. See
+     * http://www.unidata.ucar.edu/software/netcdf/docs/file_structure_and_performance.html#offset_format_limitations
+     */
+    if (large_rec_vars_count > 1)  /* only one "too-large" variable allowed */
+        DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+    /* and it has to be the last one */
+    if (large_rec_vars_count == 1 && last == 0)
+        DEBUG_RETURN_ERROR(NC_EVARSIZE)
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_NC_check_voffs() >--------------------------------------------*/
+/*
+ * Given a valid ncp, check whether the file starting offsets (begin) of all
+ * variables follows the same increasing order as they were defined.
+ */
+int
+ncmpio_NC_check_voffs(NC *ncp)
+{
+    NC_var *varp;
+    int i, prev;
+    MPI_Offset prev_off;
+
+    if (ncp->vars.ndefined == 0) return NC_NOERR;
+
+    /* Loop through vars, first pass is for non-record variables */
+    prev_off = ncp->begin_var;
+    prev     = 0;
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        varp = ncp->vars.value[i];
+        if (IS_RECVAR(varp)) continue;
+
+        if (varp->begin < prev_off) {
+            if (ncp->safe_mode) {
+                if (i == 0)
+                    printf("Variable \"%s\" begin offset (%lld) is less than header extent (%lld)\n",
+                           varp->name, varp->begin, prev_off);
+                else
+                    printf("Variable \"%s\" begin offset (%lld) is less than previous variable \"%s\" end offset (%lld)\n",
+                           varp->name, varp->begin, ncp->vars.value[prev]->name, prev_off);
+            }
+            DEBUG_RETURN_ERROR(NC_ENOTNC)
+        }
+        prev_off = varp->begin + varp->len;
+        prev     = i;
+    }
+
+    if (ncp->begin_rec < prev_off) {
+        if (ncp->safe_mode)
+            printf("Record variable section begin offset (%lld) is less than fix-sized variable section end offset (%lld)\n", varp->begin, prev_off);
+        DEBUG_RETURN_ERROR(NC_ENOTNC)
+    }
+
+    /* Loop through vars, second pass is for record variables */
+    prev_off = ncp->begin_rec;
+    prev     = 0;
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        varp = ncp->vars.value[i];
+        if (!IS_RECVAR(varp)) continue;
+
+        if (varp->begin < prev_off) {
+            if (ncp->safe_mode) {
+                printf("Variable \"%s\" begin offset (%lld) is less than previous variable end offset (%lld)\n",
+                           varp->name, varp->begin, prev_off);
+                if (i == 0)
+                    printf("Variable \"%s\" begin offset (%lld) is less than record variable section begin offset (%lld)\n",
+                           varp->name, varp->begin, prev_off);
+                else
+                    printf("Variable \"%s\" begin offset (%lld) is less than previous variable \"%s\" end offset (%lld)\n",
+                           varp->name, varp->begin, ncp->vars.value[prev]->name, prev_off);
+            }
+            DEBUG_RETURN_ERROR(NC_ENOTNC)
+        }
+        prev_off = varp->begin + varp->len;
+        prev     = i;
+    }
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio__enddef() >---------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpio__enddef(void       *ncdp,
+               MPI_Offset  h_minfree,
+               MPI_Offset  v_align,
+               MPI_Offset  v_minfree,
+               MPI_Offset  r_align)
+{
+    int i, flag, striping_unit, mpireturn, err=NC_NOERR, status=NC_NOERR;
+    char value[MPI_MAX_INFO_VAL];
+    MPI_Offset all_fix_var_size;
+    NC *ncp = (NC*)ncdp;
+
+    /* sanity check for NC_ENOTINDEFINE, NC_EINVAL, NC_EMULTIDEFINE_FNC_ARGS
+     * has been done at dispatchers */
+    ncp->h_minfree = h_minfree;
+    ncp->v_minfree = v_minfree;
+
+    /* calculate a good align size for PnetCDF level hints:
+     * header_align_size and var_align_size based on the MPI-IO hint
+     * striping_unit. This hint can be either supplied by the user or obtained
+     * from MPI-IO (for example, ROMIO's Lustre driver makes a system call to
+     * get the striping parameters of a file).
+     */
+    MPI_Info_get(ncp->mpiinfo, "striping_unit", MPI_MAX_INFO_VAL-1, value,
+                 &flag);
+    striping_unit = 0;
+    if (flag) {
+        errno = 0;
+        striping_unit = (int)strtol(value,NULL,10);
+        if (errno != 0) striping_unit = 0;
+    }
+    ncp->striping_unit = striping_unit;
+
+    all_fix_var_size = 0;  /* sum of all defined fix-sized variables */
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        if (IS_RECVAR(ncp->vars.value[i])) continue;
+        all_fix_var_size += ncp->vars.value[i]->len;
+    }
+
+    /* ncp->h_align, ncp->v_align, ncp->r_align, and ncp->chunk have been
+     * set during file create/open */
+
+    if (ncp->h_align == 0) { /* user info does not set nc_header_align_size */
+        if (striping_unit &&
+            all_fix_var_size > FILE_ALIGNMENT_LB * striping_unit)
+            /* if striping_unit is available and file size sufficiently large */
+            ncp->h_align = striping_unit;
+        else
+            ncp->h_align = FILE_ALIGNMENT_DEFAULT;
+    }
+    /* else respect user hint */
+
+    if (ncp->v_align == 0) { /* user info does not set nc_var_align_size */
+        if (v_align > 0) /* else respect user hint */
+            ncp->v_align = v_align;
+        else if (striping_unit &&
+                 all_fix_var_size > FILE_ALIGNMENT_LB * striping_unit)
+            /* if striping_unit is available and file size sufficiently large */
+            ncp->v_align = striping_unit;
+        else
+            ncp->v_align = FILE_ALIGNMENT_DEFAULT;
+    }
+
+    if (ncp->r_align == 0) { /* user info does not set nc_record_align_size */
+        if (r_align > 0) /* else respect user hint */
+            ncp->r_align = r_align;
+        if (striping_unit)
+            ncp->r_align = striping_unit;
+        else
+            ncp->r_align = FILE_ALIGNMENT_DEFAULT;
+    }
+
+    /* all CDF formats require 4-bytes alignment */
+    if (ncp->h_align == 0) ncp->h_align = 4;
+    else                   ncp->h_align = D_RNDUP(ncp->h_align, 4);
+    if (ncp->v_align == 0) ncp->v_align = 4;
+    else                   ncp->v_align = D_RNDUP(ncp->v_align, 4);
+    if (ncp->r_align == 0) ncp->r_align = 4;
+    else                   ncp->r_align = D_RNDUP(ncp->r_align, 4);
+
+    /* reflect the hint changes to the MPI info object, so the user can inquire
+     * what the true hint values are being used
+     */
+    sprintf(value, "%lld", ncp->h_align);
+    MPI_Info_set(ncp->mpiinfo, "nc_header_align_size", value);
+    sprintf(value, "%lld", ncp->v_align);
+    MPI_Info_set(ncp->mpiinfo, "nc_var_align_size", value);
+    sprintf(value, "%lld", ncp->r_align);
+    MPI_Info_set(ncp->mpiinfo, "nc_record_align_size", value);
+
+#ifdef ENABLE_SUBFILING
+    sprintf(value, "%d", ncp->num_subfiles);
+    MPI_Info_set(ncp->mpiinfo, "nc_num_subfiles", value);
+    if (ncp->num_subfiles > 1) {
+        /* TODO: should return subfile-related msg when there's an error */
+        err = ncmpio_subfile_partition(ncp);
+        CHECK_ERROR(err)
+    }
+#endif
+
+    /* check whether sizes of all variables are legal */
+    err = ncmpio_NC_check_vlens(ncp);
+    CHECK_ERROR(err)
+
+    /* When ncp->old == NULL, this enddef is called the first time after file
+     * create call. In this case, we compute each variable's 'begin', starting
+     * file offset as well as the offsets of record variables.
+     * When ncp->old != NULL, this enddef is called after a redef. In this
+     * case, we re-used all variable offsets as many as possible.
+     *
+     * Note in NC_begins, root broadcasts ncp->xsz, the file header size, to
+     * all processes.
+     */
+    err = NC_begins(ncp);
+    CHECK_ERROR(err)
+
+    if (ncp->safe_mode) {
+        /* check whether variable begins are in an increasing order.
+         * This check is for debugging purpose. */
+        err = ncmpio_NC_check_voffs(ncp);
+        CHECK_ERROR(err)
+    }
+
+#ifdef ENABLE_SUBFILING
+    if (ncp->num_subfiles > 1) {
+        /* get ncp info for the subfile */
+        err = NC_begins(ncp->ncp_sf);
+        CHECK_ERROR(err)
+
+        if (ncp->safe_mode) {
+            /* check whether variable begins are in an increasing order.
+             * This check is for debugging purpose. */
+            err = ncmpio_NC_check_voffs(ncp->ncp_sf);
+            CHECK_ERROR(err)
+        }
+    }
+#endif
+
+    if (ncp->old != NULL) {
+        /* The current define mode was entered from ncmpi_redef, not from
+         * ncmpi_create. We must check if header has been expanded.
+         */
+
+        assert(!NC_IsNew(ncp));
+        assert(fIsSet(ncp->flags, NC_MODE_DEF));
+        assert(ncp->begin_rec >= ncp->old->begin_rec);
+        assert(ncp->begin_var >= ncp->old->begin_var);
+        assert(ncp->vars.ndefined >= ncp->old->vars.ndefined);
+        /* ncp->numrecs has already sync-ed in ncmpi_redef */
+
+        if (ncp->vars.ndefined > 0) { /* no. record and non-record variables */
+            if (ncp->begin_var > ncp->old->begin_var) {
+                /* header size increases, shift the entire data part down */
+                /* shift record variables first */
+                err = move_record_vars(ncp, ncp->old);
+                CHECK_ERROR(err)
+
+                /* shift non-record variables */
+                /* err = move_vars_r(ncp, ncp->old); */
+                err = move_fixed_vars(ncp, ncp->old);
+                CHECK_ERROR(err)
+            }
+            else if (ncp->begin_rec > ncp->old->begin_rec ||
+                     ncp->recsize   > ncp->old->recsize) {
+                /* number of non-record variables increases, or
+                   number of records of record variables increases,
+                   shift and move all record variables down */
+                err = move_record_vars(ncp, ncp->old);
+                CHECK_ERROR(err)
+            }
+        }
+    } /* ... ncp->old != NULL */
+
+    /* first sync header objects in memory across all processes, and then root
+     * writes the header to file. Note safe_mode error check will be done in
+     * write_NC() */
+    status = write_NC(ncp);
+
+    /* we should continue to exit define mode, even if header is inconsistent
+     * among processes, so the program can proceed, say to close file properly.
+     * However, if ErrIsHeaderDiff(status) is true, this error should
+     * be considered fatal, as inconsistency is about the data structure,
+     * rather then contents (such as attribute values) */
+
+#ifdef ENABLE_SUBFILING
+    /* write header to subfile */
+    if (ncp->num_subfiles > 1) {
+        err = write_NC(ncp->ncp_sf);
+        if (status == NC_NOERR) status = err;
+    }
+#endif
+
+    /* update the total number of record variables */
+    ncp->vars.num_rec_vars = 0;
+    for (i=0; i<ncp->vars.ndefined; i++)
+        ncp->vars.num_rec_vars += IS_RECVAR(ncp->vars.value[i]);
+
+    /* fill variables according to their fill mode settings */
+    if (ncp->vars.ndefined > 0) {
+        err = ncmpio_fill_vars(ncp);
+        if (status == NC_NOERR) status = err;
+    }
+
+    if (ncp->old != NULL) {
+        ncmpio_free_NC(ncp->old);
+        ncp->old = NULL;
+    }
+    fClr(ncp->flags, NC_MODE_CREATE | NC_MODE_DEF);
+
+#ifdef ENABLE_SUBFILING
+    if (ncp->num_subfiles > 1)
+        fClr(ncp->ncp_sf->flags, NC_MODE_CREATE | NC_MODE_DEF);
+#endif
+
+    /* If the user sets NC_SHARE, we enforce a stronger data consistency */
+    if (NC_doFsync(ncp))
+        ncmpio_file_sync(ncp); /* calling MPI_File_sync() */
+
+    return status;
+}
+
+/*----< ncmpio_enddef() >----------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpio_enddef(void *ncdp)
+{
+    return ncmpio__enddef(ncdp, 0, 0, 0, 0);
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_file_misc.c b/src/drivers/ncmpio/ncmpio_file_misc.c
new file mode 100644
index 0000000..aa46d65
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_file_misc.c
@@ -0,0 +1,456 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_file_misc.c 3437 2017-10-11 20:26:33Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in src/dispatchers/file.c
+ *
+ * ncmpi_redef()            : dispatcher->redef()
+ * ncmpi_close()            : dispatcher->close()
+ * ncmpi_abort()            : dispatcher->abort()
+ * ncmpi_begin_indep_data() : dispatcher->begin_indep_data()
+ * ncmpi_end_indep_data()   : dispatcher->end_indep_data()
+ * ncmpi_inq()              : dispatcher->inq()
+ * ncmpi_inq_xxx()          : dispatcher->inq_misc()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>  /* strcpy() */
+#include <assert.h>
+#include <errno.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+
+/*----< dup_NC() >-----------------------------------------------------------*/
+static NC *
+dup_NC(const NC *ref)
+{
+    NC *ncp;
+
+    ncp = (NC *) NCI_Calloc(1, sizeof(NC));
+    if (ncp == NULL) return NULL;
+
+    /* copy most of the NC members over */
+    *ncp = *ref;
+
+    if (ncmpio_dup_NC_dimarray(&ncp->dims,   &ref->dims)  != NC_NOERR ||
+        ncmpio_dup_NC_attrarray(&ncp->attrs, &ref->attrs) != NC_NOERR ||
+        ncmpio_dup_NC_vararray(&ncp->vars,   &ref->vars)  != NC_NOERR) {
+        ncmpio_free_NC(ncp);
+        return NULL;
+    }
+
+    /* fields below should not copied from ref */
+    ncp->comm       = MPI_COMM_NULL;
+    ncp->mpiinfo    = MPI_INFO_NULL;
+    ncp->get_list   = NULL;
+    ncp->put_list   = NULL;
+    ncp->abuf       = NULL;
+    ncp->path       = NULL;
+
+    return ncp;
+}
+
+/*----< ncmpio_redef() >-----------------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpio_redef(void *ncdp)
+{
+    NC *ncp = (NC*)ncdp;
+
+#if 0
+    if (NC_readonly(ncp)) DEBUG_RETURN_ERROR(NC_EPERM) /* read-only */
+    /* if open mode is inconsistent, then this return might cause parallel
+     * program to hang */
+
+    /* cannot be in define mode, must enter from data mode */
+    if (NC_indef(ncp)) DEBUG_RETURN_ERROR(NC_EINDEFINE)
+
+    /* sync all metadata, including numrecs, if changed in independent mode.
+     * also ensure exiting define mode always entering collective data mode
+     */
+#endif
+    if (NC_indep(ncp)) /* exit independent mode, if in independent mode */
+        ncmpio_end_indep_data(ncp);
+
+#if 0
+    /* header metadata is always sync-ed among all processes, except for
+     * numrecs when in independent data mode. It has been sync-ed above when
+     * calling ncmpio_end_indep_data()
+     */
+    if (NC_doFsync(ncp)) { /* re-read the header from file */
+        int err = ncmpio_read_NC(ncp);
+        if (err != NC_NOERR) return err;
+    }
+#endif
+
+    /* duplicate a header to be used in enddef() for checking if header grows */
+    ncp->old = dup_NC(ncp);
+    if (ncp->old == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    /* we are now entering define mode */
+    fSet(ncp->flags, NC_MODE_DEF);
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_begin_indep_data() >------------------------------------------*/
+/* This is a collective subroutine. */
+int
+ncmpio_begin_indep_data(void *ncdp)
+{
+    NC *ncp = (NC*)ncdp;
+
+    if (NC_indef(ncp))  /* must not be in define mode */
+        DEBUG_RETURN_ERROR(NC_EINDEFINE)
+
+    if (NC_indep(ncp))  /* already in indep data mode */
+        return NC_NOERR;
+
+    /* we need no MPI_File_sync() here. If users want a stronger data
+     * consistency, they can call ncmpi_sync()
+     */
+#if 0 && !defined(DISABLE_FILE_SYNC)
+    if (!NC_readonly(ncp) && ncp->collective_fh != MPI_FILE_NULL) {
+        /* calling file sync for those already open the file */
+        int err, mpireturn;
+        /* MPI_File_sync() is collective */
+        TRACE_IO(MPI_File_sync)(ncp->collective_fh);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_sync");
+            if (err == NC_NOERR) return err;
+        }
+        TRACE_COMM(MPI_Barrier)(ncp->comm);
+    }
+#endif
+
+    /* raise independent flag */
+    fSet(ncp->flags, NC_MODE_INDEP);
+
+    /* PnetCDF's default mode is collective. MPI file handle, collective_fh,
+     * will never be MPI_FILE_NULL. We must use a separate MPI file handle
+     * opened with MPI_COMM_SELF, because MPI_File_set_view is a collective
+     * call and accessing a subarray requires a call to MPI_File_set_view.
+     * In independent data mode, no collective MPI operation can be implicitly
+     * called.
+     */
+    if (ncp->independent_fh == MPI_FILE_NULL) {
+        int mpireturn;
+        TRACE_IO(MPI_File_open)(MPI_COMM_SELF, ncp->path,
+                                ncp->mpiomode, ncp->mpiinfo,
+                                &ncp->independent_fh);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_File_open");
+    }
+    return NC_NOERR;
+}
+
+/*----< ncmpio_end_indep_data() >--------------------------------------------*/
+/* This is a collective subroutine.
+ * It can be called from:
+ *    1. ncmpi_end_indep_data()
+ *    2. ncmpi_redef() from independent data mode entering to define more
+ *    3. ncmpi_close() when closing the file
+ */
+int
+ncmpio_end_indep_data(void *ncdp)
+{
+    int status=NC_NOERR;
+    NC *ncp = (NC*)ncdp;
+
+    if (NC_indef(ncp))  /* must not be in define mode */
+        DEBUG_RETURN_ERROR(NC_EINDEFINE)
+
+    if (!NC_indep(ncp)) /* must be in independent data mode */
+        DEBUG_RETURN_ERROR(NC_ENOTINDEP)
+
+    if (!NC_readonly(ncp)) {
+        if (ncp->vars.num_rec_vars > 0) {
+            /* numrecs dirty bit may not be the same across all processes.
+             * force sync in memory no matter if dirty or not.
+             */
+            set_NC_ndirty(ncp);
+            status = ncmpio_sync_numrecs(ncp);
+            /* the only possible dirty part of the header is numrecs */
+        }
+
+#ifndef DISABLE_FILE_SYNC
+        /* calling file sync for those already open the file */
+        if (NC_doFsync(ncp) && ncp->independent_fh != MPI_FILE_NULL) {
+            int mpireturn;
+            /* MPI_File_sync() is collective */
+            TRACE_IO(MPI_File_sync)(ncp->independent_fh);
+            if (mpireturn != MPI_SUCCESS) {
+                int err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_sync");
+                if (status == NC_NOERR) status = err;
+            }
+            TRACE_COMM(MPI_Barrier)(ncp->comm);
+            if (mpireturn != MPI_SUCCESS)
+                return ncmpii_error_mpi2nc(mpireturn, "MPI_Barrier");
+        }
+#endif
+    }
+
+    fClr(ncp->flags, NC_MODE_INDEP);
+
+    return status;
+}
+
+/*----< ncmpio_abort() >-----------------------------------------------------*/
+/* This API is a collective subroutine */
+int
+ncmpio_abort(void *ncdp)
+{
+   /*
+    * In data mode, same as ncmpi_close().
+    * In define mode, descard new definition.
+    * If file is just created, remove the file.
+    */
+    int status=NC_NOERR, err, doUnlink = 0;
+    NC *ncp = (NC*)ncdp;
+
+    /* delete the file if it is newly created by ncmpi_create() */
+    doUnlink = NC_IsNew(ncp);
+
+    if (ncp->old != NULL) {
+        /* a plain redef, not a create */
+        assert(!NC_IsNew(ncp));
+        assert(fIsSet(ncp->flags, NC_MODE_DEF));
+        ncmpio_free_NC(ncp->old);
+        ncp->old = NULL;
+        fClr(ncp->flags, NC_MODE_DEF);
+    }
+
+    if (!doUnlink) {
+        if (!NC_readonly(ncp) &&  /* file is open for write */
+             NC_indep(ncp)) {     /* in independent data mode */
+            /* exit independent mode, if in independent mode */
+            status = ncmpio_end_indep_data(ncp); /* will sync header */
+        }
+
+        if (NC_doFsync(ncp)) {
+            err = ncmpio_file_sync(ncp); /* calling MPI_File_sync() */
+            if (status == NC_NOERR ) status = err;
+        }
+    }
+
+    /* close the file */
+    err = ncmpio_close_files(ncp, doUnlink);
+    if (status == NC_NOERR ) status = err;
+
+    /* free up space occupied by the header metadata */
+    ncmpio_free_NC(ncp);
+
+    return status;
+}
+
+/*----< ncmpio_inq() >-------------------------------------------------------*/
+int
+ncmpio_inq(void *ncdp,
+           int  *ndimsp,
+           int  *nvarsp,
+           int  *nattsp,
+           int  *xtendimp)
+{
+    NC *ncp = (NC*)ncdp;
+
+    if (ndimsp   != NULL) *ndimsp   = ncp->dims.ndefined;
+    if (nvarsp   != NULL) *nvarsp   = ncp->vars.ndefined;
+    if (nattsp   != NULL) *nattsp   = ncp->attrs.ndefined;
+    if (xtendimp != NULL) *xtendimp = ncp->dims.unlimited_id;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_inq_misc() >--------------------------------------------------*/
+/* This is an independent subroutine. */
+int
+ncmpio_inq_misc(void       *ncdp,
+                int        *pathlen,
+                char       *path,
+                int        *num_fix_varsp,
+                int        *num_rec_varsp,
+                int        *striping_size,
+                int        *striping_count,
+                MPI_Offset *header_size,
+                MPI_Offset *header_extent,
+                MPI_Offset *recsize,
+                MPI_Offset *put_size,
+                MPI_Offset *get_size,
+                MPI_Info   *info_used,
+                int        *nreqs,
+                MPI_Offset *usage,
+                MPI_Offset *buf_size)
+{
+    int i, flag, mpireturn;
+    char value[MPI_MAX_INFO_VAL];
+    NC *ncp=(NC*)ncdp;
+
+    /* Get the file pathname which was used to open/create the ncid's file.
+     * path must already be allocated. Ignored if NULL */
+    if (ncp->path == NULL) {
+        if (pathlen != NULL) *pathlen = 0;
+        if (path    != NULL) *path = '\0';
+    } else {
+        if (pathlen != NULL) *pathlen = (int)strlen(ncp->path);
+        if (path    != NULL) strcpy(path, ncp->path);
+    }
+
+    /* obtain the number of fixed-size variables */
+    if (num_fix_varsp != NULL) {
+        if (NC_indef(ncp)) {
+            /* if in define mode, recalculate the number of record variables */
+            *num_fix_varsp = 0;
+            for (i=0; i<ncp->vars.ndefined; i++)
+                *num_fix_varsp += IS_RECVAR(ncp->vars.value[i]);
+        }
+        else
+            *num_fix_varsp = ncp->vars.num_rec_vars;
+
+        /* no. fixed-size == ndefined - no. record variables */
+        *num_fix_varsp = ncp->vars.ndefined - *num_fix_varsp;
+    }
+
+    /* obtain the number of record variables */
+    if (num_rec_varsp != NULL) {
+        if (NC_indef(ncp)) {
+            /* if in define mode, recalculate the number of record variables */
+            *num_rec_varsp = 0;
+            for (i=0; i<ncp->vars.ndefined; i++)
+                *num_rec_varsp += IS_RECVAR(ncp->vars.value[i]);
+        }
+        else
+            *num_rec_varsp = ncp->vars.num_rec_vars;
+    }
+
+    /* obtain file (system) striping settings, striping size and count, if they
+     * are available from MPI-IO hint. Otherwise, 0s are returned.
+     */
+    if (striping_size != NULL) {
+        MPI_Info_get(ncp->mpiinfo, "striping_unit", MPI_MAX_INFO_VAL-1,
+                     value, &flag);
+        *striping_size = 0;
+        if (flag) {
+            errno = 0;  /* errno must set to zero before calling strtoll */
+            *striping_size = (int)strtol(value,NULL,10);
+            if (errno != 0) *striping_size = 0;
+        }
+    }
+
+    if (striping_count != NULL) {
+        MPI_Info_get(ncp->mpiinfo, "striping_factor", MPI_MAX_INFO_VAL-1,
+                     value, &flag);
+        *striping_count = 0;
+        if (flag) {
+            errno = 0;  /* errno must set to zero before calling strtoll */
+            *striping_count = (int)strtol(value,NULL,10);
+            if (errno != 0) *striping_count = 0;
+        }
+    }
+
+    /* the amount of writes, in bytes, committed to file system so far */
+    if (put_size != NULL) *put_size = ncp->put_size;
+
+    /* the amount of reads, in bytes, obtained from file system so far */
+    if (get_size != NULL) *get_size = ncp->get_size;
+
+    if (recsize != NULL) *recsize = ncp->recsize;
+
+    if (header_size != NULL) *header_size = ncp->xsz;
+
+    if (header_extent != NULL) *header_extent = ncp->begin_var;
+
+    if (info_used != NULL) {
+        mpireturn = MPI_Info_dup(ncp->mpiinfo, info_used);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Info_dup");
+
+        sprintf(value, "%lld", ncp->h_align);
+        MPI_Info_set(*info_used, "nc_header_align_size", value);
+
+        sprintf(value, "%lld", ncp->v_align);
+        MPI_Info_set(*info_used, "nc_var_align_size", value);
+
+        sprintf(value, "%lld", ncp->r_align);
+        MPI_Info_set(*info_used, "nc_record_align_size", value);
+
+        sprintf(value, "%d", ncp->chunk);
+        MPI_Info_set(*info_used, "nc_header_read_chunk_size", value);
+
+#ifdef ENABLE_SUBFILING
+        if (ncp->subfile_mode)
+            MPI_Info_set(*info_used, "pnetcdf_subfiling", "enable");
+        else
+            MPI_Info_set(*info_used, "pnetcdf_subfiling", "disable");
+        sprintf(value, "%d", ncp->num_subfiles);
+        MPI_Info_set(*info_used, "nc_num_subfiles", value);
+#else
+        MPI_Info_set(*info_used, "pnetcdf_subfiling", "disable");
+#endif
+    }
+
+    if (nreqs != NULL) {
+        /* cannot just use *nreqs = ncp->numGetReqs + ncp->numPutReqs;
+         * because some request IDs are repeated, such as record variables and
+         * varn requests
+         */
+        *nreqs = 0;
+        for (i=0; i<ncp->numGetReqs; i++) {
+            if (i > 0 && ncp->get_list[i].id == ncp->get_list[i-1].id)
+                continue;
+            (*nreqs)++;
+        }
+        for (i=0; i<ncp->numPutReqs; i++) {
+            if (i > 0 && ncp->put_list[i].id == ncp->put_list[i-1].id)
+                continue;
+            (*nreqs)++;
+        }
+    }
+
+    if (usage != NULL) {
+        /* check if the buffer has been previously attached */
+        if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
+        /* return the current usage in bytes */
+        *usage = ncp->abuf->size_used;
+    }
+
+    if (buf_size != NULL) {
+        /* check if the buffer has been previously attached */
+        if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
+        /* return the current usage in bytes */
+        *buf_size = ncp->abuf->size_allocated;
+    }
+
+    return NC_NOERR;
+}
+
+/*----< ncmpi_delete() >-----------------------------------------------------*/
+/* doesn't do anything to release resources. Users are advised to call
+ * ncmpi_close() before calling this function.
+ *
+ * filename: the name of the file we will remove.
+ * info: MPI info object, in case underlying file system needs hints.
+ */
+int
+ncmpi_delete(const char *filename,
+             MPI_Info    info)
+{
+    int err=NC_NOERR, mpireturn;
+
+    TRACE_IO(MPI_File_delete)((char*)filename, info);
+    if (mpireturn != MPI_SUCCESS)
+        err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_delete");
+    return err;
+}
+
diff --git a/src/lib/filetype.c b/src/drivers/ncmpio/ncmpio_filetype.c
similarity index 61%
rename from src/lib/filetype.c
rename to src/drivers/ncmpio/ncmpio_filetype.c
index 231dcb5..35d77a5 100644
--- a/src/lib/filetype.c
+++ b/src/drivers/ncmpio/ncmpio_filetype.c
@@ -2,14 +2,13 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: filetype.c 2603 2016-11-08 19:04:56Z wkliao $ */
+/* $Id: ncmpio_filetype.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdio.h>
-#include <unistd.h>
 #ifdef HAVE_STDLIB_H
 #include <stdlib.h>
 #endif
@@ -17,289 +16,109 @@
 
 #include <mpi.h>
 
-#include "nc.h"
-#include "ncx.h"
-#include "macro.h"
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
 
 
 #if SIZEOF_MPI_AINT != SIZEOF_MPI_OFFSET
 /*----< check_recsize_too_big() >--------------------------------------------*/
+/* Because recsize (sum of single record of all record variables) will be used
+ * to as the "offset stride" when constructing the file view, we must ensure
+ * there is no integer overflow. Note records of all variables are interleaved,
+ * for example record i of all record variables followed by record i+1 of all
+ * record variables, the stride across two records of a variable can be too
+ * large for a 4-byte integer to represent.
+ */
 inline static int
-check_recsize_too_big(NC *ncp)
+check_recsize_too_big(MPI_Offset recsize)
 {
     int ret = NC_NOERR;
-    /* assertion: because recsize will be used to set up the file
-     * view, we must ensure there is no overflow when specifying
-     * how big a stride there is between items (think interleaved
-     * records).
-     *
-     * note: 'recsize' is the sum of the record size of all record
-     * variables in this dataset */
-    if (ncp->recsize != (MPI_Aint)ncp->recsize) {
+
+    if (recsize != (MPI_Aint)recsize) {
         fprintf(stderr, "Type overflow: unable to read/write multiple records in this dataset\non this platform. Please either access records of this record variable\none-at-a-time or run on a 64 bit platform\n");
         DEBUG_ASSIGN_ERROR(ret, NC_ESMALL)
     }
     /* the assert here might be harsh, but without it, users will get corrupt
      * data. Now, we just skip this request to avoid this assertion. */
-    /* assert (ncp->recsize == (MPI_Aint)ncp->recsize); */
+    /* assert (recsize == (MPI_Aint)recsize); */
     return ret;
 }
 #endif
 
-/*----< NC_start_count_stride_ck() >-----------------------------------------*/
-/*
- * Check whether start, count, stride values are valid for the variable.
- * Note that even if the request size is zero, this check is enforced in both
- * netCDF and PnetCDF. Otherwise, many test cases under test directory can fail.
- * Arguments count and stride can be NULL.
+/*----< is_request_contiguous() >-------------------------------------------*/
+/* check if a request, represented by start[] and count[], is contiguous in
+ * file.
  */
-int
-NC_start_count_stride_ck(const NC         *ncp,
-                         const NC_var     *varp,
-                         const MPI_Offset *start,
-                         const MPI_Offset *count,
-                         const MPI_Offset *stride,
-                         const int         rw_flag) /* for read or write */
-{
-    int i=0;
-
-    if (varp->ndims == 0) return NC_NOERR; /* 'scalar' variable */
-
-    /* negative start[] is illegal */
-    if (start == NULL || start[0] < 0) DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
-
-    if (IS_RECVAR(varp)) {
-        if (ncp->format < 5 && /* not CDF-5 */
-            start[0] > X_UINT_MAX) /* sanity check */
-            DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
-
-        if (count != NULL && count[0] < 0) /* no negative count[] */
-            DEBUG_RETURN_ERROR(NC_ENEGATIVECNT)
-
-        /* for record variable, [0] is the NC_UNLIMITED dimension */
-        if (rw_flag == READ_REQ) { /* read cannot go beyond current numrecs */
-#ifdef RELAX_COORD_BOUND
-            if (start[0] > ncp->numrecs) DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
-#else
-            if (start[0] >= ncp->numrecs) DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
-#endif
-            if (count != NULL) {
-#ifdef RELAX_COORD_BOUND
-                if (start[0] == ncp->numrecs && count[0] > 0)
-                    DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
-#endif
-                if (stride == NULL) { /* for vara APIs */
-                    if (start[0] + count[0] > ncp->numrecs)
-                        DEBUG_RETURN_ERROR(NC_EEDGE)
-                }
-                else { /* for vars APIs */
-                    if (count[0] > 0 &&
-                        start[0] + (count[0]-1) * stride[0] >= ncp->numrecs)
-                        DEBUG_RETURN_ERROR(NC_EEDGE)
-                }
-            }
-            /* else is for var1 APIs */
-        }
-
-        if (stride != NULL && stride[0] == 0) DEBUG_RETURN_ERROR(NC_ESTRIDE)
-
-        /* In collective data mode where numrecs is always kept consistent
-         * across memory, then there is no need to update numrecs.
-         * (If NC_SHARE is set, then numrecs is even sync-ed with file.)
-         *
-         * In independent data mode, numrecs in memory across processes
-         * and file can be inconsistent. Even re-reading numrecs from file
-         * cannot get the latest value, because in independent mode,
-         * numrecs in file is not updated (due to race condition).
-         * For example, a subset of processes write a new record and at
-         * the same time another set writes 2 new records. Even if NC_SHARE
-         * is set, new values of numrecs cannot be written to the file,
-         * because it can cause a race condition (atomic read-modify IO is
-         * required to solve this problem and MPI-IO cannot do it). Simply
-         * said, numrecs is not automatically kept consistent in
-         * independent mode. Users must call ncmpi_sync_numrecs()
-         * collectively to sync the value. So, here what PnetCDF can do
-         * best is just to check numrecs against the local value.
-         */
-
-        /* skip checking the record dimension */
-        i = 1;
-    }
-
-    for (; i<varp->ndims; i++) {
-#ifdef RELAX_COORD_BOUND
-        if (start[i] < 0 || start[i] > varp->shape[i])
-            DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
-
-        if (count != NULL && start[i] == varp->shape[i] && count[i] > 0)
-            DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
-#else
-        if (start[i] < 0 || start[i] >= varp->shape[i])
-            DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
-#endif
-
-        if (varp->shape[i] < 0) DEBUG_RETURN_ERROR(NC_EEDGE)
-
-        if (count != NULL) {
-            if (count[i] < 0) /* no negative count[] */
-                DEBUG_RETURN_ERROR(NC_ENEGATIVECNT)
-
-            if (stride == NULL) { /* for vara APIs */
-                if (count[i] > varp->shape[i] ||
-                    start[i] + count[i] > varp->shape[i])
-                    DEBUG_RETURN_ERROR(NC_EEDGE)
-            }
-            else { /* for vars APIs */
-                if (count[i] > 0 &&
-                    start[i] + (count[i]-1) * stride[i] >= varp->shape[i])
-                    DEBUG_RETURN_ERROR(NC_EEDGE)
-                if (stride[i] == 0) DEBUG_RETURN_ERROR(NC_ESTRIDE)
-            }
-        }
-        /* else is for var1 APIs */
-    }
-    return NC_NOERR;
-}
-
-/*----< ncmpii_get_offset() >------------------------------------------------*/
-/* returns the file offset of the last byte accessed of this request
- * If counts is NULL, this is equivalent to the starting offset of this
- * request
- */
-int
-ncmpii_get_offset(NC               *ncp,
-                  NC_var           *varp,
-                  const MPI_Offset  starts[],   /* [varp->ndims] */
-                  const MPI_Offset  counts[],   /* [varp->ndims] */
-                  const MPI_Offset  strides[],  /* [varp->ndims] */
-                  const int         rw_flag,
-                  MPI_Offset       *offset_ptr) /* return file offset */
-{
-    MPI_Offset offset, *end_off=NULL;
-    int status, i, ndims;
-
-    offset = varp->begin; /* beginning file offset of this variable */
-    ndims  = varp->ndims; /* number of dimensions of this variable */
-
-    if (counts != NULL) {
-        end_off = (MPI_Offset*) NCI_Malloc((size_t)ndims * SIZEOF_MPI_OFFSET);
-
-        if (strides != NULL) {
-            for (i=0; i<ndims; i++)
-                end_off[i] = starts[i] + (counts[i] - 1) * strides[i];
-        }
-        else { /* strides == NULL */
-            for (i=0; i<ndims; i++)
-                end_off[i] = starts[i] + counts[i] - 1;
-        }
-    }
-    else { /* when counts == NULL strides is of no use */
-        end_off = (MPI_Offset*) starts;
-    }
-
-    /* check whether end_off is valid */
-    status = NC_start_count_stride_ck(ncp, varp, end_off, NULL, NULL, rw_flag);
-    if (status != NC_NOERR) {
-#ifdef CDEBUG
-        printf("%s(): NC_start_count_stride_ck() fails\n",__func__);
-#endif
-        if (end_off != NULL && end_off != starts) NCI_Free(end_off);
-        return status;
-    }
-
-    if (ndims > 0) {
-        if (IS_RECVAR(varp))
-            /* no need to check recsize here: if MPI_Offset is only 32 bits we
-               will have had problems long before here */
-            offset += end_off[0] * ncp->recsize;
-        else
-            offset += end_off[ndims-1] * varp->xsz;
-
-        if (ndims > 1) {
-            if (IS_RECVAR(varp))
-                offset += end_off[ndims - 1] * varp->xsz;
-            else
-                offset += end_off[0] * varp->dsizes[1] * varp->xsz;
-
-            for (i=1; i<ndims-1; i++)
-                offset += end_off[i] * varp->dsizes[i+1] * varp->xsz;
-        }
-    }
-    if (counts != NULL && end_off != NULL)
-        NCI_Free(end_off);
-
-    *offset_ptr = offset;
-    return NC_NOERR;
-}
-
-/*----< ncmpii_is_request_contiguous() >-------------------------------------*/
-int
-ncmpii_is_request_contiguous(NC               *ncp,
-                             NC_var           *varp,
-                             const MPI_Offset  starts[],
-                             const MPI_Offset  counts[])
+static int
+is_request_contiguous(int               isRecVar,
+                      int               numRecVars,
+                      int               ndims,
+                      const MPI_Offset *shape,
+                      const MPI_Offset *start,
+                      const MPI_Offset *count)
 {
-    /* determine whether the get/put request to this variable using
-       starts[] and counts[] is contiguous in file */
-    int i, j, most_sig_dim, ndims=varp->ndims;
+    int i, j, most_sig_dim;
 
-    /* this variable is a scalar */
-    if (ndims == 0) return 1;
+    if (ndims == 0) return 1; /* this variable is a scalar */
 
     for (i=0; i<ndims; i++)
-         if (counts[i] == 0) /* zero length request */
+         if (count[i] == 0) /* zero length request */
              return 1;
 
-    most_sig_dim = 0; /* record dimension */
+    /* most-significant dim. record dimension */
+    most_sig_dim = 0;
 
-    if (IS_RECVAR(varp)) {
+    if (isRecVar) {
         /* if there are more than one record variable, then the record
-           dimensions, counts[0] must == 1. For now, we assume there
+           dimensions, count[0] must == 1. For now, we assume there
            are more than one record variable.
            TODO: we may need an API to inquire how many record variables
            are defined */
-        if (ncp->vars.num_rec_vars > 1) {
-            /* or if (ncp->recsize > varp->len) more than one record variable */
-            if (counts[0] > 1) return 0;
+        if (numRecVars > 1) { /* more than one record variable */
+            if (count[0] > 1) return 0;
 
-            /* we need to check from dimension ndims-1 up to dimension 1 */
+            /* continue to check from dimension ndims-1 up to dimension 1 */
             most_sig_dim = 1;
         }
-        /* if there is only one record variable, then we need to check from
+        /* if there is only one record variable, then we need to check
          * dimension ndims-1 up to dimension 0 */
     }
 
     for (i=ndims-1; i>most_sig_dim; i--) {
-        /* find the first counts[i] that is not the entire dimension */
-        if (counts[i] < varp->shape[i]) {
-            /* check dim from i-1, i-2, ..., most_sig_dim and
-               their counts[] should all be 1 */
+        /* find the first count[i] that is not equal to the entire dimension */
+        if (count[i] < shape[i]) {
+            /* the request is contiguous only if count[i-1], count[i-2], ...
+             * count[0] are all 1s. */
             for (j=i-1; j>=most_sig_dim; j--) {
-                if (counts[j] > 1)
+                if (count[j] > 1)
                     return 0;
             }
             break;
         }
-        else { /* counts[i] == varp->shape[i] */
-            /* when accessing the entire dimension, starts[i] must be 0 */
-            if (starts[i] != 0) return 0; /* actually this should be error */
+#if 0
+        else { /* count[i] == shape[i] */
+            /* when accessing the entire dimension, start[i] must be 0 */
+            if (start[i] != 0) return 0; /* actually this should be error */
         }
+#endif
     }
     return 1;
 }
 
 #ifndef HAVE_MPI_TYPE_CREATE_SUBARRAY
-/*----< ncmpii_type_create_subarray() >--------------------------------------*/
+/*----< type_create_subarray() >---------------------------------------------*/
 /* this is to be used when MPI_Type_create_subarray() is not available,
  * typically for MPI-1 implementation only */
 static int
-ncmpii_type_create_subarray(int           ndims,
-                            int          *array_of_sizes,    /* [ndims] */
-                            int          *array_of_subsizes, /* [ndims] */
-                            int          *array_of_starts,   /* [ndims] */
-                            int           order,
-                            MPI_Datatype  oldtype,
-                            MPI_Datatype *newtype)
+type_create_subarray(int           ndims,
+                     const int    *array_of_sizes,    /* [ndims] */
+                     const int    *array_of_subsizes, /* [ndims] */
+                     const int    *array_of_starts,   /* [ndims] */
+                     int           order,
+                     MPI_Datatype  oldtype,
+                     MPI_Datatype *newtype)
 {
     int i, err, blklens[3] = {1, 1, 1};
     MPI_Datatype type1, type2;
@@ -325,13 +144,13 @@ ncmpii_type_create_subarray(int           ndims,
         /* take advantage of disps argument is of type MPI_Aint */
         err = MPI_Type_create_hindexed(1, &blklens[1], &disps[1], oldtype, &type1);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_create_hindexed");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_hindexed");
         MPI_Type_commit(&type1);
 
         /* add holes in the beginning and tail of type1 */
         err = MPI_Type_create_resized(type1, 0, array_size, newtype);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_create_resized");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_resized");
         MPI_Type_free(&type1);
 #else
         /* add holes in the beginning and tail of oldtype */
@@ -340,7 +159,7 @@ ncmpii_type_create_subarray(int           ndims,
         disps[0] = 0;                          disps[2] = array_size;
         err = MPI_Type_struct(3, blklens, disps, types, newtype);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_struct");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_struct");
 #endif
         return NC_NOERR;
     }
@@ -355,12 +174,12 @@ ncmpii_type_create_subarray(int           ndims,
     err = MPI_Type_create_hvector(array_of_subsizes[ndims-2], blklens[0],
                                   stride, oldtype, &type1);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_create_hvector");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_create_hvector");
 #else
     err = MPI_Type_hvector(array_of_subsizes[ndims-2], blklens[0],
                            stride, oldtype, &type1);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_hvector");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_hvector");
 #endif
     MPI_Type_commit(&type1);
 
@@ -370,11 +189,11 @@ ncmpii_type_create_subarray(int           ndims,
 #ifdef HAVE_MPI_TYPE_CREATE_HVECTOR
         err = MPI_Type_create_hvector(array_of_subsizes[i], 1, stride, type1, &type2);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_create_hvector");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_hvector");
 #else
         err = MPI_Type_hvector(array_of_subsizes[i], 1, stride, type1, &type2);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_hvector");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_hvector");
 #endif
         MPI_Type_commit(&type2);
         MPI_Type_free(&type1);
@@ -401,11 +220,11 @@ ncmpii_type_create_subarray(int           ndims,
     /* adjust LB and UB without using MPI_LB or MPI_UB */
     err = MPI_Type_create_hindexed(1, blklens, &disps[1], type1, &type2);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_create_hindexed");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_create_hindexed");
     MPI_Type_commit(&type2);
     err = MPI_Type_create_resized(type2, disps[0], disps[2], newtype);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_create_resized");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_create_resized");
     MPI_Type_free(&type2);
 #else
     MPI_Datatype types[3];
@@ -414,7 +233,7 @@ ncmpii_type_create_subarray(int           ndims,
     types[2] = MPI_UB;
     err = MPI_Type_struct(3, blklens, disps, types, newtype);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_struct");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_struct");
 #endif
     MPI_Type_free(&type1);
 
@@ -422,19 +241,19 @@ ncmpii_type_create_subarray(int           ndims,
 }
 #endif
 
-/*----< ncmpii_type_create_subarray64() >------------------------------------*/
+/*----< type_create_subarray64() >-------------------------------------------*/
 /* This subroutine is to achieve the same result as MPI_Type_create_subarray()
  * but it takes arguments in type of MPI_Offset, instead of int. It also
  * checked for any possible 4-byte integer overflow.
  */
 static int
-ncmpii_type_create_subarray64(int           ndims,
-                              MPI_Offset   *array_of_sizes,    /* [ndims] */
-                              MPI_Offset   *array_of_subsizes, /* [ndims] */
-                              MPI_Offset   *array_of_starts,   /* [ndims] */
-                              int           order,
-                              MPI_Datatype  oldtype,
-                              MPI_Datatype *newtype)
+type_create_subarray64(int               ndims,
+                       const MPI_Offset *array_of_sizes,    /* [ndims] */
+                       const MPI_Offset *array_of_subsizes, /* [ndims] */
+                       const MPI_Offset *array_of_starts,   /* [ndims] */
+                       int               order,
+                       MPI_Datatype      oldtype,
+                       MPI_Datatype     *newtype)
 {
     int i, err, tag, blklens[3] = {1, 1, 1};
     MPI_Datatype type1, type2;
@@ -474,10 +293,10 @@ ncmpii_type_create_subarray64(int           ndims,
                                        order, oldtype, newtype);
         NCI_Free(sizes);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_create_subarray");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_subarray");
 #else
-        err = ncmpii_type_create_subarray(ndims, sizes, subsizes, starts,
-                                          order, oldtype, newtype);
+        err = type_create_subarray(ndims, sizes, subsizes, starts,
+                                   order, oldtype, newtype);
         NCI_Free(sizes);
 #endif
         return err;
@@ -518,13 +337,13 @@ ncmpii_type_create_subarray64(int           ndims,
         /* take advantage of disps argument is of type MPI_Aint */
         err = MPI_Type_create_hindexed(1, &blklens[1], &disps[1], oldtype, &type1);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_create_hindexed");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_hindexed");
         MPI_Type_commit(&type1);
 
         /* add holes in the beginning and tail of type1 */
         err = MPI_Type_create_resized(type1, 0, array_size, newtype);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_create_resized");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_resized");
         MPI_Type_free(&type1);
 #else
         /* add holes in the beginning and tail of oldtype */
@@ -533,7 +352,7 @@ ncmpii_type_create_subarray64(int           ndims,
         disps[0] = 0;                          disps[2] = array_size;
         err = MPI_Type_struct(3, blklens, disps, types, newtype);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_struct");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_struct");
 #endif
         return NC_NOERR;
     }
@@ -553,11 +372,11 @@ ncmpii_type_create_subarray64(int           ndims,
 #ifdef HAVE_MPI_TYPE_CREATE_HVECTOR
     err = MPI_Type_create_hvector(count, blocklength, stride, oldtype, &type1);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_create_hvector");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_create_hvector");
 #else
     err = MPI_Type_hvector(count, blocklength, stride, oldtype, &type1);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_hvector");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_hvector");
 #endif
     MPI_Type_commit(&type1);
 
@@ -570,11 +389,11 @@ ncmpii_type_create_subarray64(int           ndims,
 #ifdef HAVE_MPI_TYPE_CREATE_HVECTOR
         err = MPI_Type_create_hvector(count, 1, stride, type1, &type2);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_create_hvector");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_hvector");
 #else
         err = MPI_Type_hvector(count, 1, stride, type1, &type2);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_hvector");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_hvector");
 #endif
         MPI_Type_commit(&type2);
         MPI_Type_free(&type1);
@@ -600,11 +419,11 @@ ncmpii_type_create_subarray64(int           ndims,
     /* adjust LB and UB without using MPI_LB or MPI_UB */
     err = MPI_Type_create_hindexed(1, blklens, &disps[1], type1, &type2);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_create_hindexed");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_create_hindexed");
     MPI_Type_commit(&type2);
     err = MPI_Type_create_resized(type2, disps[0], disps[2], newtype);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_create_resized");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_create_resized");
     MPI_Type_free(&type2);
 #else
     MPI_Datatype types[3];
@@ -613,33 +432,29 @@ ncmpii_type_create_subarray64(int           ndims,
     types[2] = MPI_UB;
     err = MPI_Type_struct(3, blklens, disps, types, newtype);
     if (err != MPI_SUCCESS)
-        return ncmpii_handle_error(err, "MPI_Type_struct");
+        return ncmpii_error_mpi2nc(err, "MPI_Type_struct");
 #endif
     MPI_Type_free(&type1);
 
     return NC_NOERR;
 }
 
-/*----< ncmpii_vara_create_filetype() >--------------------------------------*/
+/*----< filetype_create_vara() >--------------------------------------------*/
 static int
-ncmpii_vara_create_filetype(NC               *ncp,
-                            NC_var           *varp,
-                            const MPI_Offset *start,
-                            const MPI_Offset *count,
-                            int               rw_flag,
-                            int              *blocklen,
-                            MPI_Offset       *offset_ptr,
-                            MPI_Datatype     *filetype_ptr,
-                            int              *is_filetype_contig)
+filetype_create_vara(const NC         *ncp,
+                     const NC_var     *varp,
+                     const MPI_Offset *start,
+                     const MPI_Offset *count,
+                     int               rw_flag,
+                     int              *blocklen,           /* OUT */
+                     MPI_Offset       *offset_ptr,         /* OUT */
+                     MPI_Datatype     *filetype_ptr,       /* OUT */
+                     int              *is_filetype_contig) /* OUT */
 {
     int          dim, status, err;
     MPI_Offset   nbytes, offset;
     MPI_Datatype filetype;
 
-    /* check whether start, count are valid */
-    status = NC_start_count_stride_ck(ncp, varp, start, count, NULL, rw_flag);
-    if (status != NC_NOERR) return status;
-
     /* calculate the request size */
     nbytes = varp->xsz;
     for (dim=0; dim<varp->ndims; dim++) nbytes *= count[dim];
@@ -657,9 +472,11 @@ ncmpii_vara_create_filetype(NC               *ncp,
     }
 
     /* if the request is contiguous in file, no need to create a filetype */
-    if (ncmpii_is_request_contiguous(ncp, varp, start, count)) {
-        status = ncmpii_get_offset(ncp, varp, start, NULL, NULL, rw_flag,
-                                   &offset);
+    if (is_request_contiguous(IS_RECVAR(varp), ncp->vars.num_rec_vars,
+                              varp->ndims, varp->shape, start, count)) {
+        /* find the starting file offset of this request */
+        status = ncmpio_last_offset(ncp, varp, start, NULL, NULL, rw_flag,
+                                    &offset);
         *offset_ptr   = offset;
         *filetype_ptr = MPI_BYTE;
         if (is_filetype_contig != NULL) *is_filetype_contig = 1;
@@ -680,7 +497,7 @@ ncmpii_vara_create_filetype(NC               *ncp,
 
 #if SIZEOF_MPI_AINT != SIZEOF_MPI_OFFSET
         /* check overflow only if MPI_Aint is smaller than MPI_Offset */
-        status = check_recsize_too_big(ncp);
+        status = check_recsize_too_big(ncp->recsize);
         if (status != NC_NOERR) return status;
 #endif
         /* check overflow, because 1st argument of hvector is of type int */
@@ -710,7 +527,7 @@ ncmpii_vara_create_filetype(NC               *ncp,
             subcount64[varp->ndims-1] *= varp->xsz;
             substart64[varp->ndims-1] *= varp->xsz;
 
-            status = ncmpii_type_create_subarray64(varp->ndims-1, shape64+1,
+            status = type_create_subarray64(varp->ndims-1, shape64+1,
                                  subcount64+1, substart64+1, MPI_ORDER_C,
                                  MPI_BYTE, &rectype);
             NCI_Free(shape64);
@@ -727,12 +544,12 @@ ncmpii_vara_create_filetype(NC               *ncp,
         err = MPI_Type_create_hvector((int)count[0], blocklength, ncp->recsize,
                                       rectype, &filetype);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_create_hvector");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_hvector");
 #else
         err = MPI_Type_hvector((int)count[0], blocklength, ncp->recsize,
                                rectype, &filetype);
         if (err != MPI_SUCCESS)
-            return ncmpii_handle_error(err, "MPI_Type_hvector");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_hvector");
 #endif
         if (rectype != MPI_BYTE) MPI_Type_free(&rectype);
     }
@@ -751,9 +568,9 @@ ncmpii_vara_create_filetype(NC               *ncp,
         subcount64[varp->ndims-1] *= varp->xsz;
         substart64[varp->ndims-1] *= varp->xsz;
 
-        status = ncmpii_type_create_subarray64(varp->ndims, shape64, subcount64,
-                                               substart64, MPI_ORDER_C,
-                                               MPI_BYTE, &filetype);
+        status = type_create_subarray64(varp->ndims, shape64, subcount64,
+                                        substart64, MPI_ORDER_C,
+                                        MPI_BYTE, &filetype);
         NCI_Free(shape64);
         if (status != NC_NOERR) return status;
     }
@@ -765,40 +582,127 @@ ncmpii_vara_create_filetype(NC               *ncp,
     return NC_NOERR;
 }
 
-/*----< ncmpii_vars_create_filetype() >--------------------------------------*/
+/*----< stride_flatten() >----------------------------------------------------*/
+/* flatten a stride request into a list of offset-length pairs stored in
+ * blocklens[] and disps[]
+ */
+static int
+stride_flatten(int               isRecVar, /* whether record variable */
+               int               ndim,     /* number of dimensions */
+               int               el_size,  /* array element size */
+               const MPI_Offset *dimlen,   /* [ndim] dimension lengths */
+               const MPI_Offset *start,    /* [ndim] starts of subarray */
+               const MPI_Offset *count,    /* [ndim] counts of subarray */
+               const MPI_Offset *stride,   /* [ndim] strides of subarray */
+               int              *nblocks,  /* OUT: number of blocks */
+               int              *blocklens,/* OUT: length of each block */
+               MPI_Aint         *disps)    /* OUT: displacement of each block */
+{
+    int i, j, k, seg_len;
+    MPI_Offset nstride, array_len, off, subarray_len;
+
+    *nblocks = 0;
+    if (ndim < 0) return 1;
+
+    if (ndim == 0) { /* scalar variable */
+        *nblocks = 1;
+        disps[0]     = 0;
+        blocklens[0] = el_size;
+        return 1;
+    }
+
+    /* calculate the number of offset-length pairs */
+    *nblocks = (stride[ndim-1] == 1) ? 1 : count[ndim-1];
+    for (i=0; i<ndim-1; i++) *nblocks *= count[i];
+    if (*nblocks == 0) return 1;
+
+    /* the length of all segments are of the same size */
+    seg_len  = (stride[ndim-1] == 1) ? count[ndim-1] : 1;
+    seg_len *= el_size;
+    nstride  = (stride[ndim-1] == 1) ? 1 : count[ndim-1];
+
+    /* set the offset-length pairs for the lowest dimension */
+    k = 0;
+    off = start[ndim-1] * el_size;
+    for (i=0; i<nstride; i++) {
+        disps[k]      = off;
+        blocklens[k]  = seg_len;
+        off          += stride[ndim-1] * el_size;
+        k++;
+    }
+    ndim--;
+
+    subarray_len = nstride;
+    array_len = 1;
+    /* for higher dimensions */
+    while (ndim > 0) {
+        /* array_len is global array size from lowest up to ndim */
+        array_len *= dimlen[ndim];
+
+        /* off is the global array offset for this dimension, ndim-1
+         * For record variable, dimlen[0] is the sum of single record sizes
+         */
+        if (ndim == 1 && isRecVar) off = start[0] * dimlen[0];
+        else off = start[ndim-1] * array_len * el_size;
+
+        /* update all offsets from lowest up to dimension ndim-1 */
+        for (j=0; j<subarray_len; j++) disps[j] += off;
+
+        /* update each successive subarray of dimension ndim-1
+         * For record variable, dimlen[0] is the sum of single record sizes
+         */
+        if (ndim == 1 && isRecVar) off = stride[0] * dimlen[0];
+        else off = stride[ndim-1] * array_len * el_size;
+
+        for (i=1; i<count[ndim-1]; i++) {
+            for (j=0; j<subarray_len; j++) {
+                disps[k]     = disps[j] + off;
+                blocklens[k] = seg_len;
+                k++;
+            }
+            if (ndim == 1 && isRecVar) off += stride[0] * dimlen[0];
+            else off += stride[ndim-1] * array_len * el_size;
+        }
+        ndim--;  /* move to next higher dimension */
+        subarray_len *= count[ndim];
+    }
+    return 1;
+}
+
+/*----< ncmpio_filetype_create_vars() >--------------------------------------*/
 int
-ncmpii_vars_create_filetype(NC               *ncp,
-                            NC_var           *varp,
-                            const MPI_Offset  start[],
-                            const MPI_Offset  count[],
-                            const MPI_Offset  stride[],
+ncmpio_filetype_create_vars(const NC         *ncp,
+                            const NC_var     *varp,
+                            const MPI_Offset *start,
+                            const MPI_Offset *count,
+                            const MPI_Offset *stride,
                             int               rw_flag,
-                            int              *blocklen,
-                            MPI_Offset       *offset_ptr,
-                            MPI_Datatype     *filetype_ptr,
-                            int              *is_filetype_contig)
+                            int              *blocklen,           /* OUT */
+                            MPI_Offset       *offset_ptr,         /* OUT */
+                            MPI_Datatype     *filetype_ptr,       /* OUT */
+                            int              *is_filetype_contig) /* OUT */
 {
-    int          dim, status, err;
-    MPI_Offset   offset, stride_off, nelems;
-    MPI_Datatype filetype=MPI_BYTE;
+    int           dim, err, nblocks, *blocklens;
+    MPI_Aint     *disps;
+    MPI_Offset    offset, nelems, *shape;
+    MPI_Datatype  filetype=MPI_BYTE;
 
     if (stride == NULL)
-        return ncmpii_vara_create_filetype(ncp, varp, start, count, rw_flag,
-                                           blocklen, offset_ptr, filetype_ptr,
-                                           is_filetype_contig);
+        return filetype_create_vara(ncp, varp, start, count, rw_flag,
+                                    blocklen, offset_ptr, filetype_ptr,
+                                    is_filetype_contig);
 
-    /* check if all stride[] == 1 */
-    for (dim=0; dim<varp->ndims && stride[dim]==1; dim++) ;
-    if (dim == varp->ndims) /* all stride[] == 1, same as stride == NULL */
-        return ncmpii_vara_create_filetype(ncp, varp, start, count, rw_flag,
-                                           blocklen, offset_ptr, filetype_ptr,
-                                           is_filetype_contig);
+    /* check if a true vars (skip stride[] when count[] == 1) */
+    for (dim=0; dim<varp->ndims; dim++)
+        if (count[dim] > 1 && stride[dim] > 1)
+            break;
 
-    /* now stride[] indicates a non-contiguous fileview */
+    if (dim == varp->ndims) /* not a true vars */
+        return filetype_create_vara(ncp, varp, start, count, rw_flag,
+                                    blocklen, offset_ptr, filetype_ptr,
+                                    is_filetype_contig);
 
-    /* check whether start, count, stride are valid */
-    status = NC_start_count_stride_ck(ncp, varp, start, count, stride, rw_flag);
-    if (status != NC_NOERR) return status;
+    /* now stride[] indicates a non-contiguous fileview */
 
     /* calculate request amount */
     nelems = 1;
@@ -822,8 +726,41 @@ ncmpii_vars_create_filetype(NC               *ncp,
     if (is_filetype_contig != NULL) *is_filetype_contig = 0;
     offset = varp->begin;
 
-    int ndims, *blockcounts, *blocklens;
+#if 1
+    blocklens = (int*) NCI_Malloc((size_t)nelems * SIZEOF_INT);
+    disps = (MPI_Aint*) NCI_Malloc((size_t)nelems * SIZEOF_MPI_AINT);
+    shape = (MPI_Offset*) NCI_Malloc((size_t)varp->ndims * SIZEOF_MPI_OFFSET);
+
+    for (dim=0; dim<varp->ndims; dim++) shape[dim] = varp->shape[dim];
+    /* for record variable, set shape[0] to the record size */
+    if (IS_RECVAR(varp)) shape[0] = ncp->recsize;
+
+    /* flatten stride access into list of offsets and lengths stored in
+     * disps[] and blocklens[], respectively.
+     */
+    stride_flatten(IS_RECVAR(varp), varp->ndims, varp->xsz, shape, start,
+                   count, stride, &nblocks, blocklens, disps);
+    NCI_Free(shape);
+
+    /* the flattened list allows one single call to hindexed constructor */
+    err = MPI_Type_create_hindexed(nblocks, blocklens, disps, MPI_BYTE,
+                                   &filetype);
+    NCI_Free(disps);
+    NCI_Free(blocklens);
+    if (err != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(err, "MPI_Type_create_hindexed");
+
+    MPI_Type_commit(&filetype);
+
+    /* Below is an old implementation that uses a nested hinexed constructor
+     * which can MPI error on depth beyond  DLOOP_MAX_DATATYPE_DEPTH.
+     * The above approach avoids such problem by flattening stride access into
+     * offset-length and using a single call to hindexed constructor.
+     */
+#else
+    int ndims, *blockcounts;
     MPI_Aint *blockstride;
+    MPI_Offset   stride_off;
     MPI_Datatype tmptype;
 
     ndims       = varp->ndims;
@@ -847,8 +784,8 @@ ncmpii_vars_create_filetype(NC               *ncp,
 
     if (ndims == 1 && IS_RECVAR(varp)) {
 #if SIZEOF_MPI_AINT != SIZEOF_MPI_OFFSET
-        status = check_recsize_too_big(ncp);
-        if (status != NC_NOERR) return status;
+        err = check_recsize_too_big(ncp->recsize);
+        if (err != NC_NOERR) return err;
 #endif
         stride_off = stride[ndims-1] * ncp->recsize;
         blockstride[ndims-1] = stride_off;
@@ -874,7 +811,7 @@ ncmpii_vars_create_filetype(NC               *ncp,
         if (err != MPI_SUCCESS) {
             NCI_Free(blockstride);
             NCI_Free(blockcounts);
-            return ncmpii_handle_error(err, "MPI_Type_create_hvector");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_create_hvector");
         }
 #else
         err = MPI_Type_hvector(blockcounts[dim], blocklens[dim],
@@ -882,7 +819,7 @@ ncmpii_vars_create_filetype(NC               *ncp,
         if (err != MPI_SUCCESS) {
             NCI_Free(blockstride);
             NCI_Free(blockcounts);
-            return ncmpii_handle_error(err, "MPI_Type_hvector");
+            return ncmpii_error_mpi2nc(err, "MPI_Type_hvector");
         }
 #endif
         MPI_Type_commit(&filetype);
@@ -921,6 +858,7 @@ ncmpii_vars_create_filetype(NC               *ncp,
     }
     NCI_Free(blockstride);
     NCI_Free(blockcounts);
+#endif
 
     *offset_ptr   = offset;
     *filetype_ptr = filetype;
@@ -928,13 +866,13 @@ ncmpii_vars_create_filetype(NC               *ncp,
     return NC_NOERR;
 }
 
-/*----< ncmpii_file_set_view() >---------------------------------------------*/
+/*----< ncmpio_file_set_view() >---------------------------------------------*/
 /* This function handles the special case for root process for setting its
  * file view: to keeps the whole file header visible to the root process.
  * This function is collective if called in collective data mode
  */
 int
-ncmpii_file_set_view(NC           *ncp,
+ncmpio_file_set_view(const NC     *ncp,
                      MPI_File      fh,
                      MPI_Offset   *offset,  /* IN/OUT */
                      MPI_Datatype  filetype)
@@ -948,7 +886,7 @@ ncmpii_file_set_view(NC           *ncp,
         return NC_NOERR;
     }
 
-    MPI_Comm_rank(ncp->nciop->comm, &rank);
+    MPI_Comm_rank(ncp->comm, &rank);
     if (rank == 0) {
         /* prepend the whole file header to filetype */
         int blocklens[2];
@@ -996,9 +934,10 @@ ncmpii_file_set_view(NC           *ncp,
         *offset = 0;
     }
     if (mpireturn != MPI_SUCCESS) {
-        err = ncmpii_handle_error(mpireturn, "MPI_File_set_view");
+        err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_set_view");
         if (status == NC_NOERR) status = err;
     }
 
     return status;
 }
+
diff --git a/src/lib/fill.c b/src/drivers/ncmpio/ncmpio_fill.c
similarity index 73%
rename from src/lib/fill.c
rename to src/drivers/ncmpio/ncmpio_fill.c
index b06d57d..a08a4d7 100644
--- a/src/lib/fill.c
+++ b/src/drivers/ncmpio/ncmpio_fill.c
@@ -2,10 +2,19 @@
  *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: fill.c 2722 2016-12-18 06:20:38Z wkliao $ */
+/* $Id: ncmpio_fill.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+/*
+ * This file implements the corresponding APIs defined in src/dispatchers/file.c
+ * and src/dispatchers/variable.c
+ *
+ * ncmpi_set_fill()     : dispatcher->set_fill()
+ * ncmpi_fill_var_rec() : dispatcher->fill_rec()
+ * ncmpi_def_var_fill() : dispatcher->def_var_fill()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #ifdef HAVE_STDLIB_H
@@ -17,15 +26,17 @@
 
 #include <mpi.h>
 
-#include "nc.h"
-#include "macro.h"
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
 
 #define CHECK_ERROR(status) {                                                \
     if (ncp->safe_mode == 1) {                                               \
         int g_status;                                                        \
         TRACE_COMM(MPI_Allreduce)(&status, &g_status, 1, MPI_INT, MPI_MIN,   \
-                                  ncp->nciop->comm);                         \
-        if (g_status != NC_NOERR) return status;                             \
+                                  ncp->comm);                                \
+        if (g_status != NC_NOERR) return g_status;                           \
     }                                                                        \
     else if (status != NC_NOERR)                                             \
         return status;                                                       \
@@ -58,10 +69,10 @@ static unsigned char FILL_UINT[4]   = {0xFF, 0xFF, 0xFF, 0xFF};
 static unsigned char FILL_INT64[8]  = {0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
 static unsigned char FILL_UINT64[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE};
 
-/*----< ncmpii_inq_default_fill_value() >------------------------------------*/
+/*----< ncmpio_inq_default_fill_value() >------------------------------------*/
 /* copy the default fill value to the memory space pointed by fill_value */
 int
-ncmpii_inq_default_fill_value(int xtype, void *fillp)
+ncmpio_inq_default_fill_value(int xtype, void *fillp)
 {
     if (fillp == NULL) return NC_NOERR;
 
@@ -82,21 +93,21 @@ ncmpii_inq_default_fill_value(int xtype, void *fillp)
     return NC_NOERR;
 }
 
-/*----< ncmpii_fill_var_buf() >----------------------------------------------*/
+/*----< fill_var_buf() >----------------------------------------------------*/
 /* fill the buffer, buf, with either user-defined fill values or default
  * values */
 static int
-ncmpii_fill_var_buf(const NC_var *varp,
-                    MPI_Offset    bnelems, /* number of elements in buf */
-                    void         *buf)
+fill_var_buf(const NC_var *varp,
+             MPI_Offset    bnelems, /* number of elements in buf */
+             void         *buf)
 {
     int i, indx;
 
-    indx = ncmpii_NC_findattr(&varp->attrs, _FillValue);
+    indx = ncmpio_NC_findattr(&varp->attrs, _FillValue);
     if (indx >= 0) {
         /* User defined fill value */
         NC_attr *attrp = varp->attrs.value[indx];
-        if (attrp->type != varp->type || attrp->nelems != 1)
+        if (attrp->xtype != varp->xtype || attrp->nelems != 1)
             DEBUG_RETURN_ERROR(NC_EBADTYPE)
 
         /* Use the user defined value */
@@ -108,7 +119,7 @@ ncmpii_fill_var_buf(const NC_var *varp,
     }
     else { /* use the default */
         void *xvalue;
-        switch(varp->type) {
+        switch(varp->xtype) {
             case NC_CHAR   : xvalue = &FILL_CHAR[0];   break;
             case NC_BYTE   : xvalue = &FILL_BYTE[0];   break;
             case NC_SHORT  : xvalue = &FILL_SHORT[0];  break;
@@ -132,15 +143,16 @@ ncmpii_fill_var_buf(const NC_var *varp,
     return NC_NOERR;
 }
 
-/*----< ncmpii_fill_var() >--------------------------------------------------*/
-/* For fixed-size variables, write the entire variable with fill values and
+/*----< fill_var_rec() >-----------------------------------------------------*/
+/* This function is a collective.
+ * For fixed-size variables, write the entire variable with fill values and
  * ignore argument recno. For record variables, write one record of that
  * variable with pre-defined/supplied fill value.
  */
 static int
-ncmpii_fill_var_rec(NC         *ncp,
-                    NC_var     *varp,
-                    MPI_Offset  recno) /* record number */
+fill_var_rec(NC         *ncp,
+             NC_var     *varp,
+             MPI_Offset  recno) /* record number */
 {
     int err, mpireturn, rank, nprocs;
     void *buf;
@@ -148,8 +160,8 @@ ncmpii_fill_var_rec(NC         *ncp,
     MPI_File fh;
     MPI_Status mpistatus;
 
-    MPI_Comm_rank(ncp->nciop->comm, &rank);
-    MPI_Comm_size(ncp->nciop->comm, &nprocs);
+    MPI_Comm_rank(ncp->comm, &rank);
+    MPI_Comm_size(ncp->comm, &nprocs);
 
     if (varp->ndims == 0) /* scalar variable */
         var_len = 1;
@@ -175,7 +187,7 @@ ncmpii_fill_var_rec(NC         *ncp,
     buf = NCI_Malloc((size_t)(count * varp->xsz));
 
     /* fill buffer with fill values */
-    err = ncmpii_fill_var_buf(varp, count, buf);
+    err = fill_var_buf(varp, count, buf);
     if (err != NC_NOERR) {
         NCI_Free(buf);
         return err;
@@ -187,7 +199,7 @@ ncmpii_fill_var_rec(NC         *ncp,
         offset += ncp->recsize * recno;
     offset += start * varp->xsz;
 
-    fh = ncp->nciop->collective_fh;
+    fh = ncp->collective_fh;
 
     /* make the entire file visible */
     TRACE_IO(MPI_File_set_view)(fh, 0, MPI_BYTE, MPI_BYTE, "native",
@@ -199,343 +211,38 @@ ncmpii_fill_var_rec(NC         *ncp,
         count = 0; /* participate collective write with 0-length request */
 
     /* write to variable collectively */
-    TRACE_IO(MPI_File_write_at_all)(fh, offset, buf, (int)count,
-                                    MPI_BYTE, &mpistatus);
+    TRACE_IO(MPI_File_write_at_all)(fh, offset, buf, (int)count, MPI_BYTE,
+                                    &mpistatus);
     NCI_Free(buf);
-
-    if (err != NC_NOERR) return err;
-
     if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_File_write_at_all");
-
-    if (IS_RECVAR(varp)) { /* update header's number of records in memory */
-        err = ncmpii_sync_numrecs(ncp, recno+1);
-        if (err == NC_NOERR) return err;
-    }
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_fill_var() >---------------------------------------------------*/
-/* fill an entire record of a record variable
- * this API is collective, must be called in data mode */
-int
-ncmpi_fill_var_rec(int        ncid,
-                   int        varid,
-                   MPI_Offset recno) /* record number, ignored if non-record var */
-{
-    int     indx, err;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    /* check if ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check file's write permission */
-    if (NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    /* must be called in data mode */
-    if (NC_indef(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINDEFINE)
-        goto err_check;
-    }
-
-    /* check whether variable ID is valid */
-    err = ncmpii_NC_lookupvar(ncp, varid, &varp);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    /* error if this is not a record variable */
-    if (!IS_RECVAR(varp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTRECVAR)
-        goto err_check;
-    }
-
-    /* check if _FillValue attribute is defined */
-    indx = ncmpii_NC_findattr(&varp->attrs, _FillValue);
-
-    /* error if the fill mode of this variable is not on */
-    if (varp->no_fill && indx == -1) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTFILL)
-        goto err_check;
-    }
-
-err_check:
-    if (ncp->safe_mode) { /* consistency check */
-        int root_varid, status, mpireturn;
-        MPI_Offset root_recno;
-
-        /* check if varid is consistent across all processes */
-        root_varid = varid;
-        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && root_varid != varid)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* check if recno is consistent across all processes */
-        root_recno = recno;
-        TRACE_COMM(MPI_Bcast)(&root_recno, 1, MPI_OFFSET, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && root_recno != recno)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-
-        if (err == NC_NOERR) err = status;
-    }
-    if (err != NC_NOERR) return err;
-
-    assert(varp != NULL);
-
-    return ncmpii_fill_var_rec(ncp, varp, recno);
-}
-
-/*----< ncmpi_set_fill() >---------------------------------------------------*/
-/* this API is collective, must be called in define mode, contrary to netCDF
- * where nc_set_fill() can also be called in data mode. The reason of PnetCDF
- * enforcing this requirement is because PnetCDF only fills fixed-size
- * variables at ncmpi_enddef() and record variables in ncmpi_fill_var_rec().
- */
-int
-ncmpi_set_fill(int  ncid,
-               int  fill_mode,
-               int *old_fill_mode)
-{
-    int i, err, mpireturn, oldmode;
-    NC *ncp;
-
-    /* check whether ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check whether file's write permission */
-    if (NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    /* check if called in define mode */
-    if (!NC_indef(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-        goto err_check;
-    }
-
-err_check:
-    if (ncp->safe_mode) {
-        int status, root_fill_mode=fill_mode;
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at_all");
 
-        TRACE_COMM(MPI_Bcast)(&root_fill_mode, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return  ncmpii_handle_error(mpireturn, "MPI_Bcast"); 
-        if (err == NC_NOERR && fill_mode != root_fill_mode)
-            /* dataset's fill mode is inconsistent with root's */
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FILL_MODE)
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        if (err == NC_NOERR) err = status;
-    }
     if (err != NC_NOERR) return err;
 
-    oldmode = fIsSet(ncp->flags, NC_NOFILL) ? NC_NOFILL : NC_FILL;
-
-    if (fill_mode == NC_NOFILL)
-        fSet(ncp->flags, NC_NOFILL);
-    else if (fill_mode == NC_FILL)
-        fClr(ncp->flags, NC_NOFILL);
-    else
-        DEBUG_RETURN_ERROR(NC_EINVAL) /* Invalid fill_mode */
-
-    if (old_fill_mode != NULL) *old_fill_mode = oldmode;
-
-    /* loop thru all variables defined so far to set/overwrite its fill mode */
-    for (i=0; i<ncp->vars.ndefined; i++)
-        ncp->vars.value[i]->no_fill = (char)((fill_mode == NC_NOFILL) ? 1 : 0);
-
-    /* once the file's fill mode is set, any new variables defined after this
-     * call will check NC_dofill(ncp) and set their no_fill accordingly. See
-     * ncmpi_def_var() */
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_def_var_fill() >------------------------------------------------*/
-/* this API is collective, and must be called in define mode */
-int
-ncmpi_def_var_fill(int   ncid,
-                   int   varid,
-                   int   no_fill,    /* 1: no fill, 0: fill */
-                   void *fill_value) /* when NULL, use default fill value */
-{
-    int err;
-    NC *ncp;
-    NC_var *varp=NULL;
-
-    /* check whether ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check whether file's write permission */
-    if (NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    /* check if called in define mode */
-    if (!NC_indef(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-        goto err_check;
-    }
-
-    /* check whether variable ID is valid */
-    err = ncmpii_NC_lookupvar(ncp, varid, &varp);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-err_check:
-    if (ncp->safe_mode) {
-        int root_ids[3], my_fill_null, status, mpireturn;
-
-        /* check if varid, no_fill, fill_value, are consistent across all processes */
-        my_fill_null = (fill_value == NULL) ? 1 : 0;;
-        root_ids[0] = varid;
-        root_ids[1] = no_fill;
-        root_ids[2] = my_fill_null;
-        TRACE_COMM(MPI_Bcast)(&root_ids, 3, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && (root_ids[0] != varid ||
-            root_ids[1] != no_fill || root_ids[2] != my_fill_null))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* check fill_value, if not NULL, is consistent among processes */
-        if (varp!= NULL && root_ids[2] == 0) {
-            double root_fill_value; /* max nc_type space: 8 bytes */
-            if (fill_value != NULL)
-                memcpy(&root_fill_value, fill_value, (size_t)varp->xsz);
-            TRACE_COMM(MPI_Bcast)(&root_fill_value, varp->xsz, MPI_BYTE, 0, ncp->nciop->comm);
-            if (mpireturn != MPI_SUCCESS)
-                return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-            if (err == NC_NOERR && fill_value != NULL &&
-                memcmp(fill_value, &root_fill_value, (size_t)varp->xsz))
-                /* variable's fill value is inconsistent with root's */
-                DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_FILL_VALUE)
-        }
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
+    if (IS_RECVAR(varp)) { /* update header's number of records in memory */
+        /* recno may be differenet among, if safe mode is disabled. In
+         * addition, recno can be > or < then ncp->numrecs. We need to sync
+         * first before update numrecs field in file.
+         *
+         * First, find the max numrecs among all processes.
+         */
+        MPI_Offset max_numrecs, numrecs=recno+1;
+        TRACE_COMM(MPI_Allreduce)(&numrecs, &max_numrecs, 1, MPI_OFFSET,
+                                  MPI_MAX, ncp->comm);
         if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-
-        if (err == NC_NOERR) err = status;
-    }
-    if (err != NC_NOERR) return err;
-
-    assert(varp != NULL);
-
-    if (no_fill)
-        varp->no_fill = 1;
-    else
-        varp->no_fill = 0;
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
 
-    /* Are we setting a fill value? */
-    if (fill_value != NULL && !varp->no_fill) {
-
-        /* If there's a _FillValue attribute, delete it. */
-        err = ncmpi_del_att(ncid, varid, _FillValue);
-        if (err != NC_NOERR && err != NC_ENOTATT)
-            return err;
-
-        /* Create a _FillValue attribute. */
-        err = ncmpi_put_att(ncid, varid, _FillValue, varp->type, 1, fill_value);
-        if (err != NC_NOERR) return err;
-    }
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_var_fill() >-----------------------------------------------*/
-/* this API can be called independently and in both data and define mode */
-int
-ncmpi_inq_var_fill(int   ncid,
-                   int   varid,
-                   int  *no_fill,    /* OUT: 1 not fill mode, 0 fill mode */
-                   void *fill_value) /* OUT: user-defined or default fill value */
-{
-    int err;
-    NC *ncp;
-    NC_var *varp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) return err;
-
-    /* find the pointer to this variable's object */
-    err = ncmpii_NC_lookupvar(ncp, varid, &varp);
-    if (err != NC_NOERR) return err;
-
-    if (no_fill != NULL) *no_fill = varp->no_fill;
-
-    if (fill_value != NULL) {
-        err = ncmpi_get_att(ncid, varid, _FillValue, fill_value);
-        if (err != NC_NOERR && err != NC_ENOTATT)
-            return err;
-        if (err == NC_ENOTATT) {
-            err = ncmpii_inq_default_fill_value(varp->type, fill_value);
+        /* In collective mode, ncp->numrecs is always sync-ed among processes */
+        if (ncp->numrecs < max_numrecs) {
+            err = ncmpio_write_numrecs(ncp, max_numrecs);
             if (err != NC_NOERR) return err;
+            ncp->numrecs = max_numrecs;
         }
     }
 
     return NC_NOERR;
 }
 
-/*----< ncmpii_inq_var_fill() >----------------------------------------------*/
-int
-ncmpii_inq_var_fill(NC_var *varp,
-                    void   *fill_value) /* OUT: user-defined or
-                                                default fill value */
-{
-    int i;
-    size_t nchars;
-    NC_attrarray *attrs;
-
-    assert(varp != NULL); /* NC_GLOBAL varid is illegal in this context */
-
-    nchars = strlen("_FillValue");
-
-    /* Check if _FillValue is defined for this variable */
-    attrs = &varp->attrs;
-    for (i=0; i<attrs->ndefined; i++) {
-        if (attrs->value[i]->name->nchars == (MPI_Offset)nchars &&
-            strncmp(attrs->value[i]->name->cp, "_FillValue", nchars) == 0) {
-            memcpy(fill_value, attrs->value[i]->xvalue, (size_t)varp->xsz);
-            return NC_NOERR;
-        }
-    }
-
-    /* NetCDF 4.4.1 and prior does not use global attribute _FillValue if
-     * it is not defined for the variable. Default fill values are used.
-     * See fill_NC_var() in putget.m4.
-     */
-
-    /* return default _FillValue */
-    return ncmpii_inq_default_fill_value(varp->type, fill_value);
-}
-
 #ifdef FILL_ONE_VAR_AT_A_TIME
 /*----< fillerup() >---------------------------------------------------------*/
 /* fill the newly created fixed-size variables */
@@ -552,7 +259,7 @@ fillerup(NC *ncp)
             continue;
 
         /* check if _FillValue attribute is defined */
-        indx = ncmpii_NC_findattr(&ncp->vars.value[i]->attrs, _FillValue);
+        indx = ncmpio_NC_findattr(&ncp->vars.value[i]->attrs, _FillValue);
 
         /* only if filling this variable is requested. Fill mode can be
          * enabled by 2 ways: explictly call to ncmpi_def_var_fill() or put
@@ -560,7 +267,7 @@ fillerup(NC *ncp)
         if (ncp->vars.value[i]->no_fill && indx == -1) continue;
 
         /* collectively fill the entire variable */
-        err = ncmpii_fill_var_rec(ncp, ncp->vars.value[i], 0);
+        err = fill_var_rec(ncp, ncp->vars.value[i], 0);
         if (err != NC_NOERR) break;
     }
     return err;
@@ -581,13 +288,13 @@ fill_added(NC *ncp, NC *old_ncp)
             continue;
 
         /* check if _FillValue attribute is defined */
-        indx = ncmpii_NC_findattr(&ncp->vars.value[varid]->attrs, _FillValue);
+        indx = ncmpio_NC_findattr(&ncp->vars.value[varid]->attrs, _FillValue);
 
         /* only if filling this variable is requested */
         if (ncp->vars.value[varid]->no_fill && indx == -1) continue;
 
         /* collectively fill the entire variable */
-        err = ncmpii_fill_var_rec(ncp, ncp->vars.value[varid], 0);
+        err = fill_var_rec(ncp, ncp->vars.value[varid], 0);
         if (err != NC_NOERR) break;
     }
     return err;
@@ -598,8 +305,8 @@ fill_added(NC *ncp, NC *old_ncp)
 static int
 fill_added_recs(NC *ncp, NC *old_ncp)
 {
-    MPI_Offset old_nrecs = NC_get_numrecs(old_ncp);
-    int indx, err, recno, varid;
+    MPI_Offset old_nrecs = old_ncp->numrecs;
+    int indx, err=NC_NOERR, recno, varid;
 
     /* loop thru all old records */
     for (recno=0; recno<old_nrecs; recno++) {
@@ -610,13 +317,13 @@ fill_added_recs(NC *ncp, NC *old_ncp)
                 continue;
 
             /* check if _FillValue attribute is defined */
-            indx = ncmpii_NC_findattr(&ncp->vars.value[varid]->attrs, _FillValue);
+            indx = ncmpio_NC_findattr(&ncp->vars.value[varid]->attrs, _FillValue);
 
             /* only if filling this variable is requested */
             if (ncp->vars.value[varid]->no_fill && indx == -1) continue;
 
             /* collectively fill the record */
-            err = ncmpii_fill_var_rec(ncp, ncp->vars.value[varid], recno);
+            err = fill_var_rec(ncp, ncp->vars.value[varid], recno);
             if (err != NC_NOERR) return err;
         }
     }
@@ -644,15 +351,15 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
     MPI_Status mpistatus;
     NC_var *varp;
 
-    MPI_Comm_rank(ncp->nciop->comm, &rank);
-    MPI_Comm_size(ncp->nciop->comm, &nprocs);
+    MPI_Comm_rank(ncp->comm, &rank);
+    MPI_Comm_size(ncp->comm, &nprocs);
 
     /* find the starting vid for newly added variables */
     start_vid = 0;
     nrecs = 0;  /* the current number of records */
     if (old_ncp != NULL) {
         start_vid = old_ncp->vars.ndefined;
-        nrecs = NC_get_numrecs(old_ncp);
+        nrecs = old_ncp->numrecs;
     }
 
     noFill = (char*) NCI_Malloc((size_t)(ncp->vars.ndefined - start_vid));
@@ -664,9 +371,9 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
      * Note ncp->vars.ndefined is already made consistent by this point.
      */
     for (i=start_vid; i<ncp->vars.ndefined; i++)
-        noFill[i-start_vid] = ncp->vars.value[i]->no_fill;
-    TRACE_COMM(MPI_Bcast)(noFill, (ncp->vars.ndefined - start_vid), MPI_BYTE, 0,
-                          ncp->nciop->comm);
+        noFill[i-start_vid] = (char)(ncp->vars.value[i]->no_fill);
+        TRACE_COMM(MPI_Bcast)(noFill, (ncp->vars.ndefined - start_vid),
+                              MPI_BYTE, 0, ncp->comm);
     for (i=start_vid; i<ncp->vars.ndefined; i++) {
         /* overwrite local's mode */
         ncp->vars.value[i]->no_fill = noFill[i-start_vid];
@@ -685,8 +392,8 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
 
     /* find the number of write segments (upper bound) */
     nsegs = (size_t)(ncp->vars.ndefined + ncp->vars.num_rec_vars * nrecs);
-    count  = (MPI_Offset*) NCI_Malloc(nsegs * sizeof(MPI_Offset));
-    offset = (MPI_Aint*)   NCI_Malloc(nsegs * sizeof(MPI_Aint));
+    count  = (MPI_Offset*) NCI_Malloc(nsegs * SIZEOF_MPI_OFFSET);
+    offset = (MPI_Aint*)   NCI_Malloc(nsegs * SIZEOF_MPI_AINT);
 
     /* calculate each segment's offset and count */
     buf_len = 0; /* total write amount, used to allocate buffer */
@@ -774,7 +481,7 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
     }
 
     /* allocate one contiguous buffer space for all writes */
-    blocklengths = (int*) NCI_Malloc((size_t)j * sizeof(int));
+    blocklengths = (int*) NCI_Malloc((size_t)j * SIZEOF_INT);
     buf = NCI_Malloc((size_t)buf_len);
     buf_ptr = (char*)buf;
 
@@ -791,7 +498,7 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
             offset[k] = offset[j];
         }
         j++;
-        err = ncmpii_fill_var_buf(varp, count[k], buf_ptr);
+        err = fill_var_buf(varp, count[k], buf_ptr);
         if (err != NC_NOERR) {
             if (status == NC_NOERR) status = err;
             continue; /* skip this request */
@@ -822,7 +529,7 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
                 offset[k] = offset[j];
             }
             j++;
-            err = ncmpii_fill_var_buf(varp, count[k], buf_ptr);
+            err = fill_var_buf(varp, count[k], buf_ptr);
             if (err != NC_NOERR) {
                 if (status == NC_NOERR) status = err;
                 continue; /* skip this request */
@@ -855,7 +562,7 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
                                       &filetype);
 #endif
         if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_Type_hindexed");
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_Type_hindexed");
             /* return the first encountered error if there is any */
             if (status == NC_NOERR) status = err;
         }
@@ -867,15 +574,16 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
     NCI_Free(count);
     NCI_Free(offset);
 
-    fh = ncp->nciop->collective_fh;
+    fh = ncp->collective_fh;
 
     TRACE_IO(MPI_File_set_view)(fh, 0, MPI_BYTE, filetype, "native",
                                 MPI_INFO_NULL);
     if (k > 0) MPI_Type_free(&filetype);
 
-    if (buf_len != (int)buf_len)
-        if (status == NC_NOERR)
-            status = NC_EINTOVERFLOW;
+    if (buf_len != (int)buf_len) {
+        if (status == NC_NOERR) status = NC_EINTOVERFLOW;
+        buf_len = 0; /* skip this write */
+    }
 
     /* write to variable collectively */
     TRACE_IO(MPI_File_write_at_all)(fh, 0, buf, (int)buf_len, MPI_BYTE, &mpistatus);
@@ -884,18 +592,16 @@ fillerup_aggregate(NC *ncp, NC *old_ncp)
 
     TRACE_IO(MPI_File_set_view)(fh, 0, MPI_BYTE, MPI_BYTE, "native",
                                 MPI_INFO_NULL);
-
-    if (status != NC_NOERR) return status;
-
     if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_File_write_at_all");
+        if (status == NC_NOERR)
+            status = ncmpii_error_mpi2nc(mpireturn, "MPI_File_set_view");
 
-    return NC_NOERR;
+    return status;
 }
 
-/*----< ncmpii_fill_vars() >-------------------------------------------------*/
+/*----< ncmpio_fill_vars() >-------------------------------------------------*/
 int
-ncmpii_fill_vars(NC *ncp)
+ncmpio_fill_vars(NC *ncp)
 {
     int status=NC_NOERR;
 
@@ -925,3 +631,254 @@ ncmpii_fill_vars(NC *ncp)
     return status;
 }
 
+/*----< ncmpio_fill_var_rec() >----------------------------------------------*/
+/* fill an entire record of a record variable
+ * this API is collective, must be called in data mode */
+int
+ncmpio_fill_var_rec(void      *ncdp,
+                    int        varid,
+                    MPI_Offset recno) /* record index, ignored if non-record var */
+{
+    int     indx, err=NC_NOERR;
+    NC     *ncp=(NC*)ncdp;
+    NC_var *varp=NULL;
+
+    /* check whether variable ID is valid */
+    /* sanity check for ncdp and varid has been done in dispatchers */
+    varp = ncp->vars.value[varid];
+
+    /* error if this is not a record variable */
+    if (!IS_RECVAR(varp)) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTRECVAR)
+        goto err_check;
+    }
+
+    /* check if _FillValue attribute is defined */
+    indx = ncmpio_NC_findattr(&varp->attrs, _FillValue);
+
+    /* error if the fill mode of this variable is not on */
+    if (varp->no_fill && indx == -1) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTFILL)
+        goto err_check;
+    }
+
+err_check:
+    if (ncp->safe_mode) { /* consistency check */
+        int root_varid, status, mpireturn;
+        MPI_Offset root_recno;
+
+        /* check if varid is consistent across all processes */
+        root_varid = varid;
+        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_varid != varid)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* check if recno is consistent across all processes */
+        root_recno = recno;
+        TRACE_COMM(MPI_Bcast)(&root_recno, 1, MPI_OFFSET, 0, ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && root_recno != recno)
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+
+        if (err == NC_NOERR) err = status;
+    }
+    if (err != NC_NOERR) return err;
+
+    assert(varp != NULL);
+
+    return fill_var_rec(ncp, varp, recno);
+}
+
+/*----< ncmpio_set_fill() >--------------------------------------------------*/
+/* this API is collective, must be called in define mode, contrary to netCDF
+ * where nc_set_fill() can also be called in data mode. The reason of PnetCDF
+ * enforcing this requirement is because PnetCDF only fills fixed-size
+ * variables at ncmpi_enddef() and record variables in ncmpi_fill_var_rec().
+ */
+int
+ncmpio_set_fill(void *ncdp,
+                int   fill_mode,
+                int  *old_fill_mode)
+{
+    int i, err=NC_NOERR, mpireturn, oldmode;
+    NC *ncp = (NC*)ncdp;
+
+    /* check whether file's write permission */
+    if (NC_readonly(ncp)) {
+        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
+        goto err_check;
+    }
+
+    /* check if called in define mode */
+    if (!NC_indef(ncp)) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+err_check:
+    if (ncp->safe_mode) {
+        int status, root_fill_mode=fill_mode;
+
+        TRACE_COMM(MPI_Bcast)(&root_fill_mode, 1, MPI_INT, 0, ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return  ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast"); 
+        if (err == NC_NOERR && fill_mode != root_fill_mode)
+            /* dataset's fill mode is inconsistent with root's */
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FILL_MODE)
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (err == NC_NOERR) err = status;
+    }
+    if (err != NC_NOERR) return err;
+
+    oldmode = fIsSet(ncp->flags, NC_MODE_FILL) ? NC_FILL : NC_NOFILL;
+
+    if (fill_mode == NC_NOFILL)
+        fClr(ncp->flags, NC_MODE_FILL);
+    else if (fill_mode == NC_FILL)
+        fSet(ncp->flags, NC_MODE_FILL);
+    else
+        DEBUG_RETURN_ERROR(NC_EINVAL) /* Invalid fill_mode */
+
+    if (old_fill_mode != NULL) *old_fill_mode = oldmode;
+
+    /* loop thru all variables defined so far to set/overwrite its fill mode */
+    for (i=0; i<ncp->vars.ndefined; i++)
+        ncp->vars.value[i]->no_fill = (fill_mode == NC_NOFILL);
+
+    /* once the file's fill mode is set, any new variables defined after this
+     * call will check NC_dofill(ncp) and set their no_fill accordingly. See
+     * ncmpi_def_var() */
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_def_var_fill() >----------------------------------------------*/
+/* this API is collective, and must be called in define mode */
+int
+ncmpio_def_var_fill(void       *ncdp,
+                    int         varid,
+                    int         no_fill,    /* 1: no fill, 0: fill */
+                    const void *fill_value) /* when NULL, use default fill value */
+{
+    int err=NC_NOERR;
+    NC *ncp=(NC*)ncdp;
+    NC_var *varp=NULL;
+
+    /* sanity check for ncdp and varid has been done in dispatchers */
+    varp = ncp->vars.value[varid];
+
+    if (ncp->safe_mode) {
+        int root_ids[3], my_fill_null, minE, mpireturn;
+
+        /* check if varid, no_fill, fill_value, are consistent */
+        my_fill_null = (fill_value == NULL) ? 1 : 0;;
+        root_ids[0] = varid;
+        root_ids[1] = no_fill;
+        root_ids[2] = my_fill_null;
+        TRACE_COMM(MPI_Bcast)(&root_ids, 3, MPI_INT, 0, ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        if (err == NC_NOERR && (root_ids[0] != varid ||
+            root_ids[1] != no_fill || root_ids[2] != my_fill_null))
+            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
+
+        /* check fill_value, if not NULL, is consistent among processes */
+        if (varp!= NULL && root_ids[2] == 0) {
+            double root_fill_value; /* max nc_type space: 8 bytes */
+            if (fill_value != NULL)
+                memcpy(&root_fill_value, fill_value, (size_t)varp->xsz);
+            TRACE_COMM(MPI_Bcast)(&root_fill_value, varp->xsz, MPI_BYTE, 0,
+                                  ncp->comm);
+            if (mpireturn != MPI_SUCCESS)
+                return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+            if (err == NC_NOERR && fill_value != NULL &&
+                memcmp(fill_value, &root_fill_value, (size_t)varp->xsz))
+                /* variable's fill value is inconsistent with root's */
+                DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_FILL_VALUE)
+        }
+
+        /* find min error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        if (err == NC_NOERR) err = minE;
+    }
+    if (err != NC_NOERR) return err;
+
+    assert(varp != NULL);
+
+    if (no_fill)
+        varp->no_fill = 1;
+    else
+        varp->no_fill = 0;
+
+    /* Are we setting a fill value? */
+    if (fill_value != NULL && !varp->no_fill) {
+
+        /* create/overwrite attribute _FillValue */
+        err = ncmpio_put_att(ncdp, varid, _FillValue, varp->xtype,
+                             1, fill_value, ncmpii_nc2mpitype(varp->xtype));
+        if (err != NC_NOERR) return err;
+    }
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_inq_var_fill() >----------------------------------------------*/
+int
+ncmpio_inq_var_fill(NC_var *varp,
+                    void   *fill_value) /* OUT: user-defined or
+                                                default fill value */
+{
+    int i, err=NC_NOERR;
+    const void *xp;
+    NC_attrarray *ncap=&varp->attrs;
+
+    assert(varp != NULL); /* NC_GLOBAL varid is illegal in this context */
+
+    /* Check if _FillValue is defined for this variable */
+    for (i=0; i<ncap->ndefined; i++) {
+        if (strcmp(ncap->value[i]->name, _FillValue) == 0)
+            break;
+    }
+    if (i == ncap->ndefined) { /* attribute _FillValue is not set */
+        /* NetCDF 4.4.1 and prior does not use global attribute _FillValue if
+         * it is not defined for the variable. Default fill values are used.
+         * See fill_NC_var() in putget.m4.
+         */
+        err = ncmpio_inq_default_fill_value(varp->xtype, fill_value);
+        return err;
+    }
+
+    /* retrieve user-defined attribute _FillValue */
+    xp = ncap->value[i]->xvalue;
+
+    /* value stored in xvalue is in external representation, may need byte-swap */
+    switch(varp->xtype) {
+        case NC_CHAR:   return ncmpix_getn_text               (&xp, 1,               (char*)fill_value);
+        case NC_BYTE:   return ncmpix_getn_NC_BYTE_schar      (&xp, 1,        (signed char*)fill_value);
+        case NC_UBYTE:  return ncmpix_getn_NC_UBYTE_uchar     (&xp, 1,      (unsigned char*)fill_value);
+        case NC_SHORT:  return ncmpix_getn_NC_SHORT_short     (&xp, 1,              (short*)fill_value);
+        case NC_USHORT: return ncmpix_getn_NC_USHORT_ushort   (&xp, 1,     (unsigned short*)fill_value);
+        case NC_INT:    return ncmpix_getn_NC_INT_int         (&xp, 1,                (int*)fill_value);
+        case NC_UINT:   return ncmpix_getn_NC_UINT_uint       (&xp, 1,       (unsigned int*)fill_value);
+        case NC_FLOAT:  return ncmpix_getn_NC_FLOAT_float     (&xp, 1,              (float*)fill_value);
+        case NC_DOUBLE: return ncmpix_getn_NC_DOUBLE_double   (&xp, 1,             (double*)fill_value);
+        case NC_INT64:  return ncmpix_getn_NC_INT64_longlong  (&xp, 1,          (long long*)fill_value);
+        case NC_UINT64: return ncmpix_getn_NC_UINT64_ulonglong(&xp, 1, (unsigned long long*)fill_value);
+        default: return NC_EBADTYPE;
+    }
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_getput.m4 b/src/drivers/ncmpio/ncmpio_getput.m4
new file mode 100644
index 0000000..03a0002
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_getput.m4
@@ -0,0 +1,685 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_getput.m4 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/var_getput.m4
+ *
+ * ncmpi_get_var<kind>()            : dispatcher->get_var()
+ * ncmpi_put_var<kind>()            : dispatcher->put_var()
+ * ncmpi_get_var<kind>_<type>()     : dispatcher->get_var()
+ * ncmpi_put_var<kind>_<type>()     : dispatcher->put_var()
+ * ncmpi_get_var<kind>_all()        : dispatcher->get_var()
+ * ncmpi_put_var<kind>_all()        : dispatcher->put_var()
+ * ncmpi_get_var<kind>_<type>_all() : dispatcher->get_var()
+ * ncmpi_put_var<kind>_<type>_all() : dispatcher->put_var()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <string.h> /* memcpy() */
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+#ifdef ENABLE_SUBFILING
+#include "ncmpio_subfile.h"
+#endif
+
+/* buffer layers:
+
+   For write requests:
+   buf   (user buffer of internal data type)
+   lbuf  (contiguous buffer packed from buf based on buftype)
+   cbuf  (contiguous buffer packed from lbuf based on imap)
+   xbuf  (contiguous buffer in external data type, type-casted/byte-swapped
+          from cbuf, ready to be used in MPI_File_write to write to file)
+
+   For read requests:
+   xbuf  (contiguous buffer to be used in MPI_File_read to read from file. Its
+          contents are in external data type)
+   cbuf  (contiguous buffer type-casted/byte-swapped from xbuf, its contents
+          are in internal data type)
+   lbuf  (contiguous buffer unpacked from cbuf based on imap)
+   buf   (user buffer, unpacked from lbuf based on buftype)
+
+   Note for varmi APIs:
+        There maybe two layer of memory layout (remapping):
+        one is specified by MPI derived datatype,
+        the other is specified by imap[],
+        it's encouraged to use only one option of them,
+        though using both of them are supported.
+
+   user buffer:                         |--------------------------|
+
+   mpi derived datatype view:           |------|  |------|  |------|
+
+   logic (contig) memory datastream:       |------|------|------|
+
+   imap view:                              |--| |--|    |--| |--|
+
+   contig I/O datastream (internal represent): |--|--|--|--|
+
+   These two layers of memory layout will both be represented in MPI
+   derived datatype, and if double layers of memory layout is used,
+   we need to eliminate the upper one passed in MPI_Datatype parameter
+   from the user, by packing it to logic contig memory datastream view.
+
+   Implementation for put_varm:
+     1. pack buf to lbuf based on buftype
+     2. create imap_type based on imap
+     3. pack lbuf to cbuf based on imap_type
+     4. type convert and byte swap cbuf to xbuf
+     5. write to file using xbuf
+     6. byte swap user's buf, if it is swapped
+     7. free up temp buffers (lbuf, cbuf, xbuf if != buf)
+
+   Implementation for get_varm:
+     1. allocate xbuf, if buf cannot be used to read from file
+     2. read from file to xbuf
+     3. type convert and byte swap xbuf to cbuf
+     4. create imap_type based on imap
+     5. unpack cbuf to lbuf based on imap_type
+     6. unpack lbuf to buf based on buftype
+     7. free up temp buffers (lbuf, cbuf, xbuf if != buf)
+*/
+
+/*----< put_varm() >------------------------------------------------------*/
+static int
+put_varm(NC               *ncp,
+         NC_var           *varp,
+         const MPI_Offset *start,
+         const MPI_Offset *count,
+         const MPI_Offset *stride,  /* can be NULL */
+         const MPI_Offset *imap,    /* can be NULL */
+         void             *buf,
+         MPI_Offset        bufcount,  /* -1: from high-level API */
+         MPI_Datatype      buftype,
+         int               reqMode)   /* WR/RD/COLL/INDEP */
+{
+    void *xbuf=NULL;
+    int mpireturn, err=NC_NOERR, status=NC_NOERR, need_swap_back_buf=0;
+    int el_size, need_convert, need_swap, buftype_is_contig;
+    MPI_Offset nelems=0, nbytes=0, offset=0;
+    MPI_Status mpistatus;
+    MPI_Datatype etype, imaptype, filetype=MPI_BYTE;
+    MPI_File fh;
+
+#if 0
+    void *cbuf=NULL;
+    /* pack buf into a contiguous buffer, cbuf -----------------------------*/
+    /* If called from a true varm API or a flexible API, ncmpii_pack() packs
+     * user buf into a contiguous cbuf (need to be freed later). Otherwise,
+     * cbuf is simply set to buf. ncmpii_pack() also returns etype (MPI
+     * primitive datatype in buftype), and nelems (number of etypes in
+     * buftype * bufcount). Not cbuf may be == buf.
+     */
+    err = ncmpii_pack(varp->ndims, count, imap, buf, bufcount, buftype,
+                      &nelems, &etype, &cbuf);
+    if (err != NC_NOERR) goto err_check;
+
+    /* nbytes is the number of bytes (in external data representation) to
+     * be used in MPI write to the file */
+    nbytes = nelems * varp->xsz;
+
+    /* hereafter, varm has become vars for write requests */
+
+    if (nbytes == 0) /* this process has nothing to write */
+        goto err_check;
+
+    /* type-casting/byte-swapping cbuf into xbuf ---------------------------*/
+    unsigned char fillv[8]; /* fill value in internal representation */
+    ncmpio_inq_var_fill(varp, fillv); /* find the fill value */
+
+    /* pack cbuf to xbuf, do type-casting and/or byte-swap if necessary.
+     * The contents of xbuf will be in the external representation, ready
+     * to be written to file.
+     */
+    err = ncmpii_put_cast_swap(ncp->format, nelems, varp->xtype, etype,
+                               fillv, cbuf, (cbuf != buf), &xbuf);
+    if (err != NC_NOERR && err != NC_ERANGE) {
+        if (cbuf != buf)  NCI_Free(cbuf);
+        goto err_check;
+    }
+    /* cbuf is no longer needed */
+    if (cbuf != buf && cbuf != xbuf) NCI_Free(cbuf);
+
+    /* check if user buf needs to be swapped back to its original contents
+     * after MPI write */
+    if (xbuf == buf && varp->xsz > 1) need_swap_back_buf = 1;
+#else
+    if (bufcount != (int)bufcount) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
+        goto err_check;
+    }
+
+    /* decode buftype to obtain the followings:
+     * etype:    element data type (MPI primitive type) in buftype
+     * bufcount: If it is -1, then this is called from a high-level API and in
+     *           this case buftype will be an MPI primitive data type.
+     *           If it is >=0, then this is called from a flexible API.
+     * nelems:   number of etypes in user buffer, buf
+     * nbytes:   number of bytes (in external data representation) to write to
+     *           the file
+     * el_size:  byte size of etype
+     * buftype_is_contig: whether buftype is contiguous
+     */
+    err = ncmpii_buftype_decode(varp->ndims, varp->xtype, count, bufcount,
+                                buftype, &etype, &el_size, &nelems,
+                                &nbytes, &buftype_is_contig);
+    if (err != NC_NOERR) goto err_check;
+
+    /* because nbytes will be used as the argument "count" in MPI-IO
+     * write calls and the argument "count" is of type int */
+    if (nbytes != (int)nbytes) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
+        goto err_check;
+    }
+
+    if (nbytes == 0) goto err_check;
+
+    /* check if type conversion and Endianness byte swap is needed */
+    need_convert = ncmpii_need_convert(ncp->format, varp->xtype, etype);
+    need_swap    = ncmpii_need_swap(varp->xtype, etype);
+
+    /* check whether this is a true varm call, if yes, imaptype will be a
+     * newly created MPI derived data type, otherwise MPI_DATATYPE_NULL
+     */
+    err = ncmpii_create_imaptype(varp->ndims, count, imap, etype, &imaptype);
+    if (err != NC_NOERR) goto err_check;
+
+    if (!buftype_is_contig || imaptype != MPI_DATATYPE_NULL || need_convert ||
+#ifdef DISABLE_IN_PLACE_SWAP
+        need_swap
+#else
+        nbytes <= NC_BYTE_SWAP_BUFFER_SIZE
+#endif
+    ) {
+        xbuf = NCI_Malloc((size_t)nbytes);
+        if (xbuf == NULL) {
+            DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
+            goto err_check;
+        }
+        need_swap_back_buf = 0;
+    }
+    else {
+        /* when user buf is used as xbuf, we need to byte-swap buf back to its
+         * original contents, after MPI_File_write */
+        xbuf = buf;
+        need_swap_back_buf = 1;
+    }
+
+    /* pack user buffer, buf, to xbuf, which will be used to write to file */
+    err = ncmpio_pack_xbuf(ncp->format, varp, bufcount, buftype,
+                           buftype_is_contig, nelems, etype, imaptype,
+                           need_convert, need_swap, nbytes, buf, xbuf);
+    if (err != NC_NOERR && err != NC_ERANGE) {
+        if (xbuf != buf) NCI_Free(xbuf);
+        xbuf = NULL;
+        goto err_check;
+    }
+#endif
+
+err_check:
+    status = err;
+
+    /* NC_ERANGE is not a fatal error, we proceed with write request */
+    if ((err != NC_NOERR && err != NC_ERANGE) || nbytes == 0) {
+        /* for independent API, this process returns now */
+        if (fIsSet(reqMode, NC_REQ_INDEP)) return err;
+
+        /* for collective API, this process needs to participate the
+         * collective I/O operations, but with zero-length request
+         */
+        filetype = MPI_BYTE;
+        nbytes   = 0;
+    }
+    else {
+        /* Create the filetype for this request and calculate the beginning
+         * file offset for this request. If this request is contiguous in file,
+         * then set filetype == MPI_BYTE. Otherwise filetype will be an MPI
+         * derived data type.
+         */
+        err = ncmpio_filetype_create_vars(ncp, varp, start, count, stride,
+                                          reqMode, NULL, &offset, &filetype,
+                                          NULL);
+        if (err != NC_NOERR) {
+            filetype = MPI_BYTE;
+            nbytes   = 0;
+            if (status == NC_NOERR) status = err;
+        }
+    }
+
+    /* TODO: if record variables are too big (so big that we cannot store the
+     * stride between records in an MPI_Aint, for example) then we will
+     * have to process this one record at a time.
+     */
+
+    fh = (reqMode & NC_REQ_COLL) ? ncp->collective_fh : ncp->independent_fh;
+
+    /* MPI_File_set_view is collective */
+    err = ncmpio_file_set_view(ncp, fh, &offset, filetype);
+    if (err != NC_NOERR) {
+        nbytes = 0; /* skip this request */
+        if (status == NC_NOERR) status = err;
+    }
+    if (filetype != MPI_BYTE) MPI_Type_free(&filetype);
+
+#ifdef _USE_MPI_GET_COUNT
+    /* explicitly initialize mpistatus object to 0, see comments below */
+    memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+
+    if (fIsSet(reqMode, NC_REQ_COLL)) {
+        TRACE_IO(MPI_File_write_at_all)(fh, offset, xbuf, (int)nbytes,
+                                        MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at_all");
+            /* return the first encountered error if there is any */
+            if (status == NC_NOERR) {
+                err = (err == NC_EFILE) ? NC_EWRITE : err;
+                DEBUG_ASSIGN_ERROR(status, err)
+            }
+        }
+    }
+    else {  /* reqMode == NC_REQ_INDEP */
+        TRACE_IO(MPI_File_write_at)(fh, offset, xbuf, (int)nbytes,
+                                    MPI_BYTE,  &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at");
+            /* return the first encountered error if there is any */
+            if (status == NC_NOERR) {
+                err = (err == NC_EFILE) ? NC_EWRITE : err;
+                DEBUG_ASSIGN_ERROR(status, err)
+            }
+        }
+    }
+    if (mpireturn == MPI_SUCCESS) {
+#ifdef _USE_MPI_GET_COUNT
+        int put_size;
+        MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
+        ncp->put_size += put_size;
+#else
+        ncp->put_size += nbytes;
+#endif
+    }
+
+    /* done with xbuf */
+    if (xbuf != NULL && xbuf != buf) NCI_Free(xbuf);
+
+    if (need_swap_back_buf) /* byte-swap back to buf's original contents */
+        ncmpii_in_swapn(buf, nelems, varp->xsz);
+
+    /* for record variable, update number of records */
+    if (IS_RECVAR(varp)) {
+        /* update header's number of records in memory */
+        MPI_Offset new_numrecs = ncp->numrecs;
+
+        /* calculate the max record ID written by this request */
+        if (status == NC_NOERR || status == NC_ERANGE) {
+            if (stride == NULL)
+                new_numrecs = start[0] + count[0];
+            else
+                new_numrecs = start[0] + (count[0] - 1) * stride[0] + 1;
+
+            /* note new_numrecs can be smaller than ncp->numrecs when this
+             * write request writes existing records */
+        }
+
+        if (fIsSet(reqMode, NC_REQ_COLL)) {
+            /* sync numrecs in memory and file. Note new_numrecs may be
+             * different among processes. First, find the max numrecs among
+             * all processes.
+             */
+            MPI_Offset max_numrecs;
+            TRACE_COMM(MPI_Allreduce)(&new_numrecs, &max_numrecs, 1,
+                                      MPI_OFFSET, MPI_MAX, ncp->comm);
+            if (mpireturn != MPI_SUCCESS) {
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+                if (status == NC_NOERR) status = err;
+            }
+            /* In collective mode, ncp->numrecs is always sync-ed among
+               processes */
+            if (ncp->numrecs < max_numrecs) {
+                err = ncmpio_write_numrecs(ncp, max_numrecs);
+                if (status == NC_NOERR) status = err;
+                ncp->numrecs = max_numrecs;
+            }
+        }
+        else { /* NC_REQ_INDEP */
+            /* For independent put, we delay the sync for numrecs until
+             * the next collective call, such as end_indep(), sync(),
+             * enddef(), or close(). This is because if we update numrecs
+             * to file now, race condition can happen. Note numrecs in
+             * memory may be inconsistent and obsolete till then.
+             */
+            if (ncp->numrecs < new_numrecs) {
+                ncp->numrecs = new_numrecs;
+                set_NC_ndirty(ncp);
+            }
+        }
+    }
+
+    if (NC_doFsync(ncp)) { /* NC_SHARE is set */
+        TRACE_IO(MPI_File_sync)(fh);
+        if (fIsSet(reqMode, NC_REQ_COLL))
+            TRACE_COMM(MPI_Barrier)(ncp->comm);
+    }
+
+    return status;
+}
+
+/*----< get_varm() >------------------------------------------------------*/
+static int
+get_varm(NC               *ncp,
+         NC_var           *varp,
+         const MPI_Offset *start,
+         const MPI_Offset *count,
+         const MPI_Offset *stride,  /* can be NULL */
+         const MPI_Offset *imap,    /* can be NULL */
+         void             *buf,
+         MPI_Offset        bufcount,  /* -1: from high-level API */
+         MPI_Datatype      buftype,
+         int               reqMode)   /* WR/RD/COLL/INDEP */
+{
+    void *xbuf=NULL;
+    int mpireturn, err=NC_NOERR, status=NC_NOERR;
+    int el_size, buftype_is_contig, need_swap=0, need_convert=0;
+    MPI_Offset nelems=0, nbytes=0, offset=0;
+    MPI_Status mpistatus;
+    MPI_Datatype etype, filetype=MPI_BYTE, imaptype=MPI_DATATYPE_NULL;
+    MPI_File fh;
+
+    if (bufcount != (int)bufcount) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
+        goto err_check;
+    }
+
+    /* decode buftype to see if we can use buf to read from file.
+     * etype:    element data type (MPI primitive type) in buftype
+     * bufcount: If it is -1, then this is called from a high-level API and in
+     *           this case buftype will be an MPI primitive data type.
+     *           If it is >=0, then this is called from a flexible API.
+     * nelems:   number of etypes in user buffer
+     * nbytes:   number of bytes (in external data representation) to
+     *           read from the file
+     * el_size:  size of etype
+     * buftype_is_contig: whether buftype is contiguous
+     */
+    err = ncmpii_buftype_decode(varp->ndims, varp->xtype, count, bufcount,
+                                buftype, &etype, &el_size, &nelems,
+                                &nbytes, &buftype_is_contig);
+    if (err != NC_NOERR) goto err_check;
+
+    /* because nbytes will be used as the argument "count" in MPI-IO
+     * read calls and the argument "count" is of type int */
+    if (nbytes != (int)nbytes) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
+        goto err_check;
+    }
+
+    if (nbytes == 0) /* this process has nothing to read */
+        goto err_check;
+
+    /* check if type conversion and Endianness byte swap is needed */
+    need_convert = ncmpii_need_convert(ncp->format, varp->xtype, etype);
+    need_swap    = ncmpii_need_swap(varp->xtype, etype);
+
+    /* Check if this is a true varm call. If yes, construct a derived
+     * datatype, imaptype.
+     */
+    err = ncmpii_create_imaptype(varp->ndims, count, imap, etype, &imaptype);
+    if (err != NC_NOERR) goto err_check;
+
+    /* If we want to use user buffer, buf, to read data from the file,
+     * following 3 conditions must be true.
+     * 1. buftype is a contiguous MPI datatype and
+     * 2. imap is either NULL or indicates a contiguous memory access.
+     * 3. xtype and itype matches (need_convert is false)
+     * For condition 1, buftype is decoded in ncmpii_buftype_decode()
+     * For condition 2, imap is checked in ncmpii_create_imaptype()
+     */
+    if (buftype_is_contig && imaptype == MPI_DATATYPE_NULL && !need_convert)
+        xbuf = buf;
+    else /* allocate xbuf for reading */
+        xbuf = NCI_Malloc((size_t)nbytes);
+
+    /* Note xbuf is the buffer to be used in MPI read calls, and hence its
+     * contents are in the external type */
+
+err_check:
+    status = err;
+
+    if (err != NC_NOERR || nbytes == 0) {
+        /* for independent API, this process returns now */
+        if (fIsSet(reqMode, NC_REQ_INDEP)) return err;
+
+        /* for collective API, this process needs to participate the
+         * collective I/O operations, but with zero-length request
+         */
+        filetype = MPI_BYTE;
+        nbytes   = 0;
+    }
+    else {
+        /* Create the filetype for this request and calculate the beginning
+         * file offset for this request. If this request is contiguous in file,
+         * then set filetype == MPI_BYTE. Otherwise filetype will be an MPI
+         * derived data type.
+         */
+        err = ncmpio_filetype_create_vars(ncp, varp, start, count, stride,
+                                          reqMode, NULL, &offset, &filetype,
+                                          NULL);
+        if (err != NC_NOERR) {
+            filetype = MPI_BYTE;
+            nbytes   = 0;
+            if (status == NC_NOERR) status = err;
+        }
+    }
+
+    /* TODO: if record variables are too big (so big that we cannot store the
+     * stride between records in an MPI_Aint, for example) then we will
+     * have to process this one record at a time.
+     */
+
+    fh = (reqMode & NC_REQ_COLL) ? ncp->collective_fh : ncp->independent_fh;
+
+    /* MPI_File_set_view is collective */
+    err = ncmpio_file_set_view(ncp, fh, &offset, filetype);
+    if (err != NC_NOERR) {
+        nbytes = 0; /* skip this request */
+        if (status == NC_NOERR) status = err;
+    }
+    if (filetype != MPI_BYTE) MPI_Type_free(&filetype);
+
+#ifdef _USE_MPI_GET_COUNT
+    /* explicitly initialize mpistatus object to 0, see comments below */
+    memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+
+    if (fIsSet(reqMode, NC_REQ_COLL)) {
+        TRACE_IO(MPI_File_read_at_all)(fh, offset, xbuf, (int)nbytes,
+                                       MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at_all");
+            /* return the first encountered error if there is any */
+            if (status == NC_NOERR) {
+                err = (err == NC_EFILE) ? NC_EREAD : err;
+                DEBUG_ASSIGN_ERROR(status, err)
+            }
+        }
+    }
+    else {  /* reqMode == NC_REQ_INDEP */
+        TRACE_IO(MPI_File_read_at)(fh, offset, xbuf, (int)nbytes,
+                                   MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at");
+            /* return the first encountered error if there is any */
+            if (status == NC_NOERR) {
+                err = (err == NC_EFILE) ? NC_EREAD : err;
+                DEBUG_ASSIGN_ERROR(status, err)
+            }
+        }
+    }
+    if (mpireturn == MPI_SUCCESS) {
+#ifdef _USE_MPI_GET_COUNT
+        int get_size;
+        MPI_Get_count(&mpistatus, MPI_BYTE, &get_size);
+        ncp->get_size += get_size;
+#else
+        ncp->get_size += nbytes;
+#endif
+    }
+
+    if (nbytes == 0) return status;
+
+    /* unpack xbuf into user buffer, buf */
+    err = ncmpio_unpack_xbuf(ncp->format, varp, bufcount, buftype,
+                             buftype_is_contig, nelems, etype, imaptype,
+                             need_convert, need_swap, buf, xbuf);
+    if (status == NC_NOERR) status = err;
+
+    if (xbuf != buf) NCI_Free(xbuf);
+
+#if 0
+    void *lbuf=NULL, *cbuf=NULL;
+    /* xbuf contains the data read from file in external data type.
+     * Check if it needs to be type-converted + byte-swapped
+     */
+    MPI_Offset insize=nelems*el_size;
+    if (insize != (int)insize && status == NC_NOERR)
+        DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
+
+    /* type-casting and/or byte-swap xbuf into cbuf ------------------------*/
+    err = ncmpii_get_cast_swap(ncp->format, nelems, varp->xtype, etype,
+          (buftype_is_contig && imaptype == MPI_DATATYPE_NULL) ? buf : NULL,
+          xbuf, &cbuf);
+    if (status == NC_NOERR) status = err;
+
+    /* done with xbuf */
+    if (xbuf != buf && xbuf != cbuf) NCI_Free(xbuf);
+
+    /* determine whether we can use cbuf as lbuf */
+    if (imaptype != MPI_DATATYPE_NULL && !buftype_is_contig)
+        /* a true varm and buftype is not contiguous: we need a separate
+         * buffer, lbuf, to unpack cbuf to lbuf using imaptype, and later
+         * unpack lbuf to buf using buftype.
+         * In this case, cbuf cannot be buf and lbuf cannot be buf.
+         */
+        lbuf = NCI_Malloc((size_t)insize);
+    else if (imaptype == MPI_DATATYPE_NULL) /* not varm */
+        lbuf = cbuf;
+    else /* varm and buftype are contiguous */
+        lbuf = buf;
+
+    /* unpacked cbuf into lbuf based on imap -------------------------------*/
+    if (imaptype != MPI_DATATYPE_NULL) {
+        /* unpack cbuf to lbuf based on imaptype */
+        int position = 0;
+        MPI_Unpack(cbuf, (int)insize, &position, lbuf, 1, imaptype,
+                   MPI_COMM_SELF);
+        MPI_Type_free(&imaptype);
+    }
+    /* done with cbuf */
+    if (cbuf != lbuf) NCI_Free(cbuf);
+
+    /* unpacked lbuf into buf based on buftype -----------------------------*/
+    if (!buftype_is_contig) {
+        int position = 0;
+        MPI_Unpack(lbuf, (int)insize, &position, buf, (int)bufcount,
+                   buftype, MPI_COMM_SELF);
+    }
+    /* done with lbuf */
+    if (lbuf != buf) NCI_Free(lbuf);
+#endif
+
+    return status;
+}
+
+include(`utils.m4')dnl
+dnl
+dnl GETPUT_API(get/put)
+dnl
+define(`GETPUT_API',dnl
+`dnl
+/*----< ncmpio_$1_var() >----------------------------------------------------*/
+/* start  can be NULL only when api is NC_VAR
+ * count  can be NULL only when api is NC_VAR or NC_VAR1
+ * stride can be NULL only when api is NC_VAR, NC_VAR1, or NC_VARA
+ * imap   can be NULL only when api is NC_VAR, NC_VAR1, NC_VARA, or NC_VARS
+ * bufcount is >= 0 when called from a flexible API, is -1 when called from a
+ *         high-level API and in this case buftype is an MPI primitive
+ *         datatype.
+ * buftype is an MPI primitive data type (corresponding to the internal data
+ *         type of buf, e.g. short in ncmpi_put_short is mapped to MPI_SHORT)
+ *         if called from a high-level APIs. When called from a flexible API
+ *         it can be an MPI derived data type or MPI_DATATYPE_NULL. If it is
+ *         MPI_DATATYPE_NULL, then it means the data type of buf in memory
+ *         matches the variable external data type. In this case, bufcount is
+ *         ignored.
+ * reqMode indicates modes (NC_REQ_COLL/NC_REQ_INDEP/NC_REQ_WR etc.)
+ */
+int
+ncmpio_$1_var(void             *ncdp,
+              int               varid,
+              const MPI_Offset *start,
+              const MPI_Offset *count,
+              const MPI_Offset *stride,
+              const MPI_Offset *imap,
+              ifelse(`$1',`put',`const') void *buf,
+              MPI_Offset        bufcount,
+              MPI_Datatype      buftype,
+              int               reqMode)
+
+{
+    NC     *ncp=(NC*)ncdp;
+    NC_var *varp=NULL;
+
+    /* sanity check has been done at dispatchers */
+
+    if (fIsSet(reqMode, NC_REQ_ZERO) && fIsSet(reqMode, NC_REQ_COLL))
+        /* this collective API has a zero-length request */
+        return ncmpio_getput_zero_req(ncp, reqMode);
+
+    /* obtain NC_var object pointer, varp. Note sanity check for ncdp and
+     * varid has been done in dispatchers */
+    varp = ncp->vars.value[varid];
+
+#ifdef ENABLE_SUBFILING
+    /* call a separate routine if variable is stored in subfiles */
+    if (varp->num_subfiles > 1) {
+        if (imap != NULL) {
+            fprintf(stderr, "varm APIs for subfiling is NOT implemented\n");
+            DEBUG_RETURN_ERROR(NC_ENOTSUPPORT)
+        }
+        else
+            return ncmpio_subfile_getput_vars(ncp, varp, start, count,
+                                              stride, (void*)buf, bufcount,
+                                              buftype, reqMode);
+    }
+#endif
+    return $1_varm(ncp, varp, start, count, stride, imap, (void*)buf,
+                   bufcount, buftype, reqMode);
+}
+')dnl
+dnl
+
+GETPUT_API(get)
+GETPUT_API(put)
diff --git a/src/drivers/ncmpio/ncmpio_hash_func.c b/src/drivers/ncmpio/ncmpio_hash_func.c
new file mode 100644
index 0000000..542c562
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_hash_func.c
@@ -0,0 +1,401 @@
+/*
+ *  Copyright (C) 2016, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_hash_func.c 3440 2017-10-15 18:46:02Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <string.h> /* strlen() */
+#include <assert.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+
+/*----< ncmpio_jenkins_one_at_a_time_hash() >--------------------------------*/
+/* borrow Jenkins hash function:
+ * https://en.wikipedia.org/wiki/Jenkins_hash_function
+ */
+int ncmpio_jenkins_one_at_a_time_hash(const char *str_name)
+{
+    unsigned int i, hash=0;
+    for (i=0; i<strlen(str_name); ++i) {
+        hash += (unsigned int)str_name[i];
+        hash += (hash << 10);
+        hash ^= (hash >> 6);
+    }
+    hash += (hash << 3);
+    hash ^= (hash >> 11);
+    hash += (hash << 15);
+
+#if 0
+    ret = (int)hash; /* the return value will be used as an array index */
+    return ((ret < 0) ? -ret : ret); /* make the value positive */
+#endif
+    /* this is to avoid expensive % operation, i.e. % HASH_TABLE_SIZE
+    return (int)((hash ^ (hash>>10) ^ (hash>>20)) & (HASH_TABLE_SIZE-1));
+    */
+    return (int)(hash & (HASH_TABLE_SIZE-1));
+    /* return value will be used as an array index */
+}
+
+/*----< ncmpio_additive_hash() >---------------------------------------------*/
+/* try different hash functions described in
+ * http://www.burtleburtle.net/bob/hash/doobs.html
+ */
+int ncmpio_additive_hash(const char *str_name)
+{
+    size_t i, len = strlen(str_name);
+    int hash = (int)len;
+    for (i=0; i<len; ++i)
+        hash += str_name[i]; /* additive hash */
+
+    return (hash % 251); /* 251 is the largest prime <= 255 */
+}
+
+/*----< ncmpio_rotating_hash() >---------------------------------------------*/
+int ncmpio_rotating_hash(const char *str_name)
+{
+    size_t i, len = strlen(str_name);
+    unsigned int hash = (unsigned int)len;
+    for (i=0; i<len; ++i)
+        hash = (hash<<4)^(hash>>28)^(unsigned int)str_name[i];
+
+    /* below is a clever way to replace (hash % prime) */
+    return (int)((hash ^ (hash>>10) ^ (hash>>20)) & (HASH_TABLE_SIZE-1));
+}
+
+/*----< ncmpio_Bernstein_hash() >--------------------------------------------*/
+int ncmpio_Bernstein_hash(const char *str_name)
+{
+    size_t i, len = strlen(str_name);
+    unsigned int hash = (unsigned int)len;
+    for (i=0; i<len; ++i)
+        /* hash = 65*hash+str_name[i]; */
+        hash = hash+(hash<<6)+(unsigned int)str_name[i];
+
+    return (int)((hash ^ (hash>>10) ^ (hash>>20)) & (HASH_TABLE_SIZE-1));
+}
+
+/*----< ncmpio_Pearson_hash() >----------------------------------------------*/
+int ncmpio_Pearson_hash(const char *str_name)
+{
+#if HASH_TABLE_SIZE == 256
+    unsigned char T[256] = {
+        251, 175, 119, 215, 81, 14, 79, 191, 103, 49, 181, 143, 186, 157,  0,
+        232, 31, 32, 55, 60, 152, 58, 17, 237, 174, 70, 160, 144, 220, 90, 57,
+        223, 59,  3, 18, 140, 111, 166, 203, 196, 134, 243, 124, 95, 222, 179,
+        197, 65, 180, 48, 36, 15, 107, 46, 233, 130, 165, 30, 123, 161, 209, 23,
+        97, 16, 40, 91, 219, 61, 100, 10, 210, 109, 250, 127, 22, 138, 29, 108,
+        244, 67, 207,  9, 178, 204, 74, 98, 126, 249, 167, 116, 34, 77, 193,
+        200, 121,  5, 20, 113, 71, 35, 128, 13, 182, 94, 25, 226, 227, 199, 75,
+        27, 41, 245, 230, 224, 43, 225, 177, 26, 155, 150, 212, 142, 218, 115,
+        241, 73, 88, 105, 39, 114, 62, 255, 192, 201, 145, 214, 168, 158, 221,
+        148, 154, 122, 12, 84, 82, 163, 44, 139, 228, 236, 205, 242, 217, 11,
+        187, 146, 159, 64, 86, 239, 195, 42, 106, 198, 118, 112, 184, 172, 87,
+        2, 173, 117, 176, 229, 247, 253, 137, 185, 99, 164, 102, 147, 45, 66,
+        231, 52, 141, 211, 194, 206, 246, 238, 56, 110, 78, 248, 63, 240, 189,
+        93, 92, 51, 53, 183, 19, 171, 72, 50, 33, 104, 101, 69, 8, 252, 83, 120,
+        76, 135, 85, 54, 202, 125, 188, 213, 96, 235, 136, 208, 162, 129, 190,
+        132, 156, 38, 47, 1, 7, 254, 24, 4, 216, 131, 89, 21, 28, 133, 37, 153,
+        149, 80, 170, 68, 6, 169, 234, 151
+    };
+    size_t i, len=strlen(str_name);
+    unsigned char hash = (unsigned char)len;
+    for (i=len; i>0; ) hash = T[hash ^ str_name[--i]];
+    return (int)hash;
+#else
+    unsigned int i, hash=strlen(str_name);
+    for (i=0; i<strlen(str_name); ++i)
+        hash ^= str_name[i];
+
+    return (int)((hash ^ (hash>>10) ^ (hash>>20)) & (HASH_TABLE_SIZE-1));
+#endif
+}
+
+/*----< ncmpio_update_name_lookup_table() >----------------------------------*/
+/* remove the entry in lookup table for oldname and add a new entry for
+ * newname
+ */
+int
+ncmpio_update_name_lookup_table(NC_nametable *nameT,
+                                const int     id,
+                                const char   *oldname,  /*    normalized */
+                                const char   *unewname) /* un-normalized */
+{
+    int i, key, err;
+    char *name; /* normalized name string */
+
+    /* remove the old name from the lookup table
+     * hash the var name into a key for name lookup
+     */
+    key = HASH_FUNC(oldname);
+    for (i=0; i<nameT[key].num; i++) {
+        if (nameT[key].list[i] == id) break;
+    }
+    assert(i!=nameT[key].num);
+
+    /* coalesce the id array */
+    for (; i<nameT[key].num-1; i++)
+        nameT[key].list[i] = nameT[key].list[i+1]; 
+
+    /* decrease the number of IDs and free space if necessary */
+    nameT[key].num--;
+    if (nameT[key].num == 0) {
+        NCI_Free(nameT[key].list);
+        nameT[key].list = NULL;
+    }
+
+    /* normalized version of uname */
+    err = ncmpii_utf8_normalize(unewname, &name);
+    if (err != NC_NOERR) return err;
+
+    /* hash the var name into a key for name lookup */
+    key = HASH_FUNC(name);
+    NCI_Free(name);
+
+    /* add the new name to the lookup table
+     * Note unewname must have already been checked for existence
+     */
+    if (nameT[key].num % NC_NAME_TABLE_CHUNK == 0)
+        nameT[key].list = (int*) NCI_Realloc(nameT[key].list,
+                          (size_t)(nameT[key].num+NC_NAME_TABLE_CHUNK) * SIZEOF_INT);
+    nameT[key].list[nameT[key].num] = id;
+    nameT[key].num++;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_hash_insert() >-----------------------------------------------*/
+void
+ncmpio_hash_insert(NC_nametable *nameT, /* var name lookup table */
+                   const char   *name,
+                   int           id)
+{
+    int key;
+
+    /* hash the name into a key for name lookup */
+    key = HASH_FUNC(name);
+
+    /* allocate or expand the space for nameT[key].list */
+    if (nameT[key].num % NC_NAME_TABLE_CHUNK == 0)
+        nameT[key].list = (int*) NCI_Realloc(nameT[key].list,
+                          (size_t)(nameT[key].num+NC_NAME_TABLE_CHUNK) *
+                          SIZEOF_INT);
+
+    /* add the ID to the name lookup table */
+    nameT[key].list[nameT[key].num] = id;
+    nameT[key].num++;
+}
+
+/*----< ncmpio_hash_delete() >-----------------------------------------------*/
+/* only attributes can be deleted in NetCDF */
+int
+ncmpio_hash_delete(NC_nametable *nameT, /* var name lookup table */
+                   const char   *name,
+                   int           id)
+{
+    int i, j, key;
+
+    /* hash the name into a key for name lookup */
+    key = HASH_FUNC(name);
+
+    /* find the entry from list[] that matches id */
+    for (i=0; i<nameT[key].num; i++)
+        if (nameT[key].list[i] == id)
+            break;
+
+    /* name is not found in nameT hash table */
+    if (i == nameT[key].num) DEBUG_RETURN_ERROR(NC_ENOTATT)
+
+    /* coalesce list[] */
+    for (; i<nameT[key].num-1; i++)
+        nameT[key].list[i] = nameT[key].list[i+1];
+
+    nameT[key].num--;
+
+    if (nameT[key].num == 0) {
+        NCI_Free(nameT[key].list);
+        nameT[key].list = NULL;
+    }
+
+    /* update all IDs that are > id */
+    for (i=0; i<HASH_TABLE_SIZE; i++) {
+        if (nameT[i].num == 0) continue;
+        for (j=0; j<nameT[i].num; j++)
+            if (nameT[i].list[j] > id)
+                nameT[i].list[j]--;
+    }
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_hash_replace() >----------------------------------------------*/
+/* remove old_name entry and add new_name entry */
+int
+ncmpio_hash_replace(NC_nametable *nameT, /* var name lookup table */
+                    const char   *old_name,
+                    const char   *new_name,
+                    int           id)
+{
+    int i, key;
+
+    /* hash the old name into a key for name lookup */
+    key = HASH_FUNC(old_name);
+
+    /* find the entry from list[] that matches id */
+    for (i=0; i<nameT[key].num; i++)
+        if (nameT[key].list[i] == id)
+            break;
+
+    /* name is not found in nameT hash table */
+    if (i == nameT[key].num) DEBUG_RETURN_ERROR(NC_ENOTATT)
+
+    /* coalesce list[] */
+    for (; i<nameT[key].num-1; i++)
+        nameT[key].list[i] = nameT[key].list[i+1];
+
+    nameT[key].num--;
+
+    if (nameT[key].num == 0) {
+        NCI_Free(nameT[key].list);
+        nameT[key].list = NULL;
+    }
+
+    /* hash the new name into a key for name lookup */
+    key = HASH_FUNC(new_name);
+
+    /* allocate or expand the space for nameT[key].list */
+    if (nameT[key].num % NC_NAME_TABLE_CHUNK == 0)
+        nameT[key].list = (int*) NCI_Realloc(nameT[key].list,
+                          (size_t)(nameT[key].num+NC_NAME_TABLE_CHUNK) *
+                          SIZEOF_INT);
+
+    /* add the ID to the name lookup table */
+    nameT[key].list[nameT[key].num] = id;
+    nameT[key].num++;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_hash_table_copy() >-------------------------------------------*/
+void
+ncmpio_hash_table_copy(NC_nametable       *dest,
+                       const NC_nametable *src)
+{
+    int i;
+
+    for (i=0; i<HASH_TABLE_SIZE; i++) {
+        dest[i].num = src[i].num;
+        dest[i].list = NULL;
+        if (dest[i].num > 0) {
+            dest[i].list = NCI_Malloc((size_t)dest[i].num * SIZEOF_INT);
+            memcpy(dest[i].list, src[i].list, (size_t)dest[i].num * SIZEOF_INT);
+        }
+    }
+}
+
+/*----< ncmpio_hash_table_free() >-------------------------------------------*/
+/* free space allocated for name lookup table */
+void
+ncmpio_hash_table_free(NC_nametable *nameT)
+{
+    int i;
+    for (i=0; i<HASH_TABLE_SIZE; i++) {
+        if (nameT[i].num > 0)
+            NCI_Free(nameT[i].list);
+        nameT[i].num = 0;
+    }
+}
+
+/*----< ncmpio_hash_table_populate_NC_dim() >--------------------------------*/
+void
+ncmpio_hash_table_populate_NC_dim(NC_dimarray *dimsp)
+{
+    int i;
+    NC_nametable *nameT = dimsp->nameT;
+
+    /* initialize dim name lookup table -------------------------------------*/
+    memset(nameT, 0, sizeof(NC_nametable) * HASH_TABLE_SIZE);
+
+    /* populate name lookup table */
+    for (i=0; i<dimsp->ndefined; i++) {
+        /* hash the dim name into a key for name lookup */
+        int key = HASH_FUNC(dimsp->value[i]->name);
+        nameT = &dimsp->nameT[key];
+        if (nameT->num % NC_NAME_TABLE_CHUNK == 0)
+            nameT->list = (int*) NCI_Realloc(nameT->list,
+                          (size_t)(nameT->num+NC_NAME_TABLE_CHUNK) *SIZEOF_INT);
+        nameT->list[nameT->num] = i;
+        nameT->num++;
+    }
+}
+
+/*----< ncmpio_hash_table_populate_NC_var() >--------------------------------*/
+void
+ncmpio_hash_table_populate_NC_var(NC_vararray *varsp)
+{
+    int i;
+    NC_nametable *nameT = varsp->nameT;
+
+    /* initialize var name lookup table -------------------------------------*/
+    memset(nameT, 0, sizeof(NC_nametable) * HASH_TABLE_SIZE);
+
+    /* populate name lookup table */
+    for (i=0; i<varsp->ndefined; i++) {
+        /* hash the var name into a key for name lookup */
+        int key = HASH_FUNC(varsp->value[i]->name);
+        nameT = &varsp->nameT[key];
+        if (nameT->num % NC_NAME_TABLE_CHUNK == 0)
+            nameT->list = (int*) NCI_Realloc(nameT->list,
+                          (size_t)(nameT->num+NC_NAME_TABLE_CHUNK) *SIZEOF_INT);
+        nameT->list[nameT->num] = i;
+        nameT->num++;
+    }
+}
+
+/*----< ncmpio_hash_table_populate_NC_attr() >-------------------------------*/
+void
+ncmpio_hash_table_populate_NC_attr(NC *ncp)
+{
+    int i, j;
+    NC_nametable *nameT;
+
+    /* populate name lookup table of global attributes */
+    memset(ncp->attrs.nameT, 0, sizeof(NC_nametable) * HASH_TABLE_SIZE);
+
+    for (i=0; i<ncp->attrs.ndefined; i++) {
+        /* hash the var name into a key for name lookup */
+        int key = HASH_FUNC(ncp->attrs.value[i]->name);
+        nameT = &ncp->attrs.nameT[key];
+        if (nameT->num % NC_NAME_TABLE_CHUNK == 0)
+            nameT->list = (int*) NCI_Realloc(nameT->list,
+                          (size_t)(nameT->num+NC_NAME_TABLE_CHUNK) *SIZEOF_INT);
+        nameT->list[nameT->num] = i;
+        nameT->num++;
+    }
+
+    /* populate name lookup table of each variable's attributes */
+    for (j=0; j<ncp->vars.ndefined; j++) {
+        NC_var *varp = ncp->vars.value[j];
+        memset(varp->attrs.nameT, 0, sizeof(NC_nametable) * HASH_TABLE_SIZE);
+
+        for (i=0; i<varp->attrs.ndefined; i++) {
+            /* hash the var name into a key for name lookup */
+            int key = HASH_FUNC(varp->attrs.value[i]->name);
+            nameT = &varp->attrs.nameT[key];
+            if (nameT->num % NC_NAME_TABLE_CHUNK == 0)
+                nameT->list = (int*) NCI_Realloc(nameT->list,
+                              (size_t)(nameT->num+NC_NAME_TABLE_CHUNK) *SIZEOF_INT);
+            nameT->list[nameT->num] = i;
+            nameT->num++;
+        }
+    }
+}
diff --git a/src/drivers/ncmpio/ncmpio_header_get.c b/src/drivers/ncmpio/ncmpio_header_get.c
new file mode 100644
index 0000000..21784df
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_header_get.c
@@ -0,0 +1,1389 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_header_get.c 3430 2017-09-28 16:29:42Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <assert.h>
+#include <string.h>  /* memcpy(), memcmp() */
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
+
+#define NC_MAGIC_LEN 4
+
+/*----< compute_var_shape() >------------------------------------------------*/
+/* Recompute the shapes of all variables: shape, xsz, and len
+ * Sets ncp->begin_var to start of first variable.
+ * Sets ncp->begin_rec to start of first record variable.
+ * Returns -1 on error. The only possible error is an reference to a non
+ * existent dimension, which would occur for a corrupt netcdf file.
+ */
+static int
+compute_var_shape(NC *ncp)
+{
+    int i, err;
+    NC_var *first_var = NULL;       /* first "non-record" var */
+    NC_var *first_rec = NULL;       /* first "record" var */
+
+    if (ncp->vars.ndefined == 0) return NC_NOERR;
+
+    ncp->begin_var = ncp->xsz;
+    ncp->begin_rec = ncp->xsz;
+    ncp->recsize   = 0;
+
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        /* ncp->vars.value[i]->len will be recomputed from dimensions in
+         * ncmpio_NC_var_shape64() */
+        err = ncmpio_NC_var_shape64(ncp->vars.value[i], &ncp->dims);
+        if (err != NC_NOERR) return err;
+
+        if (IS_RECVAR(ncp->vars.value[i])) {
+            if (first_rec == NULL) first_rec = ncp->vars.value[i];
+            ncp->recsize += ncp->vars.value[i]->len;
+        }
+        else { /* fixed-size variable */
+            if (first_var == NULL) first_var = ncp->vars.value[i];
+            /*
+             * Overwritten each time thru.
+             * Usually overwritten in first_rec != NULL clause.
+             */
+            ncp->begin_rec = ncp->vars.value[i]->begin
+                           + ncp->vars.value[i]->len;
+        }
+    }
+
+    if (first_rec != NULL) {
+        if (ncp->begin_rec > first_rec->begin)
+            DEBUG_RETURN_ERROR(NC_ENOTNC) /* not a netCDF file or corrupted */
+
+        ncp->begin_rec = first_rec->begin;
+        /*
+         * for special case of exactly one record variable, pack value
+         */
+        if (ncp->recsize == first_rec->len)
+            ncp->recsize = *first_rec->dsizes * first_rec->xsz;
+    }
+
+    if (first_var != NULL)
+        ncp->begin_var = first_var->begin;
+    else
+        ncp->begin_var = ncp->begin_rec;
+
+    if (ncp->begin_var <= 0 || ncp->xsz > ncp->begin_var ||
+        ncp->begin_rec <= 0 || ncp->begin_var > ncp->begin_rec)
+        DEBUG_RETURN_ERROR(NC_ENOTNC) /* not a netCDF file or corrupted */
+
+    return NC_NOERR;
+}
+
+#define X_SIZEOF_NC_TYPE X_SIZEOF_INT
+#define X_SIZEOF_NC_TAG  X_SIZEOF_INT
+
+#if 0
+/*----< hdr_len_NC_name() >--------------------------------------------------*/
+static MPI_Offset
+hdr_len_NC_name(const NC_string *ncstrp, int sizeof_NON_NEG)
+{
+    /* netCDF file format:
+     * name       = nelems namestring
+     * nelems     = NON_NEG
+     * namestring = ID1 [IDN ...] padding
+     * ID1        = alphanumeric | '_'
+     * IDN        = alphanumeric | special1 | special2
+     * padding    = <0, 1, 2, or 3 bytes to next 4-byte boundary>
+     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
+     *              <non-negative INT64>  // CDF-5
+     */
+    MPI_Offset sz = sizeof_NON_NEG; /* nelems */
+
+    assert(ncstrp != NULL);
+
+    if (ncstrp->nchars != 0)  /* namestring */
+        sz += _RNDUP(ncstrp->nchars, X_ALIGN);
+
+    return sz;
+}
+#endif
+
+/*----< hdr_len_NC_dim() >---------------------------------------------------*/
+inline static MPI_Offset
+hdr_len_NC_dim(const NC_dim *dimp, int sizeof_NON_NEG)
+{
+    /* netCDF file format:
+     *  ...
+     * dim        = name dim_length
+     * dim_length = NON_NEG
+     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
+     *              <non-negative INT64>  // CDF-5
+     */
+    MPI_Offset sz;
+
+    assert(dimp != NULL);
+
+    sz  = sizeof_NON_NEG + _RNDUP(dimp->name_len, X_ALIGN); /* name */
+    sz += sizeof_NON_NEG;                                   /* dim_length */
+
+    return sz;
+}
+
+/*----< hdr_len_NC_dimarray() >----------------------------------------------*/
+static MPI_Offset
+hdr_len_NC_dimarray(const NC_dimarray *ncap, int sizeof_NON_NEG)
+{
+    /* netCDF file format:
+     *  ...
+     * dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
+     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *                ZERO  ZERO64  // for CDF-5
+     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_DIMENSION = \x00 \x00 \x00 \x0A         // tag for list of dimensions
+     * nelems       = NON_NEG       // number of elements in following sequence
+     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
+     *                <non-negative INT64>        // CDF-5
+     */
+    int i;
+    MPI_Offset xlen;
+
+    xlen = X_SIZEOF_NC_TAG;           /* NC_DIMENSION */
+    xlen += sizeof_NON_NEG;           /* nelems */
+
+    if (ncap == NULL) /* ABSENT: no dimension is defined */
+        return xlen;
+
+    /* [dim ...] */
+    for (i=0; i<ncap->ndefined; i++)
+        xlen += hdr_len_NC_dim(ncap->value[i], sizeof_NON_NEG);
+
+    return xlen;
+}
+
+/*----< hdr_len_NC_attr() >--------------------------------------------------*/
+inline static MPI_Offset
+hdr_len_NC_attr(const NC_attr *attrp, int sizeof_NON_NEG)
+{
+    /* netCDF file format:
+     *  ...
+     * attr    = name  nc_type  nelems  [values ...]
+     * nc_type = NC_BYTE | NC_CHAR | NC_SHORT | ...
+     * nelems  = NON_NEG       // number of elements in following sequence
+     * values  = bytes | chars | shorts | ints | floats | doubles
+     * bytes   = [BYTE ...]  padding
+     * chars   = [CHAR ...]  padding
+     * shorts  = [SHORT ...]  padding
+     * ints    = [INT ...]
+     * floats  = [FLOAT ...]
+     * doubles = [DOUBLE ...]
+     * padding = <0, 1, 2, or 3 bytes to next 4-byte boundary>
+     * NON_NEG = <non-negative INT> |  // CDF-1 and CDF-2
+     *           <non-negative INT64>  // CDF-5
+     */
+    MPI_Offset sz;
+
+    assert(attrp != NULL);
+
+    sz  = sizeof_NON_NEG + _RNDUP(attrp->name_len, X_ALIGN); /* name */
+    sz += X_SIZEOF_NC_TYPE;                                  /* nc_type */
+    sz += sizeof_NON_NEG;                                    /* nelems */
+    sz += attrp->xsz;                                        /* [values ...] */
+
+    return sz;
+}
+
+/*----< hdr_len_NC_attrarray() >---------------------------------------------*/
+static MPI_Offset
+hdr_len_NC_attrarray(const NC_attrarray *ncap, int sizeof_NON_NEG)
+{
+    /* netCDF file format:
+     *  ...
+     * att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
+     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *                ZERO  ZERO64  // for CDF-5
+     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_ATTRIBUTE = \x00 \x00 \x00 \x0C         // tag for list of attributes
+     * nelems       = NON_NEG       // number of elements in following sequence
+     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
+     *                <non-negative INT64>        // CDF-5
+     */
+    int i;
+    MPI_Offset xlen;
+
+    xlen = X_SIZEOF_NC_TAG;        /* NC_ATTRIBUTE */
+    xlen += sizeof_NON_NEG;        /* nelems */
+
+    if (ncap == NULL) /* ABSENT: no attribute is defined */
+        return xlen;
+
+    for (i=0; i<ncap->ndefined; i++) /* [attr ...] */
+        xlen += hdr_len_NC_attr(ncap->value[i], sizeof_NON_NEG);
+
+    return xlen;
+}
+
+/*----< hdr_len_NC_var() >---------------------------------------------------*/
+static MPI_Offset
+hdr_len_NC_var(const NC_var *varp,
+               int           sizeof_off_t,    /* OFFSET */
+               int           sizeof_NON_NEG)  /* NON_NEG */
+{
+    /* netCDF file format:
+     * netcdf_file = header data
+     * header      = magic numrecs dim_list gatt_list var_list
+     *  ...
+     * var         = name nelems [dimid ...] vatt_list nc_type vsize begin
+     * nelems      = NON_NEG
+     * dimid       = NON_NEG
+     * vatt_list   = att_list
+     * nc_type     = NC_BYTE | NC_CHAR | NC_SHORT | ...
+     * vsize       = NON_NEG
+     * begin       = OFFSET        // Variable start location.
+     * OFFSET      = <non-negative INT> |  // CDF-1
+     *               <non-negative INT64>  // CDF-2 and CDF-5
+     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
+     *               <non-negative INT64>  // CDF-5
+     */
+    MPI_Offset sz;
+
+    assert(varp != NULL);
+
+    /* for CDF-1, sizeof_off_t == 4 && sizeof_NON_NEG == 4
+     * for CDF-2, sizeof_off_t == 8 && sizeof_NON_NEG == 4
+     * for CDF-5, sizeof_off_t == 8 && sizeof_NON_NEG == 8
+     */
+    sz  = sizeof_NON_NEG + _RNDUP(varp->name_len, X_ALIGN);   /* name */
+    sz += sizeof_NON_NEG;                                     /* nelems */
+    sz += sizeof_NON_NEG * varp->ndims;                       /* [dimid ...] */
+    sz += hdr_len_NC_attrarray(&varp->attrs, sizeof_NON_NEG); /* vatt_list */
+    sz += X_SIZEOF_NC_TYPE;                                   /* nc_type */
+    sz += sizeof_NON_NEG;                                     /* vsize */
+    sz += sizeof_off_t;                                       /* begin */
+
+    return sz;
+}
+
+/*----< hdr_len_NC_vararray() >----------------------------------------------*/
+static MPI_Offset
+hdr_len_NC_vararray(const NC_vararray *ncap,
+                    int                sizeof_NON_NEG, /* NON_NEG */
+                    int                sizeof_off_t)   /* OFFSET */
+{
+    /* netCDF file format:
+     * netcdf_file = header  data
+     * header      = magic  numrecs  dim_list  gatt_list  var_list
+     *  ...
+     * var_list    = ABSENT | NC_VARIABLE   nelems  [var ...]
+     * ABSENT      = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *               ZERO  ZERO64  // for CDF-5
+     * ZERO        = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64      = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_VARIABLE = \x00 \x00 \x00 \x0B         // tag for list of variables
+     * nelems      = NON_NEG       // number of elements in following sequence
+     * NON_NEG     = <non-negative INT> |        // CDF-1 and CDF-2
+     *               <non-negative INT64>        // CDF-5
+     */
+    int i;
+    MPI_Offset xlen;
+
+    xlen = X_SIZEOF_NC_TAG;           /* NC_VARIABLE */
+    xlen += sizeof_NON_NEG;           /* nelems */
+
+    if (ncap == NULL) /* ABSENT: no variable is defined */
+        return xlen;
+
+    /* for CDF-1, sizeof_off_t == 4 && sizeof_NON_NEG == 4
+     * for CDF-2, sizeof_off_t == 8 && sizeof_NON_NEG == 4
+     * for CDF-5, sizeof_off_t == 8 && sizeof_NON_NEG == 8
+     */
+    for (i=0; i<ncap->ndefined; i++)  /* [var ...] */
+        xlen += hdr_len_NC_var(ncap->value[i], sizeof_off_t, sizeof_NON_NEG);
+
+    return xlen;
+}
+
+/*----< hdr_fetch() >--------------------------------------------------------*/
+/* Fetch the next header chunk.  the chunk is 'gbp->size' bytes big
+ * Takes care to not overwrite leftover (unused) data in the buffer before
+ * fetching a new chunk: the current approach is to re-read the extra data.
+ *
+ * NOTE: An alternate approach (which we do not do) would be to save the old
+ *       data, read the next chunk and then copy the old data into the new
+ *       chunk.  This alternate approach might help if it is important for
+ *       reads to be aligned.
+ */
+static int
+hdr_fetch(bufferinfo *gbp) {
+    int rank, err=NC_NOERR, mpireturn;
+    int slack; /* any leftover data in the buffer */
+
+    assert(gbp->base != NULL);
+
+#if 0
+    MPI_Aint pos_addr, base_addr;
+#ifdef HAVE_MPI_GET_ADDRESS
+    MPI_Get_address(gbp->pos,  &pos_addr);
+    MPI_Get_address(gbp->base, &base_addr);
+#else
+    MPI_Address(gbp->pos,  &pos_addr);
+    MPI_Address(gbp->base, &base_addr);
+#endif
+    slack = gbp->size - (pos_addr - base_addr);
+#endif
+    slack = gbp->size - ((char*)gbp->pos - (char*)gbp->base);
+
+    /* If gbp->pos and gbp->base are the same, there is no leftover buffer
+     * data to worry about.
+     * In the other extreme, where gbp->size == (gbp->pos - gbp->base), then
+     * all data in the buffer has been consumed
+     * If slack is neither, then we re-read slack + additional header into a
+     * contiguous buffer, gbp->base.
+     */
+    if (slack == gbp->size) slack = 0;
+
+    /* No need to zero out the buffer, as it will be filled with read */
+    /*
+    memset(gbp->base, 0, (size_t)gbp->size);
+    */
+    gbp->pos = gbp->base;
+
+    MPI_Comm_rank(gbp->comm, &rank);
+    if (rank == 0) {
+        MPI_Status mpistatus;
+        /* fileview is already entire file visible and MPI_File_read_at does
+           not change the file pointer */
+        TRACE_IO(MPI_File_read_at)(gbp->collective_fh,
+                                   (gbp->offset)-slack, gbp->base,
+                                   gbp->size, MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at");
+            if (err == NC_EFILE) DEBUG_ASSIGN_ERROR(err, NC_EREAD)
+        }
+        else {
+#ifdef _USE_MPI_GET_COUNT
+            int get_size; /* actual read amount can be smaller */
+            MPI_Get_count(&mpistatus, MPI_BYTE, &get_size);
+            gbp->get_size += get_size;
+#else
+            gbp->get_size += gbp->size;
+#endif
+        }
+    }
+    /* we might have to backtrack */
+    gbp->offset += (gbp->size - slack);
+
+    if (gbp->safe_mode == 1) {
+        TRACE_COMM(MPI_Bcast)(&err, 1, MPI_INT, 0, gbp->comm);
+        if (err != NC_NOERR) return err;
+    }
+
+    /* broadcast root's read (full or partial header) to other processes */
+    TRACE_COMM(MPI_Bcast)(gbp->base, gbp->size, MPI_BYTE, 0, gbp->comm);
+
+    return err;
+}
+
+#if 0
+/*----< hdr_check_buffer() >-------------------------------------------------*/
+/* Ensure that 'nextread' bytes are available.  */
+static int
+hdr_check_buffer(bufferinfo *gbp, MPI_Offset nextread)
+{
+    MPI_Aint pos_addr, base_addr;
+
+#ifdef HAVE_MPI_GET_ADDRESS
+    MPI_Get_address(gbp->pos,  &pos_addr);
+    MPI_Get_address(gbp->base, &base_addr);
+#else
+    MPI_Address(gbp->pos,  &pos_addr);
+    MPI_Address(gbp->base, &base_addr);
+#endif
+    if (pos_addr + nextread <= base_addr + gbp->size)
+        return NC_NOERR;
+
+    return hdr_fetch(gbp);
+}
+#endif
+
+/*----< hdr_get_uint32() >---------------------------------------------------*/
+/* in CDF-1 format, all integers are 32-bit
+ * in CDF-2 format, only variable begin (starting file offset) is 64-bit
+ * in CDF-5 format, both variable's begin and size are 64-bit
+ */
+static int
+hdr_get_uint32(bufferinfo *gbp, uint *xp)
+{
+    int err;
+
+    if ((char*)gbp->pos + 4 > (char*)gbp->base + gbp->size) {
+        err = hdr_fetch(gbp);
+        if (err != NC_NOERR) return err;
+    }
+
+    err = ncmpix_get_uint32((const void **)(&gbp->pos), xp);
+    return err;
+}
+
+/*----< hdr_get_uint64() >---------------------------------------------------*/
+/* in CDF-1 format, all integers are 32-bit
+ * in CDF-2 format, only variable begin (starting file offset) is 64-bit
+ * in CDF-5 format, both variable's begin and size are 64-bit
+ */
+static int
+hdr_get_uint64(bufferinfo *gbp, uint64 *xp)
+{
+    int err;
+
+    if ((char*)gbp->pos + 8 > (char*)gbp->base + gbp->size) {
+        err = hdr_fetch(gbp);
+        if (err != NC_NOERR) return err;
+    }
+
+    err = ncmpix_get_uint64((const void **)(&gbp->pos), xp);
+    return err;
+}
+
+/*----< hdr_get_NC_tag() >---------------------------------------------------*/
+/* NC_tag is 32-bit integer and can be the followings:
+ *     ZERO (NC_UNSPECIFIED)
+ *     NC_DIMENSION
+ *     NC_ATTRIBUTE
+ *     NC_VARIABLE
+ */
+static int
+hdr_get_NC_tag(bufferinfo *gbp, NC_tag *tagp)
+{
+    int err;
+    uint type = 0;
+
+    if ((char*)gbp->pos + 4 > (char*)gbp->base + gbp->size) {
+        err = hdr_fetch(gbp);
+        if (err != NC_NOERR) return err;
+    }
+
+    /* get an external unsigned 4-byte integer from the file */
+    err = ncmpix_get_uint32((const void**)(&gbp->pos), &type);
+    if (err != NC_NOERR) return err;
+
+    *tagp = (NC_tag) type;
+    return NC_NOERR;
+}
+
+/*----< hdr_get_nc_type() >--------------------------------------------------*/
+static int
+hdr_get_nc_type(bufferinfo *gbp, nc_type *xtypep)
+{
+    /* nc_type is 4-byte integer */
+    int err;
+    uint xtype;
+
+    if ((char*)gbp->pos + 4 > (char*)gbp->base + gbp->size) {
+        err = hdr_fetch(gbp);
+        if (err != NC_NOERR) return err;
+    }
+
+    err = ncmpix_get_uint32((const void**)(&gbp->pos), &xtype);
+    if (err != NC_NOERR) return err;
+
+    /* check if xtype is within legal ranges of CDF-1/2/5 formats */
+    if (xtype < NC_BYTE)
+        DEBUG_RETURN_ERROR(NC_EBADTYPE)
+
+    if (gbp->version < 5) {
+        if (xtype > NC_DOUBLE)
+            DEBUG_RETURN_ERROR(NC_EBADTYPE)
+    }
+    else if (xtype > NC_UINT64)
+        DEBUG_RETURN_ERROR(NC_EBADTYPE)
+
+    *xtypep = (nc_type) xtype;
+    return NC_NOERR;
+}
+
+/*----< hdr_get_NC_name() >--------------------------------------------------*/
+static int
+hdr_get_NC_name(bufferinfo  *gbp, char **namep)
+{
+    /* netCDF file format:
+     *  ...
+     * name       = nelems  namestring
+     * nelems     = NON_NEG
+     * namestring = ID1 [IDN ...] padding
+     * ID1        = alphanumeric | '_'
+     * IDN        = alphanumeric | special1 | special2
+     * padding    = <0, 1, 2, or 3 bytes to next 4-byte boundary>
+     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
+     *              <non-negative INT64>  // CDF-5
+     */
+    int err, nchars, padding, bufremain, strcount;
+    char *cpos;
+
+    *namep = NULL;
+
+    /* get nelems (string length of name) */
+    if (gbp->version < 5) {
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        if (tmp > NC_MAX_NAME) DEBUG_RETURN_ERROR(NC_EMAXNAME)
+        nchars = (int)tmp;
+    }
+    else {
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        if (tmp > NC_MAX_NAME) DEBUG_RETURN_ERROR(NC_EMAXNAME)
+        nchars = (int)tmp;
+    }
+
+    /* Allocate a NC_string structure large enough to hold nchars characters.
+     * Note nchars is strlen(namestring) without terminal character.
+     */
+    *namep = (char*)NCI_Malloc((size_t)nchars + 1);
+    if (*namep == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    (*namep)[nchars] = '\0'; /* add terminal character */
+
+    /* X_SIZEOF_CHAR is defined as 1 in classical CDF formats
+    padding = _RNDUP(X_SIZEOF_CHAR * nchars, X_ALIGN) - X_SIZEOF_CHAR * nchars;
+    */
+    padding = _RNDUP(nchars, X_ALIGN) - nchars;
+
+#if 0
+    MPI_Aint pos_addr, base_addr;
+#ifdef HAVE_MPI_GET_ADDRESS
+    MPI_Get_address(gbp->pos,  &pos_addr);
+    MPI_Get_address(gbp->base, &base_addr);
+#else
+    MPI_Address(gbp->pos,  &pos_addr);
+    MPI_Address(gbp->base, &base_addr);
+#endif
+    bufremain = gbp->size - (pos_addr - base_addr);
+#endif
+    bufremain = gbp->size - ((char*)gbp->pos - (char*)gbp->base);
+
+    cpos = *namep;
+
+    /* get namestring with padding (the space in file allocated for string
+     * namestring is upward aligned with 4 bytes */
+    while (nchars > 0) {
+        if (bufremain > 0) {
+            strcount = MIN(bufremain, nchars);
+            memcpy(cpos, gbp->pos, (size_t)strcount);
+            nchars -= strcount;
+            gbp->pos = (void *)((char *)gbp->pos + strcount);
+            cpos += strcount;
+            bufremain -= strcount;
+        } else {
+            err = hdr_fetch(gbp);
+            if (err != NC_NOERR) {
+                NCI_Free(*namep);
+                *namep = NULL;
+                return err;
+            }
+            bufremain = gbp->size;
+        }
+    }
+
+    /* handle the padding */
+    if (padding > 0) {
+        /* CDF specification: Header padding uses null (\x00) bytes. */
+        char pad[X_ALIGN-1];
+        memset(pad, 0, X_ALIGN-1);
+        if (memcmp(gbp->pos, pad, (size_t)padding) != 0) {
+#ifdef PNETCDF_DEBUG
+            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header corrupted, non-zero padding found\n",__FILE__,__func__,__LINE__);
+#endif
+            NCI_Free(*namep);
+            *namep = NULL;
+            DEBUG_RETURN_ERROR(NC_ENOTNC)
+        }
+        gbp->pos = (void *)((char *)gbp->pos + padding);
+    }
+
+    return NC_NOERR;
+}
+
+/*----< hdr_get_NC_dim() >---------------------------------------------------*/
+static int
+hdr_get_NC_dim(bufferinfo *gbp, NC_dim **dimpp)
+{
+    /* netCDF file format:
+     *  ...
+     * dim        = name  dim_length
+     * dim_length = NON_NEG
+     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
+     *              <non-negative INT64>  // CDF-5
+     */
+    int err;
+    char *name;
+    NC_dim *dimp;
+    MPI_Offset dim_length;
+
+    *dimpp = NULL;
+
+    /* get name */
+    err = hdr_get_NC_name(gbp, &name);
+    if (err != NC_NOERR) return err;
+
+    /* get dim_length */
+    if (gbp->version < 5) {
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        dim_length = (MPI_Offset)tmp;
+    }
+    else {
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        dim_length = (MPI_Offset)tmp;
+    }
+    if (err != NC_NOERR) { /* frees dim */
+        NCI_Free(name);
+        return err;
+    }
+
+    /* allocate and initialize NC_dim object */
+    dimp = (NC_dim*) NCI_Malloc(sizeof(NC_dim));
+    if (dimp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    dimp->name     = name;
+    dimp->name_len = strlen(name);
+    dimp->size     = dim_length;
+
+    *dimpp = dimp;
+    return NC_NOERR;
+}
+
+/*----< hdr_get_NC_dimarray() >----------------------------------------------*/
+/* For CDF-5 format, nelems (number of dimensions) is of type non-negative
+ * INT64. However, argument ndims/dimid in all PnetCDF/NetCDF APIs are of type
+ * int. Thus, we only need to use type int for internal metadata, ndefined. If
+ * nelems in the input file is more than NC_MAX_DIMS, then it violates the
+ * format specifications (NC_EMAXDIMS).
+ */
+static int
+hdr_get_NC_dimarray(bufferinfo *gbp, NC_dimarray *ncap)
+{
+    /* netCDF file format:
+     *  ...
+     * dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
+     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *                ZERO  ZERO64  // for CDF-5
+     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_DIMENSION = \x00 \x00 \x00 \x0A         // tag for list of dimensions
+     * nelems       = NON_NEG       // number of elements in following sequence
+     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
+     *                <non-negative INT64>        // CDF-5
+     */
+    int i, err, ndefined=0;
+    size_t alloc_size;
+    NC_tag tag = NC_UNSPECIFIED;
+
+    assert(gbp != NULL && gbp->pos != NULL);
+    assert(ncap != NULL);
+    assert(ncap->value == NULL);
+
+    /* read NC_tag (NC_DIMENSION or ZERO) from gbp buffer */
+    err = hdr_get_NC_tag(gbp, &tag);
+    if (err != NC_NOERR) return err;
+
+    /* read nelems (number of dimensions) from gbp buffer */
+    if (gbp->version < 5) { /* nelems is <non-negative INT> */
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        /* cannot be more than max number of dimensions */
+        if (tmp > NC_MAX_DIMS) DEBUG_RETURN_ERROR(NC_EMAXDIMS)
+        ndefined = (int)tmp;
+    }
+    else { /* nelems is <non-negative INT64> */
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        /* cannot be more than max number of dimensions */
+        if (tmp > NC_MAX_DIMS) DEBUG_RETURN_ERROR(NC_EMAXDIMS)
+        ndefined = (int)tmp;
+    }
+
+    /* Now ndefined is in between 0 and NC_MAX_DIMS */
+    ncap->ndefined = ndefined;
+
+    ncap->unlimited_id = -1;
+
+    /* From the CDF file format specification, the tag is either NC_DIMENSION
+     * or ABSENT (ZERO), but we follow NetCDF library to skip checking the tag
+     * when ndefined is zero.
+     */
+    if (ndefined == 0) return NC_NOERR;
+
+    /* Now, ndefined > 0, tag must be NC_DIMENSION */
+    if (tag != NC_DIMENSION) {
+#ifdef PNETCDF_DEBUG
+        fprintf(stderr,"Error in file %s func %s line %d: NetCDF header corrupted, expecting tag NC_DIMENSION but got %d\n",__FILE__,__func__,__LINE__,tag);
+#endif
+        DEBUG_RETURN_ERROR(NC_ENOTNC)
+    }
+
+    alloc_size = _RNDUP(ncap->ndefined, NC_ARRAY_GROWBY);
+    ncap->value = (NC_dim**) NCI_Calloc(alloc_size, sizeof(NC_dim*));
+    if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    for (i=0; i<ndefined; i++) {
+        err = hdr_get_NC_dim(gbp, ncap->value + i);
+        if (err != NC_NOERR) { /* error: fail to get the next dim */
+            ncmpio_free_NC_dimarray(ncap);
+            return err;
+        }
+        if (ncap->value[i]->size == NC_UNLIMITED)
+            ncap->unlimited_id = i; /* ID of unlimited dimension */
+    }
+
+    return NC_NOERR;
+}
+
+/*----< hdr_get_NC_attrV() >-------------------------------------------------*/
+static int
+hdr_get_NC_attrV(bufferinfo *gbp, NC_attr *attrp)
+{
+    /* netCDF file format:
+     *  ...
+     * attr    = name  nc_type  nelems  [values ...]
+     *  ...
+     * values  = bytes | chars | shorts | ints | floats | doubles
+     * bytes   = [BYTE ...]  padding
+     * chars   = [CHAR ...]  padding
+     * shorts  = [SHORT ...]  padding
+     * ints    = [INT ...]
+     * floats  = [FLOAT ...]
+     * doubles = [DOUBLE ...]
+     * padding = <0, 1, 2, or 3 bytes to next 4-byte boundary>
+     */
+    int xsz, padding, bufremain;
+    void *value = attrp->xvalue;
+    MPI_Offset nbytes;
+
+    ncmpii_xlen_nc_type(attrp->xtype, &xsz);
+    nbytes = attrp->nelems * xsz;
+    padding = attrp->xsz - nbytes;
+
+#if 0
+    MPI_Aint pos_addr, base_addr;
+#ifdef HAVE_MPI_GET_ADDRESS
+    MPI_Get_address(gbp->pos,  &pos_addr);
+    MPI_Get_address(gbp->base, &base_addr);
+#else
+    MPI_Address(gbp->pos,  &pos_addr);
+    MPI_Address(gbp->base, &base_addr);
+#endif
+    bufremain = gbp->size - (pos_addr - base_addr);
+#endif
+    bufremain = gbp->size - ((char*)gbp->pos - (char*)gbp->base);
+    /* gbp->size is the read chunk size, which is of type 4-byte int.
+     * thus bufremain should be less than INT_MAX */
+
+    /* get values */
+    while (nbytes > 0) {
+        if (bufremain > 0) {
+            int attcount = MIN(nbytes, bufremain);
+            memcpy(value, gbp->pos, attcount);
+            nbytes -= attcount;
+            gbp->pos = (void *)((char *)gbp->pos + attcount);
+            value = (void *)((char *)value + attcount);
+            bufremain -= attcount;
+        } else {
+            int err;
+            err = hdr_fetch(gbp);
+            if (err != NC_NOERR) return err;
+            bufremain = gbp->size;
+        }
+    }
+
+    /* handle the padding */
+    if (padding > 0) {
+        /* CDF specification: Header padding uses null (\x00) bytes. */
+        char pad[X_ALIGN-1];
+        memset(pad, 0, X_ALIGN-1);
+        if (memcmp(gbp->pos, pad, (size_t)padding) != 0) {
+#ifdef PNETCDF_DEBUG
+            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header corrupted, non-zero padding found\n",__FILE__,__func__,__LINE__);
+#endif
+            DEBUG_RETURN_ERROR(NC_ENOTNC)
+        }
+        gbp->pos = (void *)((char *)gbp->pos + padding);
+    }
+    return NC_NOERR;
+}
+
+/*----< hdr_get_NC_attr() >--------------------------------------------------*/
+static int
+hdr_get_NC_attr(bufferinfo *gbp, NC_attr **attrpp)
+{
+    /* netCDF file format:
+     *  ...
+     * attr    = name  nc_type  nelems  [values ...]
+     * nc_type = NC_BYTE | NC_CHAR | NC_SHORT | ...
+     * nelems  = NON_NEG       // number of elements in following sequence
+     * NON_NEG = <non-negative INT> |  // CDF-1 and CDF-2
+     *           <non-negative INT64>  // CDF-5
+     */
+    int err;
+    char *name;
+    nc_type type;
+    MPI_Offset nelems;
+    NC_attr *attrp;
+
+    /* get name */
+    err = hdr_get_NC_name(gbp, &name);
+    if (err != NC_NOERR) return err;
+
+    /* get nc_type */
+    err = hdr_get_nc_type(gbp, &type);
+    if (err != NC_NOERR) return err;
+
+    /* get nelems */
+    if (gbp->version < 5) {
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        nelems = (MPI_Offset)tmp;
+    }
+    else {
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        nelems = (MPI_Offset)tmp;
+    }
+    if (err != NC_NOERR) return err;
+
+    /* allocate space for attribute object */
+    err = ncmpio_new_NC_attr(name, type, nelems, &attrp);
+    if (err != NC_NOERR) {
+        NCI_Free(name);
+        return err;
+    }
+
+    /* get [values ...] */
+    err = hdr_get_NC_attrV(gbp, attrp);
+    if (err != NC_NOERR) {
+        ncmpio_free_NC_attr(attrp);
+        NCI_Free(attrp);
+        return err;
+    }
+
+    *attrpp = attrp;
+    return NC_NOERR;
+}
+
+/*----< hdr_get_NC_attrarray() >---------------------------------------------*/
+/* For CDF-5 format, nelems (number of attributes) is of type non-negative
+ * INT64. However, argument nattrs in all PnetCDF/NetCDF APIs are of type int.
+ * Thus, we only need to use type int for internal metadata, ndefined. If
+ * nelems in the input file is more than NC_MAX_ATTRS, then it violates the
+ * format specifications (NC_EMAXATTS).
+ */
+static int
+hdr_get_NC_attrarray(bufferinfo *gbp, NC_attrarray *ncap)
+{
+    /* netCDF file format:
+     *  ...
+     * att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
+     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *                ZERO  ZERO64  // for CDF-5
+     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_ATTRIBUTE = \x00 \x00 \x00 \x0C         // tag for list of attributes
+     * nelems       = NON_NEG       // number of elements in following sequence
+     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
+     *                <non-negative INT64>        // CDF-5
+     */
+    int i, err, ndefined=0;
+    size_t alloc_size;
+    NC_tag tag = NC_UNSPECIFIED;
+
+    assert(gbp != NULL && gbp->pos != NULL);
+    assert(ncap != NULL);
+    assert(ncap->value == NULL);
+
+    /* read NC_tag (NC_ATTRIBUTE or ZERO) from gbp buffer */
+    err = hdr_get_NC_tag(gbp, &tag);
+    if (err != NC_NOERR) return err;
+
+    /* read nelems (number of attributes) from gbp buffer */
+    if (gbp->version < 5) { /* nelems is <non-negative INT> */
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        /* cannot be more than max number of attributes */
+        if (tmp > NC_MAX_ATTRS) DEBUG_RETURN_ERROR(NC_EMAXATTS)
+        ndefined = (int)tmp;
+    }
+    else { /* nelems is <non-negative INT64> */
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        /* cannot be more than max number of attributes */
+        if (tmp > NC_MAX_ATTRS) DEBUG_RETURN_ERROR(NC_EMAXATTS)
+        ndefined = (int)tmp;
+    }
+
+    /* Now ndefined is in between 0 and NC_MAX_ATTRS */
+    ncap->ndefined = ndefined;
+
+    /* From the CDF file format specification, the tag is either NC_ATTRIBUTE
+     * or ABSENT (ZERO), but we follow NetCDF library to skip checking the tag
+     * when ndefined is zero.
+     */
+    if (ndefined == 0) return NC_NOERR;
+
+    /* Now, ndefined > 0, tag must be NC_ATTRIBUTE */
+    if (tag != NC_ATTRIBUTE) {
+#ifdef PNETCDF_DEBUG
+        fprintf(stderr,"Error in file %s func %s line %d: NetCDF header corrupted, expecting tag NC_ATTRIBUTE but got %d\n",__FILE__,__func__,__LINE__,tag);
+#endif
+        DEBUG_RETURN_ERROR(NC_ENOTNC)
+    }
+
+    alloc_size = _RNDUP(ncap->ndefined, NC_ARRAY_GROWBY);
+    ncap->value = (NC_attr**)NCI_Calloc(alloc_size, sizeof(NC_attr*));
+    if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    /* get [attr ...] */
+    for (i=0; i<ndefined; i++) {
+        err = hdr_get_NC_attr(gbp, ncap->value + i);
+        if (err != NC_NOERR) { /* Error: fail to get the next att */
+            ncmpio_free_NC_attrarray(ncap);
+            return err;
+        }
+    }
+
+    return NC_NOERR;
+}
+
+/*----< hdr_get_NC_var() >---------------------------------------------------*/
+static int
+hdr_get_NC_var(bufferinfo  *gbp,
+               NC_var     **varpp,
+               int          f_ndims) /* no. dimensions defined in file */
+{
+    /* netCDF file format:
+     * netcdf_file = header data
+     * header      = magic numrecs dim_list gatt_list var_list
+     *  ...
+     * var         = name nelems [dimid ...] vatt_list nc_type vsize begin
+     * nelems      = NON_NEG
+     * dimid       = NON_NEG
+     * vatt_list   = att_list
+     * nc_type     = NC_BYTE | NC_CHAR | NC_SHORT | ...
+     * vsize       = NON_NEG
+     * begin       = OFFSET        // Variable start location.
+     * OFFSET      = <non-negative INT> |  // CDF-1
+     *               <non-negative INT64>  // CDF-2 and CDF-5
+     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
+     *               <non-negative INT64>  // CDF-5
+     */
+    int dim, ndims, err;
+    char *name;
+    NC_var *varp;
+
+    /* get name */
+    err = hdr_get_NC_name(gbp, &name);
+    if (err != NC_NOERR) return err;
+
+    /* nelems (number of dimensions) */
+    if (gbp->version < 5) {
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        /* cannot be more than NC_MAX_VAR_DIMS */
+        if (tmp > NC_MAX_VAR_DIMS) DEBUG_RETURN_ERROR(NC_EMAXDIMS)
+        ndims = (int)tmp;
+    }
+    else {
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        /* cannot be more than NC_MAX_VAR_DIMS */
+        if (tmp > NC_MAX_VAR_DIMS) DEBUG_RETURN_ERROR(NC_EMAXDIMS)
+        ndims = (int)tmp;
+    }
+
+    /* allocate space for NC_var object */
+    varp = ncmpio_new_NC_var(name, ndims);
+    if (varp == NULL) {
+        NCI_Free(name);
+        DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+
+    /* get [dimid ...] */
+    for (dim=0; dim<ndims; dim++) {
+        if (gbp->version < 5) {
+            uint tmp;
+            err = hdr_get_uint32(gbp, &tmp);
+            if (err != NC_NOERR) break;
+            /* dimid should be < f_ndims (num of dimensions defined in file) */
+            if (tmp >= f_ndims) {
+                DEBUG_ASSIGN_ERROR(err, NC_EBADDIM)
+                goto fn_exit;
+            }
+            varp->dimids[dim] = (int)tmp;
+        }
+        else {
+            uint64 tmp;
+            err = hdr_get_uint64(gbp, &tmp);
+            if (err != NC_NOERR) break;
+            /* dimid should be < f_ndims (num of dimensions defined in file) */
+            if (tmp >= f_ndims) {
+                DEBUG_ASSIGN_ERROR(err, NC_EBADDIM)
+                goto fn_exit;
+            }
+            varp->dimids[dim] = (int)tmp;
+        }
+    }
+
+    /* get vatt_list */
+    err = hdr_get_NC_attrarray(gbp, &varp->attrs);
+    if (err != NC_NOERR) goto fn_exit;
+
+    /* get nc_type */
+    err = hdr_get_nc_type(gbp, &varp->xtype);
+    if (err != NC_NOERR) goto fn_exit;
+
+    ncmpii_xlen_nc_type(varp->xtype, &varp->xsz);
+
+    /* get vsize */
+    if (gbp->version < 5) {
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        varp->len = (MPI_Offset)tmp;
+    }
+    else {
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        varp->len = (MPI_Offset)tmp;
+    }
+    if (err != NC_NOERR) goto fn_exit;
+
+    /* As described in CDF-2 format specification, vsize is redundant.
+       Its value may be computed from the product of dimension lengths.
+       In CDF-2, vsize is a 4-byte integer. So, if we define a variable of
+       less than 2^32 elements but size > 2^32-4 bytes, then vsize in CDF-2
+       will overflow. Recompute varp->len can ignore an overflowed value in
+       vsize stored in the file and hence bypass the limitation of CDF-2 on
+       variable size of 2^32-4 bytes.
+
+       Later on, back to ncmpio_hdr_get_NC(), compute_var_shape() is
+       called which recomputes varp->len using the dimension values and hence
+       overwrites the value read from file above.
+
+       In summary, PnetCDF now ignores the value of vsize stored in the file
+       header. Its value will be recalculated immediately after read from file.
+     */
+
+    /* get begin */
+    if (gbp->version == 1) {
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        varp->begin = (MPI_Offset)tmp;
+    }
+    else {
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        varp->begin = (MPI_Offset)tmp;
+    }
+
+fn_exit:
+    if (err != NC_NOERR)
+        ncmpio_free_NC_var(varp);
+    else
+        *varpp = varp;
+
+    return err;
+}
+
+/*----< hdr_get_NC_vararray() >----------------------------------------------*/
+/* For CDF-5 format, nelems (number of variables) is of type non-negative
+ * INT64. However, argument nvars/varid in all PnetCDF/NetCDF APIs are of type
+ * int. Thus, we only need to use type int for internal metadata, ndefined. If
+ * nelems in the input file is more than NC_MAX_VARS, then it violates the
+ * format specifications (NC_EMAXVARS).
+ */
+static int
+hdr_get_NC_vararray(bufferinfo  *gbp,
+                    NC_vararray *ncap,
+                    int          f_ndims) /* no. dimensions defined in file */
+{
+    /* netCDF file format:
+     * netcdf_file = header  data
+     * header      = magic  numrecs  dim_list  gatt_list  var_list
+     *  ...
+     * var_list    = ABSENT | NC_VARIABLE   nelems  [var ...]
+     * ABSENT      = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *               ZERO  ZERO64  // for CDF-5
+     * ZERO        = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64      = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_VARIABLE = \x00 \x00 \x00 \x0B         // tag for list of variables
+     * nelems      = NON_NEG       // number of elements in following sequence
+     * NON_NEG     = <non-negative INT> |        // CDF-1 and CDF-2
+     *               <non-negative INT64>        // CDF-5
+     */
+    int i, err, ndefined=0;
+    size_t alloc_size;
+    NC_tag tag = NC_UNSPECIFIED;
+
+    assert(gbp != NULL && gbp->pos != NULL);
+    assert(ncap != NULL);
+    assert(ncap->value == NULL);
+
+    /* read NC_tag (NC_VARIABLE or ZERO) from gbp buffer */
+    err = hdr_get_NC_tag(gbp, &tag);
+    if (err != NC_NOERR) return err;
+
+    /* read nelems (number of variables) from gbp buffer */
+    if (gbp->version < 5) { /* nelems is <non-negative INT> */
+        uint tmp;
+        err = hdr_get_uint32(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        /* cannot be more than max number of attributes */
+        if (tmp > NC_MAX_VARS) DEBUG_RETURN_ERROR(NC_EMAXVARS)
+        ndefined = (int)tmp;
+    }
+    else { /* nelems is <non-negative INT64> */
+        uint64 tmp;
+        err = hdr_get_uint64(gbp, &tmp);
+        if (err != NC_NOERR) return err;
+        /* cannot be more than max number of attributes */
+        if (tmp > NC_MAX_VARS) DEBUG_RETURN_ERROR(NC_EMAXVARS)
+        ndefined = (int)tmp;
+    }
+
+    /* Now ndefined is in between 0 and NC_MAX_VARS */
+    ncap->ndefined = ndefined;
+
+    /* From the CDF file format specification, the tag is either NC_VARIABLE
+     * or ABSENT (ZERO), but we follow NetCDF library to skip checking the tag
+     * when ndefined is zero.
+     */
+    if (ndefined == 0) return NC_NOERR;
+
+    /* Now, ndefined > 0, tag must be NC_VARIABLE */
+    if (tag != NC_VARIABLE) {
+#ifdef PNETCDF_DEBUG
+        fprintf(stderr,"Error in file %s func %s line %d: NetCDF header corrupted, expecting tag NC_VARIABLE but got %d\n",__FILE__,__func__,__LINE__,tag);
+#endif
+        DEBUG_RETURN_ERROR(NC_ENOTNC)
+    }
+
+    alloc_size = _RNDUP(ncap->ndefined, NC_ARRAY_GROWBY);
+    ncap->value = (NC_var**) NCI_Calloc(alloc_size, sizeof(NC_var*));
+    if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    /* get [var ...] */
+    for (i=0; i<ndefined; i++) {
+        err = hdr_get_NC_var(gbp, ncap->value + i, f_ndims);
+        if (err != NC_NOERR) { /* Error: fail to get the next var */
+            ncmpio_free_NC_vararray(ncap);
+            return err;
+        }
+        ncap->value[i]->varid = i;
+    }
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_hdr_len_NC() >------------------------------------------------*/
+MPI_Offset
+ncmpio_hdr_len_NC(const NC *ncp)
+{
+    /* netCDF file format:
+     * netcdf_file = header  data
+     * header      = magic  numrecs  dim_list  gatt_list  var_list
+     *  ...
+     * numrecs     = NON_NEG | STREAMING   // length of record dimension
+     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
+     *               <non-negative INT64>  // CDF-5
+     */
+
+    int sizeof_NON_NEG, sizeof_off_t;
+    MPI_Offset xlen;
+
+    assert(ncp != NULL);
+
+    if (ncp->format == 5) {        /* CDF-5 */
+        sizeof_NON_NEG = X_SIZEOF_INT64; /* 8-byte integer for all integers */
+        sizeof_off_t   = X_SIZEOF_INT64; /* 8-byte integer for var begin */
+    }
+    else if (ncp->format == 2) { /* CDF-2 */
+        sizeof_NON_NEG = X_SIZEOF_INT; /* 4-byte integer in CDF-1 */
+        sizeof_off_t   = X_SIZEOF_INT64; /* 8-byte integer for var begin */
+    }
+    else { /* CDF-1 */
+        sizeof_NON_NEG = X_SIZEOF_INT; /* 4-byte integer in CDF-1 */
+        sizeof_off_t   = X_SIZEOF_INT; /* 4-byte integer in CDF-1 */
+    }
+
+    xlen  = NC_MAGIC_LEN;                                                    /* magic */
+    xlen += sizeof_NON_NEG;                                                  /* numrecs */
+    xlen += hdr_len_NC_dimarray(&ncp->dims,   sizeof_NON_NEG);               /* dim_list */
+    xlen += hdr_len_NC_attrarray(&ncp->attrs, sizeof_NON_NEG);               /* gatt_list */
+    xlen += hdr_len_NC_vararray(&ncp->vars,   sizeof_NON_NEG, sizeof_off_t); /* var_list */
+
+    return xlen; /* return the header size (not yet aligned) */
+}
+
+/*----< ncmpio_hdr_get_NC() >------------------------------------------------*/
+/*  CDF format specification
+ *      netcdf_file  = header  data
+ *      header       = magic  numrecs  dim_list  gatt_list  var_list
+ *      magic        = 'C'  'D'  'F'  VERSION
+ *      VERSION      = \x01 |                      // classic format
+ *                     \x02 |                      // 64-bit offset format
+ *                     \x05                        // 64-bit data format
+ *      numrecs      = NON_NEG | STREAMING         // length of record dimension
+ *      dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
+ *      gatt_list    = att_list                    // global attributes
+ *      att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
+ *      var_list     = ABSENT | NC_VARIABLE   nelems  [var ...]
+ */
+int
+ncmpio_hdr_get_NC(NC *ncp)
+{
+    int err;
+    bufferinfo getbuf;
+    char magic[NC_MAGIC_LEN];
+
+    assert(ncp != NULL);
+
+    /* Initialize the get buffer that stores the header read from the file */
+    getbuf.comm          = ncp->comm;
+    getbuf.collective_fh = ncp->collective_fh;
+    getbuf.get_size      = 0;
+    getbuf.offset        = 0;   /* read from start of the file */
+    getbuf.safe_mode     = ncp->safe_mode;
+
+    /* CDF-5's minimum header size is 4 bytes more than CDF-1 and CDF-2's */
+    getbuf.size = _RNDUP( MAX(MIN_NC_XSZ+4, ncp->chunk), X_ALIGN );
+
+    getbuf.base = (void *)NCI_Malloc((size_t)getbuf.size);
+    getbuf.pos  = getbuf.base;
+
+    /* Fetch the next header chunk. The chunk is 'gbp->size' bytes big */
+    err = hdr_fetch(&getbuf);
+    if (err != NC_NOERR) return err;
+
+    /* processing the header from getbuf, the get buffer */
+
+    /* First get the file format information, magic */
+    err = ncmpix_getn_text((const void**)(&getbuf.pos), NC_MAGIC_LEN, magic);
+    if (err != NC_NOERR) return err;
+
+    /* check if the first three bytes are 'C','D','F' */
+    if (memcmp(magic, "CDF", 3) != 0) {
+        /* check if is HDF5 file */
+        char signature[8], *hdf5_signature="\211HDF\r\n\032\n";
+        ncmpix_getn_text((const void**)(&getbuf.pos), 8, signature);
+        if (memcmp(signature, hdf5_signature, 8) == 0) {
+            DEBUG_ASSIGN_ERROR(err, NC_ENOTNC3)
+            if (ncp->safe_mode)
+                fprintf(stderr,"Error: file %s is HDF5 format\n",ncp->path);
+        }
+        else
+            DEBUG_ASSIGN_ERROR(err, NC_ENOTNC)
+        goto fn_exit;
+    }
+
+    /* check version number in last byte of magic */
+    if (magic[3] == 0x1) {
+        getbuf.version = ncp->format = 1;
+    } else if (magic[3] == 0x2) {
+        getbuf.version = ncp->format = 2;
+#if SIZEOF_MPI_OFFSET < 8
+        /* take the easy way out: if we can't support all CDF-2
+         * files, return immediately */
+        NCI_Free(getbuf.base);
+        DEBUG_RETURN_ERROR(NC_ESMALL)
+#endif
+    } else if (magic[3] == 0x5) {
+        getbuf.version = ncp->format = 5;
+#if SIZEOF_MPI_OFFSET < 8
+        NCI_Free(getbuf.base);
+        DEBUG_RETURN_ERROR(NC_ESMALL)
+#endif
+    } else {
+        NCI_Free(getbuf.base);
+        DEBUG_RETURN_ERROR(NC_ENOTNC) /* not a netCDF file */
+    }
+
+    /* get numrecs from getbuf into ncp */
+    if (getbuf.version < 5) {
+        uint tmp=0;
+        err = hdr_get_uint32(&getbuf, &tmp);
+        if (err != NC_NOERR) goto fn_exit;
+        ncp->numrecs = (MPI_Offset)tmp;
+    }
+    else {
+        uint64 tmp=0;
+        err = hdr_get_uint64(&getbuf, &tmp);
+        if (err != NC_NOERR) goto fn_exit;
+        ncp->numrecs = (MPI_Offset)tmp;
+    }
+
+#if 0
+    MPI_Aint pos_addr, base_addr;
+#ifdef HAVE_MPI_GET_ADDRESS
+    MPI_Get_address(getbuf.pos,  &pos_addr);
+    MPI_Get_address(getbuf.base, &base_addr);
+#else
+    MPI_Address(getbuf.pos,  &pos_addr);
+    MPI_Address(getbuf.base, &base_addr);
+#endif
+    assert(pos_addr < base_addr + getbuf.size);
+#endif
+    assert((char*)getbuf.pos < (char*)getbuf.base + getbuf.size);
+
+    /* get dim_list from getbuf into ncp */
+    err = hdr_get_NC_dimarray(&getbuf, &ncp->dims);
+    if (err != NC_NOERR) goto fn_exit;
+
+    /* get gatt_list from getbuf into ncp */
+    err = hdr_get_NC_attrarray(&getbuf, &ncp->attrs);
+    if (err != NC_NOERR) goto fn_exit;
+
+    /* get var_list from getbuf into ncp */
+    err = hdr_get_NC_vararray(&getbuf, &ncp->vars, ncp->dims.ndefined);
+    if (err != NC_NOERR) goto fn_exit;
+
+    /* get the un-aligned size occupied by the file header */
+    ncp->xsz = ncmpio_hdr_len_NC(ncp);
+
+    /* Recompute the shapes of all variables (shape, xsz, len)
+     * Sets ncp->begin_var to start of first variable.
+     * Sets ncp->begin_rec to start of first record variable.
+     */
+    err = compute_var_shape(ncp);
+    if (err != NC_NOERR) goto fn_exit;
+
+    /* Check whether variable sizes are legal for the given file format */
+    err = ncmpio_NC_check_vlens(ncp);
+    if (err != NC_NOERR) goto fn_exit;
+
+    /* Check whether variable begins are in an increasing order.
+     * Adding this check here is necessary for detecting corrupted metadata. */
+    err = ncmpio_NC_check_voffs(ncp);
+    if (err != NC_NOERR) goto fn_exit;
+
+fn_exit:
+    ncp->get_size += getbuf.get_size;
+    NCI_Free(getbuf.base);
+
+    return err;
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_header_put.c b/src/drivers/ncmpio/ncmpio_header_put.c
new file mode 100644
index 0000000..de1c52b
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_header_put.c
@@ -0,0 +1,590 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_header_put.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <assert.h>
+#include <string.h>  /* memcpy() */
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
+
+/*
+ * "magic number" at beginning of file: 0x43444601 (big endian)
+ */
+static const char ncmagic1[] = {'C', 'D', 'F', 0x01};
+static const char ncmagic2[] = {'C', 'D', 'F', 0x02};
+static const char ncmagic5[] = {'C', 'D', 'F', 0x05};
+
+/*----< hdr_put_NC_name() >--------------------------------------------------*/
+inline static int
+hdr_put_NC_name(bufferinfo *pbp,
+                const char *name)
+{
+    /* netCDF file format:
+     *  ...
+     * name       = nelems  namestring
+     * nelems     = NON_NEG
+     * namestring = ID1 [IDN ...] padding
+     * ID1        = alphanumeric | '_'
+     * IDN        = alphanumeric | special1 | special2
+     * padding    = <0, 1, 2, or 3 bytes to next 4-byte boundary>
+     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
+     *              <non-negative INT64>  // CDF-5
+     */
+    int err;
+    size_t nchars = strlen(name);
+
+    /* copy nelems */
+    if (pbp->version < 5)
+        err = ncmpix_put_uint32((void**)(&pbp->pos), (uint)nchars);
+    else
+        err = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)nchars);
+    if (err != NC_NOERR) return err;
+
+    /* copy namestring */
+    return ncmpix_pad_putn_text(&pbp->pos, (MPI_Offset)nchars, name);
+}
+
+/*----< hdr_put_NC_dim() >---------------------------------------------------*/
+inline static int
+hdr_put_NC_dim(bufferinfo   *pbp,
+               const NC_dim *dimp)
+{
+    /* netCDF file format:
+     *  ...
+     * dim        = name  dim_length
+     * dim_length = NON_NEG
+     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
+     *              <non-negative INT64>  // CDF-5
+     */
+    int err;
+
+    /* copy name */
+    err = hdr_put_NC_name(pbp, dimp->name);
+    if (err != NC_NOERR) return err;
+
+    /* copy dim_length */
+    if (pbp->version < 5) {
+        /* TODO: Isn't checking dimension size already done in def_dim()? */
+        if (dimp->size != (uint)dimp->size) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+        err = ncmpix_put_uint32((void**)(&pbp->pos), (uint)dimp->size);
+    }
+    else
+        err = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)dimp->size);
+
+    return err;
+}
+
+/*----< hdr_put_NC_dimarray() >----------------------------------------------*/
+inline static int
+hdr_put_NC_dimarray(bufferinfo        *pbp,
+                    const NC_dimarray *ncap)
+{
+    /* netCDF file format:
+     *  ...
+     * dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
+     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *                ZERO  ZERO64  // for CDF-5
+     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_DIMENSION = \x00 \x00 \x00 \x0A         // tag for list of dimensions
+     * nelems       = NON_NEG       // number of elements in following sequence
+     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
+     *                <non-negative INT64>        // CDF-5
+     */
+    int i, status;
+
+    assert(pbp != NULL);
+
+    if (ncap == NULL || ncap->ndefined == 0) { /* ABSENT */
+        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_UNSPECIFIED);
+        if (status != NC_NOERR) return status;
+
+        /* put a ZERO or ZERO64 depending on which CDF format */
+        if (pbp->version < 5)
+            status = ncmpix_put_uint32((void**)(&pbp->pos), 0);
+        else
+            status = ncmpix_put_uint64((void**)(&pbp->pos), 0);
+        if (status != NC_NOERR) return status;
+    }
+    else {
+        /* copy NC_DIMENSION */
+        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_DIMENSION);
+        if (status != NC_NOERR) return status;
+
+        /* copy nelems */
+        if (pbp->version < 5)
+            status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)ncap->ndefined);
+        else
+            status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)ncap->ndefined);
+        if (status != NC_NOERR) return status;
+
+        /* copy [dim ...] */
+        for (i=0; i<ncap->ndefined; i++) {
+            status = hdr_put_NC_dim(pbp, ncap->value[i]);
+            if (status != NC_NOERR) return status;
+        }
+    }
+
+    return NC_NOERR;
+}
+
+/*----< hdr_put_NC_attrV() >-------------------------------------------------*/
+/*
+ * Put the values of an attribute
+ */
+inline static int
+hdr_put_NC_attrV(bufferinfo    *pbp,
+                 const NC_attr *attrp)
+{
+    /* netCDF file format:
+     *  ...
+     * attr    = name  nc_type  nelems  [values ...]
+     *  ...
+     * values  = bytes | chars | shorts | ints | floats | doubles
+     * bytes   = [BYTE ...]  padding
+     * chars   = [CHAR ...]  padding
+     * shorts  = [SHORT ...]  padding
+     * ints    = [INT ...]
+     * floats  = [FLOAT ...]
+     * doubles = [DOUBLE ...]
+     * padding = <0, 1, 2, or 3 bytes to next 4-byte boundary>
+     */
+    int xsz;
+    MPI_Offset padding, sz;
+
+    /* ncmpii_xlen_nc_type() returns the element size (unaligned) of
+     * attrp->xtype attrp->xsz is the aligned total size of attribute values
+     */
+    ncmpii_xlen_nc_type(attrp->xtype, &xsz);
+    sz = attrp->nelems * xsz;
+    padding = attrp->xsz - sz;
+
+    if (sz != (size_t) sz) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+    memcpy(pbp->pos, attrp->xvalue, (size_t)sz);
+    pbp->pos = (void *)((char *)pbp->pos + sz);
+
+    if (padding > 0) {
+        /* zero-padding is per buffer, not per element */
+        memset(pbp->pos, 0, (size_t)padding);
+        pbp->pos = (void *)((char *)pbp->pos + padding);
+    }
+
+    return NC_NOERR;
+}
+
+/*----< hdr_put_NC_attr() >--------------------------------------------------*/
+inline static int
+hdr_put_NC_attr(bufferinfo    *pbp,
+                const NC_attr *attrp)
+{
+    /* netCDF file format:
+     *  ...
+     * attr    = name  nc_type  nelems  [values ...]
+     * nc_type = NC_BYTE | NC_CHAR | NC_SHORT | ...
+     * nelems  = NON_NEG       // number of elements in following sequence
+     * NON_NEG = <non-negative INT> |  // CDF-1 and CDF-2
+     *           <non-negative INT64>  // CDF-5
+     */
+    int status;
+
+    /* copy name */
+    status = hdr_put_NC_name(pbp, attrp->name);
+    if (status != NC_NOERR) return status;
+
+    /* copy nc_type */
+    status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)attrp->xtype);
+    if (status != NC_NOERR) return status;
+
+    /* copy nelems */
+    if (pbp->version < 5) {
+        if (attrp->nelems != (uint)attrp->nelems)
+            DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+        status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)attrp->nelems);
+    }
+    else
+        status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)attrp->nelems);
+    if (status != NC_NOERR) return status;
+
+    /* copy [values ...] */
+    status = hdr_put_NC_attrV(pbp, attrp);
+    if (status != NC_NOERR) return status;
+
+    return NC_NOERR;
+}
+
+/*----< hdr_put_NC_attrarray() >---------------------------------------------*/
+inline static int
+hdr_put_NC_attrarray(bufferinfo         *pbp,
+                     const NC_attrarray *ncap)
+{
+    /* netCDF file format:
+     *  ...
+     * att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
+     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *                ZERO  ZERO64  // for CDF-5
+     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_ATTRIBUTE = \x00 \x00 \x00 \x0C         // tag for list of attributes
+     * nelems       = NON_NEG       // number of elements in following sequence
+     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
+     *                <non-negative INT64>        // CDF-5
+     */
+    int i, status;
+
+    assert(pbp != NULL);
+
+    if (ncap == NULL || ncap->ndefined == 0) { /* ABSENT */
+        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_UNSPECIFIED);
+        if (status != NC_NOERR) return status;
+
+        /* put a ZERO or ZERO64 depending on which CDF format */
+        if (pbp->version < 5)
+            status = ncmpix_put_uint32((void**)(&pbp->pos), 0);
+        else
+            status = ncmpix_put_uint64((void**)(&pbp->pos), 0);
+        if (status != NC_NOERR) return status;
+    }
+    else {
+        /* copy NC_ATTRIBUTE */
+        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_ATTRIBUTE);
+        if (status != NC_NOERR) return status;
+
+        /* copy nelems */
+        if (pbp->version < 5)
+            status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)ncap->ndefined);
+        else
+            status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)ncap->ndefined);
+        if (status != NC_NOERR) return status;
+
+        /* copy [attr ...] */
+        for (i=0; i<ncap->ndefined; i++) {
+            status = hdr_put_NC_attr(pbp, ncap->value[i]);
+            if (status != NC_NOERR) return status;
+        }
+    }
+
+    return NC_NOERR;
+}
+
+/*----< hdr_put_NC_var() >---------------------------------------------------*/
+static int
+hdr_put_NC_var(bufferinfo   *pbp,
+               const NC_var *varp)
+{
+    /* netCDF file format:
+     * netcdf_file = header data
+     * header      = magic numrecs dim_list gatt_list var_list
+     *  ...
+     * var         = name nelems [dimid ...] vatt_list nc_type vsize begin
+     * nelems      = NON_NEG
+     * dimid       = NON_NEG
+     * vatt_list   = att_list
+     * nc_type     = NC_BYTE | NC_CHAR | NC_SHORT | ...
+     * vsize       = NON_NEG
+     * begin       = OFFSET        // Variable start location.
+     * OFFSET      = <non-negative INT> |  // CDF-1
+     *               <non-negative INT64>  // CDF-2 and CDF-5
+     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
+     *               <non-negative INT64>  // CDF-5
+     */
+    int i, status;
+
+    /* copy name */
+    status = hdr_put_NC_name(pbp, varp->name);
+    if (status != NC_NOERR) return status;
+
+    /* copy nelems */
+    if (pbp->version < 5)
+        status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->ndims);
+    else
+        status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)varp->ndims);
+    if (status != NC_NOERR) return status;
+
+    /* copy [dimid ...] */
+    for (i=0; i<varp->ndims; i++) {
+        if (pbp->version < 5)
+            status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->dimids[i]);
+        else
+            status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)varp->dimids[i]);
+        if (status != NC_NOERR) return status;
+    }
+
+    /* copy vatt_list */
+    status = hdr_put_NC_attrarray(pbp, &varp->attrs);
+    if (status != NC_NOERR) return status;
+
+    /* copy nc_type */
+    status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->xtype);
+    if (status != NC_NOERR) return status;
+
+    /* copy vsize */
+    /* in CDF-1 and CDF-2, a variable's size in the header is a 32-bit integer
+     * in CDF-5, it is a 64-bit integer
+     */
+    if (pbp->version < 5) {
+        /* Special case, when there is no record variable, the last fixed-size
+         * variable can be larger than 2 GiB if its file starting offset is
+         * less than 2 GiB. This checking has already been done in the call
+         * to ncmpio_NC_check_vlens() in ncmpio_NC_enddef().
+         *
+         * if (varp->len != (int)varp->len) DEBUG_RETURN_ERROR(NC_EVARSIZE)
+         */
+        uint vsize = (uint)varp->len;
+        if (varp->len > 4294967292LL) { /* 2^32 - 4 bytes */
+            /* CDF-2 specification: use 2^32-1 for vsize when the variable
+             * size is larger than 2^32-4 bytes
+             */
+            vsize = 4294967295U;
+        }
+        status = ncmpix_put_uint32((void**)(&pbp->pos), vsize);
+    }
+    else {
+        status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)varp->len);
+    }
+    if (status != NC_NOERR) return status;
+
+    /* copy begin */
+    /* in CDF-1 header, a variable's starting file offset is a 32-bit integer
+     * in CDF-2 and CDF-5, it is a 64-bit integer
+     */
+    if (pbp->version == 1) {
+        if (varp->begin != (uint)varp->begin) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+        status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->begin);
+    }
+    else
+        status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)varp->begin);
+    if (status != NC_NOERR) return status;
+
+    return NC_NOERR;
+}
+
+/*----< hdr_put_NC_vararray() >----------------------------------------------*/
+static int
+hdr_put_NC_vararray(bufferinfo        *pbp,
+                    const NC_vararray *ncap)
+{
+    /* netCDF file format:
+     * netcdf_file = header  data
+     * header      = magic  numrecs  dim_list  gatt_list  var_list
+     *  ...
+     * var_list    = ABSENT | NC_VARIABLE   nelems  [var ...]
+     * ABSENT      = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *               ZERO  ZERO64  // for CDF-5
+     * ZERO        = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64      = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_VARIABLE = \x00 \x00 \x00 \x0B         // tag for list of variables
+     * nelems      = NON_NEG       // number of elements in following sequence
+     * NON_NEG     = <non-negative INT> |        // CDF-1 and CDF-2
+     *               <non-negative INT64>        // CDF-5
+     */
+    int i, status;
+
+    assert(pbp != NULL);
+
+    if (ncap == NULL || ncap->ndefined == 0) { /* ABSENT */
+        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_UNSPECIFIED);
+        if (status != NC_NOERR) return status;
+
+        /* put a ZERO or ZERO64 depending on which CDF format */
+        if (pbp->version < 5)
+            status = ncmpix_put_uint32((void**)(&pbp->pos), 0);
+        else
+            status = ncmpix_put_uint64((void**)(&pbp->pos), 0);
+        if (status != NC_NOERR) return status;
+    }
+    else {
+        /* copy NC_VARIABLE */
+        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_VARIABLE);
+        if (status != NC_NOERR) return status;
+
+        /* copy nelems */
+        if (pbp->version < 5)
+            status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)ncap->ndefined);
+        else
+            status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)ncap->ndefined);
+        if (status != NC_NOERR) return status;
+
+        /* copy [var ...] */
+        for (i=0; i<ncap->ndefined; i++) {
+            status = hdr_put_NC_var(pbp, ncap->value[i]);
+            if (status != NC_NOERR) return status;
+        }
+    }
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_hdr_put_NC() >------------------------------------------------*/
+/* fill the file header into the I/O buffer, buf
+ * this function is collective */
+int
+ncmpio_hdr_put_NC(NC *ncp, void *buf)
+{
+    int status;
+    bufferinfo putbuf;
+    MPI_Offset nrecs=0;
+
+    putbuf.comm          = ncp->comm;
+    putbuf.collective_fh = ncp->collective_fh;
+    putbuf.offset        = 0;
+    putbuf.pos           = buf;
+    putbuf.base          = buf;
+    putbuf.size          = ncp->xsz;
+    putbuf.safe_mode     = ncp->safe_mode;
+
+    /* netCDF file format:
+     * netcdf_file  = header  data
+     * header       = magic  numrecs  dim_list  gatt_list  var_list
+     */
+
+    /* copy "magic", 4 characters */
+    if (ncp->format == 5) {
+        putbuf.version = 5;
+        status = ncmpix_putn_text(&putbuf.pos, sizeof(ncmagic5), ncmagic5);
+    }
+    else if (ncp->format == 2) {
+        putbuf.version = 2;
+        status = ncmpix_putn_text(&putbuf.pos, sizeof(ncmagic2), ncmagic2);
+    }
+    else {
+        putbuf.version = 1;
+        status = ncmpix_putn_text(&putbuf.pos, sizeof(ncmagic1), ncmagic1);
+    }
+    if (status != NC_NOERR) return status;
+
+    /* copy numrecs, number of records */
+    nrecs = ncp->numrecs;
+    if (ncp->format < 5) {
+        if (nrecs != (uint)nrecs) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+        status = ncmpix_put_uint32((void**)(&putbuf.pos), (uint)nrecs);
+    }
+    else {
+        status = ncmpix_put_uint64((void**)(&putbuf.pos), (uint64)nrecs);
+    }
+    if (status != NC_NOERR) return status;
+
+    /* copy dim_list */
+    status = hdr_put_NC_dimarray(&putbuf, &ncp->dims);
+    if (status != NC_NOERR) return status;
+
+    /* copy gatt_list */
+    status = hdr_put_NC_attrarray(&putbuf, &ncp->attrs);
+    if (status != NC_NOERR) return status;
+
+    /* copy var_list */
+    status = hdr_put_NC_vararray(&putbuf, &ncp->vars);
+    if (status != NC_NOERR) return status;
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_write_header() >---------------------------------------------*/
+/* This function is collective (even in independent data mode).
+ * It is called only in data mode (collective or independent) and by
+ * 1. ncmpi_rename_att()
+ * 2. ncmpi_copy_att()
+ * 3. ncmpi_put_att()
+ * 4. ncmpi_rename_dim()
+ * 5. ncmpi_rename_var()
+ */
+int ncmpio_write_header(NC *ncp)
+{
+    int rank, status=NC_NOERR, mpireturn, err;
+    MPI_File fh;
+
+    /* Write the entire header to the file. This function may be called from
+     * a rename API. In that case, we cannot just change the variable name in
+     * the file header, because if the file space occupied by the name shrinks,
+     * all metadata following the new name must be moved ahead.
+     */
+
+    fh = ncp->collective_fh;
+    if (NC_indep(ncp))
+        fh = ncp->independent_fh;
+
+    /* update file header size, as this subroutine may be called from a rename
+     * API (var or attribute) and the new name is smaller/bigger which changes
+     * the header size. We recalculate ncp->xsz by getting the un-aligned size
+     * occupied by the file header */
+    ncp->xsz = ncmpio_hdr_len_NC(ncp);
+
+    MPI_Comm_rank(ncp->comm, &rank);
+    if (rank == 0) { /* only root writes to file header */
+        MPI_Status mpistatus;
+        void *buf = NCI_Malloc((size_t)ncp->xsz); /* header's write buffer */
+
+        /* copy header object to write buffer */
+        status = ncmpio_hdr_put_NC(ncp, buf);
+
+        if (ncp->xsz != (int)ncp->xsz) {
+            NCI_Free(buf);
+            DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+        }
+
+#ifdef _USE_MPI_GET_COUNT
+        /* explicitly initialize mpistatus object to 0, see comments below */
+        memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+        TRACE_IO(MPI_File_write_at)(fh, 0, buf, (int)ncp->xsz, MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at");
+            if (status == NC_NOERR) {
+                err = (err == NC_EFILE) ? NC_EWRITE : err;
+                DEBUG_ASSIGN_ERROR(status, err)
+            }
+        }
+        else {
+#ifdef _USE_MPI_GET_COUNT
+            int put_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
+            ncp->put_size += put_size;
+#else
+            ncp->put_size += ncp->xsz;
+#endif
+        }
+        NCI_Free(buf);
+    }
+
+    if (ncp->safe_mode == 1) {
+        /* broadcast root's status, because only root writes to the file */
+        int root_status = status;
+        TRACE_COMM(MPI_Bcast)(&root_status, 1, MPI_INT, 0, ncp->comm);
+        /* root's write has failed, which is serious */
+        if (root_status == NC_EWRITE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
+        if (mpireturn != MPI_SUCCESS) {
+            ncmpii_error_mpi2nc(mpireturn,"MPI_Bcast");
+            DEBUG_RETURN_ERROR(NC_EMPI)
+        }
+    }
+
+    if (NC_doFsync(ncp)) { /* NC_SHARE is set */
+        TRACE_IO(MPI_File_sync)(fh);
+        if (mpireturn != MPI_SUCCESS) {
+            ncmpii_error_mpi2nc(mpireturn,"MPI_File_sync");
+            DEBUG_RETURN_ERROR(NC_EMPI)
+        }
+        TRACE_COMM(MPI_Barrier)(ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            ncmpii_error_mpi2nc(mpireturn,"MPI_Barrier");
+            DEBUG_RETURN_ERROR(NC_EMPI)
+        }
+    }
+
+    return status;
+}
+
diff --git a/src/lib/i_getput.m4 b/src/drivers/ncmpio/ncmpio_i_getput.m4
similarity index 54%
rename from src/lib/i_getput.m4
rename to src/drivers/ncmpio/ncmpio_i_getput.m4
index 9c4a686..01394e8 100644
--- a/src/lib/i_getput.m4
+++ b/src/drivers/ncmpio/ncmpio_i_getput.m4
@@ -7,10 +7,20 @@ dnl
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: i_getput.m4 2723 2016-12-18 06:21:12Z wkliao $ */
+/* $Id: ncmpio_i_getput.m4 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/var_getput.m4
+ *
+ * ncmpi_iget_var<kind>()        : dispatcher->iget_var()
+ * ncmpi_iput_var<kind>()        : dispatcher->iput_var()
+ * ncmpi_iget_var<kind>_<type>() : dispatcher->iget_var()
+ * ncmpi_iput_var<kind>_<type>() : dispatcher->iput_var()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdio.h>
@@ -23,23 +33,21 @@ dnl
 #include <string.h> /* memcpy() */
 #include <mpi.h>
 
-#include "nc.h"
-#include "ncx.h"
-#include "ncmpidtype.h"
-#include "macro.h"
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
 
-
-/*----< ncmpii_abuf_malloc() >------------------------------------------------*/
+/*----< abuf_malloc() >------------------------------------------------------*/
 /* allocate memory space from the attached buffer pool */
 static int
-ncmpii_abuf_malloc(NC *ncp, MPI_Offset nbytes, void **buf, int *abuf_index)
+abuf_malloc(NC *ncp, MPI_Offset nbytes, void **buf, int *abuf_index)
 {
     /* extend the table size if more entries are needed */
     if (ncp->abuf->tail + 1 == ncp->abuf->table_size) {
         ncp->abuf->table_size += NC_ABUF_DEFAULT_TABLE_SIZE;
         ncp->abuf->occupy_table = (NC_buf_status*)
                    NCI_Realloc(ncp->abuf->occupy_table,
-                               (size_t)ncp->abuf->table_size * sizeof(NC_buf_status));
+                   (size_t)ncp->abuf->table_size * sizeof(NC_buf_status));
     }
     /* mark the new entry is used and store the requested buffer size */
     ncp->abuf->occupy_table[ncp->abuf->tail].is_used  = 1;
@@ -53,6 +61,24 @@ ncmpii_abuf_malloc(NC *ncp, MPI_Offset nbytes, void **buf, int *abuf_index)
     return NC_NOERR;
 }
 
+/*----< abuf_dealloc() >-----------------------------------------------------*/
+/* deallocate (actually un-register) memory space from the attached buffer
+ * pool
+ */
+static int
+abuf_dealloc(NC *ncp, int abuf_index)
+{
+    assert(abuf_index == ncp->abuf->tail - 1);
+
+    /* mark the tail entry un-used */
+    ncp->abuf->size_used -= ncp->abuf->occupy_table[abuf_index].req_size;
+    ncp->abuf->occupy_table[abuf_index].req_size = 0;
+    ncp->abuf->occupy_table[abuf_index].is_used  = 0;
+    ncp->abuf->tail--;
+
+    return NC_NOERR;
+}
+
 /*----< add_record_requests() >----------------------------------------------*/
 /* check if this is a record variable. if yes, add new requests for each
  * record into the list. Hereinafter, treat each request as a non-record
@@ -122,9 +148,9 @@ add_record_requests(NC_var           *varp,
     return NC_NOERR;
 }
 
-/*----< ncmpii_igetput_varm() >-----------------------------------------------*/
+/*----< ncmpio_igetput_varm() >-----------------------------------------------*/
 int
-ncmpii_igetput_varm(NC               *ncp,
+ncmpio_igetput_varm(NC               *ncp,
                     NC_var           *varp,
                     const MPI_Offset  start[],
                     const MPI_Offset  count[],
@@ -134,73 +160,101 @@ ncmpii_igetput_varm(NC               *ncp,
                     MPI_Offset        bufcount,
                     MPI_Datatype      buftype,
                     int              *reqid,    /* out, can be NULL */
-                    int               rw_flag,
-                    int               use_abuf,    /* if use attached buffer */
+                    int               reqMode,
                     int               isSameGroup) /* if part of a varn group */
 {
-    void *xbuf=NULL, *cbuf=NULL, *lbuf=NULL;
-    int err=NC_NOERR, status=NC_NOERR, warning=NC_NOERR;
+    void *xbuf=NULL;
+    int err=NC_NOERR;
     int i, abuf_index=-1, el_size, buftype_is_contig;
     int need_convert, need_swap, need_swap_back_buf=0;
     size_t  dims_chunk;
     MPI_Offset bnelems=0, nbytes;
-    MPI_Datatype ptype, imaptype=MPI_DATATYPE_NULL;
+    MPI_Datatype ptype, imaptype;
     NC_req *req;
 
-    /* calculate the followings:
-     * ptype: element data type (MPI primitive type) in buftype
+    if (bufcount != (int)bufcount) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+    /* decode buftype to obtain the followings:
+     * ptype:    element data type (MPI primitive type) in buftype
      * bufcount: If it is -1, then this is called from a high-level API and in
-     * this case buftype will be an MPI primitive data type. If not, then this
-     * is called from a flexible API. In that case, we recalculate bufcount to
-     * match with count[].
-     * bnelems: number of ptypes in user buffer
-     * nbytes: number of bytes (in external data representation) to read/write
-     * from/to the file
-     * el_size: size of ptype
+     *           this case buftype will be an MPI primitive data type.
+     *           If it is >=0, then this is called from a flexible API.
+     * bnelems:  number of ptypes in user buffer, buf
+     * nbytes:   number of bytes (in external data representation) to read from
+     *           or write to the file
+     * el_size:  byte size of ptype
      * buftype_is_contig: whether buftype is contiguous
      */
-    err = ncmpii_calc_datatype_elems(varp, count,
-                                     buftype, &ptype, &bufcount, &bnelems,
-                                     &nbytes, &el_size, &buftype_is_contig);
-    if (err == NC_EIOMISMATCH) DEBUG_ASSIGN_ERROR(warning, err)
-    else if (err != NC_NOERR) return err;
+    err = ncmpii_buftype_decode(varp->ndims, varp->xtype, count, bufcount,
+                                buftype, &ptype, &el_size, &bnelems,
+                                &nbytes, &buftype_is_contig);
+    if (err != NC_NOERR) return err;
 
     if (bnelems == 0) {
         /* zero-length request, mark this as a NULL request */
         if (!isSameGroup && reqid != NULL)
             /* only if this is not part of a group request */
             *reqid = NC_REQ_NULL;
-        return ((warning != NC_NOERR) ? warning : NC_NOERR);
+        return NC_NOERR;
     }
 
-    /* for bput call, check if the remaining buffer space is sufficient
-     * to accommodate this request
-     */
-    if (rw_flag == WRITE_REQ && use_abuf &&
-        ncp->abuf->size_allocated - ncp->abuf->size_used < nbytes)
-        DEBUG_RETURN_ERROR(NC_EINSUFFBUF)
-
     /* check if type conversion and Endianness byte swap is needed */
-    need_convert = ncmpii_need_convert(ncp->format, varp->type, ptype);
-    need_swap    = ncmpii_need_swap(varp->type, ptype);
+    need_convert = ncmpii_need_convert(ncp->format, varp->xtype, ptype);
+    need_swap    = ncmpii_need_swap(varp->xtype, ptype);
 
-    if (imap != NULL) {
-        /* check whether this is a true varm call, if yes, imaptype will be a
-         * newly created MPI derived data type, otherwise MPI_DATATYPE_NULL
-         */
-        err = ncmpii_create_imaptype(varp, count, imap, bnelems, el_size,
-                                     ptype, &imaptype);
-        if (err != NC_NOERR) return err;
-    }
+    /* check whether this is a true varm call, if yes, imaptype will be a
+     * newly created MPI derived data type, otherwise MPI_DATATYPE_NULL
+     */
+    err = ncmpii_create_imaptype(varp->ndims, count, imap, ptype, &imaptype);
+    if (err != NC_NOERR) return err;
+
+    if (fIsSet(reqMode, NC_REQ_WR)) { /* pack request to xbuf */
+#if 1
+        /* when user buf is used as xbuf, we need to byte-swap buf
+         * back to its original contents */
+        xbuf = buf;
+        need_swap_back_buf = 1;
+
+        if (fIsSet(reqMode, NC_REQ_NBB)) {
+            /* for bput call, check if the remaining buffer space is sufficient
+             * to accommodate this request and obtain a space for xbuf
+             */
+            if (ncp->abuf->size_allocated - ncp->abuf->size_used < nbytes)
+                DEBUG_RETURN_ERROR(NC_EINSUFFBUF)
+            err = abuf_malloc(ncp, nbytes, &xbuf, &abuf_index);
+            if (err != NC_NOERR) return err;
+            need_swap_back_buf = 0;
+        }
+        else {
+            if (!buftype_is_contig || imaptype != MPI_DATATYPE_NULL ||
+                need_convert ||
+#ifdef DISABLE_IN_PLACE_SWAP
+                need_swap
+#else
+                nbytes <= NC_BYTE_SWAP_BUFFER_SIZE
+#endif
+            ) {
+                xbuf = NCI_Malloc((size_t)nbytes);
+                if (xbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+                need_swap_back_buf = 0;
+            }
+        }
 
-    if (rw_flag == WRITE_REQ) { /* pack request to xbuf */
-        int position, abuf_allocated=0;
-        MPI_Offset outsize=bnelems*el_size;
-        /* assert(bnelems > 0); */
-        if (outsize != (int)outsize) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+        /* pack user buffer, buf, to xbuf which will be used to write to file */
+        err = ncmpio_pack_xbuf(ncp->format, varp, bufcount, buftype,
+                               buftype_is_contig, bnelems, ptype, imaptype,
+                               need_convert, need_swap, nbytes, buf, xbuf);
+        if (err != NC_NOERR && err != NC_ERANGE) {
+            if (fIsSet(reqMode, NC_REQ_NBB)) abuf_dealloc(ncp, abuf_index);
+            else                             NCI_Free(xbuf);
+            return err;
+        }
+#else
+        void *cbuf=NULL, *lbuf=NULL;
+        int position;
 
         /* attached buffer allocation logic
-         * if (use_abuf)
+         * if (fIsSet(reqMode, NC_REQ_NBB))
          *     if contig && no imap && no convert
          *         buf   ==   lbuf   ==   cbuf    ==     xbuf memcpy-> abuf
          *                                               abuf
@@ -227,45 +281,46 @@ ncmpii_igetput_varm(NC               *ncp,
          *                                               abuf
          */
 
-        /* Step 1: pack buf into a contiguous buffer, lbuf, if buftype is
-         * not contiguous, i.e. a noncontiguous MPI derived datatype
+        MPI_Offset ibufsize = bnelems * el_size;
+        if (ibufsize != (int)ibufsize) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+        /* Step 1: if buftype is not contiguous, i.e. a noncontiguous MPI
+         * derived datatype, pack buf into a contiguous buffer, lbuf,
          */
         if (!buftype_is_contig) { /* buftype is not contiguous */
-            if (bufcount != (int)bufcount) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-
-            /* allocate lbuf */
-            if (use_abuf && imaptype == MPI_DATATYPE_NULL && !need_convert) {
-                status = ncmpii_abuf_malloc(ncp, nbytes, &lbuf, &abuf_index);
-                if (status != NC_NOERR) return status;
-                abuf_allocated = 1;
+            if (imaptype == MPI_DATATYPE_NULL && !need_convert)
+                /* in this case, lbuf will later become xbuf */
+                lbuf = xbuf;
+            else {
+                /* in this case, allocate lbuf and it will be freed before
+                 * constructing xbuf */
+                lbuf = NCI_Malloc((size_t)ibufsize);
+                if (lbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
             }
-            else lbuf = NCI_Malloc((size_t)outsize);
 
             /* pack buf into lbuf based on buftype */
             position = 0;
-            MPI_Pack(buf, (int)bufcount, buftype, lbuf, (int)outsize,
+            MPI_Pack(buf, (int)bufcount, buftype, lbuf, (int)ibufsize,
                      &position, MPI_COMM_SELF);
         }
         else /* for contiguous case, we reuse buf */
             lbuf = buf;
 
-        /* Step 2: pack lbuf to cbuf if imap is non-contiguous */
+        /* Step 2: if imap is non-contiguous, pack lbuf to cbuf */
         if (imaptype != MPI_DATATYPE_NULL) { /* true varm */
-            /* allocate cbuf */
-            if (use_abuf && !need_convert) {
-                assert(abuf_allocated == 0);
-                status = ncmpii_abuf_malloc(ncp, nbytes, &cbuf, &abuf_index);
-                if (status != NC_NOERR) {
-                    if (lbuf != buf) NCI_Free(lbuf);
-                    return status;
-                }
-                abuf_allocated = 1;
+            if (!need_convert)
+                /* in this case, cbuf will later become xbuf */
+                cbuf = xbuf;
+            else {
+                /* in this case, allocate cbuf and cbuf will be freed before
+                 * constructing xbuf */
+                cbuf = NCI_Malloc((size_t)ibufsize);
+                if (cbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
             }
-            else cbuf = NCI_Malloc((size_t)outsize);
 
             /* pack lbuf to cbuf based on imaptype */
             position = 0;
-            MPI_Pack(lbuf, 1, imaptype, cbuf, (int)outsize, &position,
+            MPI_Pack(lbuf, 1, imaptype, cbuf, (int)ibufsize, &position,
                      MPI_COMM_SELF);
             MPI_Type_free(&imaptype);
 
@@ -278,75 +333,55 @@ ncmpii_igetput_varm(NC               *ncp,
         /* Step 3: type-convert and byte-swap cbuf to xbuf, and xbuf will be
          * used in MPI write function to write to file
          */
-
-        /* when user buf type != nc var type defined in file */
         if (need_convert) {
+            /* user buf type does not match nc var type defined in file */
             void *fillp; /* fill value in internal representation */
 
-            if (use_abuf) { /* use attached buffer to allocate xbuf */
-                assert(abuf_allocated == 0);
-                status = ncmpii_abuf_malloc(ncp, nbytes, &xbuf, &abuf_index);
-                if (status != NC_NOERR) {
-                    if (cbuf != buf) NCI_Free(cbuf);
-                    return status;
-                }
-                abuf_allocated = 1;
-            }
-            else xbuf = NCI_Malloc((size_t)nbytes);
-
             /* find the fill value */
             fillp = NCI_Malloc((size_t)varp->xsz);
-            ncmpii_inq_var_fill(varp, fillp);
+            ncmpio_inq_var_fill(varp, fillp);
 
             /* datatype conversion + byte-swap from cbuf to xbuf */
-            DATATYPE_PUT_CONVERT(ncp->format, varp->type, xbuf, cbuf, bnelems,
-                                 ptype, fillp, status)
+            DATATYPE_PUT_CONVERT(ncp->format, varp->xtype, xbuf, cbuf, bnelems,
+                                 ptype, fillp, err)
             NCI_Free(fillp);
 
-            /* NC_ERANGE can be caused by a subset of buf that is out of range
-             * of the external data type, it is not considered a fatal error.
-             * The request must continue to finish.
+            /* The only error codes returned from DATATYPE_PUT_CONVERT are
+             * NC_EBADTYPE or NC_ERANGE. Bad varp->xtype and itype have been
+             * sanity checked at the dispatchers, so NC_EBADTYPE is not
+             * possible. Thus, the only possible error is NC_ERANGE.
+             * NC_ERANGE can be caused by one or more elements of buf that is
+             * out of range representable by the external data type, it is not
+             * considered a fatal error. The request must continue to finish.
              */
-            if (status != NC_NOERR && status != NC_ERANGE) {
-                if (cbuf != buf)  NCI_Free(cbuf);
-                if (xbuf != NULL) NCI_Free(xbuf);
-                return status;
+            if (cbuf != buf) NCI_Free(cbuf);
+#if 0
+            if (err != NC_NOERR && err != NC_ERANGE) {
+                if (fIsSet(reqMode, NC_REQ_NBB)) abuf_dealloc(ncp, abuf_index);
+                else                             NCI_Free(xbuf);
+                return err;
             }
+#endif
         }
         else {
-            if (use_abuf && buftype_is_contig && imaptype == MPI_DATATYPE_NULL){
-                assert(abuf_allocated == 0);
-                status = ncmpii_abuf_malloc(ncp, nbytes, &xbuf, &abuf_index);
-                if (status != NC_NOERR) {
-                    if (cbuf != buf) NCI_Free(cbuf);
-                    return status;
-                }
-                memcpy(xbuf, cbuf, (size_t)nbytes);
-            }
-            else xbuf = cbuf;
+/*
+            if (xbuf == NULL) xbuf = cbuf;
+            else if (cbuf == buf) memcpy(xbuf, cbuf, (size_t)nbytes);
+*/
+            if (cbuf == buf && xbuf != buf) memcpy(xbuf, cbuf, (size_t)nbytes);
 
             if (need_swap) {
-#ifdef DISABLE_IN_PLACE_SWAP
-                if (xbuf == buf)
-#else
-                if (xbuf == buf && nbytes <= NC_BYTE_SWAP_BUFFER_SIZE)
-#endif
-                {
-                    /* allocate xbuf and copy buf to xbuf, before byte-swap */
-                    xbuf = NCI_Malloc((size_t)nbytes);
-                    memcpy(xbuf, buf, (size_t)nbytes);
-                }
                 /* perform array in-place byte swap on xbuf */
-                ncmpii_in_swapn(xbuf, bnelems, ncmpix_len_nctype(varp->type));
+                ncmpii_in_swapn(xbuf, bnelems, varp->xsz);
 
                 if (xbuf == buf) need_swap_back_buf = 1;
-                /* user buf needs to be swapped back to its original contents */
+                /* when user buf is used as xbuf, we need to byte-swap buf
+                 * back to its original contents */
             }
         }
-        /* cbuf is no longer needed */
-        if (cbuf != buf && cbuf != xbuf) NCI_Free(cbuf);
+#endif
     }
-    else { /* rw_flag == READ_REQ */
+    else { /* read request */
         /* Type conversion and byte swap for read are done at wait call, we
          * need bnelems to reverse the steps as done in write case
          */
@@ -356,12 +391,12 @@ ncmpii_igetput_varm(NC               *ncp,
             xbuf = NCI_Malloc((size_t)nbytes);
     }
 
-    if (rw_flag == WRITE_REQ) {
+    if (fIsSet(reqMode, NC_REQ_WR)) {
         /* allocate write/read request array */
         if (ncp->numPutReqs % NC_REQUEST_CHUNK == 0)
             ncp->put_list = (NC_req*) NCI_Realloc(ncp->put_list,
-                                      ((size_t)ncp->numPutReqs + NC_REQUEST_CHUNK) *
-                                      sizeof(NC_req));
+                            ((size_t)ncp->numPutReqs + NC_REQUEST_CHUNK) *
+                            sizeof(NC_req));
         req = ncp->put_list + ncp->numPutReqs;
 
         /* the new request ID will be an even number (max of write ID + 2) */
@@ -371,12 +406,12 @@ ncmpii_igetput_varm(NC               *ncp,
 
         ncp->numPutReqs++;
     }
-    else {  /* READ_REQ */
+    else {  /* read request */
         /* allocate write/read request array */
         if (ncp->numGetReqs % NC_REQUEST_CHUNK == 0)
             ncp->get_list = (NC_req*) NCI_Realloc(ncp->get_list,
-                                      ((size_t)ncp->numGetReqs + NC_REQUEST_CHUNK) *
-                                      sizeof(NC_req));
+                            ((size_t)ncp->numGetReqs + NC_REQUEST_CHUNK) *
+                            sizeof(NC_req));
         req = ncp->get_list + ncp->numGetReqs;
 
         /* the new request ID will be an odd number (max of read ID + 2) */
@@ -412,7 +447,7 @@ ncmpii_igetput_varm(NC               *ncp,
     /* only when read and buftype is not contiguous, we duplicate buftype for
      * later in the wait call to unpack buffer based on buftype
      */
-    if (rw_flag == READ_REQ && !buftype_is_contig)
+    if (fIsSet(reqMode, NC_REQ_RD) && !buftype_is_contig)
         MPI_Type_dup(buftype, &req->buftype);
     else
         req->buftype = MPI_DATATYPE_NULL;
@@ -448,67 +483,63 @@ ncmpii_igetput_varm(NC               *ncp,
         add_record_requests(varp, req, stride);
         /* req->count[0] has been changed to 1 */
 
-        if (rw_flag == WRITE_REQ) ncp->numPutReqs += req->num_recs - 1;
-        else                      ncp->numGetReqs += req->num_recs - 1;
+        if (fIsSet(reqMode, NC_REQ_WR)) ncp->numPutReqs += req->num_recs - 1;
+        else                            ncp->numGetReqs += req->num_recs - 1;
     }
 
     /* return the request ID */
     if (reqid != NULL) *reqid = req->id;
 
-    return ((warning != NC_NOERR) ? warning : status);
+    return err;
 }
 
-include(`foreach.m4')dnl
 include(`utils.m4')dnl
 dnl
-define(`APINAME',`ifelse(`$3',`',`ncmpi_i$1_var$2',`ncmpi_i$1_var$2_$3')')dnl
-dnl
-dnl IGETPUT_API(get/put, kind, itype)
+dnl IGETPUT_API(get/put)
 dnl
 define(`IGETPUT_API',dnl
 `dnl
-/*----< APINAME($1,$2,$3)() >------------------------------------------------*/
+/*----< ncmpio_i$1_var() >---------------------------------------------------*/
+/* start  can be NULL only when api is NC_VAR
+ * count  can be NULL only when api is NC_VAR or NC_VAR1
+ * stride can be NULL only when api is NC_VAR, NC_VAR1, or NC_VARA
+ * imap   can be NULL only when api is NC_VAR, NC_VAR1, NC_VARA, or NC_VARS
+ * bufcount is >= 0 when called from a flexible API, is -1 when called from a
+ *         high-level API and in this case buftype is an MPI primitive
+ *         datatype.
+ * buftype is an MPI primitive data type (corresponding to the internal data
+ *         type of buf, e.g. short in ncmpi_put_short is mapped to MPI_SHORT)
+ *         if called from a high-level APIs. When called from a flexible API
+ *         it can be an MPI derived data type or MPI_DATATYPE_NULL. If it is
+ *         MPI_DATATYPE_NULL, then it means the data type of buf in memory
+ *         matches the variable external data type. In this case, bufcount is
+ *         ignored.
+ * reqMode indicates modes (NC_REQ_COLL/NC_REQ_INDEP/NC_REQ_WR etc.)
+ */
 int
-APINAME($1,$2,$3)(int ncid, int varid, ArgKind($2) BufArgs($1,$3), int *reqid)
+ncmpio_i$1_var(void             *ncdp,
+               int               varid,
+               const MPI_Offset *start,
+               const MPI_Offset *count,
+               const MPI_Offset *stride,
+               const MPI_Offset *imap,
+               ifelse(`$1',`put',`const') void *buf,
+               MPI_Offset        bufcount,
+               MPI_Datatype      buftype,
+               int              *reqid,
+               int               reqMode)
 {
-    int         status;
-    NC         *ncp;
-    NC_var     *varp=NULL;
-    ifelse(`$2', `',  `MPI_Offset *start, *count;',
-           `$2', `1', `MPI_Offset *count;')
-
-    if (reqid != NULL) *reqid = NC_REQ_NULL;
-    status = ncmpii_sanity_check(ncid, varid, ArgStartCountStride($2),
-                                 ifelse(`$3', `', `bufcount', `0'),
-                                 ifelse(`$3', `', `buftype',  `ITYPE2MPI($3)'),
-                                 API_KIND($2), ifelse(`$2', `', `1', `0'),
-                                 0, ReadWrite($1),
-                                 NONBLOCKING_IO, &ncp, &varp);
-    if (status != NC_NOERR) return status;
-
-    ifelse(`$2', `',  `GET_FULL_DIMENSIONS(start, count)',
-           `$2', `1', `GET_ONE_COUNT(count)')
-
-    /* APINAME($1,$2,$3) is a special case of APINAME($1,m,$3) */
-    status = ncmpii_igetput_varm(ncp, varp, start, count, ArgStrideMap($2),
-                                 (void*)buf,
-                                 ifelse(`$3', `', `bufcount, buftype',
-                                                  `-1, ITYPE2MPI($3)'),
-                                 reqid, ReadWrite($1), 0, 0);
-    ifelse(`$2', `', `NCI_Free(start);', `$2', `1', `NCI_Free(count);')
-    return status;
+    NC *ncp=(NC*)ncdp;
+
+    /* Note sanity check for ncdp and varid has been done in dispatchers */
+
+    return ncmpio_igetput_varm(ncp, ncp->vars.value[varid], start, count,
+                               stride, imap, (void*)buf, bufcount, buftype,
+                               reqid, reqMode, 0);
 }
 ')dnl
 dnl
-/*---- PnetCDF flexible APIs ------------------------------------------------*/
-foreach(`kind', (, 1, a, s, m),
-        `foreach(`putget', (put, get),
-                 `IGETPUT_API(putget,kind,)'
-)')
-
-/*---- PnetCDF high-level APIs ----------------------------------------------*/
-foreach(`kind', (, 1, a, s, m),
-        `foreach(`putget', (put, get),
-                 `foreach(`itype', (ITYPE_LIST),
-                          `IGETPUT_API(putget,kind,itype)'
-)')')
+
+IGETPUT_API(put)
+IGETPUT_API(get)
+
diff --git a/src/drivers/ncmpio/ncmpio_i_varn.m4 b/src/drivers/ncmpio/ncmpio_i_varn.m4
new file mode 100644
index 0000000..c908bdb
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_i_varn.m4
@@ -0,0 +1,263 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
+/*
+ *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_i_varn.m4 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/var_getput.m4
+ *
+ * ncmpi_iget_varn_<type>() : dispatcher->iget_varn()
+ * ncmpi_iput_varn_<type>() : dispatcher->iput_varn()
+ * ncmpi_bput_varn_<type>() : dispatcher->bput_varn()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+
+/*----< igetput_varn() >-----------------------------------------------------*/
+/* The current implementation for nonlocking varn APIs is to make num calls
+ * to iget/iput APIs, although an alternative is to flatten each start-count
+ * request into a list of offset-length pairs and concatenate all lists into
+ * a hindexed data type. All nonblocking requests posted by igetput_varn()
+ * share the same request ID.
+ */
+static int
+igetput_varn(NC                *ncp,
+             NC_var            *varp,
+             int                num,
+             MPI_Offset* const *starts,  /* [num][varp->ndims] */
+             MPI_Offset* const *counts,  /* [num][varp->ndims] */
+             void              *buf,
+             MPI_Offset         bufcount,
+             MPI_Datatype       buftype,   /* data type of the bufer */
+             int               *reqidp,    /* OUT: request ID */
+             int                reqMode)
+{
+    int i, j, el_size, status=NC_NOERR, free_cbuf=0, isSameGroup, reqid;
+    void *cbuf=NULL;
+    char *bufp;
+    MPI_Offset **_counts=NULL;
+    MPI_Datatype ptype;
+
+    if (fIsSet(reqMode, NC_REQ_NBB) && ncp->abuf == NULL)
+        DEBUG_RETURN_ERROR(NC_ENULLABUF)
+
+    /* it is illegal for starts to be NULL */
+    if (starts == NULL)
+        DEBUG_RETURN_ERROR(NC_ENULLSTART)
+    else { /* it is illegal for any starts[i] to be NULL */
+        for (i=0; i<num; i++) {
+            if (starts[i] == NULL)
+                DEBUG_RETURN_ERROR(NC_ENULLSTART)
+        }
+    }
+
+    if (counts != NULL) {
+        for (j=0; j<num; j++) {
+            if (counts[j] == NULL)
+                DEBUG_RETURN_ERROR(NC_ENULLCOUNT)
+            for (i=0; i<varp->ndims; i++) {
+                if (counts[j][i] < 0) /* no negative counts[][] */
+                    DEBUG_RETURN_ERROR(NC_ENEGATIVECNT)
+            }
+        }
+    }
+
+    cbuf = buf;
+    if (buftype == MPI_DATATYPE_NULL) {
+        /* In this case, we make ptype match the variable data type defined
+         * in file - no data conversion will be done. Also, it means buf is
+         * contiguous. buftype will no longer be used.
+         */
+        ptype = ncmpii_nc2mpitype(varp->xtype);
+        MPI_Type_size(ptype, &el_size); /* buffer element size */
+    }
+    else if (bufcount == -1) { /* buftype is an MPI primitive data type */
+        /* this subroutine is called from a high-level API
+         * Also, it means the user buf is contiguous.
+         * Assign ptype to buftype, and buftype will no longer be used.
+         */
+        ptype = buftype;
+        MPI_Type_size(ptype, &el_size); /* buffer element size */
+    }
+    else { /* (bufcount > 0) flexible API is used */
+        /* pack buf into cbuf, a contiguous buffer */
+        int isderived, iscontig_of_ptypes;
+        MPI_Offset bnelems=0;
+
+        /* ptype (primitive MPI data type) from buftype
+         * el_size is the element size of ptype
+         * bnelems is the total number of ptype elements in buftype
+         */
+        status = ncmpii_dtype_decode(buftype, &ptype, &el_size, &bnelems,
+                                     &isderived, &iscontig_of_ptypes);
+
+        if (status != NC_NOERR) return status;
+
+        if (bufcount != (int)bufcount) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+        /* check if buftype is contiguous, if not, pack to one, cbuf */
+        if (! iscontig_of_ptypes && bnelems > 0) {
+            int position = 0;
+            MPI_Offset packsize = bnelems*el_size;
+            if (packsize != (int)packsize) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+            cbuf = NCI_Malloc((size_t)packsize);
+            free_cbuf = 1;
+            /* if not called from a bput API, need a callback to free cbuf */
+
+            if (fIsSet(reqMode, NC_REQ_WR))
+                MPI_Pack(buf, (int)bufcount, buftype, cbuf, (int)packsize,
+                         &position, MPI_COMM_SELF);
+        }
+    }
+
+    /* We allow counts == NULL and treat this the same as all 1s */
+    if (counts == NULL) {
+        _counts    = (MPI_Offset**) NCI_Malloc((size_t)num *
+                                               sizeof(MPI_Offset*));
+        _counts[0] = (MPI_Offset*)  NCI_Malloc((size_t)(num * varp->ndims *
+                                               SIZEOF_MPI_OFFSET));
+        for (i=1; i<num; i++)
+            _counts[i] = _counts[i-1] + varp->ndims;
+        for (i=0; i<num; i++)
+            for (j=0; j<varp->ndims; j++)
+                _counts[i][j] = 1;
+    }
+    else {
+        _counts = (MPI_Offset**) counts;
+    }
+    /* from this point forward, _counts != NULL */
+
+    /* break buf into num pieces */
+    reqid = NC_REQ_NULL;
+    isSameGroup=0;
+    bufp = (char*)cbuf;
+    for (i=0; i<num; i++) {
+        MPI_Offset buflen;
+
+        for (buflen=1, j=0; j<varp->ndims; j++)
+            buflen *= _counts[i][j];
+
+        if (buflen == 0) continue;
+        status = ncmpio_igetput_varm(ncp, varp, starts[i], _counts[i], NULL,
+                                     NULL, bufp, buflen, ptype, &reqid,
+                                     reqMode, isSameGroup);
+        if (status != NC_NOERR) goto err_check;
+
+        /* use isSamegroup so we end up with one nonblocking request (only the
+         * first request gets a request ID back, the rest reuse the same ID.
+         * This single ID represents num nonblocking requests */
+        isSameGroup=1;
+        bufp += buflen * el_size;
+    }
+
+    if (free_cbuf) { /* cbuf != buf, cbuf is temp allocated */
+        if (fIsSet(reqMode, NC_REQ_RD)) {
+            /* Set the last lead request object to let wait() unpack cbuf to
+             * buf and free cbuf */
+            for (i=ncp->numGetReqs-1; i>=0; i--)
+                if (ncp->get_list[i].num_recs > 0)
+                    break;
+            ncp->get_list[i].tmpBuf   = cbuf;
+            ncp->get_list[i].userBuf  = buf;
+            ncp->get_list[i].bufcount = (int)bufcount;
+            MPI_Type_dup(buftype, &ncp->get_list[i].buftype);
+        }
+        else { /* write request */
+            if (fIsSet(reqMode, NC_REQ_NBB))
+                /* cbuf has been copied to the attached buffer, so it is safe
+                 * to free cbuf now */
+                NCI_Free(cbuf);
+            else {
+                for (i=ncp->numPutReqs-1; i>=0; i--)
+                    if (ncp->put_list[i].num_recs > 0)
+                        break;
+                assert(i >= 0);
+                /* Set the last request object to let wait() to free cbuf */
+                ncp->put_list[i].tmpBuf = cbuf;
+            }
+        }
+    }
+
+err_check:
+    if (_counts != counts) {
+        NCI_Free(_counts[0]);
+        NCI_Free(_counts);
+    }
+
+    if (status != NC_NOERR) {
+        if (reqid != NC_REQ_NULL) /* cancel pending nonblocking request */
+            ncmpio_cancel(ncp, 1, &reqid, NULL);
+        if (free_cbuf) NCI_Free(cbuf);
+    }
+    if (reqidp != NULL) *reqidp = reqid;
+
+    return status;
+}
+
+
+include(`utils.m4')
+
+dnl
+define(`IsBput',    `ifelse(`$1',`bput', `1', `0')')dnl
+define(`BufConst',  `ifelse(`$1',`get', , `const')')dnl
+dnl
+dnl VARN(iget/iput/bput)
+dnl
+define(`VARN',dnl
+`dnl
+/*----< ncmpio_$1_varn() >----------------------------------------------------*/
+int
+ncmpio_$1_varn(void               *ncdp,
+               int                 varid,
+               int                 num,
+               MPI_Offset* const  *starts,
+               MPI_Offset* const  *counts,
+               BufConst(substr($1,1)) void  *buf,
+               MPI_Offset          bufcount,
+               MPI_Datatype        buftype,
+               int                *reqid,
+               int                 reqMode)
+{
+    NC *ncp=(NC*)ncdp;
+
+    if (reqid != NULL) *reqid = NC_REQ_NULL;
+
+    /* check for zero-size request */
+    if (num == 0 || bufcount == 0 || fIsSet(reqMode, NC_REQ_ZERO))
+        return NC_NOERR;
+
+    /* Note sanity check for ncdp and varid has been done in dispatchers */
+
+    return igetput_varn(ncp, ncp->vars.value[varid], num, starts, counts,
+                        (void*)buf, bufcount, buftype, reqid, reqMode);
+}
+')dnl
+dnl
+
+VARN(iput)
+VARN(iget)
+VARN(bput)
+
diff --git a/src/drivers/ncmpio/ncmpio_open.c b/src/drivers/ncmpio/ncmpio_open.c
new file mode 100644
index 0000000..cdc2e5f
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_open.c
@@ -0,0 +1,220 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_open.c 3421 2017-09-25 04:13:22Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in src/dispatchers/file.c
+ *
+ * ncmpi_open() : dispatcher->open()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>  /* strcpy() */
+#ifdef HAVE_ACCESS
+#include <unistd.h>  /* access() */
+#endif
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+#ifdef ENABLE_SUBFILING
+#include "ncmpio_subfile.h"
+#endif
+
+/*----< ncmpio_open() >------------------------------------------------------*/
+int
+ncmpio_open(MPI_Comm     comm,
+            const char  *path,
+            int          omode,
+            int          ncid,
+            MPI_Info     info, /* user's info and env info combined */
+            void       **ncpp)
+{
+    char *env_str;
+    int i, mpiomode, err, mpireturn;
+    MPI_File fh;
+    MPI_Comm dup_comm;
+    MPI_Info info_used;
+    NC *ncp=NULL;
+
+    *ncpp = NULL;
+
+    /* Note path's validity and omode consistency have been checked in
+     * ncmpi_open() in src/dispatchers/file.c and
+     * path consistency will be done in MPI_File_open */
+
+    /* First, check whether omode is valid or supported ---------------------*/
+    /* NC_DISKLESS is not supported yet */
+    if (omode & NC_DISKLESS) DEBUG_RETURN_ERROR(NC_EINVAL_OMODE)
+
+    /* NC_MMAP is not supported yet */
+    if (omode & NC_MMAP) DEBUG_RETURN_ERROR(NC_EINVAL_OMODE)
+
+#if 0 && defined(HAVE_ACCESS)
+    if (mpiomode == MPI_MODE_RDONLY) { /* file should already exit */
+        int rank, file_exist;
+        MPI_Comm_rank(comm, &rank);
+        if (rank == 0) {
+            if (access(path, F_OK) == 0) file_exist = 1;
+            else                         file_exist = 0;
+        }
+        TRACE_COMM(MPI_Bcast)(&file_exist, 1, MPI_INT, 0, comm);
+        if (!file_exist) DEBUG_RETURN_ERROR(NC_ENOENT)
+    }
+#endif
+
+    /* open file collectively ---------------------------------------------- */
+    mpiomode = fIsSet(omode, NC_WRITE) ? MPI_MODE_RDWR : MPI_MODE_RDONLY;
+
+    TRACE_IO(MPI_File_open)(comm, (char *)path, mpiomode, info, &fh);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_File_open");
+
+    /* duplicate MPI communicator as user may free it later */
+    mpireturn = MPI_Comm_dup(comm, &dup_comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Comm_dup");
+
+    /* get the file info used by MPI-IO */
+    mpireturn = MPI_File_get_info(fh, &info_used);
+    if (mpireturn != MPI_SUCCESS) {
+        MPI_Comm_free(&dup_comm);
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_File_get_info");
+    }
+
+    /* Now the file has been successfully opened, allocate/set NC object */
+
+    /* path's validity and omode consistency have been checked in ncmpi_open()
+     * in src/dispatchers/file.c */
+
+    /* allocate buffer for header object NC */
+    ncp = (NC*) NCI_Calloc(1, sizeof(NC));
+    if (ncp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+
+    /* PnetCDF default fill mode is no fill */
+    fClr(ncp->flags, NC_MODE_FILL);
+    if (!fIsSet(omode, NC_WRITE)) fSet(ncp->flags, NC_MODE_RDONLY);
+
+    ncp->ncid = ncid;
+
+    /* chunk size for reading header (set default before check hints) */
+    ncp->chunk = NC_DEFAULT_CHUNKSIZE;
+    /* extract I/O hints from user info */
+    ncmpio_set_pnetcdf_hints(ncp, info);
+
+#if 0
+    ncp->safe_mode    = 0;
+    ncp->numGetReqs   = 0; /* number of pending non-blocking get requests */
+    ncp->numPutReqs   = 0; /* number of pending non-blocking put requests */
+    ncp->h_align      = 0; /* value 0 indicates the hint is not set */
+    ncp->v_align      = 0;
+    ncp->r_align      = 0;
+    ncp->h_minfree    = 0;
+    ncp->v_minfree    = 0;
+    ncp->get_list     = NULL;
+    ncp->put_list     = NULL;
+    ncp->abuf         = NULL;
+    ncp->old          = NULL;
+    ncp->put_size     = 0;    /* bytes written so far */
+    ncp->get_size     = 0;    /* bytes read    so far */
+
+#ifdef ENABLE_SUBFILING
+    ncp->subfile_mode = 0;
+    ncp->num_subfiles = 0;
+    ncp->ncp_sf       = NULL; /* pointer to subfile NC object */
+#endif
+#endif
+
+    ncp->iomode         = omode;
+    ncp->comm           = dup_comm;
+    ncp->mpiinfo        = info_used;
+    ncp->mpiomode       = mpiomode;
+    ncp->collective_fh  = fh;
+    ncp->independent_fh = MPI_FILE_NULL;
+    ncp->path = (char*) NCI_Malloc(strlen(path) + 1);
+    strcpy(ncp->path, path);
+
+#ifdef PNETCDF_DEBUG
+    /* PNETCDF_DEBUG is set at configure time, which will be overwritten by
+     * the run-time environment variable PNETCDF_SAFE_MODE */
+    ncp->safe_mode = 1;
+#endif
+    /* If environment variable PNETCDF_SAFE_MODE is set to 1, then we perform
+     * a strict consistent test, i.e. arguments used in def_dim/def_var APIs
+     */
+    if ((env_str = getenv("PNETCDF_SAFE_MODE")) != NULL) {
+        if (*env_str == '0') ncp->safe_mode = 0;
+        else                 ncp->safe_mode = 1;
+        /* if PNETCDF_SAFE_MODE is set but without a value, *env_str can
+         * be '\0' (null character). In this case, safe_mode is enabled */
+    }
+
+    /* read header from file into NC object pointed by ncp -------------------*/
+    err = ncmpio_hdr_get_NC(ncp);
+    if (err != NC_NOERR) { /* fatal error */
+        ncmpio_close_files(ncp, 0);
+        ncmpio_free_NC(ncp);
+        return err;
+    }
+
+#ifdef ENABLE_SUBFILING
+    if (ncp->subfile_mode) {
+        /* check subfiling attribute */
+        err = ncmpio_get_att(ncp, NC_GLOBAL, "_PnetCDF_SubFiling.num_subfiles",
+                             &ncp->num_subfiles, MPI_INT);
+        if (err == NC_NOERR && ncp->num_subfiles > 1) {
+            /* ignore error NC_ENOTATT if this attribute is not defined */
+            for (i=0; i<ncp->vars.ndefined; i++) {
+                /* variables may have different numbers of subfiles */
+                err = ncmpio_get_att(ncp, i, "_PnetCDF_SubFiling.num_subfiles",
+                             &ncp->vars.value[i]->num_subfiles,MPI_INT);
+                if (err == NC_ENOTATT) continue;
+                if (err != NC_NOERR) return err;
+                if (ncp->vars.value[i]->num_subfiles > 1) {
+                    /* find the orginal ndims of variable i */
+                    err = ncmpio_get_att(ncp,i,"_PnetCDF_SubFiling.ndims_org",
+                                 &ncp->vars.value[i]->ndims_org,MPI_INT);
+                    if (err != NC_NOERR) return err;
+                    ncp->vars.value[i]->dimids_org = (int*) NCI_Malloc(
+                              ncp->vars.value[i]->ndims_org * SIZEOF_INT);
+                    err = ncmpio_get_att(ncp,i,"_PnetCDF_SubFiling.dimids_org",
+                              ncp->vars.value[i]->dimids_org, MPI_INT);
+                    if (err != NC_NOERR) return err;
+                }
+            }
+            /* open subfile */
+            err = ncmpio_subfile_open(ncp);
+            if (err != NC_NOERR) return err;
+        }
+        else ncp->num_subfiles = 0;
+    }
+    else
+        ncp->num_subfiles = 0;
+#endif
+
+    /* update the total number of record variables --------------------------*/
+    ncp->vars.num_rec_vars = 0;
+    for (i=0; i<ncp->vars.ndefined; i++)
+        ncp->vars.num_rec_vars += IS_RECVAR(ncp->vars.value[i]);
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* initialize and populate name lookup tables ---------------------------*/
+    ncmpio_hash_table_populate_NC_dim(&ncp->dims);
+    ncmpio_hash_table_populate_NC_var(&ncp->vars);
+    ncmpio_hash_table_populate_NC_attr(ncp);
+#endif
+
+    *ncpp = (void*)ncp;
+
+    return NC_NOERR;
+}
+
diff --git a/src/lib/subfile.c b/src/drivers/ncmpio/ncmpio_subfile.c
similarity index 72%
rename from src/lib/subfile.c
rename to src/drivers/ncmpio/ncmpio_subfile.c
index 60e1eb5..d97a3e3 100644
--- a/src/lib/subfile.c
+++ b/src/drivers/ncmpio/ncmpio_subfile.c
@@ -2,40 +2,44 @@
  *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: subfile.c 2686 2016-12-07 20:02:41Z wkliao $ */
+/* $Id: ncmpio_subfile.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
-#include "subfile.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
 #ifdef TAU_SSON
 #include <TAU.h>
 #endif
-#include <stdlib.h>
-#include "ncmpidtype.h"
 
-static int DEBUG = 1;
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_subfile.h"
+
 enum {ONE, BALANCED};
-int min_ndims = 1;
+#define SUBFILING_MIN_NDIMS 1
 
 /* set default values for the following values */
-int delegate_scheme = BALANCED; /* default: any proc can be delegate proc */
+static int delegate_scheme = BALANCED; /* default: any proc can be delegate proc */
 static int is_partitioned = 0;
 
-#define check_err(fn_name_)                                                     \
-    if (mpireturn != MPI_SUCCESS) {                                             \
-        errs++;                                                                 \
-        if (DEBUG) {                                                            \
-            int _len;                                                           \
-            char err_str_[MPI_MAX_ERROR_STRING];                                \
-            MPI_Error_string(mpireturn, err_str_, &_len);                       \
-            fprintf(stderr, #fn_name_ " failed at line %d, mpireturn=%d: %s\n", \
-                    __LINE__, mpireturn, err_str_);                             \
-        }                                                                       \
-    }                                                                           \
+#define check_err(fn_name_)                                                 \
+    if (mpireturn != MPI_SUCCESS) {                                         \
+        errs++;                                                             \
+        int _len;                                                           \
+        char err_str_[MPI_MAX_ERROR_STRING];                                \
+        MPI_Error_string(mpireturn, err_str_, &_len);                       \
+        fprintf(stderr, #fn_name_ " failed at line %d, mpireturn=%d: %s\n", \
+                __LINE__, mpireturn, err_str_);                             \
+    }                                                                       \
 
 #if 0
-static int ncmpii_itoa(int val, char* buf)
+static int ncmpio_itoa(int val, char* buf)
 {
     const unsigned int radix = 10;
 
@@ -81,31 +85,31 @@ static int ncmpii_itoa(int val, char* buf)
 }
 #endif
 
-int ncmpii_subfile_create(NC *ncp, int *ncidp)
+/*----< subfile_create() >---------------------------------------------------*/
+static int
+subfile_create(NC *ncp)
 {
     int myrank, nprocs, color, status=NC_NOERR, mpireturn;
     char path_sf[1024];
     double ratio;
     MPI_Comm comm_sf;
-    MPI_Info info;
-
-    MPI_Info_create(&info);
+    MPI_Info info=MPI_INFO_NULL;
 
-    MPI_Comm_rank(ncp->nciop->comm, &myrank);
-    MPI_Comm_size(ncp->nciop->comm, &nprocs);
+    MPI_Comm_rank(ncp->comm, &myrank);
+    MPI_Comm_size(ncp->comm, &nprocs);
 #ifdef SUBFILE_DEBUG
     if (myrank == 0)
-      printf("%s: rank(%d): nprocs=%d, ncp->nc_num_subfiles=%d\n",
-           __func__, myrank, nprocs, ncp->nc_num_subfiles);
+      printf("%s: rank(%d): nprocs=%d, ncp->num_subfiles=%d\n",
+           __func__, myrank, nprocs, ncp->num_subfiles);
 #endif
 
     /* split the orignial comm to subcomm */
-    if (nprocs > ncp->nc_num_subfiles) {
-        ratio = (double)nprocs/(double)(ncp->nc_num_subfiles);
+    if (nprocs > ncp->num_subfiles) {
+        ratio = (double)nprocs/(double)(ncp->num_subfiles);
         color = (int)((double)myrank/ratio);
     }
     else
-        color = myrank%ncp->nc_num_subfiles;
+        color = myrank%ncp->num_subfiles;
 
 #ifdef SUBFILE_DEBUG
     printf("rank(%d): color=%d\n", myrank, color);
@@ -114,50 +118,58 @@ int ncmpii_subfile_create(NC *ncp, int *ncidp)
 
     /* TODO: fix error when using generated key value.
      * for now, just passing 0 value. */
-    TRACE_COMM(MPI_Comm_split)(ncp->nciop->comm, color, myrank, &comm_sf);
+    TRACE_COMM(MPI_Comm_split)(ncp->comm, color, myrank, &comm_sf);
     if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_Comm_split"); 
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Comm_split"); 
 
-    sprintf(path_sf, "%s.subfile_%i.%s", ncp->nciop->path, color, "nc");
+    sprintf(path_sf, "%s.subfile_%i.%s", ncp->path, color, "nc");
 
-    /* MPI_Info_set(info, "romio_lustre_start_iodevice", offset);
-       MPI_Info_set(info, "striping_factor", "1");
-     */
+/*
+    MPI_Info_create(&info);
+    MPI_Info_set(info, "romio_lustre_start_iodevice", offset);
+    MPI_Info_set(info, "striping_factor", "1");
+*/
 
-    status = ncmpi_create(comm_sf, path_sf, ncp->nciop->ioflags, info, ncidp);
+    void *ncp_sf;
+    status = ncmpio_create(comm_sf, path_sf, ncp->iomode, ncp->ncid, info,
+                           &ncp_sf);
     if (status != NC_NOERR && myrank == 0)
         fprintf(stderr, "%s: error in creating file(%s): %s\n",
                 __func__, path_sf, ncmpi_strerror(status));
 
+    ncp->ncp_sf = (NC*) ncp_sf;
     MPI_Comm_free(&comm_sf);
+/*
     MPI_Info_free(&info);
+*/
 
     return status;
 }
 
+/*----< ncmpio_subfile_open() >----------------------------------------------*/
 int
-ncmpii_subfile_open(NC *ncp, int *ncidp)
+ncmpio_subfile_open(NC *ncp)
 {
     int myrank, nprocs, color, status=NC_NOERR, mpireturn;
     char path_sf[1024];
     MPI_Comm comm_sf;
     double ratio;
 
-    MPI_Comm_rank(ncp->nciop->comm, &myrank);
-    MPI_Comm_size(ncp->nciop->comm, &nprocs);
+    MPI_Comm_rank(ncp->comm, &myrank);
+    MPI_Comm_size(ncp->comm, &nprocs);
 #ifdef SUBFILE_DEBUG
     if (myrank == 0)
-      printf("%s: rank(%d): nprocs=%d, ncp->nc_num_subfiles=%d\n", __func__,
-           myrank, nprocs, ncp->nc_num_subfiles);
+      printf("%s: rank(%d): nprocs=%d, ncp->num_subfiles=%d\n", __func__,
+           myrank, nprocs, ncp->num_subfiles);
 #endif
 
     /* split the original comm to subcomm */
-    if (nprocs > ncp->nc_num_subfiles) {
-        ratio = (double)nprocs/(double)ncp->nc_num_subfiles;
+    if (nprocs > ncp->num_subfiles) {
+        ratio = (double)nprocs/(double)ncp->num_subfiles;
         color = (int)((double)myrank/ratio);
     }
     else
-        color = myrank%ncp->nc_num_subfiles;
+        color = myrank%ncp->num_subfiles;
 
 #ifdef SUBFILE_DEBUG
     if (myrank == 0)
@@ -167,34 +179,34 @@ ncmpii_subfile_open(NC *ncp, int *ncidp)
 
     /* TODO: fix error when using generated key value.
      * for now, just passing 0 value. */
-    TRACE_COMM(MPI_Comm_split)(ncp->nciop->comm, color, myrank, &comm_sf);
+    TRACE_COMM(MPI_Comm_split)(ncp->comm, color, myrank, &comm_sf);
     if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_Comm_split"); 
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Comm_split"); 
 
     /* char path[1024], file[1024]; */
-    /* find_path_and_fname(ncp->nciop->path, path, file); */
-    sprintf(path_sf, "%s.subfile_%i.%s", ncp->nciop->path, color, "nc");
+    /* find_path_and_fname(ncp->path, path, file); */
     /* sprintf(path_sf, "%s%d/%s", path, color, file); */
+    sprintf(path_sf, "%s.subfile_%i.%s", ncp->path, color, "nc");
 
-    status = ncmpi_open(comm_sf, path_sf, ncp->nciop->ioflags, MPI_INFO_NULL, ncidp);
-    if (status != NC_NOERR)
-        fprintf(stderr, "Error in file %s line %d: %s\n", __FILE__,__LINE__, ncmpi_strerror(status));
+    void *ncp_sf;
+    status = ncmpio_open(comm_sf, path_sf, ncp->iomode, ncp->ncid,
+                         MPI_INFO_NULL, &ncp_sf);
 
+    ncp->ncp_sf = (NC*) ncp_sf;
     MPI_Comm_free(&comm_sf);
     return status;
 }
 
-int ncmpii_subfile_close(NC *ncp)
+/*----< ncmpio_subfile_close() >---------------------------------------------*/
+int ncmpio_subfile_close(NC *ncp)
 {
     int status = NC_NOERR;
-    NC *ncp_sf;
-
-    status = ncmpii_NC_check_id(ncp->ncid_sf, &ncp_sf);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
-    status = ncmpii_close(ncp_sf);
-    if (status != NC_NOERR)
-        return status;
+    if (ncp->ncp_sf != NULL) {
+        status = ncmpio_close(ncp->ncp_sf);
+        if (status != NC_NOERR) return status;
+        ncp->ncp_sf = NULL;
+    }
 
     /* reset values to 0 */
     is_partitioned = 0;
@@ -202,15 +214,14 @@ int ncmpii_subfile_close(NC *ncp)
     return status;
 }
 
-/*----< ncmpii_subfile_partition() >---------------------------------------*/
-int ncmpii_subfile_partition(NC *ncp, int *ncidp)
+/*----< ncmpio_subfile_partition() >-----------------------------------------*/
+int ncmpio_subfile_partition(NC *ncp)
 {
     int i, j, color, myrank, nprocs, status=NC_NOERR, num_subfiles;
-    NC *ncp_sf;
     double ratio;
 
-    MPI_Comm_rank(ncp->nciop->comm, &myrank);
-    MPI_Comm_size(ncp->nciop->comm, &nprocs);
+    MPI_Comm_rank(ncp->comm, &myrank);
+    MPI_Comm_size(ncp->comm, &nprocs);
 #ifdef SUBFILE_DEBUG
     if (myrank==0)  /* debug */
     {
@@ -219,12 +230,12 @@ int ncmpii_subfile_partition(NC *ncp, int *ncidp)
 #endif
     if (is_partitioned == 1) return NC_NOERR;
 
-    if (nprocs > ncp->nc_num_subfiles) {
-        ratio = (double)nprocs/(double)ncp->nc_num_subfiles;
+    if (nprocs > ncp->num_subfiles) {
+        ratio = (double)nprocs/(double)ncp->num_subfiles;
         color = (int)((double)myrank/ratio);
     }
     else
-        color = myrank%ncp->nc_num_subfiles;
+        color = myrank%ncp->num_subfiles;
 
 #ifdef SUBFILE_DEBUG
     printf("%s: rank(%d): color=%d\n", __func__, myrank, color);
@@ -232,34 +243,30 @@ int ncmpii_subfile_partition(NC *ncp, int *ncidp)
 
     /* check whether file is already partitioned */
     /* this is to handle when app has multiple ncmpi_enddef() */
-    status = ncmpi_get_att_int(ncp->nciop->fd, NC_GLOBAL, "_PnetCDF_SubFiling.num_subfiles",
-                               &num_subfiles);
+    status = ncmpio_get_att(ncp, NC_GLOBAL, "_PnetCDF_SubFiling.num_subfiles",
+                            &num_subfiles, MPI_INT);
 
     if (status == NC_ENOTATT) { /* if such attr doesn't exist */
-        status = ncmpii_subfile_create(ncp, ncidp);
-        TEST_HANDLE_ERR(status)
+        status = subfile_create(ncp);
+        if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
-        status = ncmpi_put_att_int(ncp->nciop->fd, NC_GLOBAL, "_PnetCDF_SubFiling.num_subfiles",
-                                   NC_INT, 1, &ncp->nc_num_subfiles);
-        TEST_HANDLE_ERR(status)
+        status = ncmpio_put_att(ncp, NC_GLOBAL, "_PnetCDF_SubFiling.num_subfiles",
+                                NC_INT, 1, &ncp->num_subfiles, MPI_INT);
+        if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
     }
     else if (status == NC_NOERR) { /* attr is already set */
-        assert(num_subfiles == ncp->nc_num_subfiles);
+        assert(num_subfiles == ncp->num_subfiles);
     }
     else /* other error */
         return status;
 
     /* TODO: ignore UNLIMITED dims */
     /* NOTE: the following "for loop" should be before NC_begins() */
-    /* NOTE: ncp->vars.nalloc shouldn't be used for loop bound
-       because it will incremented by 4, not by 1 */
-    status = ncmpii_NC_check_id(ncp->ncid_sf, &ncp_sf);
-    TEST_HANDLE_ERR(status)
 
     /* adjust the hints to be used by PnetCDF; use the same value in master */
-    ncp_sf->nciop->hints.h_align = ncp->nciop->hints.h_align;
-    ncp_sf->nciop->hints.v_align = ncp->nciop->hints.v_align;
-    ncp_sf->nciop->hints.r_align = ncp->nciop->hints.r_align;
+    ncp->ncp_sf->h_align = ncp->h_align;
+    ncp->ncp_sf->v_align = ncp->v_align;
+    ncp->ncp_sf->r_align = ncp->r_align;
 
     for(i=0; i<ncp->vars.ndefined; i++) { /* traverse all variables */
         NC_var **vpp = ncp->vars.value;
@@ -272,8 +279,8 @@ int ncmpii_subfile_partition(NC *ncp, int *ncidp)
         if (vpp[i]->dimids == NULL) continue;
 
         int par_dim_id_temp;
-        status = ncmpi_get_att_int(ncp->nciop->fd, i, "_PnetCDF_SubFiling.par_dim_id",
-                                   &par_dim_id_temp);
+        status = ncmpio_get_att(ncp, i, "_PnetCDF_SubFiling.par_dim_id",
+                                &par_dim_id_temp, MPI_INT);
         if (status == NC_NOERR) { /* if this attr exists */
 #ifdef SUBFILE_DEBUG
             printf("par_dim_id_temp=%d\n", par_dim_id_temp);
@@ -294,47 +301,52 @@ int ncmpii_subfile_partition(NC *ncp, int *ncidp)
             return status; /* other kind of error */
 
         if (par_dim_id < vpp[i]->ndims) {
-            status = ncmpi_put_att_int(ncp->nciop->fd, i, "_PnetCDF_SubFiling.par_dim_index",
-                                       NC_INT, 1, &par_dim_id);
-            TEST_HANDLE_ERR(status)
+            status = ncmpio_put_att(ncp, i, "_PnetCDF_SubFiling.par_dim_index",
+                                    NC_INT, 1, &par_dim_id, MPI_INT);
+            if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
         }
 
 #ifdef SUBFILE_DEBUG
         if (myrank == 0)
             printf ("%s: var(%s): size of partitioning dim (id=%d)=%d\n",
-                    __func__, (*vpp[i]).name->cp, par_dim_id,
+                    __func__, vpp[i]->name, par_dim_id,
                     dpp[par_dim_id]->size);
 #endif
         /* divide only when dim is partitionable */
         /* 1. skip sizeof(par_dim_id) is smaller than num_subfiles */
-        /* 2. skip if ndims < min_ndims */
-        if ( (dpp[(*vpp[i]).dimids[par_dim_id]]->size)/(ncp->nc_num_subfiles) != 0 && (vpp[i]->ndims >= par_dim_id+1) && (vpp[i]->ndims >= min_ndims)) {
+        /* 2. skip if ndims < SUBFILING_MIN_NDIMS */
+        if (dpp[vpp[i]->dimids[par_dim_id]]->size/ncp->num_subfiles > 0 &&
+            vpp[i]->ndims >= par_dim_id+1 &&
+            vpp[i]->ndims >= SUBFILING_MIN_NDIMS) {
             int varid, j, jj, k;
             int var_ndims = vpp[i]->ndims; /* keep org ndims */
             int dimids[var_ndims];
-            char *key[ncp->nc_num_subfiles][var_ndims];
+            char *key[ncp->num_subfiles][var_ndims];
 
-            for (jj=0; jj < ncp->nc_num_subfiles; jj++)
+            for (jj=0; jj < ncp->num_subfiles; jj++)
                 for (k=0; k<var_ndims; k++)
-                    key[jj][k] = (char*) NCI_Calloc((size_t)256, sizeof(char));
+                    key[jj][k] = (char*) NCI_Calloc(NC_MAX_NAME, 1);
 
             /* save original value ndims to attribute before making to 0 */
-            status = ncmpi_put_att_int(ncp->nciop->fd, i, "_PnetCDF_SubFiling.ndims_org", NC_INT, 1, &vpp[i]->ndims);
-            TEST_HANDLE_ERR(status)
+            status = ncmpio_put_att(ncp, i, "_PnetCDF_SubFiling.ndims_org", NC_INT, 1, &vpp[i]->ndims, MPI_INT);
+            if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
-            int sf_range[ncp->nc_num_subfiles][var_ndims][3];
+            int sf_range[ncp->num_subfiles][var_ndims][3];
 
             /* j: each dimension */
             /* subfile: create a var with partitioned dim sizes */
             for(j=0; j<var_ndims; j++) {
-                MPI_Offset dim_sz;
-                char str[80];
+                MPI_Offset dim_sz0, dim_sz;
+                char str[80], *dim_name;
                 double x; /* = org dim size / num_subfiles */
                 int min, max;
 
-                dim_sz = dpp[vpp[i]->dimids[j]]->size; /* init both to org dim sz */
+                dim_name = dpp[vpp[i]->dimids[j]]->name;
+                dim_sz0 = dpp[vpp[i]->dimids[j]]->size; /* init both to org dim sz */
+                dim_sz = dim_sz0;
+
                 /* determine partition ratio */
-                x = (double)(dpp[vpp[i]->dimids[j]]->size)/(double)(ncp->nc_num_subfiles);
+                x = (double)(dim_sz0)/(double)(ncp->num_subfiles);
 
                 /* don't partition dim if dim size is less than ratio x */
                 if ((int)x < 1 && j == par_dim_id)
@@ -347,41 +359,40 @@ int ncmpii_subfile_partition(NC *ncp, int *ncidp)
                     double yy = x*(double)(color+1);
                     min = (int)xx+(color==0||(xx-(int)xx==0.0)?0:1);
                     max = (int)yy-(yy-(int)yy==0.0?1:0);
-                    if (max >= dpp[vpp[i]->dimids[j]]->size) max = dpp[vpp[i]->dimids[j]]->size-1;
+                    if ((MPI_Offset)max >= dim_sz0) max = dim_sz0-1;
                     dim_sz = max-min+1;
                 }
 
-                /* name->cp is always NULL terminated, see ncmpii_new_NC_string() */
-                sprintf(str, "%s.%s", dpp[vpp[i]->dimids[j]]->name->cp,
-                        vpp[i]->name->cp);
+                /* name is always NULL terminated */
+                sprintf(str, "%s.%s", dim_name, vpp[i]->name);
 #ifdef SUBFILE_DEBUG
                 printf("rank(%d): new dim name = %s, dim_sz=%d\n", myrank, str, dim_sz);
 #endif
-                status = ncmpi_def_dim(ncp->ncid_sf, str, dim_sz, &dimids[j]);
-                TEST_HANDLE_ERR(status)
+                status = ncmpio_def_dim(ncp->ncp_sf, str, dim_sz, &dimids[j]);
+                if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
-                /* dpp_sf[color][j] = ncp_sf->dims.value[j]; */
+                /* dpp_sf[color][j] = ncp->ncp_sf->dims.value[j]; */
 
-                for (jj=0; jj < ncp->nc_num_subfiles; jj++) {
+                for (jj=0; jj < ncp->num_subfiles; jj++) {
                     double xx, yy;
-                    sprintf(key[jj][j], "_PnetCDF_SubFiling.range(%s).subfile.%d", dpp[vpp[i]->dimids[j]]->name->cp, jj); /* dim name*/
+                    sprintf(key[jj][j], "_PnetCDF_SubFiling.range(%s).subfile.%d", dim_name, jj); /* dim name*/
                     xx = x*(double)jj;
                     min = (int)xx+(jj==0||(xx-(int)xx==0.0)?0:1);
                     yy = x*(double)(jj+1);
                     max = (int)yy-(yy-(int)yy==0.0?1:0);
-                    if (max >= dpp[vpp[i]->dimids[j]]->size) max = dpp[vpp[i]->dimids[j]]->size-1;
+                    if ((MPI_Offset)max >= dim_sz0) max = dim_sz0-1;
 #ifdef SUBFILE_DEBUG
                     if (myrank == 0) printf("subfile(%d): min=%d, max=%d\n", jj, min, max);
 #endif
                     if (j == par_dim_id) { /* partitioning dims? */
                         sf_range[jj][j][0] = min;
                         sf_range[jj][j][1] = max;
-                        sf_range[jj][j][2] = (max-min+1);;
+                        sf_range[jj][j][2] = (max-min+1);
                     }
                     else {
                         sf_range[jj][j][0] = 0;
-                        sf_range[jj][j][2] = dpp[vpp[i]->dimids[j]]->size;
-                        sf_range[jj][j][1] = (dpp[vpp[i]->dimids[j]]->size!=0?(dpp[vpp[i]->dimids[j]]->size)-1:0);
+                        sf_range[jj][j][2] = dim_sz0;
+                        sf_range[jj][j][1] = (dim_sz0!=0) ? dim_sz0-1 : 0;
                     }
                 }
             } /* for each dim */
@@ -391,48 +402,54 @@ int ncmpii_subfile_partition(NC *ncp, int *ncidp)
             memcpy(vpp[i]->dimids_org, vpp[i]->dimids, (size_t)vpp[i]->ndims*SIZEOF_INT);
             vpp[i]->ndims_org = vpp[i]->ndims;
             vpp[i]->ndims = 0;
-            vpp[i]->dimids = (IS_RECVAR(vpp[i])?&vpp[i]->dimids[0]:NULL);
+            if (IS_RECVAR(vpp[i])) {
+                NCI_Free(vpp[i]->dimids);
+                vpp[i]->dimids = NULL;
+            }
+            if (vpp[i]->shape != NULL) {
+                NCI_Free(vpp[i]->shape);
+                vpp[i]->shape = NULL;
+            }
             vpp[i]->len = vpp[i]->xsz; /* size of type  */
-            vpp[i]->shape = NULL;
-            vpp[i]->num_subfiles = ncp->nc_num_subfiles;
+            vpp[i]->num_subfiles = ncp->num_subfiles;
 
-            status = ncmpi_put_att_int(ncp->nciop->fd, i, "_PnetCDF_SubFiling.dimids_org",
-                                       NC_INT, vpp[i]->ndims_org, vpp[i]->dimids_org);
-            TEST_HANDLE_ERR(status)
+            status = ncmpio_put_att(ncp, i, "_PnetCDF_SubFiling.dimids_org",
+                                    NC_INT, vpp[i]->ndims_org, vpp[i]->dimids_org, MPI_INT);
+            if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
-            status = ncmpi_put_att_int(ncp->nciop->fd, i, "_PnetCDF_SubFiling.num_subfiles",
-                                       NC_INT, 1, &ncp->nc_num_subfiles);
-            TEST_HANDLE_ERR(status)
+            status = ncmpio_put_att(ncp, i, "_PnetCDF_SubFiling.num_subfiles",
+                                    NC_INT, 1, &ncp->num_subfiles, MPI_INT);
+            if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
-            for (jj=0; jj < ncp->nc_num_subfiles; jj++)
+            for (jj=0; jj < ncp->num_subfiles; jj++)
                 for (k=0; k < var_ndims; k++) {
-                    status = ncmpi_put_att_int(ncp->nciop->fd, i,
-                                               key[jj][k], NC_INT,
-                                               2, sf_range[jj][k]);
-                    TEST_HANDLE_ERR(status)
+                    status = ncmpio_put_att(ncp, i, key[jj][k], NC_INT,
+                                            2, sf_range[jj][k], MPI_INT);
+                    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
                 }
 
             /* define a var with new dim */
-            status = ncmpi_def_var(ncp->ncid_sf, (*vpp[i]).name->cp,
-                                   vpp[i]->type, var_ndims, dimids, &varid);
-            TEST_HANDLE_ERR(status)
+            status = ncmpio_def_var(ncp->ncp_sf, (*vpp[i]).name,
+                                    vpp[i]->xtype, var_ndims, dimids, &varid);
+            if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
             /* add an attribute about each dim's range in subfile */
             /* varid: var id in subfile */
             for (k=0; k<var_ndims; k++) {
-                status = ncmpi_put_att_int(ncp->ncid_sf, varid, key[color][k],
-                                           NC_INT, 2, sf_range[color][k]);
-                TEST_HANDLE_ERR(status)
+                status = ncmpio_put_att(ncp->ncp_sf, varid, key[color][k],
+                                        NC_INT, 2, sf_range[color][k], MPI_INT);
+                if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
             }
 
             /* deallocate buffers */
-            for (jj=0; jj < ncp->nc_num_subfiles; jj++)
+            for (jj=0; jj < ncp->num_subfiles; jj++)
                 for (k=0; k<var_ndims; k++)
                     NCI_Free(key[jj][k]);
 
-            status = ncmpi_put_att_int(ncp->ncid_sf, varid, "_PnetCDF_SubFiling.subfile_index",
-                                       NC_INT, 1, &color);
-            TEST_HANDLE_ERR(status)
+            status = ncmpio_put_att(ncp->ncp_sf, varid,
+                                    "_PnetCDF_SubFiling.subfile_index",
+                                    NC_INT, 1, &color, MPI_INT);
+            if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
         } /* end if() */
     } /* for each variable */
 
@@ -441,23 +458,21 @@ int ncmpii_subfile_partition(NC *ncp, int *ncidp)
     return NC_NOERR;
 }
 
-/*----< ncmpii_subfile_getput_vars() >---------------------------------------*/
+/*----< ncmpio_subfile_getput_vars() >---------------------------------------*/
 int
-ncmpii_subfile_getput_vars(NC               *ncp,
+ncmpio_subfile_getput_vars(NC               *ncp,
                            NC_var           *varp,
                            const MPI_Offset  start[],
                            const MPI_Offset  count[],
                            const MPI_Offset  stride[],
                            void             *buf,
                            MPI_Offset        bufcount,
-                           MPI_Datatype      buftype, /* data type of the buffer */
-                           int               rw_flag,
-                           int               io_method)
+                           MPI_Datatype      buftype,
+                           int               reqMode)
 {
     int mpireturn, errs=0, status;
     NC_subfile_access *my_req, *others_req;
     int i, j, k, myrank, nprocs;
-    NC *ncp_sf;
     int *count_my_req_per_proc, *count_others_req_per_proc;
     int varid, varid_sf;
     MPI_Offset *buf_count_my, *buf_count_others;
@@ -468,43 +483,35 @@ ncmpii_subfile_getput_vars(NC               *ncp,
     int color;
     int nasyncios=0;
 
-    /* check whether start, count, and stride are valid */
-    status = NC_start_count_stride_ck(ncp, varp, start, count, stride, rw_flag);
-    if (status != NC_NOERR) return status;
-
-    MPI_Comm_rank(ncp->nciop->comm, &myrank);
-    MPI_Comm_size(ncp->nciop->comm, &nprocs);
+    MPI_Comm_rank(ncp->comm, &myrank);
+    MPI_Comm_size(ncp->comm, &nprocs);
 
 #ifdef SUBFILE_DEBUG
     for (i=0; i<ndims_org; i++)
         printf("rank(%d): %s: var(%s): start[%d]=%ld, count[%d]=%ld, stride[%d]=%ld, bufcount=%ld\n",
-               myrank, __func__, varp->name->cp, i, start[i], i, count[i], i,
+               myrank, __func__, varp->name, i, start[i], i, count[i], i,
                ((stride != NULL)?stride[i]:1), bufcount);
 #endif
 
-    /* get ncp info for the subfile */
-    status = ncmpii_NC_check_id(ncp->ncid_sf, &ncp_sf);
-    TEST_HANDLE_ERR(status)
-
     /* check attr for subfiles */
     int par_dim_id = 0; /* default is the most significant dim */
 
-    status = ncmpi_inq_varid(ncp->nciop->fd, varp->name->cp, &varid);
-    TEST_HANDLE_ERR(status)
+    status = ncmpio_inq_varid(ncp, varp->name, &varid);
+    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
-    status = ncmpi_get_att_int(ncp->nciop->fd, varid, "_PnetCDF_SubFiling.par_dim_index",
-                               &par_dim_id);
-    TEST_HANDLE_ERR(status)
+    status = ncmpio_get_att(ncp, varid, "_PnetCDF_SubFiling.par_dim_index",
+                            &par_dim_id, MPI_INT);
+    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 #ifdef SUBFILE_DEBUG
     if (myrank == 0)
-        printf("_PnetCDF_SubFiling.par_dim_index of %s = %d\n", varp->name->cp, par_dim_id);
+        printf("_PnetCDF_SubFiling.par_dim_index of %s = %d\n", varp->name, par_dim_id);
 #endif
-    status = ncmpi_inq_varid(ncp_sf->nciop->fd, varp->name->cp, &varid_sf);
-    TEST_HANDLE_ERR(status)
+    status = ncmpio_inq_varid(ncp->ncp_sf, varp->name, &varid_sf);
+    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
-    status = ncmpi_get_att_int(ncp_sf->nciop->fd, varid_sf, "_PnetCDF_SubFiling.subfile_index",
-                               &color);
-    TEST_HANDLE_ERR(status)
+    status = ncmpio_get_att(ncp->ncp_sf, varid_sf, "_PnetCDF_SubFiling.subfile_index",
+                            &color, MPI_INT);
+    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
     count_my_req_per_proc = (int *)NCI_Calloc((size_t)nprocs, SIZEOF_INT);
     count_others_req_per_proc = (int *)NCI_Calloc((size_t)nprocs, SIZEOF_INT);
@@ -534,9 +541,9 @@ ncmpii_subfile_getput_vars(NC               *ncp,
     }
 
     /* i: for each subfile */
-    for (i=0; i<ncp->nc_num_subfiles; i++) {
+    for (i=0; i<ncp->num_subfiles; i++) {
         int flag = 0; /* set to 1 if par_dim_id is partitioned, initially 0 */
-        double ratio = (double)nprocs/(double)ncp->nc_num_subfiles;
+        double ratio = (double)nprocs/(double)ncp->num_subfiles;
         int aproc=-1; /* I/O delegate proc in subfile group */
 
         if (delegate_scheme == BALANCED) {
@@ -548,9 +555,9 @@ ncmpii_subfile_getput_vars(NC               *ncp,
             yy = (ratio)*(double)(i+1);
             max = (int)yy-(yy-(int)yy==0.0?1:0);
             if (max >= nprocs) max = nprocs-1;
-            /* scaled = (double)rand()/RAND_MAX; */
+            /* scaled = (double)random()/RAND_MAX; */
             scaled = (double)myrank/ratio-(double)color;
-            aproc = (i==color)?myrank:(min+(max-min+1)*scaled);
+            aproc = (i==color)?myrank:((int)(min+(max-min+1)*scaled));
         }
         else if (delegate_scheme == ONE)
         {
@@ -572,12 +579,12 @@ ncmpii_subfile_getput_vars(NC               *ncp,
         /* j: for each dim starting from par_dim_id in round-robin manner */
         for (j=par_dim_id; j<par_dim_id+ndims_org; j++) {
             int jx = j%ndims_org;
-            NC_dim *dimp = ncp_sf->dims.value[ncp_sf->vars.value[varid_sf]->dimids[jx]];
+            NC_dim *dimp = ncp->ncp_sf->dims.value[ncp->ncp_sf->vars.value[varid_sf]->dimids[jx]];
             int sf_range[2];
             int ii, jj, kk, stride_count;
             char key[256], *org_dim_name;
 
-            org_dim_name = strtok(dimp->name->cp, ".");
+            org_dim_name = strtok(dimp->name, ".");
             sprintf(key, "_PnetCDF_SubFiling.range(%s).subfile.%d", org_dim_name, i); /* dim name*/
 #ifdef SUBFILE_DEBUG
             if (myrank == 0) {
@@ -586,8 +593,8 @@ ncmpii_subfile_getput_vars(NC               *ncp,
             }
 #endif
             /* should get range info from the master file */
-            status = ncmpi_get_att_int(ncp->nciop->fd, varid, key, sf_range);
-            TEST_HANDLE_ERR(status)
+            status = ncmpio_get_att(ncp, varid, key, sf_range, MPI_INT);
+            if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
 #ifdef SUBFILE_DEBUG
             /* if (myrank == 0) */
@@ -598,7 +605,7 @@ ncmpii_subfile_getput_vars(NC               *ncp,
                jj: traverse subfile range, incrementing sequentially
                kk: count belong to my subfile range */
             ii=start[jx], jj=sf_range[0], kk=0;
-            stride_count = (stride == NULL?1:stride[jx]);
+            stride_count = (stride == NULL) ? 1 : stride[jx];
             /* printf("stride_count[%d]=%d\n", jx, stride_count); */
 
             /* TODO: if sf_range is 1, count[] value is incorrect
@@ -618,13 +625,13 @@ ncmpii_subfile_getput_vars(NC               *ncp,
                     jj++;
                 else {
 #ifdef SUBFILE_DEBUG
-                    printf("rank(%d): var(%s): i=%d, j=%d, ii=%d, jj=%d, kk=%d, jx=%d\n", myrank, varp->name->cp, i, j, ii, jj, kk, jx);
+                    printf("rank(%d): var(%s): i=%d, j=%d, ii=%d, jj=%d, kk=%d, jx=%d\n", myrank, varp->name, i, j, ii, jj, kk, jx);
 #endif
                     if (kk == 0) {
                         my_req[aproc].start[jx] = ii;
 #ifdef SUBFILE_DEBUG
                         printf("rank(%d): var(%s): my_req[%d].start[%d]=%d\n",
-                               myrank, varp->name->cp, aproc, jx, ii);
+                               myrank, varp->name, aproc, jx, ii);
 #endif
                     }
                     if (jx == par_dim_id) flag = 1;
@@ -656,9 +663,9 @@ ncmpii_subfile_getput_vars(NC               *ncp,
     } /* for each subfile, i */
 
 #ifdef SUBFILE_DEBUG
-    for (i=0; i<ncp->nc_num_subfiles; i++) {
+    for (i=0; i<ncp->num_subfiles; i++) {
         char str_st[100], str_st_org[100], str_ct[100], str_t1[10];
-        sprintf(str_st, ">> rank(%d): subfile(%d): var(%s): start(", myrank, i, varp->name->cp);
+        sprintf(str_st, ">> rank(%d): subfile(%d): var(%s): start(", myrank, i, varp->name);
         sprintf(str_ct, ">> rank(%d): subfile(%d): count(", myrank, i);
         sprintf(str_st_org, "%d: start_org(", i);
         for (j=0; j<ndims_org; j++) {
@@ -716,7 +723,7 @@ ncmpii_subfile_getput_vars(NC               *ncp,
     TAU_PHASE_START(t51);
 #endif
 
-    TRACE_COMM(MPI_Alltoall)(count_my_req_per_proc, 1, MPI_INT, count_others_req_per_proc, 1, MPI_INT, ncp->nciop->comm);
+    TRACE_COMM(MPI_Alltoall)(count_my_req_per_proc, 1, MPI_INT, count_others_req_per_proc, 1, MPI_INT, ncp->comm);
 
 #ifdef TAU_SSON
     TAU_PHASE_STOP(t51);
@@ -733,7 +740,7 @@ ncmpii_subfile_getput_vars(NC               *ncp,
         buf_offset[i] = 0;
 
 #ifdef SUBFILE_DEBUG
-    if (myrank == 0) printf("varname=%s: etype=0x%x, etype_size=%d\n", varp->name->cp, varp->type, varp->xsz);
+    if (myrank == 0) printf("varname=%s: etype=0x%x, etype_size=%d\n", varp->name, varp->xtype, varp->xsz);
 #endif
 
     /* find the ptype (primitive MPI data type) from buftype
@@ -759,19 +766,19 @@ ncmpii_subfile_getput_vars(NC               *ncp,
             bufcount *= count[i];
         }
         /* assign buftype match with the variable's data type */
-        buftype = ncmpii_nc2mpitype(varp->type);
+        buftype = ncmpii_nc2mpitype(varp->xtype);
     }
 
     status = ncmpii_dtype_decode(buftype, &ptype, &el_size, &bnelems,
                                  &isderived, &buftype_is_contig);
     /* bnelems now is the number of ptype in a buftype */
-    TEST_HANDLE_ERR(status)
+    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
 
 #ifdef SUBFILE_DEBUG
     MPI_Aint lb, extent;
     MPI_Type_get_extent(buftype, &lb, &extent);
     printf("rank(%d): var(%s): ptype=0x%x, el_size=%d, bnelems=%d, isderived=%d, buftype_is_contig=%d, lb=%d, extent=%d\n",
-           myrank, varp->name->cp, ptype, el_size, bnelems, isderived, buftype_is_contig, lb, extent);
+           myrank, varp->name, ptype, el_size, bnelems, isderived, buftype_is_contig, lb, extent);
 #endif
 
     /* if buftype is non-contiguous, pack to contiguous buffer*/
@@ -783,7 +790,7 @@ ncmpii_subfile_getput_vars(NC               *ncp,
         if (outsize  != (int)outsize) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
         if (bufcount != (int)bufcount) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
         cbuf = NCI_Malloc((size_t)outsize);
-        if (rw_flag == WRITE_REQ)
+        if (fIsSet(reqMode, NC_REQ_WR))
             MPI_Pack(buf, (int)bufcount, buftype, cbuf, (int)outsize,
                      &position, MPI_COMM_SELF);
     }
@@ -820,7 +827,7 @@ ncmpii_subfile_getput_vars(NC               *ncp,
     printf("rank(%d): buf_offset[%d]=%d, buf_count_my[%d]=%d\n", myrank,
            myrank, buf_offset[myrank], myrank, buf_count_my[myrank]);
 
-    printf ("rank(%d): %s: var(%s)\n", myrank, __func__, varp->name->cp);
+    printf ("rank(%d): %s: var(%s)\n", myrank, __func__, varp->name);
     for (i=0; i<ndims_org; i++)
         printf("my_req[%d].start[%d]=%ld, my_req[%d].count[%d]=%ld, my_req[%d].stride[%d]=%ld, bufcount=%ld\n",
                myrank, i, my_req[myrank].start[i], myrank, i,
@@ -840,8 +847,8 @@ ncmpii_subfile_getput_vars(NC               *ncp,
 #endif
     /* doing my portion of I/O */
     if (count_my_req_per_proc[myrank] != 0) {
-        status = ncmpii_igetput_varm(ncp_sf,
-                                     ncp_sf->vars.value[varid_sf],
+        status = ncmpio_igetput_varm(ncp->ncp_sf,
+                                     ncp->ncp_sf->vars.value[varid_sf],
                                      my_req[myrank].start,
                                      my_req[myrank].count,
                                      stride,
@@ -850,12 +857,12 @@ ncmpii_subfile_getput_vars(NC               *ncp,
                                      buf_count_my[myrank],
                                      (!buftype_is_contig?ptype:buftype),
                                      &array_of_requests[nasyncios++],
-                                     rw_flag,
-                                     0, 0);
-        TEST_HANDLE_ERR(status)
+                                     reqMode,
+                                     0);
+        if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
     }
 #ifdef SUBFILE_DEBUG
-    printf("rank(%d): var(%s): pushed local I/O to async calls...\n", myrank, varp->name->cp);
+    printf("rank(%d): var(%s): pushed local I/O to async calls...\n", myrank, varp->name);
 #endif
 
     /* doing other proc's request to my subfile
@@ -872,11 +879,11 @@ ncmpii_subfile_getput_vars(NC               *ncp,
 
     for (i=0; i<nprocs; i++)
         if (count_my_req_per_proc[i] != 0 && i != myrank)
-            TRACE_COMM(MPI_Irecv)(&count_others_req_per_proc[i], 1, MPI_INT, i, i+myrank, ncp->nciop->comm, &requests[j++]);
+            TRACE_COMM(MPI_Irecv)(&count_others_req_per_proc[i], 1, MPI_INT, i, i+myrank, ncp->comm, &requests[j++]);
 
     for (i=0; i<nprocs; i++)
         if (count_others_req_per_proc[i] != 0 && i != myrank)
-            TRACE_COMM(MPI_Isend)(&count_my_req_per_proc[i], 1, MPI_INT, i, i+myrank, ncp->nciop->comm, &requests[j++]);
+            TRACE_COMM(MPI_Isend)(&count_my_req_per_proc[i], 1, MPI_INT, i, i+myrank, ncp->comm, &requests[j++]);
 
     statuses = (MPI_Status *)NCI_Malloc((size_t)j*sizeof(MPI_Status));
     TRACE_COMM(MPI_Waitall)(j, requests, statuses);
@@ -904,12 +911,12 @@ ncmpii_subfile_getput_vars(NC               *ncp,
         if (count_others_req_per_proc[i] != 0 && i != myrank)
             /* MPI_Offset == MPI_LONG_LONG_INT */
             TRACE_COMM(MPI_Irecv)(others_req[i].start, 3*ndims_org, MPI_LONG_LONG_INT, i,
-                      i+myrank, ncp->nciop->comm, &requests[j++]);
+                      i+myrank, ncp->comm, &requests[j++]);
     }
     for (i=0; i<nprocs; i++) {
         if (count_my_req_per_proc[i] != 0 && i != myrank)
             TRACE_COMM(MPI_Isend)(my_req[i].start, 3 * ndims_org, MPI_LONG_LONG_INT, i,
-                      i+myrank, ncp->nciop->comm, &requests[j++]);
+                      i+myrank, ncp->comm, &requests[j++]);
     }
 
     statuses = (MPI_Status *)NCI_Malloc((size_t)j*sizeof(MPI_Status));
@@ -974,7 +981,7 @@ ncmpii_subfile_getput_vars(NC               *ncp,
             printf("rank(%d): recv from rank %d: buf_count_others[%d]=%d\n", myrank, i, i, buf_count_others[i]);
 #endif
             xbuf[i] = (void*)NCI_Calloc((size_t)buf_count_others[i], (size_t)el_size);
-            TRACE_COMM(MPI_Irecv)(xbuf[i], buf_count_others[i], (!buftype_is_contig?ptype:buftype), i, i+myrank, ncp->nciop->comm, &requests[j++]);
+            TRACE_COMM(MPI_Irecv)(xbuf[i], buf_count_others[i], (!buftype_is_contig?ptype:buftype), i, i+myrank, ncp->comm, &requests[j++]);
         }
     }
 
@@ -1007,7 +1014,7 @@ ncmpii_subfile_getput_vars(NC               *ncp,
             printf("rank(%d): send to rank %d: buf_offset[%d]=%d, buf_count_my[%d]=%d\n", myrank, i, i, buf_offset[i], i, buf_count_my[i]);
 #endif
 
-            TRACE_COMM(MPI_Isend)((char*)cbuf+buf_offset[i], buf_count_my[i], (!buftype_is_contig?ptype:buftype), i, i+myrank, ncp->nciop->comm, &requests[j++]);
+            TRACE_COMM(MPI_Isend)((char*)cbuf+buf_offset[i], buf_count_my[i], (!buftype_is_contig?ptype:buftype), i, i+myrank, ncp->comm, &requests[j++]);
         } /* end if() */
     } /* end for() */
 
@@ -1028,8 +1035,8 @@ ncmpii_subfile_getput_vars(NC               *ncp,
 
     for (i=0; i<nprocs; i++) {
         if (count_others_req_per_proc[i] != 0 && i != myrank) {
-            status = ncmpii_igetput_varm(ncp_sf,
-                                         ncp_sf->vars.value[varid_sf],
+            status = ncmpio_igetput_varm(ncp->ncp_sf,
+                                         ncp->ncp_sf->vars.value[varid_sf],
                                          others_req[i].start,
                                          others_req[i].count,
                                          stride,
@@ -1038,9 +1045,9 @@ ncmpii_subfile_getput_vars(NC               *ncp,
                                          buf_count_others[i],
                                          (!buftype_is_contig?ptype:buftype),
                                          &array_of_requests[nasyncios++],
-                                         rw_flag,
-                                         0, 0);
-            TEST_HANDLE_ERR(status)
+                                         reqMode,
+                                         0);
+            if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
         }
     }
 #ifdef TAU_SSON
@@ -1060,27 +1067,27 @@ ncmpii_subfile_getput_vars(NC               *ncp,
     stime = MPI_Wtime();
     */
     array_of_statuses = (int *)NCI_Malloc((size_t)nasyncios * SIZEOF_INT);
-    status = ncmpii_wait(ncp_sf, COLL_IO, nasyncios, array_of_requests, array_of_statuses);
-    TEST_HANDLE_ERR(status)
+    status = ncmpio_wait(ncp->ncp_sf, nasyncios, array_of_requests, array_of_statuses, NC_REQ_COLL);
+    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
     NCI_Free(array_of_statuses);
     NCI_Free(array_of_requests);
 
     /*
     int pending_nreqs;
-    status = ncmpi_inq_nreqs(ncp->nciop->fd, &pending_nreqs);
+    status = ncmpio_inq_nreqs(ncp, &pending_nreqs);
     printf("myrank(%d): pending_nreqs=%d\n", myrank, pending_nreqs);
     wait_time = MPI_Wtime() - stime;
-    printf("myrank(%d): ncmpii_wait time = %f\n", myrank, wait_time);
+    printf("myrank(%d): ncmpio_wait time = %f\n", myrank, wait_time);
     */
 #ifdef TAU_SSON
     TAU_PHASE_STOP(t56);
 #endif
 
 #ifdef SUBFILE_DEBUG
-    printf("rank(%d): var(%s): after ncmpi_wait_all()\n", myrank, varp->name->cp);
+    printf("rank(%d): var(%s): after ncmpi_wait_all()\n", myrank, varp->name);
 #endif
 
-    /* MPI_Barrier(ncp->nciop->comm); */
+    /* MPI_Barrier(ncp->comm); */
 
     /* free all allocated memories */
 
diff --git a/src/drivers/ncmpio/ncmpio_subfile.h b/src/drivers/ncmpio/ncmpio_subfile.h
new file mode 100644
index 0000000..dbcfb87
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_subfile.h
@@ -0,0 +1,36 @@
+/*
+ *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_subfile.h 3341 2017-08-25 22:29:08Z wkliao $ */
+#ifndef _SUBFILE_H
+#define _SUBFILE_H
+
+#include "ncmpio_NC.h"
+
+/* structure for storing access info of this process's request
+   to the subfiles on all other processes, and vice-versa. used
+   as array of structures indexed by subfile index. */
+typedef struct {
+    MPI_Offset *start;
+    MPI_Offset *count;
+    MPI_Offset *start_org;
+} NC_subfile_access;
+
+#define CEIL(x) ( (x - (int)x)==0 ? (int)x : (int)x+1 )
+#define FLOOR(x) ( (x - (int)x)==0 ? (int)x : (int)x-1 )
+#define ROUND(x) ( x >= 0 ? (int)(x+0.5) : (int)(x-0.5) )
+#define ABS(a) (((a) < 0) ? -(a) : (a))
+
+extern int ncmpio_subfile_open(NC *ncp);
+
+extern int ncmpio_subfile_close(NC *ncp);
+
+extern int ncmpio_subfile_partition(NC *ncp);
+
+extern int ncmpio_subfile_getput_vars(NC *ncp, NC_var *varp,
+           const MPI_Offset start[], const MPI_Offset count[],
+           const MPI_Offset  stride[], void *buf, MPI_Offset bufcount,
+           MPI_Datatype buftype, int reqMode);
+
+#endif /* _SUBFILE_H */
diff --git a/src/drivers/ncmpio/ncmpio_sync.c b/src/drivers/ncmpio/ncmpio_sync.c
new file mode 100644
index 0000000..5f6d2a6
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_sync.c
@@ -0,0 +1,250 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_sync.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in src/dispatchers/file.c
+ *
+ * ncmpi_sync()         : dispatcher->sync()
+ * ncmpi_sync_numrecs() : dispatcher->sync_numrecs()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h> /* memset() */
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
+
+/*----< ncmpio_file_sync() >-------------------------------------------------*/
+/* This function must be called collectively, no matter if it is in collective
+ * or independent data mode.
+ */
+int
+ncmpio_file_sync(NC *ncp) {
+#ifndef DISABLE_FILE_SYNC
+    int mpireturn;
+
+    if (ncp->independent_fh != MPI_FILE_NULL) {
+        TRACE_IO(MPI_File_sync)(ncp->independent_fh);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_File_sync");
+    }
+
+    /* ncp->collective_fh is never MPI_FILE_NULL as collective mode is
+     * default in PnetCDF */
+    TRACE_IO(MPI_File_sync)(ncp->collective_fh);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_File_sync");
+
+    TRACE_COMM(MPI_Barrier)(ncp->comm);
+#endif
+    return NC_NOERR;
+}
+
+#define NC_NUMRECS_OFFSET 4
+
+/*----< ncmpio_write_numrecs() >---------------------------------------------*/
+/* root process writes the new record number into file.
+ * This function is called by:
+ * 1. ncmpio_sync_numrecs
+ * 2. collective nonblocking wait API, if the new number of records is bigger
+ */
+int
+ncmpio_write_numrecs(NC         *ncp,
+                     MPI_Offset  new_numrecs)
+{
+    int rank, mpireturn, err;
+    MPI_File fh;
+
+    /* root process writes numrecs in file */
+    MPI_Comm_rank(ncp->comm, &rank);
+    if (rank > 0) return NC_NOERR;
+
+    /* return now if there is no record variabled defined */
+    if (ncp->vars.num_rec_vars == 0) return NC_NOERR;
+
+    fh = ncp->collective_fh;
+    if (NC_indep(ncp))
+        fh = ncp->independent_fh;
+
+    if (new_numrecs > ncp->numrecs || NC_ndirty(ncp)) {
+        int len;
+        char pos[8], *buf=pos;
+        MPI_Status mpistatus;
+
+        /* update ncp->numrecs */
+        if (new_numrecs > ncp->numrecs) ncp->numrecs = new_numrecs;
+
+        if (ncp->format < 5) {
+            if (ncp->numrecs != (int)ncp->numrecs)
+                DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+            len = X_SIZEOF_SIZE_T;
+            err = ncmpix_put_uint32((void**)&buf, (uint)ncp->numrecs);
+            if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+        }
+        else {
+            len = X_SIZEOF_INT64;
+            err = ncmpix_put_uint64((void**)&buf, (uint64)ncp->numrecs);
+            if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+        }
+        /* ncmpix_put_xxx advances the 1st argument with size len */
+
+#ifdef _USE_MPI_GET_COUNT
+        /* explicitly initialize mpistatus object to 0, see comments below */
+        memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+        /* root's file view always includes the entire file header */
+        TRACE_IO(MPI_File_write_at)(fh, NC_NUMRECS_OFFSET, (void*)pos, len,
+                                    MPI_BYTE, &mpistatus);
+        if (mpireturn != MPI_SUCCESS) {
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at");
+            if (err == NC_EFILE) DEBUG_RETURN_ERROR(NC_EWRITE)
+        }
+        else {
+#ifdef _USE_MPI_GET_COUNT
+            int put_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
+            ncp->put_size += put_size;
+#else
+            ncp->put_size += len;
+#endif
+        }
+    }
+    return NC_NOERR;
+}
+
+/*----< ncmpio_sync_numrecs() >-----------------------------------------------*/
+/* Synchronize the number of records in memory among all processes and write
+ * numrecs to file.
+ * This function is called by:
+ * 1. ncmpi_sync_numrecs(): by the user
+ * 2. ncmpi_sync(): by the user
+ * 3. ncmpi_end_indep_data(): exit from independent data mode
+ * 4. all blocking collective put APIs when writing record variables
+ * 5. ncmpi_close(): file close and currently in independent data mode
+ *
+ * This API is collective, but can be called in independent data mode.
+ * Note numrecs is always sync-ed in memory and update in file in collective
+ * data mode.
+ */
+int
+ncmpio_sync_numrecs(void *ncdp)
+{
+    int status=NC_NOERR, mpireturn;
+    MPI_Offset max_numrecs;
+    NC *ncp=(NC*)ncdp;
+
+    /* cannot be in define mode */
+    if (NC_indef(ncp)) DEBUG_RETURN_ERROR(NC_EINDEFINE)
+
+    /* check if we have defined record variables */
+    if (ncp->vars.num_rec_vars == 0) return NC_NOERR;
+
+    /* check write permission */
+    if (NC_readonly(ncp)) DEBUG_RETURN_ERROR(NC_EPERM)
+
+    if (!NC_indep(ncp)) /* in collective data mode, numrecs is always sync-ed */
+        return NC_NOERR;
+    else /* if called in independent mode, we force sync in memory */
+        set_NC_ndirty(ncp);
+
+    /* return now if there is no record variabled defined */
+    if (ncp->vars.num_rec_vars == 0) return NC_NOERR;
+
+    /* find the max numrecs among all processes
+     * Note max numrecs may be smaller than some process's ncp->numrecs
+     */
+    TRACE_COMM(MPI_Allreduce)(&ncp->numrecs, &max_numrecs, 1, MPI_OFFSET,
+                              MPI_MAX, ncp->comm);
+    if (mpireturn != MPI_SUCCESS)
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+
+    /* root process writes max_numrecs to file */
+    status = ncmpio_write_numrecs(ncp, max_numrecs);
+
+    if (ncp->safe_mode == 1) {
+        /* broadcast root's status, because only root writes to the file */
+        int root_status = status;
+        TRACE_COMM(MPI_Bcast)(&root_status, 1, MPI_INT, 0, ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Bcast");
+        /* root's write has failed, which is serious */
+        if (root_status == NC_EWRITE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
+    }
+
+    /* update numrecs in all processes's memory */
+    ncp->numrecs = max_numrecs;
+
+    /* clear numrecs dirty bit */
+    fClr(ncp->flags, NC_NDIRTY);
+
+#ifndef DISABLE_FILE_SYNC
+    if (NC_doFsync(ncp)) { /* NC_SHARE is set */
+        int mpierr, mpireturn;
+        if (NC_indep(ncp)) {
+            TRACE_IO(MPI_File_sync)(ncp->independent_fh);
+        }
+        else {
+            TRACE_IO(MPI_File_sync)(ncp->collective_fh);
+        }
+        if (mpireturn != MPI_SUCCESS) {
+            mpierr = ncmpii_error_mpi2nc(mpireturn, "MPI_File_sync");
+            if (status == NC_NOERR) status = mpierr;
+        }
+        TRACE_COMM(MPI_Barrier)(ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Barrier");
+    }
+#endif
+    return status;
+}
+
+/*----< ncmpio_sync() >------------------------------------------------------*/
+/* This API is a collective subroutine, and must be called in data mode, no
+ * matter if it is in collective or independent data mode.
+ */
+int
+ncmpio_sync(void *ncdp)
+{
+    int err;
+    NC *ncp = (NC*)ncdp;
+
+    /* cannot be in define mode */
+    if (NC_indef(ncp)) DEBUG_RETURN_ERROR(NC_EINDEFINE)
+
+#if 0
+    /* In PnetCDF, header metadata is always sync-ed among all processes.
+     * There is no need to re-read the header from file.
+     */
+    if (NC_readonly(ncp))
+        /* calling sync for file opened for read only means re-read header */
+        return ncmpio_read_NC(ncp);
+#else
+    if (NC_readonly(ncp)) return NC_NOERR;
+#endif
+
+    /* the only part of header that can be dirty is numrecs (caused only by
+     * independent APIs) */
+    if (ncp->vars.num_rec_vars > 0 && NC_indep(ncp)) {
+        /* sync numrecs in memory among processes and in file */
+        set_NC_ndirty(ncp);
+        err = ncmpio_sync_numrecs(ncp);
+        if (err != NC_NOERR) return err;
+    }
+
+    /* calling MPI_File_sync() on both collective and independent handlers */
+    return ncmpio_file_sync(ncp);
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_util.c b/src/drivers/ncmpio/ncmpio_util.c
new file mode 100644
index 0000000..6d1ba7b
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_util.c
@@ -0,0 +1,537 @@
+/*
+ *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_util.c 3406 2017-09-22 18:25:43Z wkliao $ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>  /* strcasecmp() */
+#include <assert.h>
+#include <errno.h>
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+
+/*----< ncmpio_set_pnetcdf_hints() >-----------------------------------------*/
+/* this is where the I/O hints designated to pnetcdf are extracted */
+void ncmpio_set_pnetcdf_hints(NC *ncp, MPI_Info info)
+{
+    char value[MPI_MAX_INFO_VAL];
+    int  flag;
+
+    if (info == MPI_INFO_NULL) return;
+
+    /* nc_header_align_size, nc_var_align_size, and r_align * take effect when
+     * a file is created or opened and later adding more header or variable
+     * data */
+
+    /* extract PnetCDF hints from user info object */
+    MPI_Info_get(info, "nc_header_align_size", MPI_MAX_INFO_VAL-1, value,
+                 &flag);
+    if (flag) {
+        errno = 0;  /* errno must set to zero before calling strtoll */
+        ncp->h_align = strtoll(value,NULL,10);
+        if (errno != 0) ncp->h_align = 0;
+        else if (ncp->h_align < 0) ncp->h_align = 0;
+    }
+
+    MPI_Info_get(info, "nc_var_align_size", MPI_MAX_INFO_VAL-1, value, &flag);
+    if (flag) {
+        errno = 0;  /* errno must set to zero before calling strtoll */
+        ncp->v_align = strtoll(value,NULL,10);
+        if (errno != 0) ncp->v_align = 0;
+        else if (ncp->v_align < 0) ncp->v_align = 0;
+    }
+
+    MPI_Info_get(info, "nc_record_align_size", MPI_MAX_INFO_VAL-1, value,
+                 &flag);
+    if (flag) {
+        errno = 0;  /* errno must set to zero before calling strtoll */
+        ncp->r_align = strtoll(value,NULL,10);
+        if (errno != 0) ncp->r_align = 0;
+        else if (ncp->r_align < 0) ncp->r_align = 0;
+    }
+
+    /* get header reading chunk size from info */
+    MPI_Info_get(info, "nc_header_read_chunk_size", MPI_MAX_INFO_VAL-1, value,
+                 &flag);
+    if (flag) {
+        errno = 0;  /* errno must set to zero before calling strtoll */
+        ncp->chunk = (int) strtol(value,NULL,10);
+        if (errno != 0) ncp->chunk = 0;
+        else if (ncp->chunk < 0) ncp->chunk = 0;
+    }
+
+#ifdef ENABLE_SUBFILING
+    MPI_Info_get(info, "pnetcdf_subfiling", MPI_MAX_INFO_VAL-1, value, &flag);
+    if (flag && strcasecmp(value, "enable") == 0)
+        ncp->subfile_mode = 1;
+
+    MPI_Info_get(info, "nc_num_subfiles", MPI_MAX_INFO_VAL-1, value, &flag);
+    if (flag) {
+        errno = 0;
+        ncp->num_subfiles = strtoll(value,NULL,10);
+        if (errno != 0) ncp->num_subfiles = 0;
+        else if (ncp->num_subfiles < 0) ncp->num_subfiles = 0;
+    }
+    if (ncp->subfile_mode == 0) ncp->num_subfiles = 0;
+#endif
+}
+
+/*----< ncmpio_last_offset() >-----------------------------------------------*/
+/* Returns the file offset of the last variable element accessed by this
+ * request.
+ * If count is NULL, this is equivalent to find the starting offset of this
+ * request. Note zero-length request should never call this subroutine.
+ */
+int
+ncmpio_last_offset(const NC         *ncp,
+                   const NC_var     *varp,
+                   const MPI_Offset  start[],   /* [varp->ndims] */
+                   const MPI_Offset  count[],   /* [varp->ndims] */
+                   const MPI_Offset  stride[],  /* [varp->ndims] */
+                   const int         reqMode,
+                   MPI_Offset       *offset_ptr) /* OUT: file offset */
+{
+    MPI_Offset offset, *last_indx=NULL;
+    int i, ndims, firstDim = 0;
+
+    offset = varp->begin; /* beginning file offset of this variable */
+    ndims  = varp->ndims; /* number of dimensions of this variable */
+
+    if (ndims == 0) {
+        *offset_ptr = varp->begin + varp->xsz;
+        return NC_NOERR;
+    }
+
+    if (count != NULL) {
+        last_indx = (MPI_Offset*) NCI_Malloc((size_t)ndims * SIZEOF_MPI_OFFSET);
+
+        if (stride != NULL) {
+            for (i=0; i<ndims; i++) {
+                assert(count[i] > 0);
+                last_indx[i] = start[i] + (count[i] - 1) * stride[i];
+            }
+        }
+        else { /* stride == NULL */
+            for (i=0; i<ndims; i++) {
+                assert(count[i] > 0);
+                last_indx[i] = start[i] + count[i] - 1;
+            }
+        }
+    }
+    else { /* when count == NULL stride is of no use */
+        last_indx = (MPI_Offset*) start;
+    }
+
+    /* check whether last_indx is valid */
+
+    firstDim = 0;
+    /* check NC_EINVALCOORDS for record dimension */
+    if (varp->shape[0] == NC_UNLIMITED) {
+        if (ncp->format < 5 && last_indx[0] > NC_MAX_UINT) { /* CDF-1 and 2 */
+            if (count != NULL) NCI_Free(last_indx);
+            DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
+        }
+        /* for record variable, [0] is the NC_UNLIMITED dimension */
+        if (fIsSet(reqMode, NC_REQ_RD) && last_indx[0] >= ncp->numrecs) {
+            /* read cannot go beyond current numrecs */
+            if (count != NULL) NCI_Free(last_indx);
+            DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
+        }
+        firstDim = 1; /* done for checking the record dimension */
+    }
+    /* continue to check NC_EINVALCOORDS for the rest dimensions */
+    for (i=firstDim; i<ndims; i++) {
+        if (last_indx[i] < 0 || last_indx[i] >= varp->shape[i]) {
+            if (count != NULL) NCI_Free(last_indx);
+            DEBUG_RETURN_ERROR(NC_EINVALCOORDS)
+        }
+    }
+
+    if (varp->shape[0] == NC_UNLIMITED)
+        offset += last_indx[0] * ncp->recsize;
+    else
+        offset += last_indx[ndims-1] * varp->xsz;
+
+    if (ndims > 1) {
+        if (IS_RECVAR(varp))
+            offset += last_indx[ndims - 1] * varp->xsz;
+        else
+            offset += last_indx[0] * varp->dsizes[1] * varp->xsz;
+
+        for (i=1; i<ndims-1; i++)
+            offset += last_indx[i] * varp->dsizes[i+1] * varp->xsz;
+    }
+
+    if (count != NULL) NCI_Free(last_indx);
+
+    *offset_ptr = offset;
+    return NC_NOERR;
+}
+
+/*----< ncmpio_pack_xbuf() >-------------------------------------------------*/
+/* Pack user buffer, buf, into xbuf, when buftype is non-contiguous or imap
+ * is non-contiguous, or type-casting is needed. The immediate buffers, lbuf
+ * and cbuf, may be allocated and freed within this subroutine. We try to reuse
+ * the intermediate buffers as much as possible. Below describe such design.
+ *
+ * When called from bput APIs: (abuf means attached buffer pool)
+ *     if contig && no imap && no convert
+ *         buf   ==   lbuf   ==   cbuf    ==     xbuf memcpy-> abuf
+ *                                               abuf
+ *     if contig && no imap &&    convert
+ *         buf   ==   lbuf   ==   cbuf convert-> xbuf == abuf
+ *                                               abuf
+ *     if contig &&    imap && no convert
+ *         buf   ==   lbuf pack-> cbuf    ==     xbuf == abuf
+ *                                abuf
+ *     if contig &&    imap &&    convert
+ *         buf   ==   lbuf pack-> cbuf convert-> xbuf == abuf
+ *                                               abuf
+ *  if noncontig && no imap && no convert
+ *         buf pack-> lbuf   ==   cbuf    ==     xbuf == abuf
+ *                    abuf
+ *  if noncontig && no imap &&    convert
+ *         buf pack-> lbuf   ==   cbuf convert-> xbuf == abuf
+ *                                               abuf
+ *  if noncontig &&    imap && no convert
+ *         buf pack-> lbuf pack-> cbuf    ==     xbuf == abuf
+ *                                abuf
+ *  if noncontig &&    imap &&    convert
+ *         buf pack-> lbuf pack-> cbuf convert-> xbuf == abuf
+ *                                               abuf
+ *
+ * When called from put/iput APIs:
+ *  if contig && no imap && no convert && xbuf_size > NC_BYTE_SWAP_BUFFER_SIZE
+ *         buf   ==   lbuf   ==   cbuf    ==     xbuf
+ *  if contig && no imap && no convert && xbuf_size <= NC_BYTE_SWAP_BUFFER_SIZE
+ *         buf   ==   lbuf   ==   cbuf    ==     xbuf
+ *                                                   malloc + memcpy
+ *  if contig && no imap &&    convert
+ *         buf   ==   lbuf   ==   cbuf convert-> xbuf
+ *                                               malloc
+ *  if contig &&    imap && no convert
+ *         buf   ==   lbuf pack-> cbuf    ==     xbuf
+ *                                malloc
+ *  if contig &&    imap &&    convert
+ *         buf   ==   lbuf pack-> cbuf convert-> xbuf
+ *                                malloc         malloc
+ *  if noncontig && no imap && no convert
+ *         buf pack-> lbuf   ==   cbuf    ==     xbuf
+ *                    malloc
+ *  if noncontig && no imap &&    convert
+ *         buf pack-> lbuf   ==   cbuf convert-> xbuf
+ *                    malloc                     malloc
+ *  if noncontig &&    imap && no convert
+ *         buf pack-> lbuf pack-> cbuf    ==     xbuf
+ *                    malloc      malloc
+ *  if noncontig &&    imap &&    convert
+ *         buf pack-> lbuf pack-> cbuf convert-> xbuf
+ *                    malloc      malloc         malloc
+ */
+int
+ncmpio_pack_xbuf(int           fmt,    /* NC_FORMAT_CDF2 NC_FORMAT_CDF5 etc. */
+                 NC_var       *varp,
+                 MPI_Offset    bufcount,
+                 MPI_Datatype  buftype,
+                 int           buftype_is_contig,
+                 MPI_Offset    nelems, /* no. elements in etype in buf */
+                 MPI_Datatype  etype,  /* element type in buftype */
+                 MPI_Datatype  imaptype,
+                 int           need_convert,
+                 int           need_swap,
+                 size_t        xbuf_size,
+                 void         *buf,    /* user buffer */
+                 void         *xbuf)   /* already allocated, in external type */
+{
+    int err=NC_NOERR, el_size, position;
+    void *lbuf=NULL, *cbuf=NULL; 
+    MPI_Offset ibuf_size;
+
+    /* check byte size of buf (internal representation) */
+    MPI_Type_size(etype, &el_size);
+    ibuf_size = nelems * el_size;
+    if (ibuf_size != (int)ibuf_size) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+    /* Step 1: if buftype is not contiguous, i.e. a noncontiguous MPI
+     * derived datatype, pack buf into a contiguous buffer, lbuf,
+     */
+    if (!buftype_is_contig) { /* buftype is not contiguous */
+        if (imaptype == MPI_DATATYPE_NULL && !need_convert)
+            /* in this case, lbuf will later become xbuf */
+            lbuf = xbuf;
+        else {
+            /* in this case, allocate lbuf and it will be freed before
+             * constructing xbuf */
+            lbuf = NCI_Malloc((size_t)ibuf_size);
+            if (lbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+        }
+
+        /* pack buf into lbuf based on buftype */
+        position = 0;
+        MPI_Pack(buf, (int)bufcount, buftype, lbuf, (int)ibuf_size,
+                 &position, MPI_COMM_SELF);
+    }
+    else /* for contiguous case, we reuse buf */
+        lbuf = buf;
+
+    /* Step 2: if imap is non-contiguous, pack lbuf to cbuf */
+    if (imaptype != MPI_DATATYPE_NULL) { /* true varm */
+        if (!need_convert)
+            /* in this case, cbuf will later become xbuf */
+            cbuf = xbuf;
+        else {
+            /* in this case, allocate cbuf and cbuf will be freed before
+             * constructing xbuf */
+            cbuf = NCI_Malloc((size_t)ibuf_size);
+            if (cbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+        }
+
+        /* pack lbuf to cbuf based on imaptype */
+        position = 0;
+        MPI_Pack(lbuf, 1, imaptype, cbuf, (int)ibuf_size, &position,
+                 MPI_COMM_SELF);
+        MPI_Type_free(&imaptype);
+
+        /* lbuf is no longer needed */
+        if (lbuf != buf) NCI_Free(lbuf);
+    }
+    else /* not a true varm call: reuse lbuf */
+        cbuf = lbuf;
+
+    /* Step 3: type-convert and byte-swap cbuf to xbuf, and xbuf will be
+     * used in MPI write function to write to file
+     */
+    if (need_convert) {
+        /* user buf type does not match nc var type defined in file */
+        void *fillp; /* fill value in internal representation */
+
+        /* find the fill value */
+        fillp = NCI_Malloc((size_t)varp->xsz);
+        ncmpio_inq_var_fill(varp, fillp);
+
+        /* datatype conversion + byte-swap from cbuf to xbuf */
+        switch(varp->xtype) {
+            case NC_BYTE:
+                err = ncmpii_putn_NC_BYTE(fmt,xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_UBYTE:
+                err = ncmpii_putn_NC_UBYTE(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_SHORT:
+                err = ncmpii_putn_NC_SHORT(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_USHORT:
+                err = ncmpii_putn_NC_USHORT(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_INT:
+                err = ncmpii_putn_NC_INT(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_UINT:
+                err = ncmpii_putn_NC_UINT(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_FLOAT:
+                err = ncmpii_putn_NC_FLOAT(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_DOUBLE:
+                err = ncmpii_putn_NC_DOUBLE(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_INT64:
+                err = ncmpii_putn_NC_INT64(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            case NC_UINT64:
+                err = ncmpii_putn_NC_UINT64(xbuf,cbuf,nelems,etype,fillp);
+                break;
+            default:
+                err = NC_EBADTYPE; /* this never happens */
+                break;
+        }
+        /* The only error codes returned from the above switch block are
+	 * NC_EBADTYPE or NC_ERANGE. Bad varp->xtype and itype have been sanity
+	 * checked at the dispatchers, so NC_EBADTYPE is not possible. Thus,
+	 * the only possible error is NC_ERANGE.  NC_ERANGE can be caused by
+	 * one or more elements of buf that is out of range representable by
+	 * the external data type, it is not considered a fatal error. This
+	 * request must continue to finish.
+         */
+
+        NCI_Free(fillp);
+        if (cbuf != buf) NCI_Free(cbuf);
+    }
+    else {
+        if (cbuf == buf && xbuf != buf)
+            memcpy(xbuf, cbuf, (size_t)xbuf_size);
+
+        if (need_swap) /* perform array in-place byte swap on xbuf */
+            ncmpii_in_swapn(xbuf, nelems, varp->xsz);
+    }
+    return err;
+}
+
+/*----< ncmpio_unpack_xbuf() >-----------------------------------------------*/
+/* Unpack xbuf into user buffer, buf, when type-casting is needed, imap is
+ * non-contiguous, or buftype is non-contiguous. The immediate buffers, cbuf
+ * and lbuf, may be allocated and freed within this subroutine. We try to reuse
+ * the intermediate buffers as much as possible. Below describe such design.
+ *
+ * When called from get/iget APIs:
+ *  if no convert && imap contig    && buftype contig
+ *        xbuf  ==   cbuf   ==       lbuf    ==      buf
+ *  if no convert && imap contig    && buftype noncontig
+ *        xbuf  ==   cbuf   ==       lbuf  unpack->  buf
+ *        malloc
+ *  if no convert && imap noncontig && buftype contig
+ *        xbuf  ==   cbuf  unpack->  lbuf    ==      buf
+ *        malloc
+ *  if no convert && imap noncontig && buftype noncontig
+ *        xbuf  ==   cbuf  unpack->  lbuf  unpack->  buf
+ *        malloc                     malloc
+ *  if    convert && imap contig    && buftype contig
+ *        xbuf  convert->  cbuf   ==       lbuf    ==      buf
+ *        malloc
+ *  if    convert && imap contig    && buftype noncontig
+ *        xbuf  convert->  cbuf   ==       lbuf  unpack->  buf
+ *        malloc           malloc
+ *  if    convert && imap noncontig && buftype contig
+ *        xbuf  convert->  cbuf  unpack->  lbuf    ==      buf
+ *        malloc           malloc
+ *  if    convert && imap noncontig && buftype noncontig
+ *        xbuf  convert->  cbuf  unpack->  lbuf  unpack->  buf
+ *        malloc           malloc          malloc
+ */
+int
+ncmpio_unpack_xbuf(int           fmt,   /* NC_FORMAT_CDF2 NC_FORMAT_CDF5 etc. */
+                   NC_var       *varp,
+                   MPI_Offset    bufcount,
+                   MPI_Datatype  buftype,
+                   int           buftype_is_contig,
+                   MPI_Offset    nelems, /* no. elements in etype in buf */
+                   MPI_Datatype  etype,  /* element type in buftype */
+                   MPI_Datatype  imaptype,
+                   int           need_convert,
+                   int           need_swap,
+                   void         *buf,  /* user buffer */
+                   void         *xbuf) /* already allocated, in external type */
+{
+    int err=NC_NOERR, el_size, position;
+    void *lbuf=NULL, *cbuf=NULL; 
+    MPI_Offset ibuf_size;
+
+    /* check byte size of buf (internal representation) */
+    MPI_Type_size(etype, &el_size);
+    ibuf_size = nelems * el_size;
+    if (ibuf_size != (int)ibuf_size) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
+
+    /* Step 1: type-convert and byte-swap xbuf to cbuf, and xbuf contains data
+     * read from file
+     */
+    if (need_convert) {
+        /* user buf type does not match nc var type defined in file */
+
+        if (buftype_is_contig && imaptype == MPI_DATATYPE_NULL)
+            /* both imap and buftype are contiguous */
+            cbuf = buf;
+        else {
+            cbuf = NCI_Malloc(ibuf_size);
+            if (cbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+        }
+
+        /* datatype conversion + byte-swap from xbuf to cbuf */
+        switch(varp->xtype) {
+            case NC_BYTE:
+                err = ncmpii_getn_NC_BYTE(fmt,xbuf,cbuf,nelems,etype);
+                break;
+            case NC_UBYTE:
+                err = ncmpii_getn_NC_UBYTE(xbuf,cbuf,nelems,etype);
+                break;
+            case NC_SHORT:
+                err = ncmpii_getn_NC_SHORT(xbuf,cbuf,nelems,etype);
+                break;
+            case NC_USHORT:
+                err = ncmpii_getn_NC_USHORT(xbuf,cbuf,nelems,etype);
+                break;
+            case NC_INT:
+                err = ncmpii_getn_NC_INT(xbuf,cbuf,nelems,etype);
+                break;
+            case NC_UINT:
+                err = ncmpii_getn_NC_UINT(xbuf,cbuf,nelems,etype);
+                break;
+            case NC_FLOAT:
+                err = ncmpii_getn_NC_FLOAT(xbuf,cbuf,nelems,etype);
+                break;
+            case NC_DOUBLE:
+                err = ncmpii_getn_NC_DOUBLE(xbuf,cbuf,nelems,etype);
+                break;
+            case NC_INT64:
+                err = ncmpii_getn_NC_INT64(xbuf,cbuf,nelems,etype);
+                break;
+            case NC_UINT64:
+                err = ncmpii_getn_NC_UINT64(xbuf,cbuf,nelems,etype);
+                break;
+            default:
+                err = NC_EBADTYPE; /* this never happens */
+                break;
+        }
+        /* The only error codes returned from the above switch block are
+	 * NC_EBADTYPE or NC_ERANGE. Bad varp->xtype and itype have been sanity
+	 * checked at the dispatchers, so NC_EBADTYPE is not possible. Thus,
+	 * the only possible error is NC_ERANGE.  NC_ERANGE can be caused by
+	 * one or more elements of buf that is out of range representable by
+	 * the external data type, it is not considered a fatal error. This
+	 * request must continue to finish.
+         */
+    }
+    else {
+        if (need_swap) /* perform array in-place byte swap on xbuf */
+            ncmpii_in_swapn(xbuf, nelems, varp->xsz);
+        cbuf = xbuf;
+    }
+
+    /* Step 2: if imap is non-contiguous, unpack cbuf to lbuf */
+    /* determine whether we can use cbuf as lbuf */
+    if (imaptype != MPI_DATATYPE_NULL && !buftype_is_contig) {
+        /* a true varm and buftype is not contiguous: we need a separate
+         * buffer, lbuf, to unpack cbuf to lbuf using imaptype, and later
+         * unpack lbuf to buf using buftype.
+         * In this case, cbuf cannot be buf and lbuf cannot be buf.
+         */
+        lbuf = NCI_Malloc((size_t)ibuf_size);
+        if (lbuf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+    else if (imaptype == MPI_DATATYPE_NULL) /* not varm */
+        lbuf = cbuf;
+    else /* varm and buftype are contiguous */
+        lbuf = buf;
+
+    /* unpacked cbuf into lbuf based on imap -------------------------------*/
+    if (imaptype != MPI_DATATYPE_NULL) {
+        /* unpack cbuf to lbuf based on imaptype */
+        position = 0;
+        MPI_Unpack(cbuf, (int)ibuf_size, &position, lbuf, 1, imaptype,
+                   MPI_COMM_SELF);
+        MPI_Type_free(&imaptype);
+        /* done with cbuf */
+        if (cbuf != xbuf) NCI_Free(cbuf);
+    }
+
+    /* unpacked lbuf into buf based on buftype -----------------------------*/
+    if (!buftype_is_contig) {
+        position = 0;
+        MPI_Unpack(lbuf, (int)ibuf_size, &position, buf, (int)bufcount,
+                   buftype, MPI_COMM_SELF);
+        /* done with lbuf */
+        if (lbuf != buf && lbuf != xbuf) NCI_Free(lbuf);
+    }
+
+    return err;
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_var.c b/src/drivers/ncmpio/ncmpio_var.c
new file mode 100644
index 0000000..5649fc9
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_var.c
@@ -0,0 +1,655 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_var.c 3440 2017-10-15 18:46:02Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/variable.c
+ *
+ * ncmpi_def_var()    : dispatcher->def_var()
+ * ncmpi_inq_varid()  : dispatcher->inq_varid()
+ * ncmpi_inq_var()    : dispatcher->inq_var()
+ * ncmpi_rename_var() : dispatcher->rename_var()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <string.h> /* memset() */
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
+
+/*----< ncmpio_free_NC_var() >-----------------------------------------------*/
+/* Free NC_var object */
+inline void
+ncmpio_free_NC_var(NC_var *varp)
+{
+    if (varp == NULL) return;
+
+    ncmpio_free_NC_attrarray(&varp->attrs);
+    NCI_Free(varp->name);
+#ifdef ENABLE_SUBFILING
+    if (varp->num_subfiles > 1) /* deallocate it */
+        NCI_Free(varp->dimids_org);
+#endif
+    if (varp->shape  != NULL) NCI_Free(varp->shape);
+    if (varp->dsizes != NULL) NCI_Free(varp->dsizes);
+    if (varp->dimids != NULL) NCI_Free(varp->dimids);
+
+    NCI_Free(varp);
+}
+
+/*----< ncmpio_new_NC_var() >------------------------------------------------*/
+NC_var *
+ncmpio_new_NC_var(char *name, int ndims)
+{
+    NC_var *varp;
+
+    varp = (NC_var *) NCI_Calloc(1, sizeof(NC_var));
+    if (varp == NULL) return NULL;
+
+    if (ndims > 0) {
+        varp->shape  = (MPI_Offset*)NCI_Calloc(ndims, SIZEOF_MPI_OFFSET);
+        varp->dsizes = (MPI_Offset*)NCI_Calloc(ndims, SIZEOF_MPI_OFFSET);
+        varp->dimids = (int *)      NCI_Calloc(ndims, SIZEOF_INT);
+    }
+
+    varp->name     = name;         /* name has been malloc-ed */
+    varp->name_len = strlen(name); /* name has been NULL checked */
+    varp->ndims    = ndims;
+#if 0
+    varp->xsz      = 0;
+    varp->len      = 0;
+    varp->begin    = 0;
+#endif
+
+    return varp;
+}
+
+/*----< dup_NC_var() >-------------------------------------------------------*/
+static NC_var *
+dup_NC_var(const NC_var *rvarp)
+{
+    char *name;
+    NC_var *varp;
+
+    /* note that name in rvarp->name is already normalized */
+    name = (char*) NCI_Malloc(strlen(rvarp->name)+1);
+    if (name == NULL) return NULL;
+    strcpy(name, rvarp->name);
+
+    /* allocate a NC_var object */
+    varp = ncmpio_new_NC_var(name, rvarp->ndims);
+    if (varp == NULL ) return NULL;
+
+    varp->xtype = rvarp->xtype;
+
+    /* copy dimids[] */
+    if (rvarp->ndims != 0 && rvarp->dimids != NULL)
+        memcpy(varp->dimids, rvarp->dimids, (size_t)rvarp->ndims * SIZEOF_INT);
+
+    /* copy attributes */
+    if (ncmpio_dup_NC_attrarray(&varp->attrs, &rvarp->attrs) != NC_NOERR) {
+        ncmpio_free_NC_var(varp);
+        return NULL;
+    }
+
+    /* copy the contents of shape may not be necessary, as one must call
+     * compute_var_shape() to recompute it after a new variable is created
+     */
+    memcpy(varp->shape,  rvarp->shape,  (size_t)rvarp->ndims * SIZEOF_MPI_OFFSET);
+    memcpy(varp->dsizes, rvarp->dsizes, (size_t)rvarp->ndims * SIZEOF_MPI_OFFSET);
+    varp->xsz   = rvarp->xsz;
+    varp->len   = rvarp->len;
+    varp->begin = rvarp->begin;
+
+    return varp;
+}
+
+/* vararray */
+
+/*----< ncmpio_free_NC_vararray() >------------------------------------------*/
+inline void
+ncmpio_free_NC_vararray(NC_vararray *ncap)
+{
+    int i;
+
+    assert(ncap != NULL);
+    if (ncap->ndefined == 0) return;
+
+    assert(ncap->value != NULL);
+    for (i=0; i<ncap->ndefined; i++) {
+        if (ncap->value[i] != NULL)
+            ncmpio_free_NC_var(ncap->value[i]);
+    }
+
+    NCI_Free(ncap->value);
+    ncap->value    = NULL;
+    ncap->ndefined = 0;
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* free space allocated for var name lookup table */
+    ncmpio_hash_table_free(ncap->nameT);
+#endif
+}
+
+/*----< ncmpio_dup_NC_vararray() >-------------------------------------------*/
+int
+ncmpio_dup_NC_vararray(NC_vararray       *ncap,
+                       const NC_vararray *ref)
+{
+    int i, status=NC_NOERR;
+
+    assert(ref != NULL);
+    assert(ncap != NULL);
+
+    if (ref->ndefined == 0) {
+        ncap->ndefined = 0;
+        ncap->value = NULL;
+        return NC_NOERR;
+    }
+
+    if (ref->ndefined > 0) {
+        size_t alloc_size = _RNDUP(ref->ndefined, NC_ARRAY_GROWBY);
+        ncap->value = (NC_var **) NCI_Calloc(alloc_size, sizeof(NC_var*));
+        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
+    }
+
+    /* duplicate one NC_var object at a time */
+    ncap->ndefined = 0;
+    for (i=0; i<ref->ndefined; i++) {
+        ncap->value[i] = dup_NC_var(ref->value[i]);
+        if (ncap->value[i] == NULL) {
+            DEBUG_ASSIGN_ERROR(status, NC_ENOMEM)
+            break;
+        }
+        ncap->ndefined++;
+    }
+    if (status != NC_NOERR) {
+        ncmpio_free_NC_vararray(ncap);
+        return status;
+    }
+    assert(ncap->ndefined == ref->ndefined);
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* duplicate var name lookup table */
+    ncmpio_hash_table_copy(ncap->nameT, ref->nameT);
+#endif
+
+    return NC_NOERR;
+}
+
+#if 0
+/*----< elem_NC_vararray() >-------------------------------------------------*/
+inline static NC_var *
+elem_NC_vararray(const NC_vararray *ncap,
+                 int                varid)
+{
+    assert(ncap != NULL);
+    /* cast needed for braindead systems with signed MPI_Offset */
+    if ((varid < 0) ||  ncap->ndefined == 0 || varid >= ncap->ndefined)
+        return NULL;
+
+    assert(ncap->value != NULL);
+
+    return ncap->value[varid];
+}
+#endif
+
+/* End vararray per se */
+
+
+#ifdef SEARCH_NAME_LINEARLY
+/*----< NC_findvar() >-------------------------------------------------------*/
+/*
+ * Step thru NC_VARIABLE array, seeking match on name.
+ * If found, set the variable ID pointed by vardip, otherwise return NC_ENOTVAR
+ */
+static int
+NC_findvar(const NC_vararray *ncap,
+           const char        *name,  /* normalized name */
+           int               *varidp)
+{
+    int varid;
+    size_t nchars;
+
+    assert (ncap != NULL);
+
+    if (ncap->ndefined == 0) return NC_ENOTVAR;
+
+    nchars = strlen(name);
+    for (varid=0; varid<ncap->ndefined; varid++) {
+        if (ncap->value[varid]->name_len == nchars &&
+            strcmp(ncap->value[varid]->name, name) == 0) {
+            if (varidp != NULL) *varidp = varid;
+            return NC_NOERR; /* found it */
+        }
+    }
+
+    return NC_ENOTVAR; /* not found */
+}
+#else
+/*----< NC_findvar() >-------------------------------------------------------*/
+/* Check if the name has been used.
+ * If yes, set the variable ID pointed by vardip, otherwise return NC_ENOTVAR
+ */
+static int
+NC_findvar(const NC_vararray  *ncap,
+           const char         *name,  /* normalized name */
+           int                *varidp)
+{
+    int i, key, varid;
+    size_t nchars;
+
+    assert (ncap != NULL);
+
+    if (ncap->ndefined == 0) return NC_ENOTVAR;
+
+    /* hash the var name into a key for name lookup */
+    key = HASH_FUNC(name);
+
+    /* check the list using linear search */
+    nchars = strlen(name);
+    for (i=0; i<ncap->nameT[key].num; i++) {
+        varid = ncap->nameT[key].list[i];
+        if (ncap->value[varid]->name_len == nchars &&
+            strcmp(ncap->value[varid]->name, name) == 0) {
+            if (varidp != NULL) *varidp = varid;
+            return NC_NOERR; /* the name already exists */
+        }
+    }
+
+    return NC_ENOTVAR; /* the name has never been used */
+}
+#endif
+
+/*----< ncmpio_NC_var_shape64() >--------------------------------------------*/
+/* set varp->xsz, varp->shape and varp->len of a variable */
+int
+ncmpio_NC_var_shape64(NC_var            *varp,
+                      const NC_dimarray *dims)
+{
+    int i;
+    MPI_Offset product = 1;
+
+    if (varp->ndims == 0) goto out;
+
+    /* determine shape[] of the variable */
+    for (i=0; i<varp->ndims; i++) {
+        /* For file create, varp->dimids[i] has been checked in ncmpi_def_var()
+         * in dispatchers/variable.c. For file open, it has been checked in
+         * hdr_get_NC_var() in ncmpio_header_get.c */
+
+        varp->shape[i] = dims->value[varp->dimids[i]]->size;
+
+        /* check for record variable, only the highest dimension can
+         * be unlimited */
+        if (varp->shape[i] == NC_UNLIMITED && i != 0)
+            DEBUG_RETURN_ERROR(NC_EUNLIMPOS)
+    }
+
+    /*
+     * compute dsizes[], from right to left product of shape
+     */
+    product = 1;
+    if (varp->ndims == 1) {
+        if (varp->shape[0] == NC_UNLIMITED)
+            varp->dsizes[0] = 1;
+        else {
+            varp->dsizes[0] = varp->shape[0];
+            product = varp->shape[0];
+        }
+    }
+    else { /* varp->ndims > 1 */
+        varp->dsizes[varp->ndims-1] = varp->shape[varp->ndims-1];
+        product = varp->shape[varp->ndims-1];
+        for (i=varp->ndims-2; i>=0; i--) {
+            if (varp->shape[i] != NC_UNLIMITED)
+                product *= varp->shape[i];
+            varp->dsizes[i] = product;
+        }
+    }
+
+out :
+    /* No variable size can be > X_INT64_MAX - 3 */
+    if (0 == ncmpio_NC_check_vlen(varp, X_INT64_MAX-3)) return NC_EVARSIZE;
+
+    /*
+     * For CDF-1 and CDF-2 formats, the total number of array elements
+     * cannot exceed 2^32, unless this variable is the last fixed-size
+     * variable, there is no record variable, and the file starting
+     * offset of this variable is less than 2GiB.
+     * We will check this in ncmpi_enddef() which calls ncmpio_NC_enddef()
+     * which calls ncmpio_NC_check_vlens()
+     *
+    if (ncp->format < 5 && product >= X_UINT_MAX)
+        DEBUG_RETURN_ERROR(NC_EVARSIZE)
+     */
+
+    /*
+     * align variable size to 4 byte boundary, required by all netcdf
+     * file formats
+     */
+    varp->len = product * varp->xsz;
+    if (varp->len % 4 > 0)
+        varp->len += 4 - varp->len % 4; /* round up */
+
+    return NC_NOERR;
+}
+
+#if 0
+/*----< ncmpio_NC_lookupvar() >----------------------------------------------*/
+/* Given valid ncp and varid, return varp */
+int
+ncmpio_NC_lookupvar(NC      *ncp,
+                    int      varid,
+                    NC_var **varp)
+{
+    if (varid == NC_GLOBAL) /* Global is error in this context */
+        DEBUG_RETURN_ERROR(NC_EGLOBAL)
+
+    *varp = elem_NC_vararray(&ncp->vars, varid);
+    if (*varp == NULL) /* could not find variable with varid */
+        DEBUG_RETURN_ERROR(NC_ENOTVAR)
+
+    return NC_NOERR;
+}
+#endif
+
+/*----< ncmpio_def_var() >---------------------------------------------------*/
+int
+ncmpio_def_var(void       *ncdp,
+               const char *name,
+               nc_type     xtype,
+               int         ndims,
+               const int  *dimids,
+               int        *varidp)
+{
+    int err=NC_NOERR;
+    char *nname=NULL; /* normalized name */
+    NC *ncp=(NC*)ncdp;
+    NC_var *varp=NULL;
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) goto err_check;
+
+    /* allocate a new NC_var object */
+    varp = ncmpio_new_NC_var(nname, ndims);
+    if (varp == NULL) {
+        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
+        goto err_check;
+    }
+    /* sanity check for xtype has been done at dispatchers */
+    varp->xtype = xtype;
+    ncmpii_xlen_nc_type(xtype, &varp->xsz);
+
+    /* copy dimids[] */
+    if (ndims != 0 && dimids != NULL)
+        memcpy(varp->dimids, dimids, (size_t)ndims * SIZEOF_INT);
+
+    /* set up array dimensional structures */
+    err = ncmpio_NC_var_shape64(varp, &ncp->dims);
+    if (err != NC_NOERR) {
+        ncmpio_free_NC_var(varp);
+        nname = NULL; /* already freed in ncmpio_free_NC_var() */
+        goto err_check;
+    }
+
+    /* allocate/expand ncp->vars.value array */
+    if (ncp->vars.ndefined % NC_ARRAY_GROWBY == 0) {
+        size_t alloc_size = (size_t)ncp->vars.ndefined + NC_ARRAY_GROWBY;
+        ncp->vars.value = (NC_var **) NCI_Realloc(ncp->vars.value,
+                                      alloc_size * sizeof(NC_var*));
+        if (ncp->vars.value == NULL) {
+            ncmpio_free_NC_var(varp);
+            nname = NULL; /* already freed in ncmpio_free_NC_var() */
+            err = NC_ENOMEM;
+            goto err_check;
+        }
+    }
+
+    varp->varid = ncp->vars.ndefined; /* varid */
+
+    /* Add a new handle to the end of an array of handles */
+    ncp->vars.value[ncp->vars.ndefined] = varp;
+
+    ncp->vars.ndefined++;
+
+err_check:
+    if (ncp->safe_mode) {
+        int minE, mpireturn;
+
+        /* first check the error code across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN, ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            if (nname != NULL) NCI_Free(nname);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        }
+        if (minE != NC_NOERR) {
+            if (nname != NULL) NCI_Free(nname);
+            return minE;
+        }
+    }
+
+    if (err != NC_NOERR) {
+        if (nname != NULL) NCI_Free(nname);
+        return err;
+    }
+
+    assert(nname != NULL);
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* insert nname to the lookup table */
+    ncmpio_hash_insert(ncp->vars.nameT, nname, varp->varid);
+#endif
+
+    if (varidp != NULL) *varidp = varp->varid;
+
+    /* default is NOFILL */
+    varp->no_fill = 1;
+
+    /* change to FILL only if the entire dataset fill mode is FILL */
+    if (NC_dofill(ncp)) varp->no_fill = 0;
+
+    return NC_NOERR;
+}
+
+
+/*----< ncmpio_inq_varid() >-------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpio_inq_varid(void       *ncdp,
+                 const char *name,
+                 int        *varid)
+{
+    int err=NC_NOERR;
+    char *nname=NULL; /* normalized name */
+    NC *ncp=(NC*)ncdp;
+
+    /* create a normalized character string */
+    err = ncmpii_utf8_normalize(name, &nname);
+    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+
+    err = NC_findvar(&ncp->vars, nname, varid);
+    NCI_Free(nname);
+    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+
+    return NC_NOERR;
+}
+
+/*----< ncmpio_inq_var() >---------------------------------------------------*/
+/* This is an independent subroutine */
+int
+ncmpio_inq_var(void       *ncdp,
+               int         varid,
+               char       *name,
+               nc_type    *xtypep,
+               int        *ndimsp,
+               int        *dimids,
+               int        *nattsp,
+               MPI_Offset *offsetp,
+               int        *no_fillp,    /* OUT: 1 not fill mode, 0 fill mode */
+               void       *fill_valuep) /* OUT: user-defined or default fill value */
+{
+    int err=NC_NOERR;
+    NC *ncp=(NC*)ncdp;
+    NC_var *varp=NULL;
+
+    /* using NC_GLOBAL in varid is illegal for this API, except for inquiring
+     * natts. See
+     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
+     * Checking NC_GLOBAL has been done at the calling routines at top level.
+    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
+     */
+
+    if (varid == NC_GLOBAL) {
+        /* in this case, all other pointer arguments must be NULLs */
+        if (nattsp != NULL)
+            *nattsp = ncp->attrs.ndefined;
+        return NC_NOERR;
+    }
+
+#if 0
+    varp = elem_NC_vararray(&ncp->vars, varid);
+    if (varp == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
+#else
+    varp = ncp->vars.value[varid];
+#endif
+
+    if (name != NULL)
+        /* in PnetCDF, name is always NULL character terminated */
+        strcpy(name, varp->name);
+
+    if (xtypep != NULL)
+        *xtypep = varp->xtype;
+
+    if (ndimsp != NULL) {
+#ifdef ENABLE_SUBFILING
+        /* varp->num_subfiles is already set during open or enddef */
+        if (varp->num_subfiles > 1)
+            *ndimsp = varp->ndims_org;
+        else
+#endif
+            *ndimsp = varp->ndims;
+    }
+    if (dimids != NULL) {
+#ifdef ENABLE_SUBFILING
+        /* varp->dimids_org is already set during open or enddef */
+        if (varp->num_subfiles > 1)
+            memcpy(dimids, varp->dimids_org, (size_t)varp->ndims_org * SIZEOF_INT);
+        else
+#endif
+            memcpy(dimids, varp->dimids, (size_t)varp->ndims * SIZEOF_INT);
+    }
+    if (nattsp != NULL) *nattsp = varp->attrs.ndefined;
+
+    if (offsetp != NULL) *offsetp = varp->begin;
+
+    if (no_fillp != NULL) *no_fillp = varp->no_fill;
+
+    if (fill_valuep != NULL) {
+        err = ncmpio_inq_var_fill(varp, fill_valuep);
+        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+    }
+
+    return NC_NOERR;
+}
+
+
+/*----< ncmpio_rename_var() >------------------------------------------------*/
+/* This API is collective.
+ * If the new name is longer than the old name, the netCDF file must be in
+ * define mode. Otherwise, it can be called in either define or data mode.
+ */
+int
+ncmpio_rename_var(void       *ncdp,
+                  int         varid,
+                  const char *newname)
+{
+    int err=NC_NOERR;
+    char *nnewname=NULL; /* normalized name */
+    size_t nnewname_len=0;
+    NC *ncp=(NC*)ncdp;
+    NC_var *varp=NULL;
+
+    /* check whether variable ID is valid */
+    /* sanity check for ncdp and varid has been done in dispatchers */
+    varp = ncp->vars.value[varid];
+
+    /* create a normalized character string */ 
+    err = ncmpii_utf8_normalize(newname, &nnewname);
+    if (err != NC_NOERR) goto err_check;
+
+    nnewname_len = strlen(nnewname);
+
+    if (! NC_indef(ncp) && varp->name_len < nnewname_len) {
+        /* when in data mode, newname cannot be longer thne the old one */
+        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
+        goto err_check;
+    }
+
+#ifndef SEARCH_NAME_LINEARLY
+    /* update var name lookup table */
+    err = ncmpio_update_name_lookup_table(ncp->vars.nameT, varid,
+                        ncp->vars.value[varid]->name, nnewname);
+    if (err != NC_NOERR) {
+        DEBUG_TRACE_ERROR(err)
+        goto err_check;
+    }
+#endif
+
+err_check:
+    if (ncp->safe_mode) {
+        int minE, mpireturn;
+
+        /* First check error code so far across processes */
+        TRACE_COMM(MPI_Allreduce)(&err, &minE, 1, MPI_INT, MPI_MIN,ncp->comm);
+        if (mpireturn != MPI_SUCCESS) {
+            if (nnewname != NULL) NCI_Free(nnewname);
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+        }
+        if (minE != NC_NOERR) {
+            if (nnewname != NULL) NCI_Free(nnewname);
+            return minE;
+        }
+    }
+
+    if (err != NC_NOERR) {
+        if (nnewname != NULL) NCI_Free(nnewname);
+        return err;
+    }
+
+    assert(varp != NULL);
+
+    /* replace the old name with new name */
+    NCI_Free(varp->name);
+    varp->name     = nnewname;
+    varp->name_len = nnewname_len;
+
+    if (! NC_indef(ncp)) { /* when file is in data mode */
+        /* Let root write the entire header to the file. Note that we cannot
+         * just update the variable name in its space occupied in the file
+         * header, because if the file space occupied by the name shrinks, all
+         * the metadata following it must be moved ahead.
+         */
+        err = ncmpio_write_header(ncp);
+        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
+    }
+
+    return err;
+}
+
diff --git a/src/drivers/ncmpio/ncmpio_vard.c b/src/drivers/ncmpio/ncmpio_vard.c
new file mode 100644
index 0000000..53a56b3
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_vard.c
@@ -0,0 +1,412 @@
+/*
+ *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_vard.c 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/var_getput.m4
+ *
+ * ncmpi_get_vard() : dispatcher->get_vard()
+ * ncmpi_put_vard() : dispatcher->put_vard()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <string.h> /* memcpy() */
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
+
+/* for write case, buf needs to swapped back if swapped previously */
+#define FINAL_CLEAN_UP {                                                 \
+    if (is_buf_swapped) /* byte-swap back to buf's original contents */  \
+        ncmpii_in_swapn(buf, bnelems, varp->xsz);                        \
+                                                                         \
+    if (cbuf != NULL && cbuf != buf) NCI_Free(cbuf);                     \
+}
+
+/*----< getput_vard() >------------------------------------------------------*/
+static int
+getput_vard(NC               *ncp,
+            NC_var           *varp,
+            MPI_Datatype      filetype, /* access layout in the file */
+            void             *buf,
+            MPI_Offset        bufcount,
+            MPI_Datatype      buftype,  /* data type of the bufer */
+            int               reqMode)
+{
+    void *cbuf=NULL;
+    int i, isderived, el_size, mpireturn, status=NC_NOERR, err=NC_NOERR;
+    int buftype_is_contig=0, filetype_is_contig=1, is_buf_swapped=0;
+    int need_swap=0, filetype_size=0, buftype_size=0;
+    MPI_Offset btnelems=0, bnelems=0, offset=0, orig_bufcount=bufcount;
+    MPI_Status mpistatus;
+    MPI_Datatype ptype, orig_buftype=buftype;
+    MPI_File fh=MPI_FILE_NULL;
+    MPI_Aint lb, extent=0, true_lb, true_extent;
+
+    if (filetype == MPI_DATATYPE_NULL) {
+        /* this process does zero-length I/O */
+        if (fIsSet(reqMode, NC_REQ_INDEP)) return NC_NOERR;
+        bufcount = 0;
+        goto err_check;
+    }
+
+    if (bufcount == 0 && buftype != MPI_DATATYPE_NULL) {
+        /* if this process has nothing to read/write */
+        if (fIsSet(reqMode, NC_REQ_INDEP)) return NC_NOERR;
+        goto err_check;
+    }
+
+#ifdef ENABLE_SUBFILING
+    /* call a separate routine if variable is stored in subfiles */
+    if (varp->num_subfiles > 1) {
+        printf("This feature for subfiling is yet to implement\n");
+        DEBUG_RETURN_ERROR(NC_ENOTSUPPORT)
+    }
+#endif
+
+    /* PROBLEM: argument filetype_size is a 4-byte integer, cannot be used
+     * for largefiletypes */
+    mpireturn = MPI_Type_size(filetype, &filetype_size);
+    if (mpireturn != MPI_SUCCESS) {
+        err = ncmpii_error_mpi2nc(mpireturn, "MPI_Type_size");
+        goto err_check;
+    }
+
+    if (filetype_size == 0) { /* zero-length request */
+        if (fIsSet(reqMode, NC_REQ_INDEP)) return NC_NOERR;
+        bufcount = 0;
+        goto err_check;
+    }
+
+    MPI_Type_get_true_extent(filetype, &true_lb, &true_extent);
+    MPI_Type_get_extent(filetype, &lb, &extent);
+
+    if (!IS_RECVAR(varp)) {
+        /* for fixed-size variable, extent should not be larger than the
+         * variabe size */
+        MPI_Offset var_size = varp->xsz;
+        for (i=0; i<varp->ndims; i++)
+            var_size *= varp->shape[i];
+
+        if (extent > var_size) {
+            DEBUG_ASSIGN_ERROR(err, NC_ETYPESIZE)
+            goto err_check;
+        }
+    }
+
+    cbuf = (void*) buf;
+
+    /* find the element type of filetype */
+    err = ncmpii_dtype_decode(filetype, &ptype, &el_size, &btnelems,
+                              &isderived, &filetype_is_contig);
+    if (err != NC_NOERR) goto err_check;
+
+    /* element type of filetype must be the same as variable's type */
+    if (ptype != ncmpii_nc2mpitype(varp->xtype)) {
+        DEBUG_ASSIGN_ERROR(err, NC_ETYPE_MISMATCH)
+        goto err_check;
+    }
+
+    if (bufcount != (int)bufcount) {
+        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
+        goto err_check;
+    }
+
+    if (buftype == MPI_DATATYPE_NULL) {
+        /* In this case, bufcount is ignored and will be set to the size of
+         * filetype. Note buf's data type must match the data type of variable
+         * defined in the file - no data conversion will be done.
+         */
+        /* set buftype to the variable's data type */
+        buftype = ncmpii_nc2mpitype(varp->xtype);
+        MPI_Type_size(buftype, &buftype_size);
+        bufcount = filetype_size / buftype_size;
+        buftype_is_contig = 1;
+        bnelems = bufcount;
+    }
+    else {
+        MPI_Offset outsize;
+
+        /* find whether buftype is contiguous */
+        err = ncmpii_dtype_decode(buftype, &ptype, &el_size, &btnelems,
+                                  &isderived, &buftype_is_contig);
+        if (err != NC_NOERR) goto err_check;
+
+        err = NCMPII_ECHAR(varp->xtype, ptype);
+        if (err != NC_NOERR) goto err_check;
+
+        if (btnelems != (int)btnelems) {
+            DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
+            goto err_check;
+        }
+
+        bnelems      = bufcount * btnelems;
+        buftype_size = el_size  * (int)btnelems;
+        outsize      = bufcount * buftype_size;
+
+        if (outsize != filetype_size) {
+            DEBUG_ASSIGN_ERROR(err, NC_ETYPESIZE_MISMATCH)
+            goto err_check;
+        }
+
+        /* if buf is not contiguous, we need to pack it to one, cbuf */
+        if (!buftype_is_contig && bnelems > 0) {
+            cbuf = NCI_Malloc((size_t)outsize);
+
+            if (fIsSet(reqMode, NC_REQ_WR)) {
+                /* pack buf into cbuf, a contiguous buffer */
+                int position = 0;
+                MPI_Pack(buf, (int)bufcount, buftype, cbuf, (int)outsize,
+                         &position, MPI_COMM_SELF);
+            }
+            buftype = ptype;
+            bufcount *= bnelems;
+            buftype_size = el_size;
+        }
+    }
+
+    /* Check if we need byte swap cbuf in-place or (into cbuf) */
+    need_swap = ncmpii_need_swap(varp->xtype, ptype);
+    if (need_swap) {
+        if (fIsSet(reqMode, NC_REQ_WR)) {
+#ifdef DISABLE_IN_PLACE_SWAP
+            if (cbuf == buf)
+#else
+            if (cbuf == buf && filetype_size <= NC_BYTE_SWAP_BUFFER_SIZE)
+#endif
+            {
+                /* allocate cbuf and copy buf to cbuf, cbuf is to be freed */
+                cbuf = NCI_Malloc((size_t)filetype_size);
+                memcpy(cbuf, buf, (size_t)filetype_size);
+            }
+            /* perform array in-place byte swap on cbuf */
+            ncmpii_in_swapn(cbuf, bnelems, varp->xsz);
+            is_buf_swapped = (cbuf == buf) ? 1 : 0;
+            /* is_buf_swapped indicates if the contents of the original user
+             * buffer, buf, have been changed, i.e. byte swapped. */
+        }
+    }
+    /* no type conversion */
+
+    /* set fileview's displacement to the variable's starting file offset */
+    offset = varp->begin;
+
+err_check:
+    /* check API error from any proc before going into a collective call.
+     * optimization: to avoid MPI_Allreduce to check parameters at every call,
+     * we assume caller does the right thing most of the time.  If caller
+     * passed in bad parameters, we'll still conduct a zero-byte operation
+     * (everyone has to participate in the collective I/O call) but return
+     * the error at the end.
+     */
+    if (err != NC_NOERR || bufcount == 0 || filetype_size == 0) {
+        if (fIsSet(reqMode, NC_REQ_INDEP)) {
+            FINAL_CLEAN_UP  /* swap back put buffer and free temp buffers */
+            return err;
+        }
+        /* else for NC_REQ_COLL, must participate successive collective calls */
+        offset = 0;
+        bufcount = 0;
+    }
+    status = err;
+
+    if (fIsSet(reqMode, NC_REQ_INDEP))
+        fh = ncp->independent_fh;
+    else
+        fh = ncp->collective_fh;
+
+    /* set the file view */
+    err = ncmpio_file_set_view(ncp, fh, &offset, filetype);
+    if (err != NC_NOERR) {
+        bufcount = 0; /* skip this request */
+        if (status == NC_NOERR) status = err;
+    }
+
+#ifdef _USE_MPI_GET_COUNT
+    /* explicitly initialize mpistatus object to 0, see comments below */
+    memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+
+    if (fIsSet(reqMode, NC_REQ_WR)) {
+        if (fIsSet(reqMode, NC_REQ_COLL)) {
+            TRACE_IO(MPI_File_write_at_all)(fh, offset, cbuf, (int)bufcount,
+                                            buftype, &mpistatus);
+            if (mpireturn != MPI_SUCCESS)
+                return ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at_all");
+        }
+        else { /* independent API */
+            TRACE_IO(MPI_File_write_at)(fh, offset, cbuf, (int)bufcount,
+                                        buftype, &mpistatus);
+            if (mpireturn != MPI_SUCCESS)
+                return ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at");
+        }
+        if (mpireturn == MPI_SUCCESS) {
+#ifdef _USE_MPI_GET_COUNT
+            int put_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
+            ncp->put_size += put_size;
+#else
+            ncp->put_size += bufcount * buftype_size;
+#endif
+        }
+    }
+    else {  /* read request */
+        if (fIsSet(reqMode, NC_REQ_COLL)) {
+            TRACE_IO(MPI_File_read_at_all)(fh, offset, cbuf, (int)bufcount,
+                                           buftype, &mpistatus);
+            if (mpireturn != MPI_SUCCESS)
+                return ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at_all");
+        }
+        else { /* independent API */
+            TRACE_IO(MPI_File_read_at)(fh, offset, cbuf, (int)bufcount,
+                                       buftype, &mpistatus);
+            if (mpireturn != MPI_SUCCESS)
+                return ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at");
+        }
+        if (mpireturn == MPI_SUCCESS) {
+#ifdef _USE_MPI_GET_COUNT
+            int get_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &get_size);
+            ncp->get_size += get_size;
+#else
+            ncp->get_size += bufcount * buftype_size;
+#endif
+        }
+    }
+
+    /* No longer need to reset the file view, as the root's fileview includes
+     * the whole file header.
+     MPI_File_set_view(fh, 0, MPI_BYTE, MPI_BYTE, "native", MPI_INFO_NULL);
+     */
+
+    if (fIsSet(reqMode, NC_REQ_RD)) {
+        if (need_swap)
+            /* perform array in-place byte swap on cbuf */
+            ncmpii_in_swapn(cbuf, bnelems, varp->xsz);
+
+        if (!buftype_is_contig && bnelems > 0) {
+            /* unpack cbuf, a contiguous buffer, to buf using buftype */
+            int position = 0;
+            MPI_Offset insize = bnelems * el_size;
+            if (insize != (int)insize) {
+                if (status == NC_NOERR)
+                    DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
+            }
+            else
+                MPI_Unpack(cbuf, (int)insize, &position, buf,
+                           (int)orig_bufcount, orig_buftype, MPI_COMM_SELF);
+        }
+    }
+    else { /* write request */
+        if (IS_RECVAR(varp)) {
+            /* update header's number of records in memory */
+            MPI_Offset new_numrecs;
+
+            /* since filetype's LB is required to be == varp->begin for vard
+             * API, we can simply use extent to calculate new_numrecs */
+            new_numrecs = extent / ncp->recsize;
+            if (extent % ncp->recsize) new_numrecs++;
+
+            if (fIsSet(reqMode, NC_REQ_INDEP)) {
+                /* For independent put, we delay the sync for numrecs until
+                 * the next collective call, such as end_indep(), sync(),
+                 * enddef(), or close(). This is because if we update numrecs
+                 * to file now, race condition can happen. Note numrecs in
+                 * memory may be inconsistent and obsolete till then.
+                 */
+                if (ncp->numrecs < new_numrecs) {
+                    ncp->numrecs = new_numrecs;
+                    set_NC_ndirty(ncp);
+                }
+            }
+            else { /* NC_REQ_COLL: sync numrecs in memory and file */
+                /* new_numrecs may be different among processes.
+                 * First, find the max numrecs among all processes.
+                 */
+                MPI_Offset max_numrecs;
+                TRACE_COMM(MPI_Allreduce)(&new_numrecs, &max_numrecs, 1,
+                                          MPI_OFFSET, MPI_MAX, ncp->comm);
+                if (mpireturn != MPI_SUCCESS) {
+                    err = ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce");
+                    if (status == NC_NOERR) status = err;
+                }
+                /* In collective mode, ncp->numrecs is always sync-ed among
+                   processes */
+                if (ncp->numrecs < max_numrecs) {
+                    err = ncmpio_write_numrecs(ncp, max_numrecs);
+                    if (status == NC_NOERR) status = err;
+                    ncp->numrecs = max_numrecs;
+                }
+            }
+        }
+
+        if (NC_doFsync(ncp)) { /* NC_SHARE is set */
+            TRACE_IO(MPI_File_sync)(fh);
+            if (fIsSet(reqMode, NC_REQ_COLL))
+                TRACE_COMM(MPI_Barrier)(ncp->comm);
+        }
+    }
+
+    FINAL_CLEAN_UP  /* swap back the put buffer and free temp buffers */
+
+    return status;
+}
+
+/*----< ncmpio_get_vard() >--------------------------------------------------*/
+int
+ncmpio_get_vard(void         *ncdp,
+                int           varid,
+                MPI_Datatype  filetype,  /* access layout in file */
+                void         *buf,
+                MPI_Offset    bufcount,
+                MPI_Datatype  buftype,   /* data type of the buffer */
+                int           reqMode)
+{
+    NC *ncp=(NC*)ncdp;
+
+    if (fIsSet(reqMode, NC_REQ_ZERO) && fIsSet(reqMode, NC_REQ_COLL))
+        /* this collective API has a zero-length request */
+        return ncmpio_getput_zero_req(ncp, reqMode);
+
+    /* Note sanity check for ncdp and varid has been done in dispatchers */
+
+    return getput_vard(ncp, ncp->vars.value[varid], filetype, buf, bufcount,
+                       buftype, reqMode);
+}
+
+/*----< ncmpio_put_vard() >--------------------------------------------------*/
+int
+ncmpio_put_vard(void         *ncdp,
+                int           varid,
+                MPI_Datatype  filetype, /* access layout in the file */
+                const void   *buf,
+                MPI_Offset    bufcount,
+                MPI_Datatype  buftype,   /* data type of the buffer */
+                int           reqMode)
+{
+    NC *ncp=(NC*)ncdp;
+
+    if (fIsSet(reqMode, NC_REQ_ZERO) && fIsSet(reqMode, NC_REQ_COLL))
+        /* this collective API has a zero-length request */
+        return ncmpio_getput_zero_req(ncp, reqMode);
+
+    /* Note sanity check for ncdp and varid has been done in dispatchers */
+
+    return getput_vard(ncp, ncp->vars.value[varid], filetype, (void*)buf,
+                       bufcount, buftype, reqMode);
+}
diff --git a/src/drivers/ncmpio/ncmpio_varn.m4 b/src/drivers/ncmpio/ncmpio_varn.m4
new file mode 100644
index 0000000..12a995e
--- /dev/null
+++ b/src/drivers/ncmpio/ncmpio_varn.m4
@@ -0,0 +1,279 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
+/*
+ *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: ncmpio_varn.m4 3341 2017-08-25 22:29:08Z wkliao $ */
+
+/*
+ * This file implements the corresponding APIs defined in
+ * src/dispatchers/var_getput.m4
+ *
+ * ncmpi_get_varn_<type>() : dispatcher->get_varn()
+ * ncmpi_put_varn_<type>() : dispatcher->put_varn()
+ */
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <unistd.h>
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <assert.h>
+
+#include <mpi.h>
+
+#include <pnc_debug.h>
+#include <common.h>
+#include <ncx.h>
+#include "ncmpio_NC.h"
+
+/*----< getput_varn() >------------------------------------------------------*/
+/* The current implementation for varn APIs is to make num calls to iget/iput
+ * APIs, although an alternative is to flatten each start-count request into
+ * a list of offset-length pairs and concatenate all lists into a hindexed
+ * data type.
+ */
+static int
+getput_varn(NC                *ncp,
+            NC_var            *varp,
+            int                num,
+            MPI_Offset* const *starts,  /* [num][varp->ndims] */
+            MPI_Offset* const *counts,  /* [num][varp->ndims] */
+            void              *buf,
+            MPI_Offset         bufcount,
+            MPI_Datatype       buftype,   /* data type of the buffer */
+            int                reqMode)
+{
+    int i, j, el_size, status=NC_NOERR, min_st, err, free_cbuf=0;
+    int req_id=NC_REQ_NULL, isSameGroup, position;
+    void *cbuf=NULL;
+    char *bufp;
+    MPI_Offset packsize=0, **_counts=NULL;
+    MPI_Datatype ptype;
+
+    /* check for zero-size request */
+    if (num == 0 || bufcount == 0) goto err_check;
+
+    /* it is illegal for starts to be NULL */
+    if (starts == NULL) {
+        DEBUG_ASSIGN_ERROR(status, NC_ENULLSTART)
+        goto err_check;
+    }
+    else { /* it is illegal for any starts[i] to be NULL */
+        for (i=0; i<num; i++) {
+            if (starts[i] == NULL) {
+                DEBUG_ASSIGN_ERROR(status, NC_ENULLSTART)
+                goto err_check;
+            }
+        }
+    }
+
+    if (buftype == MPI_DATATYPE_NULL) {
+        /* In this case, bufcount is ignored and will be recalculated to match
+         * counts[]. Note buf's data type must match the data type of
+         * variable defined in the file - no data conversion will be done.
+         */
+        if (counts == NULL)
+            bufcount = 1;
+        else {
+            bufcount = 0;
+            for (j=0; j<num; j++) {
+                MPI_Offset bufcount_j = 1;
+                if (counts[i] == NULL) {
+                    DEBUG_ASSIGN_ERROR(status, NC_ENULLCOUNT)
+                    goto err_check;
+                }
+                for (i=0; i<varp->ndims; i++) {
+                    if (counts[j][i] < 0) { /* no negative counts[][] */
+                        DEBUG_ASSIGN_ERROR(status, NC_ENEGATIVECNT)
+                        goto err_check;
+                    }
+                    bufcount_j *= counts[j][i];
+                }
+                bufcount += bufcount_j;
+            }
+        }
+        /* assign buftype match with the variable's data type */
+        buftype = ncmpii_nc2mpitype(varp->xtype);
+    }
+
+    cbuf = buf;
+    if (bufcount > 0) { /* flexible API is used */
+        /* pack buf into cbuf, a contiguous buffer */
+        int isderived, iscontig_of_ptypes;
+        MPI_Offset bnelems=0;
+
+        /* ptype (primitive MPI data type) from buftype
+         * el_size is the element size of ptype
+         * bnelems is the total number of ptype elements in buftype
+         */
+        status = ncmpii_dtype_decode(buftype, &ptype, &el_size, &bnelems,
+                                     &isderived, &iscontig_of_ptypes);
+
+        if (status != NC_NOERR) goto err_check;
+
+        if (bufcount != (int)bufcount) {
+            DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
+            goto err_check;
+        }
+
+        /* check if buftype is contiguous, if not, pack to one, cbuf */
+        if (! iscontig_of_ptypes && bnelems > 0) {
+            position = 0;
+            packsize  = bnelems*el_size;
+            if (packsize != (int)packsize) {
+                DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
+                goto err_check;
+            }
+            cbuf = NCI_Malloc((size_t)packsize);
+            free_cbuf = 1;
+            if (fIsSet(reqMode, NC_REQ_WR))
+                MPI_Pack(buf, (int)bufcount, buftype, cbuf, (int)packsize,
+                         &position, MPI_COMM_SELF);
+        }
+    }
+    else {
+        /* this subroutine is called from a high-level API */
+        status = NCMPII_ECHAR(varp->xtype, buftype);
+        if (status != NC_NOERR) goto err_check;
+
+        ptype = buftype;
+        el_size = varp->xsz;
+    }
+
+    /* We allow counts == NULL and treat this the same as all 1s */
+    if (counts == NULL) {
+        _counts    = (MPI_Offset**) NCI_Malloc((size_t)num *
+                                               sizeof(MPI_Offset*));
+        _counts[0] = (MPI_Offset*)  NCI_Malloc((size_t)num * varp->ndims *
+                                               SIZEOF_MPI_OFFSET);
+        for (i=1; i<num; i++)
+            _counts[i] = _counts[i-1] + varp->ndims;
+        for (i=0; i<num; i++)
+            for (j=0; j<varp->ndims; j++)
+                _counts[i][j] = 1;
+    }
+    else
+        _counts = (MPI_Offset**) counts;
+
+    /* break buf into num pieces */
+    isSameGroup=0;
+    bufp = (char*)cbuf;
+    for (i=0; i<num; i++) {
+        MPI_Offset buflen;
+        for (buflen=1, j=0; j<varp->ndims; j++) {
+            if (_counts[i][j] < 0) { /* any negative counts[][] is illegal */
+                DEBUG_ASSIGN_ERROR(status, NC_ENEGATIVECNT)
+                goto err_check;
+            }
+            buflen *= _counts[i][j];
+        }
+        if (buflen == 0) continue;
+        status = ncmpio_igetput_varm(ncp, varp, starts[i], _counts[i], NULL,
+                                     NULL, bufp, buflen, ptype, &req_id,
+                                     reqMode, isSameGroup);
+        /* req_id is reused because requests in a varn is considered in the
+         * same group */
+        if (status != NC_NOERR) goto err_check;
+
+        /* use isSamegroup so we end up with one nonblocking request (only the
+         * first request gets a request ID back, the rest reuse the same ID.
+         * This single ID represents num nonblocking requests */
+        isSameGroup=1;
+        bufp += buflen * el_size;
+    }
+
+err_check:
+    if (_counts != NULL && _counts != counts) {
+        NCI_Free(_counts[0]);
+        NCI_Free(_counts);
+    }
+
+    if (ncp->safe_mode == 1 && fIsSet(reqMode, NC_REQ_COLL)) {
+        int mpireturn;
+        TRACE_COMM(MPI_Allreduce)(&status, &min_st, 1, MPI_INT, MPI_MIN,
+                                  ncp->comm);
+        if (mpireturn != MPI_SUCCESS)
+            return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce"); 
+
+        if (min_st != NC_NOERR) {
+            if (req_id != NC_REQ_NULL) /* cancel pending nonblocking request */
+                ncmpio_cancel(ncp, 1, &req_id, NULL);
+            if (free_cbuf) NCI_Free(cbuf);
+            return status;
+        }
+    }
+
+    if (fIsSet(reqMode, NC_REQ_INDEP) && status != NC_NOERR) {
+        if (req_id != NC_REQ_NULL) /* cancel pending nonblocking request */
+            ncmpio_cancel(ncp, 1, &req_id, NULL);
+        if (free_cbuf) NCI_Free(cbuf);
+        return status;
+    }
+
+    if (status == NC_NOERR)
+        err = ncmpio_wait(ncp, 1, &req_id, NULL, reqMode);
+    else
+        /* This can only be reached for NC_REQ_COLL and safe_mode == 0.
+         * Let this process participate the collective calls in wait_all */
+        err = ncmpio_wait(ncp, 0, NULL, NULL, reqMode);
+
+    /* if error occurs, it is reflected in err */
+
+    /* unpack cbuf to user buf, if buftype is noncontiguous */
+    if (status == NC_NOERR && fIsSet(reqMode, NC_REQ_RD) && free_cbuf) {
+        position = 0;
+        MPI_Unpack(cbuf, (int)packsize, &position, buf, (int)bufcount, buftype,
+                   MPI_COMM_SELF);
+    }
+
+    /* return the first error, if there is one */
+    if (status == NC_NOERR) status = err;
+
+    if (free_cbuf) NCI_Free(cbuf);
+
+    return status;
+}
+
+include(`utils.m4')
+
+dnl
+define(`VARN',dnl
+`dnl
+/*----< ncmpio_$1_varn() >--------------------------------------------------*/
+int
+ncmpio_$1_varn(void              *ncdp,
+               int                varid,
+               int                num,
+               MPI_Offset* const *starts,
+               MPI_Offset* const *counts,
+               ifelse(`$1',`put',`const') void *buf,
+               MPI_Offset         bufcount,
+               MPI_Datatype       buftype,
+               int                reqMode)
+{
+    NC *ncp=(NC*)ncdp;
+
+    if (fIsSet(reqMode, NC_REQ_ZERO) && fIsSet(reqMode, NC_REQ_COLL))
+        /* this collective API has a zero-length request */
+        return ncmpio_getput_zero_req(ncp, reqMode);
+
+    /* Note sanity check for ncdp and varid has been done in dispatchers */
+
+    return getput_varn(ncp, ncp->vars.value[varid], num, starts, counts,
+                       (void*)buf, bufcount, buftype, reqMode);
+}
+')dnl
+
+VARN(put)
+VARN(get)
+
diff --git a/src/lib/nonblocking.c b/src/drivers/ncmpio/ncmpio_wait.c
similarity index 76%
rename from src/lib/nonblocking.c
rename to src/drivers/ncmpio/ncmpio_wait.c
index 58024bd..c45b631 100644
--- a/src/lib/nonblocking.c
+++ b/src/drivers/ncmpio/ncmpio_wait.c
@@ -2,25 +2,30 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: nonblocking.c 2686 2016-12-07 20:02:41Z wkliao $ */
+/* $Id: ncmpio_wait.c 3389 2017-09-18 01:33:13Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+/*
+ * This file implements the corresponding APIs defined in src/dispatchers/file.c
+ *
+ * ncmpi_wait()     : dispatcher->wait()
+ * ncmpi_wait_all() : dispatcher->wait()
+ * ncmpi_cancel()   : dispatcher->cancel()
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
-#endif
+#include <string.h> /* memset() */
 #include <assert.h>
 
 #include <mpi.h>
 
-#include "nc.h"
-#include "ncx.h"
-#include "ncmpidtype.h"
-#include "macro.h"
+#include <pnc_debug.h>
+#include <common.h>
+#include "ncmpio_NC.h"
 
 
 /* buffer layers:
@@ -31,13 +36,13 @@
 */
 
 /* Prototypes for functions used only in this file */
-static int ncmpii_wait_getput(NC *ncp, int num_reqs, NC_req *reqs, int rw_flag,
-                              int io_method, MPI_Offset newnumrecs);
+static int wait_getput(NC *ncp, int num_reqs, NC_req *reqs, int rw_flag,
+                       int coll_indep, MPI_Offset newnumrecs);
 
-static int ncmpii_mgetput(NC *ncp, int num_reqs, NC_req *reqs, int rw_flag,
-                          int io_method);
+static int mgetput(NC *ncp, int num_reqs, NC_req *reqs, int rw_flag,
+                   int coll_indep);
 
-/*----< ncmpii_getput_zero_req() >--------------------------------------------*/
+/*----< ncmpio_getput_zero_req() >--------------------------------------------*/
 /* This function is called when this process has zero-length I/O request and
  * must participate all the MPI collective calls involved in the collective
  * APIs and wait_all(), which include setting fileview, collective read/write,
@@ -46,29 +51,31 @@ static int ncmpii_mgetput(NC *ncp, int num_reqs, NC_req *reqs, int rw_flag,
  * This function is collective.
  */
 int
-ncmpii_getput_zero_req(NC  *ncp,
-                       int  rw_flag)      /* WRITE_REQ or READ_REQ */
+ncmpio_getput_zero_req(NC *ncp, int reqMode)
 {
     int err, mpireturn, status=NC_NOERR;
     MPI_Status mpistatus;
     MPI_File fh;
 
-    fh = ncp->nciop->collective_fh;
+    /* do nothing if this came from an independent API */
+    if (fIsSet(reqMode, NC_REQ_INDEP)) return NC_NOERR;
+
+    fh = ncp->collective_fh;
 
     TRACE_IO(MPI_File_set_view)(fh, 0, MPI_BYTE, MPI_BYTE, "native",
                                 MPI_INFO_NULL);
 
-    if (rw_flag == READ_REQ) {
+    if (fIsSet(reqMode, NC_REQ_RD)) {
         TRACE_IO(MPI_File_read_all)(fh, NULL, 0, MPI_BYTE, &mpistatus);
         if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_read_all");
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_all");
             err = (err == NC_EFILE) ? NC_EREAD : err;
             DEBUG_ASSIGN_ERROR(status, err)
         }
-    } else { /* WRITE_REQ */
+    } else { /* write request */
         TRACE_IO(MPI_File_write_all)(fh, NULL, 0, MPI_BYTE, &mpistatus);
         if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_write_all");
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_all");
             err = (err == NC_EFILE) ? NC_EWRITE : err;
             DEBUG_ASSIGN_ERROR(status, err)
         }
@@ -83,10 +90,10 @@ ncmpii_getput_zero_req(NC  *ncp,
     return status;
 }
 
-/*----< ncmpii_abuf_coalesce() >---------------------------------------------*/
+/*----< abuf_coalesce() >----------------------------------------------------*/
 /* this function should be called after all bput requests have been served */
 static int
-ncmpii_abuf_coalesce(NC *ncp)
+abuf_coalesce(NC *ncp)
 {
     int i;
 
@@ -122,41 +129,24 @@ ncmpii_abuf_coalesce(NC *ncp)
     NCI_Free(req.start);                                                      \
 }
 
-/*----< ncmpi_cancel() >------------------------------------------------------*/
+/*----< ncmpio_cancel() >-----------------------------------------------------*/
 /* argument num_req can be NC_REQ_ALL, NC_GET_REQ_ALL, NC_PUT_REQ_ALL, or
  * non-negative value */
 int
-ncmpi_cancel(int  ncid,
-             int  num_req,
-             int *req_ids,  /* [num_req] */
-             int *statuses) /* [num_req] */
+ncmpio_cancel(void *ncdp,
+              int   num_req,
+              int  *req_ids,  /* [num_req]: IN/OUT */
+              int  *statuses) /* [num_req] can be NULL (ignore status) */
 {
-    int status;
-    NC *ncp;
+    int i, j, first_non_null_get, first_non_null_put, status=NC_NOERR;
+    NC *ncp=(NC*)ncdp;
 
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
+    if (num_req == 0) return NC_NOERR;
 
     /* 1.7.0 and after nonblocking APIs can be called in define mode.
     if (NC_indef(ncp)) DEBUG_RETURN_ERROR(NC_EINDEFINE)
     */
 
-    return ncmpii_cancel(ncp, num_req, req_ids, statuses);
-}
-
-/*----< ncmpii_cancel() >-----------------------------------------------------*/
-/* argument num_req can be NC_REQ_ALL, NC_GET_REQ_ALL, NC_PUT_REQ_ALL, or
- * non-negative value */
-int
-ncmpii_cancel(NC  *ncp,
-              int  num_req,
-              int *req_ids,  /* [num_req]: IN/OUT */
-              int *statuses) /* [num_req] can be NULL (ignore status) */
-{
-    int i, j, first_non_null_get, first_non_null_put, status=NC_NOERR;
-
-    if (num_req == 0) return NC_NOERR;
-
     if (num_req == NC_GET_REQ_ALL || num_req == NC_REQ_ALL) {
         /* cancel all pending read requests, ignore req_ids and statuses */
         for (i=0; i<ncp->numGetReqs; i++) {
@@ -183,7 +173,7 @@ ncmpii_cancel(NC  *ncp,
                 /* if user buffer is in-place byte-swapped, swap it back */
                 ncmpii_in_swapn(put_list[i].buf,
                                 put_list[i].bnelems * put_list[i].num_recs,
-                                ncmpix_len_nctype(put_list[i].varp->type));
+                                put_list[i].varp->xsz);
 
             if (put_list[i].tmpBuf != NULL && put_list[i].abuf_index == -1)
                 NCI_Free(put_list[i].tmpBuf);
@@ -259,7 +249,7 @@ ncmpii_cancel(NC  *ncp,
                             /* if user buffer is in-place byte-swapped, swap it back */
                             ncmpii_in_swapn(put_list[j].buf,
                                    put_list[j].bnelems * put_list[j].num_recs,
-                                   ncmpix_len_nctype(put_list[j].varp->type));
+                                   put_list[j].varp->xsz);
 
                         if (put_list[j].tmpBuf != NULL &&
                             put_list[j].abuf_index == -1)
@@ -287,7 +277,7 @@ ncmpii_cancel(NC  *ncp,
         /* retain the first error status */
         if (status == NC_NOERR) DEBUG_ASSIGN_ERROR(status, NC_EINVAL_REQUEST)
     }
-    if (ncp->abuf != NULL) ncmpii_abuf_coalesce(ncp);
+    if (ncp->abuf != NULL) abuf_coalesce(ncp);
 
     /* coalesce get_list */
     for (i=0,j=first_non_null_get; j<ncp->numGetReqs; j++) {
@@ -318,46 +308,16 @@ ncmpii_cancel(NC  *ncp,
     return status;
 }
 
-/*----< ncmpi_inq_nreqs() >---------------------------------------------------*/
-int
-ncmpi_inq_nreqs(int  ncid,
-                int *nreqs) /* OUT: number of pending requests */
-{
-    int  i, status;
-    NC  *ncp;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    /* cannot just use *nreqs = ncp->numGetReqs + ncp->numPutReqs;
-     * because some request IDs are repeated, such as record variables and
-     * varn requests
-     */
-    *nreqs = 0;
-    for (i=0; i<ncp->numGetReqs; i++) {
-        if (i > 0 && ncp->get_list[i].id == ncp->get_list[i-1].id)
-            continue;
-        (*nreqs)++;
-    }
-    for (i=0; i<ncp->numPutReqs; i++) {
-        if (i > 0 && ncp->put_list[i].id == ncp->put_list[i-1].id)
-            continue;
-        (*nreqs)++;
-    }
-
-    return NC_NOERR;
-}
-
 #ifndef ENABLE_REQ_AGGREGATION
 /*----< extract_reqs() >-----------------------------------------------------*/
 /* based on the request type, construct an array of unique request IDs.
  * Input value of *num_reqs is NC_REQ_ALL, NC_GET_REQ_ALL, or NC_PUT_REQ_ALL
  * The output of *num_reqs is the number of requests.
  */
-static
-void extract_reqs(NC   *ncp,
-                  int  *num_reqs, /* IN/OUT */
-                  int **req_ids)  /* OUT */
+static void
+extract_reqs(NC   *ncp,
+             int  *num_reqs, /* IN/OUT */
+             int **req_ids)  /* OUT */
 {
     int i, req_type, prev_id;
 
@@ -388,7 +348,7 @@ void extract_reqs(NC   *ncp,
     }
 
     /* allocate ID array */
-    (*req_ids) = (int*) NCI_Malloc(*num_reqs * sizeof(int));
+    (*req_ids) = (int*) NCI_Malloc(*num_reqs * SIZEOF_INT);
 
     /* second loop fills the request IDs */
     *num_reqs = 0;
@@ -413,127 +373,13 @@ void extract_reqs(NC   *ncp,
 }
 #endif
 
-/*----< ncmpi_wait() >--------------------------------------------------------*/
-/* ncmpi_wait() is an independent call
- * Argument num_reqs can be NC_REQ_ALL which means to flush all pending
- * nonblocking requests. In this case, arguments req_ids and statuses will be
- * ignored.
- * Argument num_reqs must either be NC_REQ_ALL, NC_GET_REQ_ALL, NC_PUT_REQ_ALL,
- * or a non-negative value.
- * Argument statuses can be NULL, meaning the caller only cares about the
- * error code returned by this call, but not the statuses of individual
- * nonblocking requests.
- */
-int
-ncmpi_wait(int  ncid,
-           int  num_reqs,
-           int *req_ids,  /* [num_reqs]: IN/OUT */
-           int *statuses) /* [num_reqs] */
-{
-    int  status;
-    NC  *ncp;
-
-    if (num_reqs == 0) return NC_NOERR;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-#ifdef ENABLE_REQ_AGGREGATION
-    return ncmpii_wait(ncp, INDEP_IO, num_reqs, req_ids, statuses);
-#else
-    int i, err, *reqids=NULL;
-    if (num_reqs <= NC_REQ_ALL) { /* flush all pending requests */
-        /* in this case, arguments req_ids[] and statuses[] are ignored */
-        /* construct request ID array, reqids */
-        extract_reqs(ncp, &num_reqs, &reqids);
-    }
-
-    for (i=0; i<num_reqs; i++) { /* serve one request at a time */
-        if (reqids == NULL)
-            err = ncmpii_wait(ncp, INDEP_IO, 1, &req_ids[i], &statuses[i]);
-        else
-            err = ncmpii_wait(ncp, INDEP_IO, 1, &reqids[i], NULL);
-        if (status == NC_NOERR) status = err;
-    }
-    if (reqids != NULL) NCI_Free(reqids);
-
-    return status; /* return the first error encountered */
-#endif
-}
-
-/*----< ncmpi_wait_all() >----------------------------------------------------*/
-/* ncmpi_wait_all() is a collective call
- * Argument num_reqs can be NC_REQ_ALL which means to flush all pending
- * nonblocking requests. In this case, arguments req_ids and statuses will be
- * ignored.
- * Argument num_reqs must either be NC_REQ_ALL, NC_GET_REQ_ALL, NC_PUT_REQ_ALL,
- * or a non-negative value.
- * Argument statuses can be NULL, meaning the caller only cares about the
- * error code returned by this call, but not the statuses of individual
- * nonblocking requests.
- */
-int
-ncmpi_wait_all(int  ncid,
-               int  num_reqs, /* number of requests */
-               int *req_ids,  /* [num_reqs]: IN/OUT */
-               int *statuses) /* [num_reqs], can be NULL */
-{
-    int  status;
-    NC  *ncp;
-    /* the following line CANNOT be added, because ncmpi_wait_all() is a
-     * collective call, all processes must participate some MPI collective
-     * operations used later on.
-     */
-    /* if (num_reqs == 0) return NC_NOERR; */
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-    /* must return the error now, parallel program might hang */
-
-#ifdef ENABLE_REQ_AGGREGATION
-    return ncmpii_wait(ncp, COLL_IO, num_reqs, req_ids, statuses);
-#else
-    int i, err, *reqids=NULL;
-
-    /* This API is collective, so make it illegal in indep mode. This also
-       ensures the program will returns back to collective mode. */
-    if (NC_indep(ncp)) DEBUG_RETURN_ERROR(NC_EINDEP);
-
-    /* must enter independent mode, as num_reqs may be different among
-       processes */
-    err = ncmpi_begin_indep_data(ncid);
-    if (status == NC_NOERR) status = err;
-
-    if (num_reqs <= NC_REQ_ALL) { /* flush all pending requests */
-        /* in this case, arguments req_ids[] and statuses[] are ignored */
-        /* construct request ID array, reqids */
-        extract_reqs(ncp, &num_reqs, &reqids);
-    }
-
-    for (i=0; i<num_reqs; i++) { /* serve one request at a time */
-        if (reqids == NULL)
-            err = ncmpii_wait(ncp, INDEP_IO, 1, &req_ids[i], &statuses[i]);
-        else
-            err = ncmpii_wait(ncp, INDEP_IO, 1, &reqids[i], NULL);
-        if (status == NC_NOERR) status = err;
-    }
-    if (reqids != NULL) NCI_Free(reqids);
-
-    /* return to collective data mode */
-    err = ncmpi_end_indep_data(ncid);
-    if (status == NC_NOERR) status = err;
-
-    return status; /* return the first error encountered, if there is any */
-#endif
-}
-
-/*----< ncmpii_concatenate_datatypes() >--------------------------------------*/
+/*----< concatenate_datatypes() >--------------------------------------------*/
 static int
-ncmpii_concatenate_datatypes(int           num,
-                             int          *blocklens,     /* IN: [num] */
-                             MPI_Offset   *displacements, /* IN: [num] */
-                             MPI_Datatype *dtypes,        /* IN: [num] */
-                             MPI_Datatype *datatype)      /* OUT: */
+concatenate_datatypes(int           num,
+                      int          *blocklens,     /* IN: [num] */
+                      MPI_Offset   *displacements, /* IN: [num] */
+                      MPI_Datatype *dtypes,        /* IN: [num] */
+                      MPI_Datatype *datatype)      /* OUT: */
 {
 #if SIZEOF_MPI_AINT != SIZEOF_MPI_OFFSET
     int i;
@@ -572,7 +418,7 @@ ncmpii_concatenate_datatypes(int           num,
     mpireturn = MPI_Type_struct(num, blocklens, addrs, dtypes, datatype);
 #endif
     if (mpireturn != MPI_SUCCESS)
-        status = ncmpii_handle_error(mpireturn, "MPI_Type_create_struct");
+        status = ncmpii_error_mpi2nc(mpireturn, "MPI_Type_create_struct");
     else
         MPI_Type_commit(datatype);
 
@@ -583,14 +429,14 @@ ncmpii_concatenate_datatypes(int           num,
     return status;
 }
 
-/*----< ncmpii_construct_filetypes() >----------------------------------------*/
+/*----< construct_filetypes() >----------------------------------------------*/
 /* concatenate the requests into a single MPI derived filetype */
 static int
-ncmpii_construct_filetypes(NC           *ncp,
-                           int           num_reqs,
-                           NC_req       *reqs,      /* [num_reqs] */
-                           int           rw_flag,
-                           MPI_Datatype *filetype)  /* OUT */
+construct_filetypes(NC           *ncp,
+                    int           num_reqs,
+                    NC_req       *reqs,      /* [num_reqs] */
+                    int           rw_flag,
+                    MPI_Datatype *filetype)  /* OUT */
 {
     int i, j, err, status=NC_NOERR, *blocklens;
     MPI_Datatype *ftypes;
@@ -612,7 +458,7 @@ ncmpii_construct_filetypes(NC           *ncp,
     for (i=0; i<num_reqs; i++, j++) {
         int is_filetype_contig;
         ftypes[j] = MPI_BYTE; /* in case the call below failed */
-        err = ncmpii_vars_create_filetype(ncp,
+        err = ncmpio_filetype_create_vars(ncp,
                                           reqs[i].varp,
                                           reqs[i].start,
                                           reqs[i].count,
@@ -654,11 +500,8 @@ ncmpii_construct_filetypes(NC           *ncp,
     }
     else { /* if (num_reqs > 1 || (num_reqs == 1 && displacements[0] > 0)) */
         /* all ftypes[] created fine, now concatenate all ftypes[] */
-        err = ncmpii_concatenate_datatypes(num_reqs,
-                                           blocklens,
-                                           displacements,
-                                           ftypes,
-                                           filetype);
+        err = concatenate_datatypes(num_reqs, blocklens, displacements, ftypes,
+                                    filetype);
         if (err != NC_NOERR) *filetype = MPI_BYTE;
         if (status == NC_NOERR) status = err; /* report the first error */
     }
@@ -674,12 +517,12 @@ ncmpii_construct_filetypes(NC           *ncp,
     return status;
 }
 
-/*----< ncmpii_construct_buffertypes() >--------------------------------------*/
+/*----< construct_buffertypes() >--------------------------------------------*/
 /* the input requests, reqs[], are non-interleaving requests */
 static int
-ncmpii_construct_buffertypes(int           num_reqs,
-                             NC_req       *reqs,         /* [num_reqs] */
-                             MPI_Datatype *buffer_type)  /* OUT */
+construct_buffertypes(int           num_reqs,
+                      NC_req       *reqs,         /* [num_reqs] */
+                      MPI_Datatype *buffer_type)  /* OUT */
 {
     int i, j, status=NC_NOERR, mpireturn;
 
@@ -722,7 +565,7 @@ ncmpii_construct_buffertypes(int           num_reqs,
                                       buffer_type);
 #endif
         if (mpireturn != MPI_SUCCESS) {
-            int err = ncmpii_handle_error(mpireturn, "MPI_Type_hindexed");
+            int err = ncmpii_error_mpi2nc(mpireturn,"MPI_Type_create_hindexed");
             /* return the first encountered error if there is any */
             if (status == NC_NOERR) status = err;
         }
@@ -735,7 +578,7 @@ ncmpii_construct_buffertypes(int           num_reqs,
     return status;
 }
 
-/*----< ncmpii_wait() >-------------------------------------------------------*/
+/*----< req_commit() >-------------------------------------------------------*/
 /* The buffer management flow is described below. The wait side starts from
    the I/O step, i.e. step 5
 
@@ -759,12 +602,12 @@ ncmpii_construct_buffertypes(int           num_reqs,
      8. unpack lbuf to buf based on buftype
      9. free up temp buffers, cbuf and xbuf if they were allocated separately
  */
-int
-ncmpii_wait(NC  *ncp,
-            int  io_method, /* COLL_IO or INDEP_IO */
-            int  num_reqs,  /* number of requests */
-            int *req_ids,   /* [num_reqs] */
-            int *statuses)  /* [num_reqs] */
+static int
+req_commit(NC  *ncp,
+           int  num_reqs,   /* number of requests */
+           int *req_ids,    /* [num_reqs] */
+           int *statuses,   /* [num_reqs] */
+           int  coll_indep) /* NC_REQ_COLL or NC_REQ_INDEP */
 {
     int i, j, err=NC_NOERR, status=NC_NOERR;
     int do_read, do_write, num_w_reqs=0, num_r_reqs=0;
@@ -772,18 +615,6 @@ ncmpii_wait(NC  *ncp,
     MPI_Offset newnumrecs=0;
     NC_req *put_list=NULL, *get_list=NULL;
 
-    if (NC_indef(ncp)) { /* wait must be called in data mode */
-        DEBUG_ASSIGN_ERROR(err, NC_EINDEFINE)
-        goto err_check;
-    }
-
-    /* check the MPI file handles for collective or independent mode */
-    if (io_method == INDEP_IO)
-        err = ncmpii_check_mpifh(ncp, 0);
-    else /* if (io_method == COLL_IO) */
-        err = ncmpii_check_mpifh(ncp, 1);
-    if (err != NC_NOERR) goto err_check;
-
     num_r_reqs = 0;
     num_w_reqs = 0;
     if (num_reqs == NC_GET_REQ_ALL || num_reqs == NC_REQ_ALL) {
@@ -906,8 +737,14 @@ ncmpii_wait(NC  *ncp,
             ncp->put_list = NULL;
         }
 
-        if (num_w_reqs == 0) NCI_Free(put_list);
-        if (num_r_reqs == 0) NCI_Free(get_list);
+        if (num_w_reqs == 0) {
+            NCI_Free(put_list);
+            put_list = NULL;
+        }
+        if (num_r_reqs == 0) {
+            NCI_Free(get_list);
+            get_list = NULL;
+        }
     }
 
     /* calculate new number of records:
@@ -922,11 +759,11 @@ ncmpii_wait(NC  *ncp,
     for (i=0; i<num_w_reqs; i++) {
         if (!IS_RECVAR(put_list[i].varp)) continue; /* not a record var */
         if (put_list[i].bnelems == 0) continue; /* 0-len or invalid request */
-        newnumrecs = MAX(newnumrecs, put_list[i].start[0] + put_list[i].count[0]);
+        newnumrecs = MAX(newnumrecs, put_list[i].start[0] +
+                                     put_list[i].count[0]);
     }
 
-err_check:
-    if (io_method == COLL_IO) {
+    if (coll_indep == NC_REQ_COLL) {
         int mpireturn;
         MPI_Offset io_req[4], do_io[4];  /* [0]: read [1]: write [2]: error */
         io_req[0] = num_r_reqs;
@@ -934,33 +771,33 @@ err_check:
         io_req[2] = -err;   /* all NC errors are negative */
         io_req[3] = newnumrecs;
         TRACE_COMM(MPI_Allreduce)(io_req, do_io, 4, MPI_OFFSET, MPI_MAX,
-                                  ncp->nciop->comm);
+                                  ncp->comm);
         if (mpireturn != MPI_SUCCESS)
- 	    return ncmpii_handle_error(mpireturn, "MPI_Allreduce"); 
+ 	    return ncmpii_error_mpi2nc(mpireturn, "MPI_Allreduce"); 
 
         /* if error occurs, return the API collectively */
         if (do_io[2] != -NC_NOERR) return err;
 
         /* if at least one process has a non-zero request, all processes must
          * participate the collective read/write */
-        do_read    = (int)do_io[0];
-        do_write   = (int)do_io[1];
+        do_read    = (do_io[0] > 0);
+        do_write   = (do_io[1] > 0);
         newnumrecs = do_io[3];
     }
     else {
         if (err != NC_NOERR) return err;
-        do_read  = num_r_reqs;
-        do_write = num_w_reqs;
+        do_read  = (num_r_reqs > 0);
+        do_write = (num_w_reqs > 0);
     }
 
     /* carry out writes and reads separately (writes first) */
     if (do_write > 0)
-        err = ncmpii_wait_getput(ncp, num_w_reqs, put_list, WRITE_REQ,
-                                 io_method, newnumrecs);
+        err = wait_getput(ncp, num_w_reqs, put_list, NC_REQ_WR, coll_indep,
+                          newnumrecs);
 
     if (do_read > 0)
-        err = ncmpii_wait_getput(ncp, num_r_reqs, get_list, READ_REQ,
-                                 io_method, newnumrecs);
+        err = wait_getput(ncp, num_r_reqs, get_list, NC_REQ_RD, coll_indep,
+                          newnumrecs);
 
     /* retain the first error status */
     if (status == NC_NOERR) status = err;
@@ -976,12 +813,14 @@ err_check:
          * only when the buffer itself has been byte-swapped before,
          * i.e. NOT buftype_is_contig && NOT ncmpii_need_convert() &&
          * ncmpii_need_swap()
-         * Only the lead record (or the fix-size request) does this
+	 * For requests that write to record variables for more than one
+	 * record, only the request containing the lead record does this (it
+	 * does swap for the entire request)
          */
         if (put_list[i].num_recs > 0 && put_list[i].need_swap_back_buf)
             ncmpii_in_swapn(put_list[i].buf,
                             put_list[i].bnelems * put_list[i].num_recs,
-                            ncmpix_len_nctype(put_list[i].varp->type));
+                            put_list[i].varp->xsz);
     }
     for (i=0; i<num_w_reqs; i++) {
         /* free space allocated for the request objects
@@ -1002,22 +841,44 @@ err_check:
     if (num_w_reqs > 0) {
         /* once the bput requests are served, we reclaim the space and try
          * coalesce the freed space for the attached buffer */
-        if (ncp->abuf != NULL) ncmpii_abuf_coalesce(ncp);
+        if (ncp->abuf != NULL) abuf_coalesce(ncp);
         NCI_Free(put_list);
     }
 
     for (i=0; i<num_r_reqs; i++) {
-        void *cbuf, *lbuf;
-        int el_size, position;
-        MPI_Offset insize, bnelems;
-        NC_var *varp;
-
+        int need_convert, need_swap;
         /* non-lead record requests skip type-conversion/byte-swap/unpack */
         if (get_list[i].num_recs == 0) continue;
 
         /* now, xbuf contains the data read from the file.
-         * It needs to be type-converted + byte-swapped to cbuf
+         * It may need to be type-converted + byte-swapped to cbuf
          */
+        need_convert = ncmpii_need_convert(ncp->format, get_list[i].varp->xtype,
+                                           get_list[i].ptype);
+        need_swap    = ncmpii_need_swap(get_list[i].varp->xtype,
+                                        get_list[i].ptype);
+
+        err = ncmpio_unpack_xbuf(ncp->format, get_list[i].varp,
+                                 get_list[i].bufcount,
+                                 get_list[i].buftype,
+                                 get_list[i].buftype_is_contig,
+                                 get_list[i].bnelems * get_list[i].num_recs,
+                                 get_list[i].ptype,
+                                 get_list[i].imaptype,
+                                 need_convert, need_swap, get_list[i].buf,
+                                 get_list[i].xbuf);
+        if (get_list[i].status != NULL && *get_list[i].status == NC_NOERR)
+            *get_list[i].status = err;
+        if (status == NC_NOERR) status = err;
+
+        if (!get_list[i].buftype_is_contig)
+            MPI_Type_free(&get_list[i].buftype);
+#if 0
+        void *cbuf, *lbuf;
+        int el_size, position;
+        MPI_Offset insize, bnelems;
+        NC_var *varp;
+
         varp = get_list[i].varp;
         MPI_Type_size(get_list[i].ptype, &el_size);
         bnelems = get_list[i].bnelems * get_list[i].num_recs;
@@ -1025,7 +886,7 @@ err_check:
         if (insize != (int)insize && status == NC_NOERR)
             DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
 
-        if (ncmpii_need_convert(ncp->format, varp->type, get_list[i].ptype)) {
+        if (ncmpii_need_convert(ncp->format, varp->xtype, get_list[i].ptype)) {
             /* need type conversion from the external type to user buffer
                type */
             if (get_list[i].imaptype != MPI_DATATYPE_NULL ||
@@ -1035,7 +896,7 @@ err_check:
                 cbuf = get_list[i].buf;
 
             /* type convert + byte swap from xbuf to cbuf */
-            DATATYPE_GET_CONVERT(ncp->format, varp->type, get_list[i].xbuf,
+            DATATYPE_GET_CONVERT(ncp->format, varp->xtype, get_list[i].xbuf,
                                  cbuf, bnelems, get_list[i].ptype, err)
 
             /* keep the first error */
@@ -1043,9 +904,8 @@ err_check:
                 *get_list[i].status = err;
             if (status == NC_NOERR) status = err;
         } else {
-            if (ncmpii_need_swap(varp->type, get_list[i].ptype))
-                ncmpii_in_swapn(get_list[i].xbuf, bnelems,
-                                ncmpix_len_nctype(varp->type));
+            if (ncmpii_need_swap(varp->xtype, get_list[i].ptype))
+                ncmpii_in_swapn(get_list[i].xbuf, bnelems, varp->xsz);
             cbuf = get_list[i].xbuf;
         }
 
@@ -1084,6 +944,7 @@ err_check:
         /* lbuf is no longer needed */
         if (lbuf != get_list[i].buf && lbuf != get_list[i].xbuf)
             NCI_Free(lbuf);
+#endif
     }
 
     for (i=0; i<num_r_reqs; i++) {
@@ -1123,6 +984,113 @@ err_check:
     return status;
 }
 
+/*----< ncmpio_wait() >-------------------------------------------------------*/
+int
+ncmpio_wait(void *ncdp,
+            int   num_reqs,
+            int  *req_ids,   /* [num_reqs]: IN/OUT */
+            int  *statuses,  /* [num_reqs] */
+            int   reqMode)   /* only check if NC_REQ_COLL or NC_REQ_INDEP */
+{
+    NC *ncp = (NC*)ncdp;
+    int coll_indep;
+
+    if (NC_indef(ncp)) /* wait must be called in data mode */
+        DEBUG_RETURN_ERROR(NC_EINDEFINE)
+
+    coll_indep = (fIsSet(reqMode, NC_REQ_INDEP)) ? NC_REQ_INDEP : NC_REQ_COLL;
+
+#ifdef ENABLE_REQ_AGGREGATION
+    /* check collective or independent mode */
+    if (coll_indep == NC_REQ_INDEP && !NC_indep(ncp))
+        DEBUG_RETURN_ERROR(NC_ENOTINDEP)
+    else if (coll_indep == NC_REQ_COLL && NC_indep(ncp))
+        DEBUG_RETURN_ERROR(NC_EINDEP)
+
+    if (coll_indep == NC_REQ_INDEP && num_reqs == 0) return NC_NOERR;
+
+    return req_commit(ncp, num_reqs, req_ids, statuses, coll_indep);
+#else
+    /* If request aggregation is disabled, we call an independent wait() for
+     * each request
+     */
+    int i, status=NC_NOERR, err, *reqids=NULL;
+
+    if (coll_indep == NC_REQ_INDEP) {
+        /* This is called from ncmpi_wait(), which is an independent call
+	 * Argument num_reqs can be NC_REQ_ALL which means to flush all pending
+	 * nonblocking requests. In this case, arguments req_ids and statuses
+	 * will be ignored.
+	 * Argument num_reqs must either be NC_REQ_ALL, NC_GET_REQ_ALL,
+	 * NC_PUT_REQ_ALL, or a non-negative value.
+	 * Argument statuses can be NULL, meaning the caller only cares about
+	 * the error code returned by this call, but not the statuses of
+	 * individual nonblocking requests.
+         */
+        if (num_reqs == 0) return NC_NOERR;
+
+	/* This is called from ncmpi_wait which must be called in independent
+	 * data mode, illegal in collective mode.
+         */
+        if (!NC_indep(ncp)) DEBUG_RETURN_ERROR(NC_ENOTINDEP);
+
+        if (coll_indep == NC_REQ_INDEP && num_reqs == 0) return NC_NOERR;
+    }
+    else {
+        /* This is called from ncmpi_wait_all(), which is a collective call
+         * Argument num_reqs can be NC_REQ_ALL which means to flush all pending
+	 * nonblocking requests. In this case, arguments req_ids and statuses
+	 * will be ignored.
+	 * Argument num_reqs must either be NC_REQ_ALL, NC_GET_REQ_ALL,
+	 * NC_PUT_REQ_ALL, or a non-negative value.
+	 * Argument statuses can be NULL, meaning the caller only cares about
+	 * the error code returned by this call, but not the statuses of
+	 * individual nonblocking requests.
+         */
+        /* the following line CANNOT be added, because ncmpi_wait_all() is a
+         * collective call, all processes must participate some MPI collective
+         * operations used later on.
+         */
+        /* if (num_reqs == 0) return NC_NOERR; */
+
+        /* This is called from ncmpi_wait_all which must be called in
+         * collective data mode, illegal in indep mode. This also
+         * ensures the program will returns back to collective mode.
+         */
+        if (NC_indep(ncp)) DEBUG_RETURN_ERROR(NC_EINDEP);
+
+        /* must enter independent mode, as num_reqs may be different among
+           processes */
+        err = ncmpio_begin_indep_data(ncp);
+        if (status == NC_NOERR) status = err;
+    }
+
+    if (num_reqs <= NC_REQ_ALL) { /* flush all pending requests */
+        /* in this case, arguments req_ids[] and statuses[] are ignored.
+         * construct request ID array, reqids */
+        extract_reqs(ncp, &num_reqs, &reqids);
+    }
+
+    for (i=0; i<num_reqs; i++) { /* serve one request at a time */
+        if (reqids == NULL)
+            err = req_commit(ncp, 1, &req_ids[i],
+                  (statuses == NULL) ? NULL : &statuses[i], NC_REQ_INDEP);
+        else
+            err = req_commit(ncp, 1, &reqids[i], NULL, NC_REQ_INDEP);
+        if (status == NC_NOERR) status = err;
+    }
+    if (reqids != NULL) NCI_Free(reqids);
+
+    if (coll_indep == NC_REQ_COLL) {
+        /* return to collective data mode */
+        err = ncmpio_end_indep_data(ncp);
+        if (status == NC_NOERR) status = err;
+    }
+
+    return status; /* return the first error encountered, if there is any */
+#endif
+}
+
 /* C struct for breaking down a request to a list of offset-length segments */
 typedef struct {
     MPI_Offset off;      /* starting file offset of the request */
@@ -1141,19 +1109,19 @@ off_compare(const void *a, const void *b)
     return 0;
 }
 
-/*----< ncmpii_flatten() >----------------------------------------------------*/
+/*----< vars_flatten() >------------------------------------------------------*/
 /* flatten a subarray request into a list of offset-length pairs */
 static MPI_Offset
-ncmpii_flatten(int          ndim,    /* number of dimensions */
-               int          el_size, /* array element size */
-               MPI_Offset  *dimlen,  /* [ndim] dimension lengths */
-               MPI_Offset   offset,  /* starting file offset of variable */
-               MPI_Aint     buf_addr,/* starting buffer address */
-               MPI_Offset  *start,   /* [ndim] starts of subarray */
-               MPI_Offset  *count,   /* [ndim] counts of subarray */
-               MPI_Offset  *stride,  /* [ndim] strides of subarray */
-               MPI_Offset  *nseg,    /* OUT: number of segments */
-               off_len     *seg)     /* OUT: array of segments */
+vars_flatten(int          ndim,    /* number of dimensions */
+             int          el_size, /* array element size */
+             MPI_Offset  *dimlen,  /* [ndim] dimension lengths */
+             MPI_Offset   offset,  /* starting file offset of variable */
+             MPI_Aint     buf_addr,/* starting buffer address */
+             MPI_Offset  *start,   /* [ndim] starts of subarray */
+             MPI_Offset  *count,   /* [ndim] counts of subarray */
+             MPI_Offset  *stride,  /* [ndim] strides of subarray */
+             MPI_Offset  *nseg,    /* OUT: number of segments */
+             off_len     *seg)     /* OUT: array of segments */
 {
     int i, j, to_free_stride=0;
     MPI_Offset seg_len, nstride, array_len, off, subarray_len;
@@ -1162,7 +1130,7 @@ ncmpii_flatten(int          ndim,    /* number of dimensions */
     *nseg = 0;
     if (ndim < 0) return *nseg;
 
-    if (ndim == 0) {  /* 1D record variable */
+    if (ndim == 0) {  /* scalar record variable */
         *nseg = 1;
         seg->off      = offset;
         seg->len      = el_size;
@@ -1244,14 +1212,14 @@ ncmpii_flatten(int          ndim,    /* number of dimensions */
     return *nseg;
 }
 
-/*----< ncmpii_merge_requests() >---------------------------------------------*/
+/*----< merge_requests() >---------------------------------------------------*/
 static int
-ncmpii_merge_requests(NC          *ncp,
-                      int          num_reqs,
-                      NC_req      *reqs,    /* [num_reqs] */
-                      void       **buf,     /* OUT: 1st I/O buf addr */
-                      MPI_Offset  *nsegs,   /* OUT: no. off-len pairs */
-                      off_len    **segs)    /* OUT: [*nsegs] */
+merge_requests(NC          *ncp,
+               int          num_reqs,
+               NC_req      *reqs,    /* [num_reqs] */
+               void       **buf,     /* OUT: 1st I/O buf addr */
+               MPI_Offset  *nsegs,   /* OUT: no. off-len pairs */
+               off_len    **segs)    /* OUT: [*nsegs] */
 {
     int i, j, status=NC_NOERR, ndims, is_recvar;
     MPI_Offset  nseg, *start, *count, *shape, *stride;
@@ -1260,7 +1228,7 @@ ncmpii_merge_requests(NC          *ncp,
     *nsegs = 0;    /* total number of offset-length pairs */
     *segs  = NULL; /* array of offset-length pairs */
 
-    /* note invalid requests have been removed in ncmpii_wait_getput() */
+    /* note invalid requests have been removed in wait_getput() */
     *buf = reqs[0].xbuf; /* I/O buffer of first request */
 
     /* buf_addr is the buffer address of the first request */
@@ -1327,10 +1295,10 @@ ncmpii_merge_requests(NC          *ncp,
         if (is_recvar) var_begin += reqs[i].start[0] * ncp->recsize;
 
         /* flatten each request to a list of offset-length pairs */
-        ncmpii_flatten(ndims, reqs[i].varp->xsz, shape, var_begin,
-                       addr, start, count, stride,
-                       &nseg,    /* OUT: number of offset-length pairs */
-                       seg_ptr); /* OUT: array of offset-length pairs */
+        vars_flatten(ndims, reqs[i].varp->xsz, shape, var_begin,
+                     addr, start, count, stride,
+                     &nseg,    /* OUT: number of offset-length pairs */
+                     seg_ptr); /* OUT: array of offset-length pairs */
         seg_ptr += nseg; /* append the list to the end of segs array */
     }
 
@@ -1378,12 +1346,12 @@ ncmpii_merge_requests(NC          *ncp,
     return status;
 }
 
-/*----< ncmpii_construct_off_len_type() >-------------------------------------*/
+/*----< type_create_off_len() >----------------------------------------------*/
 static int
-ncmpii_construct_off_len_type(MPI_Offset    nsegs,    /* no. off-len pairs */
-                              off_len      *segs,     /* [nsegs] off-en pairs */
-                              MPI_Datatype *filetype,
-                              MPI_Datatype *buf_type)
+type_create_off_len(MPI_Offset    nsegs,    /* no. off-len pairs */
+                    off_len      *segs,     /* [nsegs] off-en pairs */
+                    MPI_Datatype *filetype,
+                    MPI_Datatype *buf_type)
 {
     int i, j, mpireturn, *blocklengths;
     MPI_Aint   *displacements;
@@ -1445,7 +1413,7 @@ ncmpii_construct_off_len_type(MPI_Offset    nsegs,    /* no. off-len pairs */
         *buf_type = MPI_BYTE;
         NCI_Free(displacements);
         NCI_Free(blocklengths);
-        return ncmpii_handle_error(mpireturn, "MPI_Type_create_hindexed");
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Type_create_hindexed");
     }
     MPI_Type_commit(filetype);
     NCI_Free(displacements);
@@ -1508,7 +1476,7 @@ ncmpii_construct_off_len_type(MPI_Offset    nsegs,    /* no. off-len pairs */
         *buf_type = MPI_BYTE;
         NCI_Free(displacements);
         NCI_Free(blocklengths);
-        return ncmpii_handle_error(mpireturn, "MPI_Type_create_hindexed");
+        return ncmpii_error_mpi2nc(mpireturn, "MPI_Type_create_hindexed");
     }
     MPI_Type_commit(buf_type);
     NCI_Free(displacements);
@@ -1517,7 +1485,7 @@ ncmpii_construct_off_len_type(MPI_Offset    nsegs,    /* no. off-len pairs */
     return NC_NOERR;
 }
 
-/*----< req_compare() >-------------------------------------------------------*/
+/*----< req_compare() >------------------------------------------------------*/
 /* used to sort the the string file offsets of reqs[] */
 static int
 req_compare(const void *a, const void *b)
@@ -1527,18 +1495,18 @@ req_compare(const void *a, const void *b)
     return (0);
 }
 
-/*----< ncmpii_req_aggregation() >--------------------------------------------*/
+/*----< req_aggregation() >--------------------------------------------------*/
 /* aggregate multiple read/write (non-contiguous) requests and call MPI-IO
  */
 static int
-ncmpii_req_aggregation(NC     *ncp,
-                       int     num_reqs,    /* # requests */
-                       NC_req *reqs,        /* sorted requests */
-                       int     rw_flag,     /* WRITE_REQ or READ_REQ */
-                       int     io_method,   /* COLL_IO or INDEP_IO */
-                       int     interleaved) /* interleaved in reqs[] */
+req_aggregation(NC     *ncp,
+                int     num_reqs,    /* # requests */
+                NC_req *reqs,        /* sorted requests */
+                int     rw_flag,     /* NC_REQ_WR or NC_REQ_RD */
+                int     coll_indep,  /* NC_REQ_COLL or NC_REQ_INDEP */
+                int     interleaved) /* interleaved in reqs[] */
 {
-    int i, type, err, status=NC_NOERR, ngroups, mpireturn, buf_len;
+    int i, gtype, err, status=NC_NOERR, ngroups, mpireturn, buf_len;
     int *group_index, *group_type, buf_type_size=0;
     int *f_blocklengths, *b_blocklengths;
     void *buf; /* point to starting buffer, used by MPI-IO call */
@@ -1546,15 +1514,16 @@ ncmpii_req_aggregation(NC     *ncp,
     MPI_Datatype  filetype, buf_type, *ftypes, *btypes;
     MPI_File fh;
     MPI_Status mpistatus;
+    MPI_Offset max_end;
 
-    if (num_reqs == 0) { /* only COLL_IO can reach here for 0 request */
-        assert(io_method == COLL_IO);
+    if (num_reqs == 0) { /* only NC_REQ_COLL can reach here for 0 request */
+        assert(coll_indep == NC_REQ_COLL);
         /* simply participate the collective call */
-        return ncmpii_getput_zero_req(ncp, rw_flag);
+        return ncmpio_getput_zero_req(ncp, rw_flag);
     }
     if (! interleaved) {
         /* concatenate all filetypes into a single one and do I/O */
-        return ncmpii_mgetput(ncp, num_reqs, reqs, rw_flag, io_method);
+        return mgetput(ncp, num_reqs, reqs, rw_flag, coll_indep);
     }
     /* now some request's aggregate access region is interleaved with other's */
 
@@ -1576,18 +1545,37 @@ ncmpii_req_aggregation(NC     *ncp,
        be malloc-ed. Group type: 0 for non-interleaved group and 1 for
        interleaved group.
      */
+#define INTERLEAVED    1
+#define NONINTERLEAVED 0
+
+    assert(num_reqs > 1);
     ngroups = 1;
-    type    = (reqs[0].offset_end > reqs[1].offset_start) ? 1 : 0;
+    gtype   = (reqs[0].offset_end > reqs[1].offset_start) ?
+              INTERLEAVED : NONINTERLEAVED;
+    max_end = MAX(reqs[0].offset_end, reqs[1].offset_end);
     for (i=1; i<num_reqs-1; i++) {
-        if (type == 0 && reqs[i].offset_end > reqs[i+1].offset_start) {
+        if (gtype == NONINTERLEAVED &&
+            reqs[i].offset_end > reqs[i+1].offset_start) {
+            /* Done with this NONINTERLEAVED group. Continue to construct
+             * next group, starting from reqs[i], which will be INTERLEAVED. */
             ngroups++;
-            type = 1;
+            gtype = INTERLEAVED;
+            max_end = MAX(reqs[i].offset_end, reqs[i+1].offset_end);
         }
-        else if (type == 1 && reqs[i].offset_end <= reqs[i+1].offset_start) {
-            type = 0;
-            if (i+2 < num_reqs && reqs[i+1].offset_end > reqs[i+2].offset_start)
-                type = 1; /* next group is also interleaved */
-            ngroups++;
+        else if (gtype == INTERLEAVED) {
+            if (max_end <= reqs[i+1].offset_start) {
+                /* Done with this INTERLEAVED group. Continue to construct
+                 * next group. First check whether the next group is
+                 * INTERLEAVED or NONINTERLEAVED. */
+                gtype = NONINTERLEAVED;
+                if (i+2 < num_reqs &&
+                    reqs[i+1].offset_end > reqs[i+2].offset_start)
+                    gtype = INTERLEAVED; /* next group is also interleaved */
+                ngroups++;
+                max_end = reqs[i+1].offset_end;
+            }
+            else
+                max_end = MAX(max_end, reqs[i+1].offset_end);
         }
     }
 
@@ -1596,27 +1584,40 @@ ncmpii_req_aggregation(NC     *ncp,
 
     /* calculate the starting index of each group and determine group type */
     ngroups        = 1;
-    type           = (reqs[0].offset_end > reqs[1].offset_start) ? 1 : 0;
+    gtype          = (reqs[0].offset_end > reqs[1].offset_start) ?
+                     INTERLEAVED : NONINTERLEAVED;
+    max_end        = MAX(reqs[0].offset_end, reqs[1].offset_end);
     group_index[0] = 0;
-    group_type[0]  = type;
+    group_type[0]  = gtype;
     for (i=1; i<num_reqs-1; i++) {
-        if (type == 0 &&
+        if (gtype == NONINTERLEAVED &&
             reqs[i].offset_end > reqs[i+1].offset_start) {
-            /* reqs[i] starts an interleaved group */
+            /* Done with this NONINTERLEAVED group. Continue to construct
+             * next group, which will be INTERLEAVED. */
+            /* reqs[i] starts a new interleaved group */
             group_index[ngroups] = i;
-            type = 1;
-            group_type[ngroups] = type;
+            gtype = INTERLEAVED;
+            group_type[ngroups] = gtype;
             ngroups++;
+            max_end = MAX(reqs[i].offset_end, reqs[i+1].offset_end);
         }
-        else if (type == 1 &&
-                 reqs[i].offset_end <= reqs[i+1].offset_start) {
-            /* the interleaved group ends with reqs[i] */
-            group_index[ngroups] = i+1;
-            type = 0;
-            if (i+2 < num_reqs && reqs[i+1].offset_end > reqs[i+2].offset_start)
-                type = 1; /* next group is also interleaved */
-            group_type[ngroups] = type;
-            ngroups++;
+        else if (gtype == INTERLEAVED) {
+            if (max_end <= reqs[i+1].offset_start) {
+                /* Done with this INTERLEAVED group. Continue to construct
+                 * next group. First check whether the next group is
+                 * INTERLEAVED or NONINTERLEAVED. */
+                gtype = NONINTERLEAVED;
+                if (i+2 < num_reqs &&
+                    reqs[i+1].offset_end > reqs[i+2].offset_start)
+                    gtype = INTERLEAVED; /* next group is also interleaved */
+                /* the interleaved group ends with reqs[i] */
+                group_index[ngroups] = i+1;
+                group_type[ngroups] = gtype;
+                ngroups++;
+                max_end = reqs[i+1].offset_end;
+            }
+            else
+                max_end = MAX(max_end, reqs[i+1].offset_end);
         }
     }
     group_index[ngroups] = num_reqs; /* to indicate end of groups */
@@ -1650,12 +1651,12 @@ ncmpii_req_aggregation(NC     *ncp,
         int     g_num_reqs = group_index[i+1] - group_index[i];
         f_disps[i] = 0;  /* file displacements always to the file offset 0 */
 
-        if (group_type[i] == 0) {
+        if (group_type[i] == NONINTERLEAVED) {
             /* This group contains no interleaved filetypes, so we can
              * simply concatenate filetypes of this group into a single one
              */
-            err = ncmpii_construct_filetypes(ncp, g_num_reqs, g_reqs, rw_flag,
-                                             &ftypes[i]);
+            err = construct_filetypes(ncp, g_num_reqs, g_reqs, rw_flag,
+                                      &ftypes[i]);
             if (status == NC_NOERR) status = err;
             if (err != NC_NOERR) { /* skip this group */
                 ftypes[i] = btypes[i] = MPI_BYTE;
@@ -1665,7 +1666,7 @@ ncmpii_req_aggregation(NC     *ncp,
             f_blocklengths[i] = 1;
 
             /* concatenate buffer types of this group into a single one */
-            err = ncmpii_construct_buffertypes(g_num_reqs, g_reqs, &btypes[i]);
+            err = construct_buffertypes(g_num_reqs, g_reqs, &btypes[i]);
             if (status == NC_NOERR) status = err;
             if (err != NC_NOERR) { /* skip this group */
                 ftypes[i] = btypes[i] = MPI_BYTE;
@@ -1698,8 +1699,8 @@ ncmpii_req_aggregation(NC     *ncp,
             void       *merged_buf;
 
             /* merge all requests into sorted offset-length pairs */
-            err = ncmpii_merge_requests(ncp, g_num_reqs, g_reqs, &merged_buf,
-                                        &nsegs, &segs);
+            err = merge_requests(ncp, g_num_reqs, g_reqs, &merged_buf, &nsegs,
+                                 &segs);
             if (status == NC_NOERR) status = err;
             if (err != NC_NOERR) { /* skip this group */
                 ftypes[i] = btypes[i] = MPI_BYTE;
@@ -1711,8 +1712,7 @@ ncmpii_req_aggregation(NC     *ncp,
             assert(nsegs > 0);
 
             /* sges[] will be used to construct fileview and buffer type */
-            err = ncmpii_construct_off_len_type(nsegs, segs, &ftypes[i],
-                                                &btypes[i]);
+            err = type_create_off_len(nsegs, segs, &ftypes[i], &btypes[i]);
             /* preserve the previous error if there is any */
             if (status == NC_NOERR) status = err;
             NCI_Free(segs);
@@ -1756,7 +1756,7 @@ ncmpii_req_aggregation(NC     *ncp,
                                     &filetype);
 #endif
         if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_Type_create_struct");
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_Type_create_struct");
             /* return the first encountered error if there is any */
             if (status == NC_NOERR) status = err;
 
@@ -1779,7 +1779,7 @@ ncmpii_req_aggregation(NC     *ncp,
                                     &buf_type);
 #endif
         if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_Type_create_struct");
+            err = ncmpii_error_mpi2nc(mpireturn, "MPI_Type_create_struct");
             /* return the first encountered error if there is any */
             if (status == NC_NOERR) status = err;
 
@@ -1796,78 +1796,90 @@ ncmpii_req_aggregation(NC     *ncp,
 
     MPI_Type_size(buf_type, &buf_type_size);
 
-    if (io_method == COLL_IO)
-        fh = ncp->nciop->collective_fh;
+    if (coll_indep == NC_REQ_COLL)
+        fh = ncp->collective_fh;
     else
-        fh = ncp->nciop->independent_fh;
+        fh = ncp->independent_fh;
 
     /* set the file view */
     MPI_Offset offset=0;
-    err = ncmpii_file_set_view(ncp, fh, &offset, filetype);
+    err = ncmpio_file_set_view(ncp, fh, &offset, filetype);
     if (err != NC_NOERR) {
         buf_len = 0; /* skip this request */
         if (status == NC_NOERR) status = err;
     }
 
-    if (rw_flag == READ_REQ) {
-        if (io_method == COLL_IO) {
+#ifdef _USE_MPI_GET_COUNT
+        /* explicitly initialize mpistatus object to 0, see comments below */
+        memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+
+    if (rw_flag == NC_REQ_RD) {
+        if (coll_indep == NC_REQ_COLL) {
             TRACE_IO(MPI_File_read_at_all)(fh, offset, buf, buf_len, buf_type,
                                            &mpistatus);
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_read_at_all");
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at_all");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) {
                     err = (err == NC_EFILE) ? NC_EREAD : err;
                     DEBUG_ASSIGN_ERROR(status, err)
                 }
             }
-            else {
-                ncp->nciop->get_size += buf_len * buf_type_size;
-            }
         } else {
             TRACE_IO(MPI_File_read_at)(fh, offset, buf, buf_len, buf_type,
                                        &mpistatus);
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_read_at");
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) {
                     err = (err == NC_EFILE) ? NC_EREAD : err;
                     DEBUG_ASSIGN_ERROR(status, err)
                 }
             }
-            else {
-                ncp->nciop->get_size += buf_len * buf_type_size;
-            }
         }
-    } else { /* WRITE_REQ */
-        if (io_method == COLL_IO) {
+        if (mpireturn == MPI_SUCCESS) {
+            /* update the number of bytes read since file open */
+#ifdef _USE_MPI_GET_COUNT
+            int get_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &get_size);
+            ncp->get_size += get_size;
+#else
+            ncp->get_size += buf_len * buf_type_size;
+#endif
+        }
+    } else { /* NC_REQ_WR */
+        if (coll_indep == NC_REQ_COLL) {
             TRACE_IO(MPI_File_write_at_all)(fh, offset, buf, buf_len, buf_type,
                                             &mpistatus);
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_write_at_all");
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at_all");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) {
                     err = (err == NC_EFILE) ? NC_EWRITE : err;
                     DEBUG_ASSIGN_ERROR(status, err)
                 }
             }
-            else {
-                ncp->nciop->put_size += buf_len * buf_type_size;
-            }
         } else {
             TRACE_IO(MPI_File_write_at)(fh, offset, buf, buf_len, buf_type,
                                         &mpistatus);
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_write_at");
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) {
                     err = (err == NC_EFILE) ? NC_EWRITE : err;
                     DEBUG_ASSIGN_ERROR(status, err)
                 }
             }
-            else {
-                ncp->nciop->put_size += buf_len * buf_type_size;
-            }
+        }
+        if (mpireturn == MPI_SUCCESS) {
+#ifdef _USE_MPI_GET_COUNT
+            int put_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
+            ncp->put_size += put_size;
+#else
+            ncp->put_size += buf_len * buf_type_size;
+#endif
         }
     }
 
@@ -1887,14 +1899,14 @@ ncmpii_req_aggregation(NC     *ncp,
     return status;
 }
 
-/*----< ncmpii_wait_getput() >------------------------------------------------*/
+/*----< wait_getput() >------------------------------------------------------*/
 static int
-ncmpii_wait_getput(NC         *ncp,
-                   int         num_reqs,   /* # requests */
-                   NC_req     *reqs,       /* array of requests */
-                   int         rw_flag,    /* WRITE_REQ or READ_REQ */
-                   int         io_method,  /* COLL_IO or INDEP_IO */
-                   MPI_Offset  newnumrecs) /* new number of records */
+wait_getput(NC         *ncp,
+            int         num_reqs,   /* # requests */
+            NC_req     *reqs,       /* array of requests */
+            int         rw_flag,    /* NC_REQ_WR or NC_REQ_RD */
+            int         coll_indep, /* NC_REQ_COLL or NC_REQ_INDEP */
+            MPI_Offset  newnumrecs) /* new number of records */
 {
     int i, err, status=NC_NOERR, access_interleaved=0;
 
@@ -1904,13 +1916,13 @@ ncmpii_wait_getput(NC         *ncp,
      */  
     for (i=0; i<num_reqs; i++) {
         /* get the starting file offset for this request */
-        ncmpii_get_offset(ncp, reqs[i].varp, reqs[i].start, NULL, NULL,
-                          rw_flag, &reqs[i].offset_start);
+        ncmpio_last_offset(ncp, reqs[i].varp, reqs[i].start, NULL, NULL,
+                           rw_flag, &reqs[i].offset_start);
 
         /* get the ending file offset for this request */
-        ncmpii_get_offset(ncp, reqs[i].varp, reqs[i].start, reqs[i].count,
-                          reqs[i].stride, rw_flag, &reqs[i].offset_end);
-        reqs[i].offset_end += reqs[i].varp->xsz - 1;
+        ncmpio_last_offset(ncp, reqs[i].varp, reqs[i].start, reqs[i].count,
+                           reqs[i].stride, rw_flag, &reqs[i].offset_end);
+        reqs[i].offset_end += reqs[i].varp->xsz;
     }
 
     /* check if reqs[].offset_start are in an increasing order */
@@ -1932,8 +1944,8 @@ ncmpii_wait_getput(NC         *ncp,
     }
 
     /* aggregate requests and carry out the I/O */
-    err = ncmpii_req_aggregation(ncp, num_reqs, reqs, rw_flag, io_method,
-                                 access_interleaved);
+    err = req_aggregation(ncp, num_reqs, reqs, rw_flag, coll_indep,
+                          access_interleaved);
     if (status == NC_NOERR) status = err;
 
     /* Update the number of records if new records have been created.
@@ -1941,17 +1953,20 @@ ncmpii_wait_getput(NC         *ncp,
      * others write to a record variable or not. Note newnumrecs has been
      * sync-ed and always >= ncp->numrecs.
      */
-    if (rw_flag == WRITE_REQ) {
-        if (io_method == COLL_IO) {
+    if (rw_flag == NC_REQ_WR) {
+        if (coll_indep == NC_REQ_COLL) {
             if (newnumrecs > ncp->numrecs) {
-                /* update new record number in file */
-                err = ncmpii_write_numrecs(ncp, newnumrecs);
+                /* update new record number in file. Note newnumrecs is already
+		 * sync-ed among all processes and in collective mode
+		 * ncp->numrecs is always sync-ed in memory among processes,
+		 * thus no need another MPI_Allreduce to sync it. */
+                err = ncmpio_write_numrecs(ncp, newnumrecs);
                 if (status == NC_NOERR) status = err;
                 /* retain the first error if there is any */
-                ncp->numrecs = newnumrecs;
+                if (ncp->numrecs < newnumrecs) ncp->numrecs = newnumrecs;
             }
         }
-        else { /* INDEP_IO */
+        else { /* NC_REQ_INDEP */
             if (ncp->numrecs < newnumrecs) {
                 ncp->numrecs = newnumrecs;
                 set_NC_ndirty(ncp);
@@ -1961,20 +1976,20 @@ ncmpii_wait_getput(NC         *ncp,
 
         if (NC_doFsync(ncp)) { /* NC_SHARE is set */
             int mpireturn;
-            if (io_method == INDEP_IO) {
-                TRACE_IO(MPI_File_sync)(ncp->nciop->independent_fh);
+            if (coll_indep == NC_REQ_INDEP) {
+                TRACE_IO(MPI_File_sync)(ncp->independent_fh);
                 if (mpireturn != MPI_SUCCESS) {
-                    err = ncmpii_handle_error(mpireturn, "MPI_File_sync"); 
+                    err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_sync"); 
                     if (status == NC_NOERR) status = err;
                 }
             }
             else {
-                TRACE_IO(MPI_File_sync)(ncp->nciop->collective_fh);
+                TRACE_IO(MPI_File_sync)(ncp->collective_fh);
                 if (mpireturn != MPI_SUCCESS) {
-                    err = ncmpii_handle_error(mpireturn, "MPI_File_sync"); 
+                    err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_sync"); 
                     if (status == NC_NOERR) status = err;
                 }
-                TRACE_COMM(MPI_Barrier)(ncp->nciop->comm);
+                TRACE_COMM(MPI_Barrier)(ncp->comm);
             }
         }
     }
@@ -1982,7 +1997,7 @@ ncmpii_wait_getput(NC         *ncp,
     return status;
 }
 
-/*----< ncmpii_mgetput() >----------------------------------------------------*/
+/*----< mgetput() >----------------------------------------------------------*/
 /* Before reaching to this subroutine, all the filetypes in the request array
  * are sorted in a non-decreasing order and not interleaved. This subroutine
  * concatenates the filetypes into a single fileview and calls MPI-IO function.
@@ -1990,11 +2005,11 @@ ncmpii_wait_getput(NC         *ncp,
  * data type to be used in the MPI read/write function call.
  */
 static int
-ncmpii_mgetput(NC           *ncp,
-               int           num_reqs,
-               NC_req       *reqs,        /* [num_reqs] */
-               int           rw_flag,     /* WRITE_REQ or READ_REQ */
-               int           io_method)   /* COLL_IO or INDEP_IO */
+mgetput(NC     *ncp,
+        int     num_reqs,
+        NC_req *reqs,        /* [num_reqs] */
+        int     rw_flag,     /* NC_REQ_WR or NC_REQ_RD */
+        int     coll_indep)  /* NC_REQ_COLL or NC_REQ_INDEP */
 {
     int i, j, len=0, status=NC_NOERR, mpireturn, err, buf_type_size=0;
     void *buf=NULL;
@@ -2003,15 +2018,15 @@ ncmpii_mgetput(NC           *ncp,
     MPI_File fh;
     MPI_Offset offset=0;
 
-    if (io_method == COLL_IO)
-        fh = ncp->nciop->collective_fh;
+    if (coll_indep == NC_REQ_COLL)
+        fh = ncp->collective_fh;
     else
-        fh = ncp->nciop->independent_fh;
+        fh = ncp->independent_fh;
 
     /* construct a MPI file type by concatenating fileviews of all requests */
-    status = ncmpii_construct_filetypes(ncp,num_reqs, reqs, rw_flag, &filetype);
+    status = construct_filetypes(ncp,num_reqs, reqs, rw_flag, &filetype);
     if (status != NC_NOERR) { /* if failed, skip this request */
-        if (io_method == INDEP_IO) return status;
+        if (coll_indep == NC_REQ_INDEP) return status;
 
         /* For collective I/O, we still need to participate the successive
            collective calls: setview/read/write */
@@ -2021,8 +2036,9 @@ ncmpii_mgetput(NC           *ncp,
 
     /* set the MPI-IO fileview */
     offset=0;
-    err = ncmpii_file_set_view(ncp, fh, &offset, filetype);
+    err = ncmpio_file_set_view(ncp, fh, &offset, filetype);
     if (err != NC_NOERR) {
+        if (coll_indep == NC_REQ_INDEP) return status;
         num_reqs = 0; /* skip this request */
         if (status == NC_NOERR) status = err;
     }
@@ -2045,11 +2061,13 @@ ncmpii_mgetput(NC           *ncp,
         buf = reqs[0].xbuf;
     }
     else if (num_reqs > 1) { /* create the I/O buffer derived data type */
-        int *blocklengths = (int*) NCI_Malloc((size_t)num_reqs * SIZEOF_INT);
-        MPI_Aint *disps = (MPI_Aint*) NCI_Malloc((size_t)num_reqs*SIZEOF_MPI_AINT);
-        MPI_Aint a0=0, ai, a_last_contig;
+        int *blocklengths, last_contig_req;
+        MPI_Aint *disps, a0=0, ai, a_last_contig;
 
-        int last_contig_req = 0; /* index of the last contiguous request */
+        blocklengths = (int*) NCI_Malloc((size_t)num_reqs * SIZEOF_INT);
+        disps = (MPI_Aint*) NCI_Malloc((size_t)num_reqs * SIZEOF_MPI_AINT);
+
+        last_contig_req = 0; /* index of the last contiguous request */
         buf = NULL;
         /* process only valid requests */
         for (i=0, j=0; i<num_reqs; i++) {
@@ -2057,7 +2075,8 @@ ncmpii_mgetput(NC           *ncp,
             MPI_Offset int8 = reqs[i].bnelems * reqs[i].varp->xsz;
             blocklengths[j] = (int)int8;
             if (int8 != blocklengths[j]) { /* int overflow */
-                if (status == NC_NOERR) DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
+                if (status == NC_NOERR) /* keep the 1st encountered error */
+                    DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
                 blocklengths[j] = 0;
                 continue; /* skip this request */
             }
@@ -2106,14 +2125,14 @@ ncmpii_mgetput(NC           *ncp,
                                           MPI_BYTE, &buf_type);
 #endif
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn,"MPI_Type_create_hindexed");
+                err = ncmpii_error_mpi2nc(mpireturn,"MPI_Type_create_hindexed");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) status = err;
             }
             else {
                 mpireturn = MPI_Type_commit(&buf_type);
                 if (mpireturn != MPI_SUCCESS) {
-                    err = ncmpii_handle_error(mpireturn,"MPI_Type_commit");
+                    err = ncmpii_error_mpi2nc(mpireturn,"MPI_Type_commit");
                     /* return the first encountered error if there is any */
                     if (status == NC_NOERR) status = err;
                 }
@@ -2128,69 +2147,78 @@ ncmpii_mgetput(NC           *ncp,
 
     MPI_Type_size(buf_type, &buf_type_size);
 
-    if (rw_flag == READ_REQ) {
-        if (io_method == COLL_IO) {
+#ifdef _USE_MPI_GET_COUNT
+        /* explicitly initialize mpistatus object to 0, see comments below */
+        memset(&mpistatus, 0, sizeof(MPI_Status));
+#endif
+
+    if (rw_flag == NC_REQ_RD) {
+        if (coll_indep == NC_REQ_COLL) {
             TRACE_IO(MPI_File_read_at_all)(fh, offset, buf, len, buf_type,
                                            &mpistatus);
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_read_at_all");
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at_all");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) {
                     err = (err == NC_EFILE) ? NC_EREAD : err;
                     DEBUG_ASSIGN_ERROR(status, err)
                 }
             }
-            else {
-                /* update the number of bytes read since file open */
-                ncp->nciop->get_size += len * buf_type_size;
-            }
         } else {
             TRACE_IO(MPI_File_read_at)(fh, offset, buf, len, buf_type,
                                        &mpistatus);
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_read_at");
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_read_at");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) {
                     err = (err == NC_EFILE) ? NC_EREAD : err;
                     DEBUG_ASSIGN_ERROR(status, err)
                 }
             }
-            else {
-                /* update the number of bytes read since file open */
-                ncp->nciop->get_size += len * buf_type_size;
-            }
         }
-    } else { /* WRITE_REQ */
-        if (io_method == COLL_IO) {
+        if (mpireturn == MPI_SUCCESS) {
+            /* update the number of bytes read since file open */
+#ifdef _USE_MPI_GET_COUNT
+            int get_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &get_size);
+            ncp->get_size += get_size;
+#else
+            ncp->get_size += len * buf_type_size;
+#endif
+        }
+    } else { /* NC_REQ_WR */
+        if (coll_indep == NC_REQ_COLL) {
             TRACE_IO(MPI_File_write_at_all)(fh, offset, buf, len, buf_type,
                                             &mpistatus);
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_write_at_all");
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at_all");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) {
                     err = (err == NC_EFILE) ? NC_EWRITE : err;
                     DEBUG_ASSIGN_ERROR(status, err)
                 }
             }
-            else {
-                /* update the number of bytes written since file open */
-                ncp->nciop->put_size += len * buf_type_size;
-            }
         } else {
             TRACE_IO(MPI_File_write_at)(fh, offset, buf, len, buf_type,
                                         &mpistatus);
             if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_write_at");
+                err = ncmpii_error_mpi2nc(mpireturn, "MPI_File_write_at");
                 /* return the first encountered error if there is any */
                 if (status == NC_NOERR) {
                     err = (err == NC_EFILE) ? NC_EWRITE : err;
                     DEBUG_ASSIGN_ERROR(status, err)
                 }
             }
-            else {
-                /* update the number of bytes written since file open */
-                ncp->nciop->put_size += len * buf_type_size;
-            }
+        }
+        if (mpireturn == MPI_SUCCESS) {
+            /* update the number of bytes written since file open */
+#ifdef _USE_MPI_GET_COUNT
+            int put_size;
+            MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
+            ncp->put_size += put_size;
+#else
+            ncp->put_size += len * buf_type_size;
+#endif
         }
     }
 
diff --git a/src/include/Makefile.am b/src/include/Makefile.am
new file mode 100644
index 0000000..3a2c5ae
--- /dev/null
+++ b/src/include/Makefile.am
@@ -0,0 +1,15 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2815 2017-01-01 23:06:33Z wkliao $
+#
+# @configure_input@
+
+nodist_include_HEADERS = pnetcdf.h
+
+EXTRA_DIST = nctypes.h dispatch.h pnc_debug.h
+
+dist-hook:
+	$(SED_I) -e "s|DIST_DATE|`date '+%e %b %Y'`|g" $(distdir)/pnetcdf.h.in
+
diff --git a/src/include/Makefile.in b/src/include/Makefile.in
new file mode 100644
index 0000000..b1b6156
--- /dev/null
+++ b/src/include/Makefile.in
@@ -0,0 +1,682 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2815 2017-01-01 23:06:33Z wkliao $
+#
+# @configure_input@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/include
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = pnetcdf.h
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(includedir)"
+HEADERS = $(nodist_include_HEADERS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+	$(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(srcdir)/pnetcdf.h.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+nodist_include_HEADERS = pnetcdf.h
+EXTRA_DIST = nctypes.h dispatch.h pnc_debug.h
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/include/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/include/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+	@test -f $@ || rm -f stamp-h1
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status src/include/config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+pnetcdf.h: $(top_builddir)/config.status $(srcdir)/pnetcdf.h.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-nodist_includeHEADERS: $(nodist_include_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+	done
+
+uninstall-nodist_includeHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(nodist_include_HEADERS)'; test -n "$(includedir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS) config.h
+installdirs:
+	for dir in "$(DESTDIR)$(includedir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-nodist_includeHEADERS
+
+.MAKE: all install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool cscopelist-am ctags ctags-am dist-hook distclean \
+	distclean-generic distclean-hdr distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-nodist_includeHEADERS install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am \
+	uninstall-nodist_includeHEADERS
+
+.PRECIOUS: Makefile
+
+
+dist-hook:
+	$(SED_I) -e "s|DIST_DATE|`date '+%e %b %Y'`|g" $(distdir)/pnetcdf.h.in
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/lib/ncconfig.h.in b/src/include/config.h.in
similarity index 64%
rename from src/lib/ncconfig.h.in
rename to src/include/config.h.in
index e8856ad..97048fc 100644
--- a/src/lib/ncconfig.h.in
+++ b/src/include/config.h.in
@@ -1,4 +1,7 @@
-/* src/lib/ncconfig.h.in.  Generated from configure.in by autoheader.  */
+/* src/include/config.h.in.  Generated from configure.ac by autoheader.  */
+
+#ifndef _CONFIG_H
+#define _CONFIG_H
 
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
@@ -9,9 +12,6 @@
 /* Define if to disable in-place byte swap */
 #undef DISABLE_IN_PLACE_SWAP
 
-/* Define if able to support CDF-5 file format */
-#undef ENABLE_CDF5
-
 /* Define if able to support request aggregation in nonblocking routines */
 #undef ENABLE_REQ_AGGREGATION
 
@@ -40,170 +40,208 @@
 /* Define to 1 if you have the `access' function. */
 #undef HAVE_ACCESS
 
-/* Define if C++ macro __FUNCTION__ is defined */
-#undef HAVE_FUNCTION_MACRO
+/* available */
+#undef HAVE_DECL_MPI_BYTE
 
-/* Define if C++ macro __func__ is defined */
-#undef HAVE_FUNC_MACRO
+/* available */
+#undef HAVE_DECL_MPI_CHAR
 
-/* Define to 1 if the system has the type `int64'. */
-#undef HAVE_INT64
+/* available */
+#undef HAVE_DECL_MPI_CHARACTER
 
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
+/* Define to 1 if you have the declaration of `MPI_COMBINER_DARRAY', and to 0
+   if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_DARRAY
 
-/* Define to 1 if the system has the type `longlong'. */
-#undef HAVE_LONGLONG
+/* Define to 1 if you have the declaration of `MPI_COMBINER_DUP', and to 0 if
+   you don't. */
+#undef HAVE_DECL_MPI_COMBINER_DUP
 
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
+/* Define to 1 if you have the declaration of `MPI_COMBINER_F90_COMPLEX', and
+   to 0 if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_F90_COMPLEX
 
-/* available */
-#undef HAVE_MPI_BYTE
+/* Define to 1 if you have the declaration of `MPI_COMBINER_F90_INTEGER', and
+   to 0 if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_F90_INTEGER
 
-/* available */
-#undef HAVE_MPI_CHAR
+/* Define to 1 if you have the declaration of `MPI_COMBINER_F90_REAL', and to
+   0 if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_F90_REAL
 
-/* available */
-#undef HAVE_MPI_CHARACTER
+/* Define to 1 if you have the declaration of `MPI_COMBINER_HINDEXED_INTEGER',
+   and to 0 if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_HINDEXED_INTEGER
 
-/* available */
-#undef HAVE_MPI_COMBINER_DARRAY
+/* Define to 1 if you have the declaration of `MPI_COMBINER_HVECTOR_INTEGER',
+   and to 0 if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_HVECTOR_INTEGER
 
-/* available */
-#undef HAVE_MPI_COMBINER_DUP
+/* Define to 1 if you have the declaration of `MPI_COMBINER_INDEXED_BLOCK',
+   and to 0 if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_INDEXED_BLOCK
 
-/* available */
-#undef HAVE_MPI_COMBINER_F90_COMPLEX
+/* Define to 1 if you have the declaration of `MPI_COMBINER_RESIZED', and to 0
+   if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_RESIZED
 
-/* available */
-#undef HAVE_MPI_COMBINER_F90_INTEGER
+/* Define to 1 if you have the declaration of `MPI_COMBINER_STRUCT_INTEGER',
+   and to 0 if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_STRUCT_INTEGER
 
-/* available */
-#undef HAVE_MPI_COMBINER_F90_REAL
+/* Define to 1 if you have the declaration of `MPI_COMBINER_SUBARRAY', and to
+   0 if you don't. */
+#undef HAVE_DECL_MPI_COMBINER_SUBARRAY
 
 /* available */
-#undef HAVE_MPI_COMBINER_HINDEXED_INTEGER
+#undef HAVE_DECL_MPI_COMPLEX16
 
 /* available */
-#undef HAVE_MPI_COMBINER_HVECTOR_INTEGER
+#undef HAVE_DECL_MPI_COMPLEX32
 
 /* available */
-#undef HAVE_MPI_COMBINER_INDEXED_BLOCK
+#undef HAVE_DECL_MPI_COMPLEX8
 
 /* available */
-#undef HAVE_MPI_COMBINER_RESIZED
+#undef HAVE_DECL_MPI_DOUBLE
 
 /* available */
-#undef HAVE_MPI_COMBINER_STRUCT_INTEGER
+#undef HAVE_DECL_MPI_DOUBLE_PRECISION
 
-/* available */
-#undef HAVE_MPI_COMBINER_SUBARRAY
+/* Define to 1 if you have the declaration of `MPI_ERR_ACCESS', and to 0 if
+   you don't. */
+#undef HAVE_DECL_MPI_ERR_ACCESS
 
-/* available */
-#undef HAVE_MPI_COMPLEX16
+/* Define to 1 if you have the declaration of `MPI_ERR_AMODE', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MPI_ERR_AMODE
 
-/* available */
-#undef HAVE_MPI_COMPLEX32
+/* Define to 1 if you have the declaration of `MPI_ERR_BAD_FILE', and to 0 if
+   you don't. */
+#undef HAVE_DECL_MPI_ERR_BAD_FILE
 
-/* available */
-#undef HAVE_MPI_COMPLEX8
+/* Define to 1 if you have the declaration of `MPI_ERR_FILE_EXISTS', and to 0
+   if you don't. */
+#undef HAVE_DECL_MPI_ERR_FILE_EXISTS
 
-/* available */
-#undef HAVE_MPI_DOUBLE
+/* Define to 1 if you have the declaration of `MPI_ERR_NOT_SAME', and to 0 if
+   you don't. */
+#undef HAVE_DECL_MPI_ERR_NOT_SAME
 
-/* available */
-#undef HAVE_MPI_DOUBLE_PRECISION
+/* Define to 1 if you have the declaration of `MPI_ERR_NO_SPACE', and to 0 if
+   you don't. */
+#undef HAVE_DECL_MPI_ERR_NO_SPACE
 
-/* available */
-#undef HAVE_MPI_ERR_ACCESS
+/* Define to 1 if you have the declaration of `MPI_ERR_NO_SUCH_FILE', and to 0
+   if you don't. */
+#undef HAVE_DECL_MPI_ERR_NO_SUCH_FILE
 
-/* available */
-#undef HAVE_MPI_ERR_AMODE
+/* Define to 1 if you have the declaration of `MPI_ERR_QUOTA', and to 0 if you
+   don't. */
+#undef HAVE_DECL_MPI_ERR_QUOTA
 
-/* available */
-#undef HAVE_MPI_ERR_BAD_FILE
+/* Define to 1 if you have the declaration of `MPI_ERR_READ_ONLY', and to 0 if
+   you don't. */
+#undef HAVE_DECL_MPI_ERR_READ_ONLY
 
 /* available */
-#undef HAVE_MPI_ERR_FILE_EXISTS
+#undef HAVE_DECL_MPI_FLOAT
 
 /* available */
-#undef HAVE_MPI_ERR_NOT_SAME
+#undef HAVE_DECL_MPI_INT
 
 /* available */
-#undef HAVE_MPI_ERR_NO_SPACE
+#undef HAVE_DECL_MPI_INTEGER
 
 /* available */
-#undef HAVE_MPI_ERR_NO_SUCH_FILE
+#undef HAVE_DECL_MPI_INTEGER1
 
 /* available */
-#undef HAVE_MPI_ERR_QUOTA
+#undef HAVE_DECL_MPI_INTEGER16
 
 /* available */
-#undef HAVE_MPI_ERR_READ_ONLY
+#undef HAVE_DECL_MPI_INTEGER2
 
 /* available */
-#undef HAVE_MPI_FLOAT
-
-/* Define to 1 if you have the `MPI_Get_address' function. */
-#undef HAVE_MPI_GET_ADDRESS
-
-/* Define to 1 if you have the `MPI_Info_dup' function. */
-#undef HAVE_MPI_INFO_DUP
-
-/* Define to 1 if you have the `MPI_Info_free' function. */
-#undef HAVE_MPI_INFO_FREE
+#undef HAVE_DECL_MPI_INTEGER4
 
 /* available */
-#undef HAVE_MPI_INT
+#undef HAVE_DECL_MPI_INTEGER8
 
 /* available */
-#undef HAVE_MPI_INTEGER
+#undef HAVE_DECL_MPI_LB
 
 /* available */
-#undef HAVE_MPI_INTEGER1
+#undef HAVE_DECL_MPI_LONG
 
 /* available */
-#undef HAVE_MPI_INTEGER16
+#undef HAVE_DECL_MPI_LONG_LONG_INT
 
 /* available */
-#undef HAVE_MPI_INTEGER2
+#undef HAVE_DECL_MPI_OFFSET
 
 /* available */
-#undef HAVE_MPI_INTEGER4
+#undef HAVE_DECL_MPI_REAL
 
 /* available */
-#undef HAVE_MPI_INTEGER8
+#undef HAVE_DECL_MPI_REAL16
 
 /* available */
-#undef HAVE_MPI_LB
+#undef HAVE_DECL_MPI_REAL4
 
 /* available */
-#undef HAVE_MPI_LONG
+#undef HAVE_DECL_MPI_REAL8
 
 /* available */
-#undef HAVE_MPI_LONG_LONG_INT
+#undef HAVE_DECL_MPI_SHORT
 
 /* available */
-#undef HAVE_MPI_OFFSET_DATATYPE
+#undef HAVE_DECL_MPI_SIGNED_CHAR
 
 /* available */
-#undef HAVE_MPI_REAL
+#undef HAVE_DECL_MPI_UB
 
 /* available */
-#undef HAVE_MPI_REAL16
+#undef HAVE_DECL_MPI_UNSIGNED
 
 /* available */
-#undef HAVE_MPI_REAL4
+#undef HAVE_DECL_MPI_UNSIGNED_CHAR
 
 /* available */
-#undef HAVE_MPI_REAL8
+#undef HAVE_DECL_MPI_UNSIGNED_LONG_LONG
 
 /* available */
-#undef HAVE_MPI_SHORT
+#undef HAVE_DECL_MPI_UNSIGNED_SHORT
 
-/* available */
-#undef HAVE_MPI_SIGNED_CHAR
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define if C++ macro __FUNCTION__ is defined */
+#undef HAVE_FUNCTION_MACRO
+
+/* Define if C++ macro __func__ is defined */
+#undef HAVE_FUNC_MACRO
+
+/* Define to 1 if the system has the type `int64'. */
+#undef HAVE_INT64
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if the system has the type `longlong'. */
+#undef HAVE_LONGLONG
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `MPI_Get_address' function. */
+#undef HAVE_MPI_GET_ADDRESS
+
+/* Define to 1 if you have the `MPI_Info_dup' function. */
+#undef HAVE_MPI_INFO_DUP
+
+/* Define to 1 if you have the `MPI_Info_free' function. */
+#undef HAVE_MPI_INFO_FREE
 
 /* Define to 1 if you have the `MPI_Type_create_hindexed' function. */
 #undef HAVE_MPI_TYPE_CREATE_HINDEXED
@@ -223,30 +261,15 @@
 /* Define to 1 if you have the `MPI_Type_get_extent' function. */
 #undef HAVE_MPI_TYPE_GET_EXTENT
 
-/* available */
-#undef HAVE_MPI_UB
-
-/* available */
-#undef HAVE_MPI_UNSIGNED
-
-/* available */
-#undef HAVE_MPI_UNSIGNED_CHAR
-
-/* available */
-#undef HAVE_MPI_UNSIGNED_LONG_LONG
-
-/* available */
-#undef HAVE_MPI_UNSIGNED_SHORT
-
 /* Define to 1 if the system has the type `ptrdiff_t'. */
 #undef HAVE_PTRDIFF_T
 
+/* Define to 1 if the system has the type `schar'. */
+#undef HAVE_SCHAR
+
 /* Define to 1 if you have the <search.h> header file. */
 #undef HAVE_SEARCH_H
 
-/* Define to 1 if the system has the type `ssize_t'. */
-#undef HAVE_SSIZE_T
-
 /* Define to 1 if stdbool.h conforms to C99. */
 #undef HAVE_STDBOOL_H
 
@@ -298,9 +321,15 @@
 /* Define to 1 if the system has the type `ushort'. */
 #undef HAVE_USHORT
 
+/* Define to 1 if you have the `usleep' function. */
+#undef HAVE_USLEEP
+
 /* Define to 1 if the system has the type `_Bool'. */
 #undef HAVE__BOOL
 
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
+#undef LT_OBJDIR
+
 /* Type of NC_BYTE */
 #undef NCBYTE_T
 
@@ -337,6 +366,9 @@
 /* Does system have IEEE FLOAT */
 #undef NO_IEEE_FLOAT
 
+/* Name of package */
+#undef PACKAGE
+
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 
@@ -358,9 +390,12 @@
 /* Define if to enable malloc tracing */
 #undef PNC_MALLOC_TRACE
 
-/* Define if relaxed coord check is enabled */
+/* Define if relaxed coordinate check is enabled */
 #undef RELAX_COORD_BOUND
 
+/* The size of `char', as computed by sizeof. */
+#undef SIZEOF_CHAR
+
 /* The size of `double', as computed by sizeof. */
 #undef SIZEOF_DOUBLE
 
@@ -388,6 +423,9 @@
 /* The size of `off_t', as computed by sizeof. */
 #undef SIZEOF_OFF_T
 
+/* The size of `schar', as computed by sizeof. */
+#undef SIZEOF_SCHAR
+
 /* The size of `short', as computed by sizeof. */
 #undef SIZEOF_SHORT
 
@@ -397,6 +435,9 @@
 /* The size of `size_t', as computed by sizeof. */
 #undef SIZEOF_SIZE_T
 
+/* The size of `uchar', as computed by sizeof. */
+#undef SIZEOF_UCHAR
+
 /* The size of `uint', as computed by sizeof. */
 #undef SIZEOF_UINT
 
@@ -424,6 +465,12 @@
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
+/* Define if performing coverage tests */
+#undef USE_COVERAGE
+
+/* Version number of package */
+#undef VERSION
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
@@ -463,3 +510,9 @@
 
 /* Define to `unsigned int' if <sys/types.h> does not define. */
 #undef size_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef ssize_t
+
+#include <nctypes.h>
+#endif
diff --git a/src/include/dispatch.h b/src/include/dispatch.h
new file mode 100644
index 0000000..ba07867
--- /dev/null
+++ b/src/include/dispatch.h
@@ -0,0 +1,147 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: dispatch.h 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifndef _PNC_DISPATCH_H
+#define _PNC_DISPATCH_H
+
+#include <pnetcdf.h>
+#include <mpi.h>
+
+/* various I/O modes or types */
+#define NC_REQ_COLL    0x00000001  /* collective request */
+#define NC_REQ_INDEP   0x00000002  /* independent request */
+#define NC_REQ_WR      0x00000004  /* write request */
+#define NC_REQ_RD      0x00000008  /* read request */
+#define NC_REQ_ZERO    0x00000010  /* nonblocking API */
+#define NC_REQ_HL      0x00000020  /* high-level API */
+#define NC_REQ_FLEX    0x00000040  /* flexible API */
+#define NC_REQ_BLK     0x00000080  /* blocking get/put API */
+#define NC_REQ_NBI     0x00000100  /* nonblocking iget/iput API */
+#define NC_REQ_NBB     0x00000200  /* nonblocking bput API */
+
+#define NC_MODE_RDONLY 0x00001000  /* file is opned in read-only mode */
+#define NC_MODE_DEF    0x00002000  /* in define mode */
+#define NC_MODE_INDEP  0x00004000  /* in independent data mode */
+#define NC_MODE_CREATE 0x00008000  /* just created and still in define mode */
+#define NC_MODE_FILL   0x00010000  /* fill mode */
+#define NC_MODE_SAFE   0x00020000  /* safe mode enabled */
+#define NC_MODE_BB     0x00040000  /* burst buffering mode enabled */
+
+/* list of all API kinds */
+typedef enum {
+    API_VARD,
+    API_VARN,
+    API_VAR,
+    API_VAR1,
+    API_VARA,
+    API_VARS,
+    API_VARM
+} NC_api;
+
+struct PNC_driver {
+    /* APIs manipulate files */
+    int (*create)(MPI_Comm, const char*, int, int, MPI_Info, void**);
+    int (*open)(MPI_Comm, const char*, int, int, MPI_Info, void**);
+    int (*close)(void*);
+    int (*enddef)(void*);
+    int (*_enddef)(void*,MPI_Offset,MPI_Offset,MPI_Offset,MPI_Offset);
+    int (*redef)(void*);
+    int (*sync)(void*);
+    int (*abort)(void*);
+    int (*set_fill)(void*,int,int*);
+    int (*inq)(void*,int*,int*,int*,int*);
+    int (*inq_misc)(void*,int*,char*,int*,int*,int*,int*,MPI_Offset*,MPI_Offset*,MPI_Offset*,MPI_Offset*,MPI_Offset*,MPI_Info*,int*,MPI_Offset*,MPI_Offset*);
+    int (*sync_numrecs)(void*);
+    int (*begin_indep_data)(void*);
+    int (*end_indep_data)(void*);
+
+    /* APIs manipulate dimensions */
+    int (*def_dim)(void*,const char*,MPI_Offset,int*);
+    int (*inq_dimid)(void*,const char*,int*);
+    int (*inq_dim)(void*,int,char*,MPI_Offset*);
+    int (*rename_dim)(void*, int, const char*);
+
+    /* APIs read/write attributes */
+    int (*inq_att)(void*,int,const char*,nc_type*,MPI_Offset*);
+    int (*inq_attid)(void*,int,const char*,int*);
+    int (*inq_attname)(void*,int,int,char*);
+    int (*copy_att)(void*,int,const char*,void*,int);
+    int (*rename_att)(void*,int,const char*,const char*);
+    int (*del_att)(void*,int,const char*);
+    int (*get_att)(void*,int,const char*,void*,MPI_Datatype);
+    int (*put_att)(void*,int,const char*,nc_type,MPI_Offset,const void*,MPI_Datatype);
+
+    /* APIs read/write variables */
+    int (*def_var)(void*,const char*,nc_type,int,const int*,int*);
+    int (*def_var_fill)(void*,int,int,const void*);
+    int (*fill_var_rec)(void*,int,MPI_Offset);
+    int (*inq_var)(void*,int,char*,nc_type*,int*,int*,int*,MPI_Offset*,int*,void*);
+    int (*inq_varid)(void*,const char*,int*);
+    int (*rename_var)(void*,int,const char*);
+
+    int (*get_var)(void*,int,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,void*,MPI_Offset,MPI_Datatype,int);
+    int (*put_var)(void*,int,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,const void*,MPI_Offset,MPI_Datatype,int);
+
+    int (*get_varn)(void*,int,int,MPI_Offset* const*,MPI_Offset* const*,void*,MPI_Offset,MPI_Datatype,int);
+    int (*put_varn)(void*,int,int,MPI_Offset* const*,MPI_Offset* const*,const void*,MPI_Offset,MPI_Datatype,int);
+
+    int (*get_vard)(void*,int,MPI_Datatype,void*,MPI_Offset,MPI_Datatype,int);
+    int (*put_vard)(void*,int,MPI_Datatype,const void*,MPI_Offset,MPI_Datatype,int);
+
+    int (*iget_var)(void*,int,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,void*,MPI_Offset,MPI_Datatype,int*,int);
+    int (*iput_var)(void*,int,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,const void*,MPI_Offset,MPI_Datatype,int*,int);
+    int (*bput_var)(void*,int,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,const MPI_Offset*,const void*,MPI_Offset,MPI_Datatype,int*,int);
+
+    int (*iget_varn)(void*,int,int,MPI_Offset* const*,MPI_Offset* const*,void*,MPI_Offset,MPI_Datatype,int*,int);
+    int (*iput_varn)(void*,int,int,MPI_Offset* const*,MPI_Offset* const*,const void*,MPI_Offset,MPI_Datatype,int*,int);
+    int (*bput_varn)(void*,int,int,MPI_Offset* const*,MPI_Offset* const*,const void*,MPI_Offset,MPI_Datatype,int*,int);
+
+    int (*buffer_attach)(void*,MPI_Offset);
+    int (*buffer_detach)(void*);
+    int (*wait)(void*,int,int*,int*,int);
+    int (*cancel)(void*,int,int*,int*);
+};
+
+typedef struct PNC_driver PNC_driver;
+
+#define PNC_VARS_CHUNK 64
+
+struct PNC_var {
+    int         ndims;
+    int         recdim;
+    nc_type     xtype;
+    MPI_Offset *shape;    /* [ndims] */
+};
+typedef struct PNC_var PNC_var;
+
+/* one dispatcher object per file: containing info independent from drivers,
+ * and can be used for sanity checks, operations need not involve drivers
+ */
+struct PNC {
+    int                mode;        /* file _open/_create mode */
+    int                flag;        /* define/data/collective/indep mode */
+    int                format;      /* file format */
+    char              *path;        /* path name */
+    MPI_Comm           comm;        /* MPI communicator */
+    int                ndims;       /* number of dimensions defined */
+    int                unlimdimid;  /* dim ID of NC_UNLIMITED */
+    int                nvars;       /* number of variables */
+    struct PNC_var    *vars;        /* array of variable objects */
+    void              *ncp;         /* pointer to driver internal object */
+    struct PNC_driver *driver;
+};
+
+typedef struct PNC PNC;
+
+/* subroutine prototypes */
+
+extern PNC_driver* ncmpio_inq_driver(void);
+
+extern PNC_driver* ncfoo_inq_driver(void);
+
+extern int PNC_check_id(int ncid, PNC **pncp);
+
+#endif /* _PNC_DISPATCH_H */
diff --git a/src/lib/nctypes.h b/src/include/nctypes.h
similarity index 77%
rename from src/lib/nctypes.h
rename to src/include/nctypes.h
index 938a675..e4040d9 100644
--- a/src/lib/nctypes.h
+++ b/src/include/nctypes.h
@@ -2,17 +2,18 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: nctypes.h 2301 2016-01-10 19:21:33Z wkliao $ */
+/* $Id: nctypes.h 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#ifndef NCTYPES_H
-#define NCTYPES_H
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
 
 #ifndef HAVE_PTRDIFF_T
-typedef int ptrdiff_t;
+typedef long int ptrdiff_t;
 #endif
 
-#ifndef HAVE_SSIZE_T
-typedef int ssize_t;
+#ifndef HAVE_SCHAR
+typedef signed char schar;
 #endif
 
 #ifndef HAVE_UCHAR
@@ -43,4 +44,3 @@ typedef long long int64;
 typedef unsigned long long uint64;
 #endif
 
-#endif
diff --git a/src/include/pnc_debug.h b/src/include/pnc_debug.h
new file mode 100644
index 0000000..c9587d5
--- /dev/null
+++ b/src/include/pnc_debug.h
@@ -0,0 +1,78 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ */
+/* $Id: pnc_debug.h 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifndef _PNC_DEBUG_H
+#define _PNC_DEBUG_H
+
+#include <stdio.h>
+
+/* The two defines below are to be set manually.
+#define PNETCDF_TRACE_MPI_COMM
+#define PNETCDF_TRACE_MPI_IO
+ */
+
+/* C macros for TRACE MPI calls */
+#ifdef PNETCDF_TRACE_MPI_COMM
+#define TRACE_COMM(x) printf("TRACE-MPI-COMM: FILE %s FUNC %s() LINE %d calling %s()\n",__FILE__,__func__,__LINE__,#x),mpireturn=x
+#else
+#define TRACE_COMM(x) mpireturn=x
+#endif
+
+#ifdef PNETCDF_TRACE_MPI_IO
+#define TRACE_IO(x) printf("TRACE-MPI-IO:   FILE %s FUNC %s() LINE %d calling %s()\n",__FILE__,__func__,__LINE__,#x),mpireturn=x
+#else
+#define TRACE_IO(x) mpireturn=x
+#endif
+
+#define CHECK_MPI_ERROR(mpi_errorcode, err_msg, nc_err) {                     \
+    if (mpi_errorcode != MPI_SUCCESS) {                                       \
+        char errorString[MPI_MAX_ERROR_STRING];                               \
+        int rank, errorStringLen;                                             \
+        MPI_Comm_rank(ncp->nciop->comm, &rank);                               \
+        MPI_Error_string(mpi_errorcode, errorString, &errorStringLen);        \
+        printf("%2d: MPI Failure at line %d of %s (%s : %s)\n",               \
+               rank, __LINE__, __FILE__, err_msg, errorString);               \
+        mpi_err = nc_err;                                                     \
+    }                                                                         \
+}
+
+#ifdef PNETCDF_DEBUG
+#define DEBUG_RETURN_ERROR(err) {                                       \
+    char *_env_str = getenv("PNETCDF_VERBOSE_DEBUG_MODE");              \
+    if (_env_str != NULL && *_env_str != '0') {                         \
+        int _rank;                                                      \
+        MPI_Comm_rank(MPI_COMM_WORLD, &_rank);                          \
+        fprintf(stderr, "Rank %d: %s error at line %d of %s in %s\n",   \
+        _rank,ncmpi_strerrno(err),__LINE__,__func__,__FILE__);          \
+    }                                                                   \
+    return err;                                                         \
+}
+#define DEBUG_ASSIGN_ERROR(status, err) {                               \
+    char *_env_str = getenv("PNETCDF_VERBOSE_DEBUG_MODE");              \
+    if (_env_str != NULL && *_env_str != '0') {                         \
+        int _rank;                                                      \
+        MPI_Comm_rank(MPI_COMM_WORLD, &_rank);                          \
+        fprintf(stderr, "Rank %d: %s error at line %d of %s in %s\n",   \
+        _rank,ncmpi_strerrno(err),__LINE__,__func__,__FILE__);          \
+    }                                                                   \
+    status = err;                                                       \
+}
+#define DEBUG_TRACE_ERROR(err) {                                        \
+    char *_env_str = getenv("PNETCDF_VERBOSE_DEBUG_MODE");              \
+    if (_env_str != NULL && *_env_str != '0') {                         \
+        int _rank;                                                      \
+        MPI_Comm_rank(MPI_COMM_WORLD, &_rank);                          \
+        fprintf(stderr, "Rank %d: %s error at line %d of %s in %s\n",   \
+        _rank,ncmpi_strerrno(err),__LINE__,__func__,__FILE__);          \
+    }                                                                   \
+}
+#else
+#define DEBUG_RETURN_ERROR(err) return err;
+#define DEBUG_ASSIGN_ERROR(status, err) status = err;
+#define DEBUG_TRACE_ERROR(err)
+#endif
+
+#endif /* _PNC_DEBUG_H */
diff --git a/src/lib/pnetcdf.h.in b/src/include/pnetcdf.h.in
similarity index 94%
rename from src/lib/pnetcdf.h.in
rename to src/include/pnetcdf.h.in
index 59a6fb4..be1e8d4 100644
--- a/src/lib/pnetcdf.h.in
+++ b/src/include/pnetcdf.h.in
@@ -2,13 +2,13 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  * 
- * $Id: pnetcdf.h.in 2658 2016-11-27 22:13:48Z wkliao $
+ * $Id: pnetcdf.h.in 3419 2017-09-24 18:56:39Z wkliao $
  *
  * @configure_input@
  */
 
-#ifndef _PNETCDF_
-#define _PNETCDF_
+#ifndef _PNETCDF_H
+#define _PNETCDF_H
 
 #include <mpi.h>
 
@@ -16,9 +16,9 @@
 #define PNETCDF_VERSION_MAJOR @PNETCDF_VERSION_MAJOR@
 #define PNETCDF_VERSION_MINOR @PNETCDF_VERSION_MINOR@
 #define PNETCDF_VERSION_SUB   @PNETCDF_VERSION_SUB@
-#define PNETCDF_RELEASE_DATE  "@PNETCDF_RELEASE_DATE@"
+#define PNETCDF_RELEASE_DATE  " 1 Nov 2017"
 
-/* list of PnetCDF options enabled/disabled at configure time */
+/* list of PnetCDF features enabled/disabled at configure time */
 #define PNETCDF_ERANGE_FILL       @ENABLE_ERANGE_FILL@
 #define PNETCDF_SUBFILING         @ENABLE_SUBFILING@
 #define PNETCDF_RELAX_COORD_BOUND @RELAX_COORD_BOUND@
@@ -45,9 +45,8 @@ extern "C" {
     NC_UINT64 : unsigned long long  (for _ulonglong APIs)
  */
 
-/* to make PnetCDF error codes compatible to netCDF, below we keep an exact
- * same copy of netcdf.h and re-use their defined values
- * Sync-ed with netcdf.h of version 4.4.0-rc5
+/* Many constants defined in PnetCDF share the same values as NetCDF.
+ * Below we keep a portion of exact same copy of netcdf.h (version 4.4.1.1)
  */
 #ifndef _NETCDF_
 
@@ -62,7 +61,7 @@ typedef int nc_type;
 #define	NC_CHAR 	2	/**< ISO/ASCII character */
 #define	NC_SHORT 	3	/**< signed 2 byte integer */
 #define	NC_INT 	        4	/**< signed 4 byte integer */
-#define NC_LONG         NC_INT  /**< deprecated, but required for backward compatibility. */
+#define NC_LONG         NC_INT  /**< \deprecated required for backward compatibility. */
 #define	NC_FLOAT 	5	/**< single precision floating point number */
 #define	NC_DOUBLE 	6	/**< double precision floating point number */
 #define	NC_UBYTE 	7	/**< unsigned 1 byte int */
@@ -126,11 +125,8 @@ typedef int nc_type;
 #define NC_MAX_USHORT 65535U
 #define NC_MAX_UINT 4294967295U
 #define NC_MAX_INT64 (9223372036854775807LL)
-#define NC_MIN_INT64 (-9223372036854775807LL-1)
+#define NC_MIN_INT64 (-9223372036854775807LL-1LL)
 #define NC_MAX_UINT64 (18446744073709551615ULL)
-#define X_INT64_MAX     (9223372036854775807LL)
-#define X_INT64_MIN     (-X_INT64_MAX - 1)
-#define X_UINT64_MAX    (18446744073709551615ULL)
 /**@}*/
 
 /** Name of fill value attribute.  If you wish a variable to use a
@@ -285,11 +281,11 @@ created with the ::NC_CLASSIC_MODEL flag.
 As a rule, NC_MAX_VAR_DIMS <= NC_MAX_DIMS.
 */
 /**@{*/
-#define NC_MAX_DIMS	1024
-#define NC_MAX_ATTRS	8192
-#define NC_MAX_VARS	8192
+#define NC_MAX_DIMS	NC_MAX_INT
+#define NC_MAX_ATTRS	NC_MAX_INT
+#define NC_MAX_VARS	NC_MAX_INT
 #define NC_MAX_NAME	256
-#define NC_MAX_VAR_DIMS	1024 /**< max per variable dimensions */
+#define NC_MAX_VAR_DIMS	NC_MAX_INT  /* max per-variable dimensions */
 /**@}*/
 
 /** This is the max size of an SD dataset name in HDF4 (from HDF4 documentation).*/
@@ -372,7 +368,7 @@ larger than the corresponding dimension length will cause an error. */
 /** NC_MAX_DIMS exceeded. Max number of dimensions exceeded in a
 classic or 64-bit offset file, or an netCDF-4 file with
 ::NC_CLASSIC_MODEL on. */
-#define	NC_EMAXDIMS	(-41)
+#define	NC_EMAXDIMS	(-41)      /**< NC_MAX_DIMS or NC_MAX_VAR_DIMS exceeds */
 
 #define	NC_ENAMEINUSE	(-42)	   /**< String match to name in use */
 #define NC_ENOTATT	(-43)	   /**< Attribute not found */
@@ -391,7 +387,7 @@ classic or 64-bit offset file, or an netCDF-4 file with
 The variable ID is invalid for the specified netCDF dataset. */
 #define NC_ENOTVAR	(-49)
 #define NC_EGLOBAL	(-50)	   /**< Action prohibited on NC_GLOBAL varid */
-#define NC_ENOTNC	(-51)	   /**< Not a netcdf file */
+#define NC_ENOTNC	(-51)	   /**< Not a netcdf file (file format violates CDF specification) */
 #define NC_ESTS        	(-52)	   /**< In Fortran, string too short */
 #define NC_EMAXNAME    	(-53)	   /**< NC_MAX_NAME exceeded */
 #define NC_EUNLIMIT    	(-54)	   /**< NC_UNLIMITED size already in use */
@@ -429,7 +425,9 @@ by the desired type. */
 #define NC_EDAPSVC      (-70)      /**< DAP server error */
 #define NC_EDAS		(-71)      /**< Malformed or inaccessible DAS */
 #define NC_EDDS		(-72)      /**< Malformed or inaccessible DDS */
+#define NC_EDMR         NC_EDDS    /**< Dap4 alias */
 #define NC_EDATADDS	(-73)      /**< Malformed or inaccessible DATADDS */
+#define NC_EDATADAP     NC_EDATADDS    /**< Dap4 alias */
 #define NC_EDAPURL	(-74)      /**< Malformed DAP URL */
 #define NC_EDAPCONSTRAINT (-75)    /**< Malformed DAP Constraint*/
 #define NC_ETRANSLATION (-76)      /**< Untranslatable construct */
@@ -498,7 +496,18 @@ by the desired type. */
 #endif
 /* end of #ifndef _NETCDF_ */
 
-/* now some definitions used in PnetCDF only */
+/* Below are constants used in PnetCDF only */
+
+/* invalid nonblocking request ID and zero-length request */
+#define NC_REQ_NULL -1
+
+/* indicate to flush all pending non-blocking requests */
+#define NC_REQ_ALL     -1
+#define NC_GET_REQ_ALL -2
+#define NC_PUT_REQ_ALL -3
+
+/* max number of opened files allowed */
+#define NC_MAX_NFILES	1024
 
 #define NC_FORMAT_UNKNOWN -1
 
@@ -587,7 +596,7 @@ by the desired type. */
 #define NC_EMULTIDEFINE_CMODE		(-273) /**< inconsistent file create modes among processes */
 
 #define NC_EMULTIDEFINE_FIRST		NC_EMULTIDEFINE
-#define NC_EMULTIDEFINE_LAST		NC_EMULTIDEFINE_FNC_ARGS
+#define NC_EMULTIDEFINE_LAST		NC_EMULTIDEFINE_CMODE
 
 /* backward compatible with PnetCDF 1.3.1 and earlier */
 #define NC_ECMODE			NC_EMULTIDEFINE_OMODE
@@ -603,14 +612,6 @@ by the desired type. */
 #define NC_ENUMRECS_MULTIDEFINE		NC_EMULTIDEFINE_NUMRECS
 #define NC_EVARS_BEGIN_MULTIDEFINE	NC_EMULTIDEFINE_VAR_BEGIN
 
-/* invalid nonblocking request ID and zero-length request */
-#define NC_REQ_NULL -1
-
-/* indicate to flush all pending non-blocking requests */
-#define NC_REQ_ALL     -1
-#define NC_GET_REQ_ALL -2
-#define NC_PUT_REQ_ALL -3
-
 

 /*
  * The Interface
@@ -681,7 +682,7 @@ extern int
 ncmpi_set_fill(int ncid, int fillmode, int *old_modep);
 
 extern int
-ncmpi_def_var_fill(int ncid, int varid, int no_fill, void *fill_value);
+ncmpi_def_var_fill(int ncid, int varid, int no_fill, const void *fill_value);
 
 extern int
 ncmpi_fill_var_rec(int ncid, int varid, MPI_Offset recno);
@@ -3362,558 +3363,558 @@ ncmpi_bput_varn_ulonglong(int ncid, int varid, int num,
 /* skip all mput/mget APIs as Fortran cannot handle array of buffers */
 
 extern int
-ncmpi_mput_var(int ncid, int num, int *varids, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+ncmpi_mput_var(int ncid, int num, int *varids, void* const *buf,
+               const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 
 extern int
-ncmpi_mput_var_all(int ncid, int num, int *varids, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+ncmpi_mput_var_all(int ncid, int num, int *varids, void* const *buf,
+               const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 
 extern int
-ncmpi_mput_var_text(int ncid, int num, int *varids, char *bufs[]);
+ncmpi_mput_var_text(int ncid, int num, int *varids, char* const *buf);
 extern int
-ncmpi_mput_var_text_all(int ncid, int num, int *varids, char *bufs[]);
+ncmpi_mput_var_text_all(int ncid, int num, int *varids, char* const *buf);
 
 extern int
-ncmpi_mput_var_schar(int ncid, int num, int *varids, signed char *bufs[]);
+ncmpi_mput_var_schar(int ncid, int num, int *varids, signed char* const *buf);
 extern int
-ncmpi_mput_var_schar_all(int ncid, int num, int *varids, signed char *bufs[]);
+ncmpi_mput_var_schar_all(int ncid, int num, int *varids, signed char* const *buf);
 
 extern int
-ncmpi_mput_var_uchar(int ncid, int num, int *varids, unsigned char *bufs[]);
+ncmpi_mput_var_uchar(int ncid, int num, int *varids, unsigned char* const *buf);
 extern int
-ncmpi_mput_var_uchar_all(int ncid, int num, int *varids, unsigned char *bufs[]);
+ncmpi_mput_var_uchar_all(int ncid, int num, int *varids, unsigned char* const *buf);
 
 extern int
-ncmpi_mput_var_short(int ncid, int num, int *varids, short *bufs[]);
+ncmpi_mput_var_short(int ncid, int num, int *varids, short* const *buf);
 extern int
-ncmpi_mput_var_short_all(int ncid, int num, int *varids, short *bufs[]);
+ncmpi_mput_var_short_all(int ncid, int num, int *varids, short* const *buf);
 
 extern int
-ncmpi_mput_var_ushort(int ncid, int num, int *varids, unsigned short *bufs[]);
+ncmpi_mput_var_ushort(int ncid, int num, int *varids, unsigned short* const *buf);
 extern int
 ncmpi_mput_var_ushort_all(int ncid, int num, int *varids,
-               unsigned short *bufs[]);
+               unsigned short* const *buf);
 
 extern int
-ncmpi_mput_var_int(int ncid, int num, int *varids, int *bufs[]);
+ncmpi_mput_var_int(int ncid, int num, int *varids, int* const *buf);
 extern int
-ncmpi_mput_var_int_all(int ncid, int num, int *varids, int *bufs[]);
+ncmpi_mput_var_int_all(int ncid, int num, int *varids, int* const *buf);
 
 extern int
-ncmpi_mput_var_uint(int ncid, int num, int *varids, unsigned int *bufs[]);
+ncmpi_mput_var_uint(int ncid, int num, int *varids, unsigned int* const *buf);
 extern int
-ncmpi_mput_var_uint_all(int ncid, int num, int *varids, unsigned int *bufs[]);
+ncmpi_mput_var_uint_all(int ncid, int num, int *varids, unsigned int* const *buf);
 
 extern int
-ncmpi_mput_var_long(int ncid, int num, int *varids, long *bufs[]);
+ncmpi_mput_var_long(int ncid, int num, int *varids, long* const *buf);
 extern int
-ncmpi_mput_var_long_all(int ncid, int num, int *varids, long *bufs[]);
+ncmpi_mput_var_long_all(int ncid, int num, int *varids, long* const *buf);
 
 extern int
-ncmpi_mput_var_float(int ncid, int num, int *varids, float *bufs[]);
+ncmpi_mput_var_float(int ncid, int num, int *varids, float* const *buf);
 extern int
-ncmpi_mput_var_float_all(int ncid, int num, int *varids, float *bufs[]);
+ncmpi_mput_var_float_all(int ncid, int num, int *varids, float* const *buf);
 
 extern int
-ncmpi_mput_var_double(int ncid, int num, int *varids, double *bufs[]);
+ncmpi_mput_var_double(int ncid, int num, int *varids, double* const *buf);
 extern int
-ncmpi_mput_var_double_all(int ncid, int num, int *varids, double *bufs[]);
+ncmpi_mput_var_double_all(int ncid, int num, int *varids, double* const *buf);
 
 extern int
-ncmpi_mput_var_longlong(int ncid, int num, int *varids, long long *bufs[]);
+ncmpi_mput_var_longlong(int ncid, int num, int *varids, long long* const *buf);
 extern int
-ncmpi_mput_var_longlong_all(int ncid, int num, int *varids, long long *bufs[]);
+ncmpi_mput_var_longlong_all(int ncid, int num, int *varids, long long* const *buf);
 
 extern int
 ncmpi_mput_var_ulonglong(int ncid, int num, int *varids,
-               unsigned long long *bufs[]);
+               unsigned long long* const *buf);
 extern int
 ncmpi_mput_var_ulonglong_all(int ncid, int num, int *varids,
-               unsigned long long *bufs[]);
+               unsigned long long* const *buf);
 
 extern int
 ncmpi_mput_var1(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+               MPI_Offset* const *starts, void* const *buf,
+               const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 extern int
 ncmpi_mput_var1_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+               MPI_Offset* const *starts, void* const *buf,
+               const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 
 extern int
 ncmpi_mput_var1_text(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, char *bufs[]);
+               MPI_Offset* const *starts, char* const *buf);
 extern int
 ncmpi_mput_var1_text_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, char *bufs[]);
+               MPI_Offset* const *starts, char* const *buf);
 
 extern int
 ncmpi_mput_var1_schar(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, signed char *bufs[]);
+               MPI_Offset* const *starts, signed char* const *buf);
 extern int
 ncmpi_mput_var1_schar_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, signed char *bufs[]);
+               MPI_Offset* const *starts, signed char* const *buf);
 
 extern int
 ncmpi_mput_var1_uchar(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, unsigned char *bufs[]);
+               MPI_Offset* const *starts, unsigned char* const *buf);
 extern int
 ncmpi_mput_var1_uchar_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, unsigned char *bufs[]);
+               MPI_Offset* const *starts, unsigned char* const *buf);
 
 extern int
 ncmpi_mput_var1_short(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, short *bufs[]);
+               MPI_Offset* const *starts, short* const *buf);
 extern int
 ncmpi_mput_var1_short_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, short *bufs[]);
+               MPI_Offset* const *starts, short* const *buf);
 
 extern int
 ncmpi_mput_var1_ushort(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, unsigned short *bufs[]);
+               MPI_Offset* const *starts, unsigned short* const *buf);
 extern int
 ncmpi_mput_var1_ushort_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, unsigned short *bufs[]);
+               MPI_Offset* const *starts, unsigned short* const *buf);
 
 extern int
 ncmpi_mput_var1_int(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, int *bufs[]);
+               MPI_Offset* const *starts, int* const *buf);
 extern int
 ncmpi_mput_var1_int_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, int *bufs[]);
+               MPI_Offset* const *starts, int* const *buf);
 
 extern int
 ncmpi_mput_var1_uint(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, unsigned int *bufs[]);
+               MPI_Offset* const *starts, unsigned int* const *buf);
 extern int
 ncmpi_mput_var1_uint_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, unsigned int *bufs[]);
+               MPI_Offset* const *starts, unsigned int* const *buf);
 
 extern int
 ncmpi_mput_var1_long(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, long *bufs[]);
+               MPI_Offset* const *starts, long* const *buf);
 extern int
 ncmpi_mput_var1_long_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, long *bufs[]);
+               MPI_Offset* const *starts, long* const *buf);
 
 extern int
 ncmpi_mput_var1_float(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, float *bufs[]);
+               MPI_Offset* const *starts, float* const *buf);
 extern int
 ncmpi_mput_var1_float_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, float *bufs[]);
+               MPI_Offset* const *starts, float* const *buf);
 
 extern int
 ncmpi_mput_var1_double(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, double *bufs[]);
+               MPI_Offset* const *starts, double* const *buf);
 extern int
 ncmpi_mput_var1_double_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, double *bufs[]);
+               MPI_Offset* const *starts, double* const *buf);
 
 extern int
 ncmpi_mput_var1_longlong(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, long long *bufs[]);
+               MPI_Offset* const *starts, long long* const *buf);
 extern int
 ncmpi_mput_var1_longlong_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, long long *bufs[]);
+               MPI_Offset* const *starts, long long* const *buf);
 
 extern int
 ncmpi_mput_var1_ulonglong(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, unsigned long long *bufs[]);
+               MPI_Offset* const *starts, unsigned long long* const *buf);
 extern int
 ncmpi_mput_var1_ulonglong_all(int ncid, int num, int *varids,
-               MPI_Offset* const *starts, unsigned long long *bufs[]);
+               MPI_Offset* const *starts, unsigned long long* const *buf);
 
 
 extern int
 ncmpi_mput_vara(int ncid, int num, int *varids, MPI_Offset* const *starts,
-               MPI_Offset* const *counts, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+               MPI_Offset* const *counts, void* const *buf,
+               const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 extern int
 ncmpi_mput_vara_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               void *bufs[], MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+               void* const *buf, const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 
 extern int
 ncmpi_mput_vara_text(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               char *bufs[]);
+               char* const *buf);
 extern int
 ncmpi_mput_vara_text_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               char *bufs[]);
+               char* const *buf);
 
 extern int
 ncmpi_mput_vara_schar(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               signed char *bufs[]);
+               signed char* const *buf);
 extern int
 ncmpi_mput_vara_schar_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               signed char *bufs[]);
+               signed char* const *buf);
 
 extern int
 ncmpi_mput_vara_uchar(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               unsigned char *bufs[]);
+               unsigned char* const *buf);
 extern int
 ncmpi_mput_vara_uchar_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               unsigned char *bufs[]);
+               unsigned char* const *buf);
 
 extern int
 ncmpi_mput_vara_short(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               short *bufs[]);
+               short* const *buf);
 extern int
 ncmpi_mput_vara_short_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               short *bufs[]);
+               short* const *buf);
 
 extern int
 ncmpi_mput_vara_ushort(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               unsigned short *bufs[]);
+               unsigned short* const *buf);
 extern int
 ncmpi_mput_vara_ushort_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               unsigned short *bufs[]);
+               unsigned short* const *buf);
 
 extern int
 ncmpi_mput_vara_int(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               int *bufs[]);
+               int* const *buf);
 extern int
 ncmpi_mput_vara_int_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               int *bufs[]);
+               int* const *buf);
 
 extern int
 ncmpi_mput_vara_uint(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               unsigned int *bufs[]);
+               unsigned int* const *buf);
 extern int
 ncmpi_mput_vara_uint_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               unsigned int *bufs[]);
+               unsigned int* const *buf);
 
 extern int
 ncmpi_mput_vara_long(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               long *bufs[]);
+               long* const *buf);
 extern int
 ncmpi_mput_vara_long_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               long *bufs[]);
+               long* const *buf);
 
 extern int
 ncmpi_mput_vara_float(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               float *bufs[]);
+               float* const *buf);
 extern int
 ncmpi_mput_vara_float_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               float *bufs[]);
+               float* const *buf);
 
 extern int
 ncmpi_mput_vara_double(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               double *bufs[]);
+               double* const *buf);
 extern int
 ncmpi_mput_vara_double_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               double *bufs[]);
+               double* const *buf);
 
 extern int
 ncmpi_mput_vara_longlong(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               long long *bufs[]);
+               long long* const *buf);
 extern int
 ncmpi_mput_vara_longlong_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               long long *bufs[]);
+               long long* const *buf);
 
 extern int
 ncmpi_mput_vara_ulonglong(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               unsigned long long *bufs[]);
+               unsigned long long* const *buf);
 extern int
 ncmpi_mput_vara_ulonglong_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               unsigned long long *bufs[]);
+               unsigned long long* const *buf);
 
 
 extern int
 ncmpi_mput_vars(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+               MPI_Offset* const *strides, void* const *buf,
+               const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 
 extern int
 ncmpi_mput_vars_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+               MPI_Offset* const *strides, void* const *buf,
+               const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 
 extern int
 ncmpi_mput_vars_text(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, char *bufs[]);
+               MPI_Offset* const *strides, char* const *buf);
 extern int
 ncmpi_mput_vars_text_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, char *bufs[]);
+               MPI_Offset* const *strides, char* const *buf);
 
 extern int
 ncmpi_mput_vars_schar(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, signed char *bufs[]);
+               MPI_Offset* const *strides, signed char* const *buf);
 extern int
 ncmpi_mput_vars_schar_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, signed char *bufs[]);
+               MPI_Offset* const *strides, signed char* const *buf);
 
 extern int
 ncmpi_mput_vars_uchar(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, unsigned char *bufs[]);
+               MPI_Offset* const *strides, unsigned char* const *buf);
 extern int
 ncmpi_mput_vars_uchar_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, unsigned char *bufs[]);
+               MPI_Offset* const *strides, unsigned char* const *buf);
 
 extern int
 ncmpi_mput_vars_short(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, short *bufs[]);
+               MPI_Offset* const *strides, short* const *buf);
 extern int
 ncmpi_mput_vars_short_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, short *bufs[]);
+               MPI_Offset* const *strides, short* const *buf);
 
 extern int
 ncmpi_mput_vars_ushort(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, unsigned short *bufs[]);
+               MPI_Offset* const *strides, unsigned short* const *buf);
 extern int
 ncmpi_mput_vars_ushort_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, unsigned short *bufs[]);
+               MPI_Offset* const *strides, unsigned short* const *buf);
 
 extern int
 ncmpi_mput_vars_int(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, int *bufs[]);
+               MPI_Offset* const *strides, int* const *buf);
 extern int
 ncmpi_mput_vars_int_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, int *bufs[]);
+               MPI_Offset* const *strides, int* const *buf);
 
 extern int
 ncmpi_mput_vars_uint(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, unsigned int *bufs[]);
+               MPI_Offset* const *strides, unsigned int* const *buf);
 extern int
 ncmpi_mput_vars_uint_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, unsigned int *bufs[]);
+               MPI_Offset* const *strides, unsigned int* const *buf);
 
 extern int
 ncmpi_mput_vars_long(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, long *bufs[]);
+               MPI_Offset* const *strides, long* const *buf);
 extern int
 ncmpi_mput_vars_long_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, long *bufs[]);
+               MPI_Offset* const *strides, long* const *buf);
 
 extern int
 ncmpi_mput_vars_float(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, float *bufs[]);
+               MPI_Offset* const *strides, float* const *buf);
 extern int
 ncmpi_mput_vars_float_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, float *bufs[]);
+               MPI_Offset* const *strides, float* const *buf);
 
 extern int
 ncmpi_mput_vars_double(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, double *bufs[]);
+               MPI_Offset* const *strides, double* const *buf);
 extern int
 ncmpi_mput_vars_double_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, double *bufs[]);
+               MPI_Offset* const *strides, double* const *buf);
 
 extern int
 ncmpi_mput_vars_longlong(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, long long *bufs[]);
+               MPI_Offset* const *strides, long long* const *buf);
 extern int
 ncmpi_mput_vars_longlong_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, long long *bufs[]);
+               MPI_Offset* const *strides, long long* const *buf);
 
 extern int
 ncmpi_mput_vars_ulonglong(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, unsigned long long *bufs[]);
+               MPI_Offset* const *strides, unsigned long long* const *buf);
 extern int
 ncmpi_mput_vars_ulonglong_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               MPI_Offset* const *strides, unsigned long long *bufs[]);
+               MPI_Offset* const *strides, unsigned long long* const *buf);
 
 extern int
 ncmpi_mput_varm(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               void *bufs[], MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+               void* const *buf, const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 extern int
 ncmpi_mput_varm_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               void *bufs[], MPI_Offset *bufcounts, MPI_Datatype datatypes[]);
+               void* const *buf, const MPI_Offset *bufcounts, const MPI_Datatype datatypes[]);
 
 extern int
 ncmpi_mput_varm_text(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               char *bufs[]);
+               char* const *buf);
 extern int
 ncmpi_mput_varm_text_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               char *bufs[]);
+               char* const *buf);
 
 extern int
 ncmpi_mput_varm_schar(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               signed char *bufs[]);
+               signed char* const *buf);
 extern int
 ncmpi_mput_varm_schar_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               signed char *bufs[]);
+               signed char* const *buf);
 
 extern int
 ncmpi_mput_varm_uchar(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               unsigned char *bufs[]);
+               unsigned char* const *buf);
 extern int
 ncmpi_mput_varm_uchar_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               unsigned char *bufs[]);
+               unsigned char* const *buf);
 
 extern int
 ncmpi_mput_varm_short(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               short *bufs[]);
+               short* const *buf);
 extern int
 ncmpi_mput_varm_short_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               short *bufs[]);
+               short* const *buf);
 
 extern int
 ncmpi_mput_varm_ushort(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               unsigned short *bufs[]);
+               unsigned short* const *buf);
 extern int
 ncmpi_mput_varm_ushort_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               unsigned short *bufs[]);
+               unsigned short* const *buf);
 
 extern int
 ncmpi_mput_varm_int(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               int *bufs[]);
+               int* const *buf);
 extern int
 ncmpi_mput_varm_int_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               int *bufs[]);
+               int* const *buf);
 
 extern int
 ncmpi_mput_varm_uint(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               unsigned int *bufs[]);
+               unsigned int* const *buf);
 extern int
 ncmpi_mput_varm_uint_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               unsigned int *bufs[]);
+               unsigned int* const *buf);
 
 extern int
 ncmpi_mput_varm_long(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               long *bufs[]);
+               long* const *buf);
 extern int
 ncmpi_mput_varm_long_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               long *bufs[]);
+               long* const *buf);
 
 extern int
 ncmpi_mput_varm_float(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               float *bufs[]);
+               float* const *buf);
 extern int
 ncmpi_mput_varm_float_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               float *bufs[]);
+               float* const *buf);
 
 extern int
 ncmpi_mput_varm_double(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               double *bufs[]);
+               double* const *buf);
 extern int
 ncmpi_mput_varm_double_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               double *bufs[]);
+               double* const *buf);
 
 extern int
 ncmpi_mput_varm_longlong(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               long long *bufs[]);
+               long long* const *buf);
 extern int
 ncmpi_mput_varm_longlong_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               long long *bufs[]);
+               long long* const *buf);
 
 extern int
 ncmpi_mput_varm_ulonglong(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               unsigned long long *bufs[]);
+               unsigned long long* const *buf);
 extern int
 ncmpi_mput_varm_ulonglong_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               unsigned long long *bufs[]);
+               unsigned long long* const *buf);
 
 extern int
 ncmpi_mget_var(int ncid, int num, int *varids, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 
 extern int
 ncmpi_mget_var_all(int ncid, int num, int *varids, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 
 extern int
 ncmpi_mget_var_text(int ncid, int num, int *varids, char *bufs[]);
@@ -3981,11 +3982,11 @@ ncmpi_mget_var_ulonglong_all(int ncid, int num, int *varids,
 extern int
 ncmpi_mget_var1(int ncid, int num, int *varids,
                MPI_Offset* const *starts, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 extern int
 ncmpi_mget_var1_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 
 extern int
 ncmpi_mget_var1_text(int ncid, int num, int *varids,
@@ -4075,11 +4076,11 @@ ncmpi_mget_var1_ulonglong_all(int ncid, int num, int *varids,
 extern int
 ncmpi_mget_vara(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               void *bufs[], MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               void *bufs[], const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 extern int
 ncmpi_mget_vara_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
-               void *bufs[], MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               void *bufs[], const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 
 extern int
 ncmpi_mget_vara_text(int ncid, int num, int *varids,
@@ -4193,12 +4194,12 @@ extern int
 ncmpi_mget_vars(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 extern int
 ncmpi_mget_vars_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, void *bufs[],
-               MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 
 extern int
 ncmpi_mget_vars_text(int ncid, int num, int *varids,
@@ -4312,13 +4313,13 @@ extern int
 ncmpi_mget_varm(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               void *bufs[], MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               void *bufs[], const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 
 extern int
 ncmpi_mget_varm_all(int ncid, int num, int *varids,
                MPI_Offset* const *starts, MPI_Offset* const *counts,
                MPI_Offset* const *strides, MPI_Offset* const *imaps,
-               void *bufs[], MPI_Offset *bufcounts, MPI_Datatype *datatypes);
+               void *bufs[], const MPI_Offset *bufcounts, const MPI_Datatype *datatypes);
 
 extern int
 ncmpi_mget_varm_text(int ncid, int num, int *varids,
@@ -4462,7 +4463,7 @@ ncmpi_mget_varm_ulonglong_all(int ncid, int num, int *varids,
 /* End Prototypes */
 
 
-/* These macros are defined in serial netcdf (3.5.0) for backwards
+/* Macros below are defined in serial netcdf (3.5.0) for backwards
  * compatibility with older netcdf code.   We aren't concerned with backwards
  * compatibility, so if your code doesn't compile with parallel-netcdf, maybe
  * this is why:
diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in
deleted file mode 100644
index b1fb33e..0000000
--- a/src/lib/Makefile.in
+++ /dev/null
@@ -1,133 +0,0 @@
-#
-# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
-# See COPYRIGHT notice in top-level directory.
-#
-# $Id: Makefile.in 2659 2016-11-27 22:15:33Z wkliao $
-#
-# @configure_input@
-
-srcdir = @srcdir@
-VPATH  = @srcdir@
-
-# generated by configure, so it's in the build dir, not srcdirr
-include ../../macros.make
-
-# For VPATH build:
-# Add . into search path because ./pnetcdf.h and ./ncconfig.h are created at
-# the configure time in this folder and they are included by many C source
-# files in this folder.
-# Add $(srcdir) into search path because those C files created from their m4
-# source files at the configure time include some header files in $(srcdir).
-INCLUDES = -I. -I$(srcdir)
-
-LIBRARY  = libpnetcdf.a
-HEADER   = pnetcdf.h
-
-ifeq (@enable_erange_fill@, yes)
-M4FLAGS += -DERANGE_FILL
-endif
-
-M4_HEADERS = ncx_h.m4
-
-M4_SRCS   = getput.m4 \
-            i_getput.m4 \
-            bput.m4 \
-            ncx.m4 \
-            m_getput_varx.m4 \
-            varn.m4 \
-            i_varn.m4 \
-            attr.m4 \
-            convert_swap.m4
-
-HEADER_SRCS = fbits.h \
-              nc.h \
-              nctypes.h \
-              ncio.h \
-              rnd.h \
-              ncmpidtype.h \
-              macro.h \
-              utf8proc_data.h \
-              utf8proc.h
-
-LIB_CSRCS = mpinetcdf.c \
-            header.c \
-            mpincio.c \
-            dim.c \
-            error.c \
-            nc.c \
-            string.c \
-            var.c \
-            ncmpidtype.c \
-            filetype.c \
-            nonblocking.c   \
-            malloc.c \
-            utf8proc.c \
-            vard.c \
-            fill.c \
-            util.c \
-            hash_func.c
-
-ifeq (@enable_subfiling@, yes)
-LIB_CSRCS   += subfile.c
-HEADER_SRCS += subfile.h
-endif
-
-PACKING_LIST = $(LIB_CSRCS) \
-               $(M4_HEADERS) \
-               $(M4_SRCS) \
-               $(HEADER_SRCS) \
-               pnetcdf.h.in \
-               depend \
-               Makefile.in \
-               ncconfig.h.in
-
-ifeq (@enable_subfiling@, no)
-PACKING_LIST += subfile.c subfile.h
-endif
-
-LIB_OBJS   = $(LIB_CSRCS:.c=.o) $(M4_SRCS:.m4=.o)
-
-GARBAGE    = $(LIBRARY) $(M4_SRCS:.m4=.c) ncx.h
-
-DIST_GARBAGE = ncconfig.h pnetcdf.h
-
-all: $(LIBRARY)
-
-objs: $(LIB_OBJS)
-
-library:
-	$(AR) $(ARFLAGS) $(LIBRARY) $(LIB_OBJS)
-	$(RANLIB) $(LIBRARY)
-
-$(LIBRARY): $(LIB_OBJS)
-	$(AR) $(ARFLAGS) $(LIBRARY) $(LIB_OBJS)
-	$(RANLIB) $(LIBRARY)
-
-install: $(LIBRARY)
-	$(INSTALL) -d -m 755 $(LIBDIR)
-	$(INSTALL_DATA) $(LIBRARY) $(LIBDIR)/$(LIBRARY)
-	$(INSTALL) -d -m 755 $(INCDIR)
-	$(INSTALL_DATA) $(HEADER) $(INCDIR)/$(HEADER)
-
-uninstall:
-	$(RM) -f $(LIBDIR)/$(LIBRARY)
-	$(RM) -f $(INCDIR)/$(HEADER)
-
-include $(srcdir)/../../rules.make
-
-.SUFFIXES: .ln
-LINT = lint
-LINT.c = $(LINT) $(LINTFLAGS) $(CPPFLAGS)
-.c.ln:
-	$(LINT.c) -c $<
-
-llib-lpnetcdf.ln: $(LIB_CSRCS)
-	$(LINT.c) $(LIB_CSRCS) -y -o pnetcdf
-
-lint: llib-lpnetcdf.ln
-	$(LINT.c) t_nc.c llib-lpnetcdf.ln
-
-ncx.h: ncx_h.m4
-	$(M4) $(M4FLAGS) $< >$@
-
-include $(srcdir)/depend
diff --git a/src/lib/attr.m4 b/src/lib/attr.m4
deleted file mode 100644
index 9ebf467..0000000
--- a/src/lib/attr.m4
+++ /dev/null
@@ -1,1550 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-/* Do not edit this file. It is produced from the corresponding .m4 source */
-dnl
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: attr.m4 2722 2016-12-18 06:20:38Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h>
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "fbits.h"
-#include "rnd.h"
-#include "macro.h"
-#include "utf8proc.h"
-
-/*----< ncmpii_free_NC_attr() >-----------------------------------------------*/
-/*
- * Free attr
- * Formerly
-NC_free_attr()
- */
-inline void
-ncmpii_free_NC_attr(NC_attr *attrp)
-{
-    if (attrp == NULL) return;
-
-    ncmpii_free_NC_string(attrp->name);
-
-    NCI_Free(attrp);
-}
-
-
-/*----< ncmpix_len_NC_attrV() >----------------------------------------------*/
-/*
- * How much space will 'nelems' of 'type' take in
- * external representation (as the values of an attribute)?
- */
-inline static MPI_Offset
-ncmpix_len_NC_attrV(nc_type    type,
-                    MPI_Offset nelems)
-{
-    switch(type) {
-        case NC_BYTE:
-        case NC_CHAR:
-        case NC_UBYTE:  return ncmpix_len_char(nelems);
-        case NC_SHORT:  return ncmpix_len_short(nelems);
-        case NC_USHORT: return ncmpix_len_ushort(nelems);
-        case NC_INT:    return ncmpix_len_int(nelems);
-        case NC_UINT:   return ncmpix_len_uint(nelems);
-        case NC_FLOAT:  return ncmpix_len_float(nelems);
-        case NC_DOUBLE: return ncmpix_len_double(nelems);
-        case NC_INT64:  return ncmpix_len_int64(nelems);
-        case NC_UINT64: return ncmpix_len_uint64(nelems);
-        default: fprintf(stderr, "Error: bad type(%d) in %s\n",type,__func__);
-    }
-    return 0;
-}
-
-
-NC_attr *
-ncmpii_new_x_NC_attr(NC_string  *strp,
-                     nc_type     type,
-                     MPI_Offset  nelems)
-{
-    NC_attr *attrp;
-    const MPI_Offset xsz = ncmpix_len_NC_attrV(type, nelems);
-    size_t sz = M_RNDUP(sizeof(NC_attr));
-
-    assert(!(xsz == 0 && nelems != 0));
-
-    sz += (size_t)xsz;
-
-    attrp = (NC_attr *) NCI_Malloc(sz);
-    if (attrp == NULL ) return NULL;
-
-    attrp->xsz    = xsz;
-    attrp->name   = strp;
-    attrp->type   = type;
-    attrp->nelems = nelems;
-
-    if (xsz != 0)
-        attrp->xvalue = (char *)attrp + M_RNDUP(sizeof(NC_attr));
-    else
-        attrp->xvalue = NULL;
-
-    return(attrp);
-}
-
-
-/*----< ncmpii_new_NC_attr() >------------------------------------------------*/
-/*
- * IN:  name is an already normalized attribute name (NULL terminated)
- * OUT: attrp->xvalue is malloc-ed with a space of an aligned size
- */
-static NC_attr *
-ncmpii_new_NC_attr(const char *name,
-                   nc_type     type,
-                   MPI_Offset  nelems)
-{
-    NC_string *strp;
-    NC_attr *attrp;
-
-    assert(name != NULL && *name != 0);
-
-    strp = ncmpii_new_NC_string(strlen(name), name);
-    if (strp == NULL) return NULL;
-
-    attrp = ncmpii_new_x_NC_attr(strp, type, nelems);
-    if (attrp == NULL) {
-        ncmpii_free_NC_string(strp);
-        return NULL;
-    }
-
-    return(attrp);
-}
-
-
-/*----< dup_NC_attr() >-------------------------------------------------------*/
-NC_attr *
-dup_NC_attr(const NC_attr *rattrp)
-{
-    NC_attr *attrp = ncmpii_new_NC_attr(rattrp->name->cp,
-                                        rattrp->type,
-                                        rattrp->nelems);
-    if (attrp == NULL) return NULL;
-    memcpy(attrp->xvalue, rattrp->xvalue, (size_t)rattrp->xsz);
-    return attrp;
-}
-
-/* attrarray */
-
-/*----< ncmpii_free_NC_attrarray() >------------------------------------------*/
-/*
- * Free NC_attrarray values.
- * formerly
-NC_free_array()
- */
-void
-ncmpii_free_NC_attrarray(NC_attrarray *ncap)
-{
-    int i;
-
-    assert(ncap != NULL);
-
-    if (ncap->nalloc == 0) return;
-
-    assert(ncap->value != NULL);
-
-    for (i=0; i<ncap->ndefined; i++)
-        ncmpii_free_NC_attr(ncap->value[i]);
-
-    NCI_Free(ncap->value);
-    ncap->value    = NULL;
-    ncap->nalloc   = 0;
-    ncap->ndefined = 0;
-}
-
-/*----< ncmpii_dup_NC_attrarray() >-------------------------------------------*/
-int
-ncmpii_dup_NC_attrarray(NC_attrarray *ncap, const NC_attrarray *ref)
-{
-    int i, status=NC_NOERR;
-
-    assert(ref != NULL);
-    assert(ncap != NULL);
-
-    if (ref->nalloc == 0) {
-        ncap->nalloc   = 0;
-        ncap->ndefined = 0;
-        ncap->value    = NULL;
-        return NC_NOERR;
-    }
-
-    if (ref->nalloc > 0) {
-        ncap->value = (NC_attr **) NCI_Calloc((size_t)ref->nalloc,
-                                              sizeof(NC_attr*));
-        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-        ncap->nalloc = ref->nalloc;
-    }
-
-    ncap->ndefined = 0;
-    for (i=0; i<ref->ndefined; i++) {
-        ncap->value[i] = dup_NC_attr(ref->value[i]);
-        if (ncap->value[i] == NULL) {
-            DEBUG_ASSIGN_ERROR(status, NC_ENOMEM)
-            break;
-        }
-    }
-
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_attrarray(ncap);
-        return status;
-    }
-
-    ncap->ndefined = ref->ndefined;
-
-    return NC_NOERR;
-}
-
-
-/*
- * Add a new handle on the end of an array of handles
- * Formerly
-NC_incr_array(array, tail)
- */
-int
-incr_NC_attrarray(NC_attrarray *ncap, NC_attr *newelemp)
-{
-	NC_attr **vp;
-
-	assert(ncap != NULL);
-
-	if (ncap->nalloc == 0)
-	{
-		assert(ncap->ndefined == 0);
-		vp = (NC_attr **) NCI_Malloc(sizeof(NC_attr*) * NC_ARRAY_GROWBY);
-		if(vp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-		ncap->value = vp;
-		ncap->nalloc = NC_ARRAY_GROWBY;
-	}
-	else if (ncap->ndefined +1 > ncap->nalloc)
-	{
-		vp = (NC_attr **) NCI_Realloc(ncap->value,
-			(size_t)(ncap->nalloc + NC_ARRAY_GROWBY) * sizeof(NC_attr*));
-		if(vp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-		ncap->value = vp;
-		ncap->nalloc += NC_ARRAY_GROWBY;
-	}
-
-	if (newelemp != NULL)
-	{
-		ncap->value[ncap->ndefined] = newelemp;
-		ncap->ndefined++;
-	}
-	return NC_NOERR;
-}
-
-
-static NC_attr *
-elem_NC_attrarray(const NC_attrarray *ncap, MPI_Offset elem)
-{
-	assert(ncap != NULL);
-	if ((elem < 0) || ncap->ndefined == 0 || elem >= ncap->ndefined)
-		return NULL;
-
-	assert(ncap->value != NULL);
-
-	return ncap->value[elem];
-}
-
-/* End attrarray per se */
-
-/*----< NC_attrarray0() >----------------------------------------------------*/
-/*
- * Given ncp and varid, return ptr to array of attributes
- * else NULL on error. This is equivalent to validate varid.
- */
-static NC_attrarray *
-NC_attrarray0(NC  *ncp,
-              int  varid)
-{
-    if (varid == NC_GLOBAL) /* Global attribute, attach to cdf */
-        return &ncp->attrs;
-
-    if (varid >= 0 && varid < ncp->vars.ndefined)
-        return &ncp->vars.value[varid]->attrs;
-
-    return NULL;
-}
-
-
-/*----< ncmpii_NC_findattr() >------------------------------------------------*/
-/*
- * Step thru NC_ATTRIBUTE array, seeking match on name.
- *  return match or -1 if Not Found.
- */
-int
-ncmpii_NC_findattr(const NC_attrarray *ncap,
-                   const char         *name) /* normalized string */
-{
-    int i;
-    size_t nchars=strlen(name);
-
-    assert(ncap != NULL);
-
-    if (ncap->ndefined == 0) return -1; /* none created yet */
-
-    /* already checked before entering this API
-    if (name == NULL || *name == 0) return -1;
-    */
-
-    for (i=0; i<ncap->ndefined; i++) {
-        if (ncap->value[i]->name->nchars == (MPI_Offset)nchars &&
-            strncmp(ncap->value[i]->name->cp, name, nchars) == 0) {
-            return i;
-        }
-    }
-
-    return -1;
-}
-
-
-/*----< NC_lookupattr() >----------------------------------------------------*/
-/*
- * Look up by ncid, ncap, and name
- */
-static int
-NC_lookupattr(NC_attrarray  *ncap,
-              const char    *name,   /* normalized attribute name */
-              NC_attr      **attrpp) /* modified on return */
-{
-    int indx;
-
-    /* validity of ncid and ncap has already been checked */
-
-    indx = ncmpii_NC_findattr(ncap, name);
-    if (indx == -1) DEBUG_RETURN_ERROR(NC_ENOTATT)
-
-    if (attrpp != NULL)
-        *attrpp = ncap->value[indx];
-
-    return NC_NOERR;
-}
-
-/* Public */
-
-/*----< ncmpi_inq_attname() >------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_attname(int   ncid,
-                  int   varid,
-                  int   attid,
-                  char *name)   /* out */
-{
-    int err;
-    NC *ncp;
-    NC_attrarray *ncap;
-    NC_attr *attrp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    ncap = NC_attrarray0(ncp, varid);
-    if (ncap == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    attrp = elem_NC_attrarray(ncap, attid);
-    if (attrp == NULL) DEBUG_RETURN_ERROR(NC_ENOTATT)
-
-    if (name == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
-
-    /* in PnetCDF, name->cp is always NULL character terminated */
-    strcpy(name, attrp->name->cp);
-
-    return NC_NOERR;
-}
-
-
-/*----< ncmpi_inq_attid() >--------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_attid(int         ncid,
-                int         varid,
-                const char *name,
-                int        *attidp)  /* out */
-{
-    int indx, err;
-    char *nname=NULL; /* normalized name */
-    NC *ncp;
-    NC_attrarray *ncap;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    ncap = NC_attrarray0(ncp, varid);
-    if (ncap == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME)
-        DEBUG_RETURN_ERROR(NC_EBADNAME)
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    indx = ncmpii_NC_findattr(ncap, nname);
-    free(nname);
-    if (indx == -1) DEBUG_RETURN_ERROR(NC_ENOTATT)
-
-    if (attidp != NULL)
-        *attidp = indx;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_att() >----------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_att(int         ncid,
-              int         varid,
-              const char *name, /* input, attribute name */
-              nc_type    *datatypep,
-              MPI_Offset *lenp)
-{
-    int err;
-    char *nname=NULL;    /* normalized name */
-    NC *ncp;
-    NC_attr *attrp;
-    NC_attrarray *ncap;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    ncap = NC_attrarray0(ncp, varid);
-    if (ncap == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME)
-        DEBUG_RETURN_ERROR(NC_EBADNAME)
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    err = NC_lookupattr(ncap, nname, &attrp);
-    free(nname);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (datatypep != NULL)
-        *datatypep = attrp->type;
-
-    if (lenp != NULL)
-        *lenp = attrp->nelems;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_atttype() >------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_atttype(int         ncid,
-                  int         varid,
-                  const char *name,
-                  nc_type    *datatypep)
-{
-    return ncmpi_inq_att(ncid, varid, name, datatypep, NULL);
-}
-
-/*----< ncmpi_inq_attlen() >-------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_attlen(int         ncid,
-                 int         varid,
-                 const char *name,
-                 MPI_Offset *lenp)
-{
-    return ncmpi_inq_att(ncid, varid, name, NULL, lenp);
-}
-
-
-/*----< ncmpi_rename_att() >--------------------------------------------------*/
-/* This API is collective if called in data mode */
-int
-ncmpi_rename_att(int         ncid,
-                 int         varid,
-                 const char *name,
-                 const char *newname)
-{
-    int indx, err;
-    char *nname=NULL;    /* normalized name */
-    char *nnewname=NULL; /* normalized newname */
-    NC *ncp;
-    NC_attrarray *ncap=NULL;
-    NC_attr *attrp=NULL;
-    NC_string *newStr=NULL;
-
-    /* check whether ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check whether file's write permission */
-    if (NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    ncap = NC_attrarray0(ncp, varid);
-    if (ncap == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
-        goto err_check;
-    }
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    indx = ncmpii_NC_findattr(ncap, nname);
-    free(nname);
-    if (indx < 0) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTATT)
-        goto err_check;
-    }
-
-    attrp = ncap->value[indx];
-
-    if (newname == NULL || *newname == 0 || strlen(newname) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* check whether new name is legal */
-    err = ncmpii_NC_check_name(newname, ncp->format);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    /* create a normalized character string */
-    nnewname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)newname);
-    if (nnewname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    if (ncmpii_NC_findattr(ncap, nnewname) >= 0) {
-        /* name in use */
-        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
-        goto err_check;
-    }
-
-    if (! NC_indef(ncp) && /* when file is in data mode */
-        attrp->name->nchars < (MPI_Offset)strlen(nnewname)) {
-        /* must in define mode when nnewname is longer */
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-        goto err_check;
-    }
-
-    newStr = ncmpii_new_NC_string(strlen(nnewname), nnewname);
-    if (newStr == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-err_check:
-    if (nnewname != NULL) free(nnewname);
-
-    if (ncp->safe_mode) {
-        int root_varid, status, mpireturn;
-        char root_name[NC_MAX_NAME];
-        
-        /* check if name is consistent among all processes */
-        if (name == NULL || *name == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, name, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp->nciop->comm);         
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && strcmp(root_name, name))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
-
-        /* check if newname is consistent among all processes */
-        if (newname == NULL || *newname == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, newname, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp->nciop->comm);         
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && strcmp(root_name, newname))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
-
-        /* check if varid is consistent across all processes */
-        root_varid = varid;
-        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && root_varid != varid)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* find min error code across processes */ 
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);  
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        if (err == NC_NOERR) err = status;
-    }
-
-    if (err != NC_NOERR) {
-        if (newStr != NULL) ncmpii_free_NC_string(newStr);
-        return err;
-    }   
-
-    assert(attrp != NULL);
-
-    /* replace the old name with new name */
-    ncmpii_free_NC_string(attrp->name);
-    attrp->name = newStr;
-
-    if (! NC_indef(ncp)) { /* when file is in data mode */
-        /* Let root write the entire header to the file. Note that we cannot
-         * just update the variable name in its space occupied in the file
-         * header, because if the file space occupied by the name shrinks, all
-         * the metadata following it must be moved ahead.
-         */
-        err = ncmpii_write_header(ncp);
-        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-    }
-
-    return err;
-}
-
-
-/*----< ncmpi_copy_att() >----------------------------------------------------*/
-/* This API is collective for processes that opened ncid_out.
- * If the attribute does not exist in ncid_out, then this API must be called
- * when ncid_out is in define mode.
- * If the attribute does exist in ncid_out and the attribute in ncid_in is
- * larger than the one in ncid_out, then this API must be called when ncid_out
- * is in define mode.
- */
-int
-ncmpi_copy_att(int         ncid_in,
-               int         varid_in,
-               const char *name,
-               int         ncid_out,
-               int         varid_out)
-{
-    int indx=0, err;
-    char *nname=NULL;    /* normalized name */
-    NC *ncp_in, *ncp_out;
-    NC_attrarray *ncap_out=NULL, *ncap_in;
-    NC_attr *iattrp=NULL, *attrp=NULL;
-
-    err = ncmpii_NC_check_id(ncid_in, &ncp_in);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    err = ncmpii_NC_check_id(ncid_out, &ncp_out);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check whether file's write permission */
-    if (NC_readonly(ncp_out)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    ncap_in = NC_attrarray0(ncp_in, varid_in);
-    if (ncap_in == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
-        goto err_check;
-    }
-
-    ncap_out = NC_attrarray0(ncp_out, varid_out);
-    if (ncap_out == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
-        goto err_check;
-    }
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    err = NC_lookupattr(ncap_in, nname, &iattrp);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    if (iattrp->xsz != (int)iattrp->xsz) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
-        goto err_check;
-    }
-
-    indx = ncmpii_NC_findattr(ncap_out, nname);
-
-    if (indx >= 0) { /* name in use in ncap_out */
-        if (ncid_in == ncid_out && varid_in == varid_out)
-            /* self copy is not considered an error */
-            goto err_check;
-
-        if (!NC_indef(ncp_out) &&  /* not allowed in data mode */
-            iattrp->xsz > ncap_out->value[indx]->xsz) {
-            DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-            goto err_check;
-        }
-    }
-    else { /* attribute does not exit in ncid_out */
-        if (!NC_indef(ncp_out)) {
-            /* add new attribute is not allowed in data mode */
-            DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-            goto err_check;
-        }
-        if (ncap_out->ndefined >= NC_MAX_ATTRS) {
-            DEBUG_ASSIGN_ERROR(err, NC_EMAXATTS)
-            goto err_check;
-        }
-    }
-
-err_check:
-    if (ncp_out->safe_mode) {
-        int root_ids[3], status, mpireturn;
-        char root_name[NC_MAX_NAME];
-
-        /* check if name is consistent among all processes */
-        if (name == NULL || *name == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, name, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp_out->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && strcmp(root_name, name))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
-
-        /* check if varid_in, ncid_out, varid_out, are consistent across all
-         * processes */
-        root_ids[0] = varid_in;
-        root_ids[1] = ncid_out;
-        root_ids[2] = varid_out;
-        TRACE_COMM(MPI_Bcast)(&root_ids, 3, MPI_INT, 0, ncp_out->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && (root_ids[0] != varid_in ||
-            root_ids[1] != ncid_out || root_ids[2] != varid_out))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp_out->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        }
-
-        if (err == NC_NOERR) err = status;
-    }
-
-    if (err != NC_NOERR) {
-        if (nname != NULL) free(nname);
-        return err;
-    }
-    assert(ncap_out != NULL);
-    assert(nname != NULL);
-
-    if (indx >= 0) { /* name in use in ncid_out */
-        if (ncid_in == ncid_out && varid_in == varid_out) {
-            /* self copy is not considered an error */
-            free(nname);
-            return NC_NOERR;
-        }
-
-        /* reuse existing attribute array slot without redef */
-        attrp = ncap_out->value[indx];
-
-        if (iattrp->xsz > attrp->xsz) {
-            /* Note the whole attribute object is allocated as one contiguous
-             * chunk, so we cannot realloc attrp->xvalue only
-             */
-            ncmpii_free_NC_attr(attrp);
-            attrp = ncmpii_new_NC_attr(nname, iattrp->type, iattrp->nelems);
-            free(nname);
-            if (attrp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-            ncap_out->value[indx] = attrp;
-        }
-        else {
-            free(nname);
-            attrp->xsz    = iattrp->xsz;
-            attrp->type   = iattrp->type;
-            attrp->nelems = iattrp->nelems;
-        }
-    }
-    else { /* attribute does not exit in ncid_out */
-        attrp = ncmpii_new_NC_attr(nname, iattrp->type, iattrp->nelems);
-        free(nname);
-        if (attrp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-        err = incr_NC_attrarray(ncap_out, attrp);
-        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-    }
-
-    if (iattrp->xsz > 0)
-        memcpy(attrp->xvalue, iattrp->xvalue, (size_t)iattrp->xsz);
-
-    if (!NC_indef(ncp_out)) { /* called in data mode */
-        /* Let root write the entire header to the file. Note that we
-         * cannot just update the variable name in its space occupied in
-         * the file header, because if the file space occupied by the name
-         * shrinks, all the metadata following it must be moved ahead.
-         */
-        err = ncmpii_write_header(ncp_out); /* update file header */
-        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-    }
-
-    return err;
-}
-
-/*----< ncmpi_del_att() >---------------------------------------------------*/
-/* This is a collective subroutine and must be called in define mode */
-int
-ncmpi_del_att(int         ncid,
-              int         varid,
-              const char *name)
-{
-    int err, attrid=-1;
-    char *nname=NULL; /* normalized name */
-    NC *ncp;
-    NC_attrarray *ncap=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check whether file's write permission */
-    if (NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    /* must in define mode */
-    if (!NC_indef(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-        goto err_check;
-    }
-
-    /* check NC_ENOTVAR */
-    ncap = NC_attrarray0(ncp, varid);
-    if (ncap == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
-        goto err_check;
-    }
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    attrid = ncmpii_NC_findattr(ncap, nname);
-    free(nname);
-    if (attrid == -1) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTATT)
-        goto err_check;
-    }
-
-    /* deleting attribute _FillValue means disabling fill mode */
-    if (varid != NC_GLOBAL && !strcmp(name, _FillValue)) {
-        NC_var *varp;
-        err = ncmpii_NC_lookupvar(ncp, varid, &varp);
-        if (err != NC_NOERR) {
-            DEBUG_TRACE_ERROR
-            goto err_check;
-        }
-        varp->no_fill = 1;
-    }
-
-err_check:
-    if (ncp->safe_mode) {
-        int root_varid, status, mpireturn;
-        char root_name[NC_MAX_NAME];
-
-        /* check if name is consistent among all processes */
-        if (name == NULL || *name == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, name, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && strcmp(root_name, name))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
-
-        /* check if varid is consistent across all processes */
-        root_varid = varid;
-        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && root_varid != varid)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        if (err == NC_NOERR) err = status;
-    }
-
-    if (err != NC_NOERR) return err;
-    assert(ncap != NULL);
-
-    /* delete attribute */
-    ncmpii_free_NC_attr(ncap->value[attrid]);
-
-    /* shuffle down */
-    for (; attrid < ncap->ndefined-1; attrid++)
-        ncap->value[attrid] = ncap->value[attrid+1];
-
-    /* decrement count */
-    ncap->ndefined--;
-
-    return NC_NOERR;
-}
-
-include(`foreach.m4')dnl
-include(`utils.m4')dnl
-
-/*----< ncmpi_get_att() >-----------------------------------------------------*/
-/* This is an independent subroutine */
-/* user buffer data type matches the external type defined in file */
-int
-ncmpi_get_att(int         ncid,
-              int         varid,
-              const char *name,
-              void       *buf)
-{
-    int err;
-    nc_type xtype;  /* external NC data type */
-
-    /* obtain variable external data type */
-    err = ncmpi_inq_atttype(ncid, varid, name, &xtype);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    switch(xtype) {
-        case NC_CHAR:   return ncmpi_get_att_text     (ncid, varid, name, buf);
-        case NC_BYTE:   return ncmpi_get_att_schar    (ncid, varid, name, buf);
-        case NC_UBYTE:  return ncmpi_get_att_uchar    (ncid, varid, name, buf);
-        case NC_SHORT:  return ncmpi_get_att_short    (ncid, varid, name, buf);
-        case NC_USHORT: return ncmpi_get_att_ushort   (ncid, varid, name, buf);
-        case NC_INT:    return ncmpi_get_att_int      (ncid, varid, name, buf);
-        case NC_UINT:   return ncmpi_get_att_uint     (ncid, varid, name, buf);
-        case NC_FLOAT:  return ncmpi_get_att_float    (ncid, varid, name, buf);
-        case NC_DOUBLE: return ncmpi_get_att_double   (ncid, varid, name, buf);
-        case NC_INT64:  return ncmpi_get_att_longlong (ncid, varid, name, buf);
-        case NC_UINT64: return ncmpi_get_att_ulonglong(ncid, varid, name, buf);
-        default: return NC_EBADTYPE;
-    }
-}
-
-/*----< ncmpi_get_att_text() >-------------------------------------------------*/
-/* This is an independent subroutine.
- * Note this API will never return NC_ERANGE error, as text is not convertible
- * to numerical types.
- */
-int
-ncmpi_get_att_text(int         ncid,
-                   int         varid,
-                   const char *name,
-                   char       *buf)
-{
-    int      err;
-    char    *nname=NULL; /* normalized name */
-    NC      *ncp;
-    NC_attr *attrp;
-    NC_attrarray *ncap=NULL;
-    const void *xp;
-
-    /* get the file ID (check NC_EBADID) */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check if varid is valid */
-    ncap = NC_attrarray0(ncp, varid);
-    if (ncap == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME)
-        DEBUG_RETURN_ERROR(NC_EBADNAME)
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    err = NC_lookupattr(ncap, nname, &attrp);
-    free(nname);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (attrp->nelems == 0) return NC_NOERR;
-
-    /* No character conversions are allowed. */
-    if (attrp->type != NC_CHAR) DEBUG_RETURN_ERROR(NC_ECHAR)
-
-    if (buf == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
-
-    xp = attrp->xvalue;
-    return ncmpix_pad_getn_text(&xp, attrp->nelems, (char*)buf);
-}
-
-dnl
-dnl GET_ATT(fntype)
-dnl
-define(`GET_ATT',dnl
-`dnl
-/*----< ncmpi_get_att_$1() >-------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_get_att_$1(int             ncid,
-                 int             varid,
-                 const char     *name,
-                 FUNC2ITYPE($1) *buf)
-{
-    int            err=NC_NOERR;
-    char           *nname=NULL; /* normalized name */
-    NC             *ncp;
-    NC_attr        *attrp;
-    NC_attrarray   *ncap=NULL;
-    const void     *xp;
-    MPI_Offset      nelems;
-
-    /* get the file ID (check NC_EBADID) */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check if varid is valid */
-    ncap = NC_attrarray0(ncp, varid);
-    if (ncap == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME)
-        DEBUG_RETURN_ERROR(NC_EBADNAME)
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    /* whether the attr exists (check NC_ENOTATT) */
-    err = NC_lookupattr(ncap, nname, &attrp);
-    free(nname);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (attrp->nelems == 0) return NC_NOERR;
-    nelems = attrp->nelems;
-
-    /* No character conversions are allowed. */
-    if (attrp->type == NC_CHAR) DEBUG_RETURN_ERROR(NC_ECHAR)
-
-    if (buf == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
-
-    xp = attrp->xvalue;
-
-    switch(attrp->type) {
-        /* possible error returned n this switch block is NC_ERANGE */
-        case NC_BYTE:
-            ifelse(`$1',`uchar',
-           `if (ncp->format < 5) { /* no NC_ERANGE check */
-                /* note this is not ncmpix_getn_NC_BYTE_$1 */
-                return ncmpix_pad_getn_NC_UBYTE_$1(&xp, nelems, buf);
-            } else')
-                return ncmpix_pad_getn_NC_BYTE_$1 (&xp, nelems, buf);
-        case NC_UBYTE:
-            return ncmpix_pad_getn_NC_UBYTE_$1 (&xp, nelems, buf);
-        case NC_SHORT:
-            return ncmpix_pad_getn_NC_SHORT_$1 (&xp, nelems, buf);
-        case NC_USHORT:
-            return ncmpix_pad_getn_NC_USHORT_$1(&xp, nelems, buf);
-        case NC_INT:
-            return ncmpix_getn_NC_INT_$1   (&xp, nelems, buf);
-        case NC_UINT:
-            return ncmpix_getn_NC_UINT_$1  (&xp, nelems, buf);
-        case NC_FLOAT:
-            return ncmpix_getn_NC_FLOAT_$1 (&xp, nelems, buf);
-        case NC_DOUBLE:
-            return ncmpix_getn_NC_DOUBLE_$1(&xp, nelems, buf);
-        case NC_INT64:
-            return ncmpix_getn_NC_INT64_$1 (&xp, nelems, buf);
-        case NC_UINT64:
-            return ncmpix_getn_NC_UINT64_$1(&xp, nelems, buf);
-        case NC_CHAR:
-            return NC_ECHAR; /* NC_ECHAR already checked earlier */
-        default:
-            /* this error is unlikely, but an internal error if happened */
-            fprintf(stderr, "Error: bad attrp->type(%d) in %s\n",
-                    attrp->type,__func__);
-            return NC_EBADTYPE;
-    }
-}
-')dnl
-
-foreach(`itype', (schar,uchar,short,ushort,int,uint,long,float,double,longlong,ulonglong),
-        `GET_ATT(itype)
-')
-
-dnl
-dnl PUTN_ITYPE(_pad, itype)
-dnl
-define(`PUTN_ITYPE',dnl
-`dnl
-/*----< ncmpix_putn_$1() >---------------------------------------------------*/
-/* This is a collective subroutine */
-inline static int
-ncmpix_putn_$1(void       **xpp,    /* buffer to be written to file */
-               MPI_Offset   nelems, /* no. elements in user buffer */
-               const $1    *buf,    /* user buffer of type $1 */
-               nc_type      xtype,  /* external NC type */
-               void        *fillp)  /* fill value in internal representation */
-{
-    switch(xtype) {
-        case NC_BYTE:
-            return ncmpix_pad_putn_NC_BYTE_$1  (xpp, nelems, buf, fillp);
-        case NC_UBYTE:
-            return ncmpix_pad_putn_NC_UBYTE_$1 (xpp, nelems, buf, fillp);
-        case NC_SHORT:
-            return ncmpix_pad_putn_NC_SHORT_$1 (xpp, nelems, buf, fillp);
-        case NC_USHORT:
-            return ncmpix_pad_putn_NC_USHORT_$1(xpp, nelems, buf, fillp);
-        case NC_INT:
-            return ncmpix_putn_NC_INT_$1   (xpp, nelems, buf, fillp);
-        case NC_UINT:
-            return ncmpix_putn_NC_UINT_$1  (xpp, nelems, buf, fillp);
-        case NC_FLOAT:
-            return ncmpix_putn_NC_FLOAT_$1 (xpp, nelems, buf, fillp);
-        case NC_DOUBLE:
-            return ncmpix_putn_NC_DOUBLE_$1(xpp, nelems, buf, fillp);
-        case NC_INT64:
-            return ncmpix_putn_NC_INT64_$1 (xpp, nelems, buf, fillp);
-        case NC_UINT64:
-            return ncmpix_putn_NC_UINT64_$1(xpp, nelems, buf, fillp);
-        case NC_CHAR:
-            return NC_ECHAR; /* NC_ECHAR check is done earlier */
-        default: fprintf(stderr, "Error: bad xtype(%d) in %s\n",xtype,__func__);
-            return NC_EBADTYPE;
-    }
-}
-')dnl
-
-foreach(`itype', (schar,uchar,short,ushort,int,uint,long,float,double,longlong,ulonglong),
-        `PUTN_ITYPE(itype)
-')
-
-
-/* For netCDF, the type mapping between file types and buffer types
- * are based on netcdf4. Check APIs of nc_put_att_xxx from source files
- *     netCDF/netcdf-x.x.x/libdispatch/att.c
- *     netCDF/netcdf-x.x.x/libsrc4/nc4attr.c
- *
- * Note that schar means signed 1-byte integers in attributes. Hence the call
- * below is illegal (NC_ECHAR will return), indicating the error on trying
- * type conversion between characters and numbers.
- *
- * ncmpi_put_att_schar(ncid, varid, "attr name", NC_CHAR, strlen(attrp), attrp);
- *
- * This rule and mapping apply for variables as well. See APIs of
- * nc_put_vara_xxx from source files
- *     netCDF/netcdf-x.x.x/libdispatch/var.c
- *     netCDF/netcdf-x.x.x/libsrc4/nc4var.c
- *
- */
-
-dnl
-dnl PUT_ATT(fntype)
-dnl
-define(`PUT_ATT',dnl
-`dnl
-/*----< ncmpi_put_att_$1() >-------------------------------------------------*/
-/* This is a collective subroutine, all arguments should be consistent among
- * all processes.
- *
- * Note from netCDF user guide:
- * Attributes are always single values or one-dimensional arrays. This works
- * out well for a string, which is a one-dimensional array of ASCII characters
- *
- * Note ncmpi_put_att_text will never return NC_ERANGE error, as text is not
- * convertible to numerical types.
- */
-int
-ncmpi_put_att_$1(int         ncid,
-                 int         varid,
-                 const char *name,     /* attribute name */
-                 ifelse(`$1',`text',,`nc_type xtype,')
-                 MPI_Offset  nelems,   /* number of elements in buf */
-                 const FUNC2ITYPE($1) *buf) /* user write buffer */
-{
-    int indx=0, err;
-    char *nname=NULL; /* normalized name */
-    MPI_Offset xsz=0;
-    NC *ncp;
-    NC_attrarray *ncap=NULL;
-    NC_attr *attrp=NULL;
-    ifelse(`$1',`text', `nc_type xtype=NC_CHAR;')
-
-    /* get the pointer to NC object (check NC_EBADID) */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* file should be opened with writable permission */
-    if (NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    /* check if varid is valid and get the pointer to the attribute array */
-    ncap = NC_attrarray0(ncp, varid);
-    if (ncap == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTVAR)
-        goto err_check;
-    }
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* check if the attribute name is legal (check for NC_EBADNAME) */
-    err = ncmpii_NC_check_name(name, ncp->format);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    ifelse(`$1',`text', ,`/* check if xtype is valid (check for NC_EBADTYPE) */
-    err = ncmpii_cktype(ncp->format, xtype);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }')
-
-    ifelse(`$1',`text', , `/* No character conversions are allowed. */
-    if (xtype == NC_CHAR) {
-        DEBUG_ASSIGN_ERROR(err, NC_ECHAR)
-        goto err_check;
-    }')
-
-    /* Should CDF-5 allow very large file header? */
-    /*
-    if (len > X_INT_MAX) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINVAL)
-        goto err_check;
-    }
-    */
-
-    /* nelems can be zero, i.e. an attribute with only its name */
-    if (nelems > 0 && buf == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINVAL) /* Null arg */
-        goto err_check;
-    }
-
-    /* If this is the _FillValue attribute, then let PnetCDF return the
-     * same error codes as netCDF
-     */
-    if (varid != NC_GLOBAL && !strcmp(name, "_FillValue")) {
-        NC_var *varp;
-        err = ncmpii_NC_lookupvar(ncp, varid, &varp);
-        if (err != NC_NOERR) {
-            DEBUG_TRACE_ERROR
-            goto err_check;
-        }
-
-        /* Fill value must be same type and have exactly one value */
-        if (xtype != varp->type) {
-            DEBUG_ASSIGN_ERROR(err, NC_EBADTYPE)
-            goto err_check;
-        }
-
-        if (nelems != 1) {
-            DEBUG_ASSIGN_ERROR(err, NC_EINVAL)
-            goto err_check;
-        }
-
-        /* enable the fill mode for this variable */
-        varp->no_fill = 0;
-    }
-
-    if (nelems < 0 || (nelems > X_INT_MAX && ncp->format <= 2)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINVAL) /* Invalid nelems */
-        goto err_check;
-    }
-
-    xsz = ncmpix_len_NC_attrV(xtype, nelems);
-    /* xsz is the total size of this attribute */
-
-    if (xsz != (int)xsz) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
-        goto err_check;
-    }
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    /* check whether attribute already exists */
-    indx = ncmpii_NC_findattr(ncap, nname);
-
-    if (indx >= 0) { /* name in use */
-        /* xsz is the total size of this attribute */
-        if (!NC_indef(ncp) && xsz > ncap->value[indx]->xsz) {
-            /* The new attribute requires a larger space, which is not allowed
-             * in data mode */
-            DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-            goto err_check;
-        }
-    }
-    else { /* attribute does not exit in ncid */
-        if (!NC_indef(ncp)) {
-            /* add new attribute is not allowed in data mode */
-            DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-            goto err_check;
-        }
-        if (ncap->ndefined >= NC_MAX_ATTRS) {
-            DEBUG_ASSIGN_ERROR(err, NC_EMAXATTS)
-            goto err_check;
-        }
-    }
-
-err_check:
-    if (ncp->safe_mode) { /* consistency check */
-        int rank, root_varid, status, mpireturn;
-        char root_name[NC_MAX_NAME];
-        MPI_Offset root_nelems;
-        size_t buf_size;
-        void *root_buf;
-        ifelse(`$1',`text',,`int root_xtype;')
-
-        /* check if name is consistent among all processes */
-        if (name == NULL || *name == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, name, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && strcmp(root_name, name))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
-
-        /* check if varid is consistent across all processes */
-        root_varid = varid;
-        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && root_varid != varid)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* check if nelems is consistent across all processes */
-        root_nelems = nelems;
-        TRACE_COMM(MPI_Bcast)(&root_nelems, 1, MPI_OFFSET, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && root_nelems != nelems)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_LEN)
-
-        ifelse(`$1',`text', , `root_xtype = xtype;
-        TRACE_COMM(MPI_Bcast)(&root_xtype, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && root_xtype != xtype)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_TYPE)')
-
-        /* check if buf contents is consistent across all processes */
-        /* note xsz is aligned, thus must use the exact size of buf */
-        buf_size = (size_t)root_nelems * sizeof(FUNC2ITYPE($1));
-        MPI_Comm_rank(ncp->nciop->comm, &rank);
-        if (rank > 0)
-            root_buf = (void*) NCI_Malloc(buf_size);
-        else
-            root_buf = (void*)buf;
-        TRACE_COMM(MPI_Bcast)(root_buf, (int)buf_size, MPI_BYTE, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && (root_nelems != nelems || memcmp(root_buf, buf, buf_size)))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-        if (rank > 0) NCI_Free(root_buf);
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        }
-
-        if (err == NC_NOERR) err = status;
-    }
-
-    if (err != NC_NOERR) {
-        if (nname != NULL) free(nname);
-        return err;
-    }
-    assert(ncap != NULL);
-    assert(nname != NULL);
-
-    if (indx >= 0) { /* name in use */
-        attrp = ncap->value[indx]; /* convenience */
-
-        if (xsz > attrp->xsz) { /* new attribute requires a larger space */
-            /* Note the whole attribute object is allocated as one contiguous
-             * chunk, so we cannot realloc attrp->xvalue only
-             */
-            ncmpii_free_NC_attr(attrp);
-            attrp = ncmpii_new_NC_attr(nname, xtype, nelems);
-            free(nname);
-            if (attrp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-            ncap->value[indx] = attrp;
-        }
-        else {
-            free(nname);
-            attrp->xsz    = xsz;
-            attrp->type   = xtype;
-            attrp->nelems = nelems;
-        }
-    }
-    else { /* attribute does not exit in ncid */
-        attrp = ncmpii_new_NC_attr(nname, xtype, nelems);
-        free(nname);
-        if (attrp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-        err = incr_NC_attrarray(ncap, attrp);
-        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-    }
-
-    if (nelems != 0 && buf != NULL) { /* non-zero length attribute */
-        /* using xp below to prevent change the pointer attr->xvalue, as
-         * ncmpix_pad_putn_<type>() advances the first argument with nelems
-         * elements. Note that attrp->xvalue is malloc-ed with a buffer of
-         * size that is aligned with a 4-byte boundary.
-         */
-        void *xp = attrp->xvalue;
-        ifelse(`$1',`text',,`dnl
-        unsigned char fill[8]; /* fill value in internal representation */
-
-        /* find the fill value */
-        err = ncmpii_inq_default_fill_value(xtype, &fill);
-        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)')
-
-        ifelse(`$1',`text', `err = ncmpix_pad_putn_text(&xp, nelems, buf);',
-               `$1',`uchar',`
-        if (ncp->format < 5 && xtype == NC_BYTE) { /* no NC_ERANGE check */
-            err = ncmpii_inq_default_fill_value(NC_UBYTE, &fill);
-            if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-            err = ncmpix_putn_uchar(&xp, nelems, buf, NC_UBYTE, &fill);
-        } else
-            err = ncmpix_putn_$1(&xp, nelems, buf, xtype, &fill);',
-        `err = ncmpix_putn_$1(&xp, nelems, buf, xtype, &fill);')
-
-        /* no immediately return error code here? Strange ... 
-         * Instead, we continue and call incr_NC_attrarray() to add
-         * this attribute (for create case) as it is legal. But if
-         * we return error and reject this attribute, then nc_test will
-         * fail with this error message below:
-         * FAILURE at line 252 of test_read.c: ncmpi_inq: wrong number
-         * of global atts returned, 3
-         * Check netCDF-4, it is doing the same thing!
-         *
-         * One of the error codes returned from ncmpix_pad_putn_<type>() is
-         * NC_ERANGE, meaning one or more elements are type overflow.
-         * Should we reject the entire attribute array if only part of
-         * the array overflow? For netCDF4, the answer is NO.
-         */ 
-/*
-        if (err != NC_NOERR) {
-            ncmpii_free_NC_attr(attrp);
-            DEBUG_RETURN_ERROR(err)
-        }
-*/
-    }
-
-    if (!NC_indef(ncp)) { /* called in data mode */
-        /* Let root write the entire header to the file. Note that we
-         * cannot just update the attribute in its space occupied in the
-         * file header, because if the file space occupied by the attribute 
-         * shrinks, all the metadata following it must be moved ahead. 
-         */
-        int status;
-        status = ncmpii_write_header(ncp); /* update file header */
-        if (err == NC_NOERR) err = status;
-    }
-
-    return err;
-}
-')dnl
-
-foreach(`itype', (text,schar,uchar,short,ushort,int,uint,long,float,double,longlong,ulonglong),
-        `PUT_ATT(itype)
-')
-
-/*----< ncmpi_put_att() >-----------------------------------------------------*/
-/* This is a collective subroutine, all arguments should be consistent among
- * all processes.
- *
- * This API assumes user buffer data type matches the external type defined
- * in file
- */
-int
-ncmpi_put_att(int         ncid,
-              int         varid,
-              const char *name,
-              nc_type     xtype,
-              MPI_Offset  nelems,
-              const void *buf)
-{
-    switch(xtype) {
-        case NC_CHAR:   return ncmpi_put_att_text     (ncid, varid, name,        nelems, buf);
-        case NC_BYTE:   return ncmpi_put_att_schar    (ncid, varid, name, xtype, nelems, buf);
-        case NC_UBYTE:  return ncmpi_put_att_uchar    (ncid, varid, name, xtype, nelems, buf);
-        case NC_SHORT:  return ncmpi_put_att_short    (ncid, varid, name, xtype, nelems, buf);
-        case NC_USHORT: return ncmpi_put_att_ushort   (ncid, varid, name, xtype, nelems, buf);
-        case NC_INT:    return ncmpi_put_att_int      (ncid, varid, name, xtype, nelems, buf);
-        case NC_UINT:   return ncmpi_put_att_uint     (ncid, varid, name, xtype, nelems, buf);
-        case NC_FLOAT:  return ncmpi_put_att_float    (ncid, varid, name, xtype, nelems, buf);
-        case NC_DOUBLE: return ncmpi_put_att_double   (ncid, varid, name, xtype, nelems, buf);
-        case NC_INT64:  return ncmpi_put_att_longlong (ncid, varid, name, xtype, nelems, buf);
-        case NC_UINT64: return ncmpi_put_att_ulonglong(ncid, varid, name, xtype, nelems, buf);
-        default: return NC_EBADTYPE;
-    }
-}
-
diff --git a/src/lib/bput.m4 b/src/lib/bput.m4
deleted file mode 100644
index 102b478..0000000
--- a/src/lib/bput.m4
+++ /dev/null
@@ -1,220 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-/* Do not edit this file. It is produced from the corresponding .m4 source */
-dnl
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: bput.m4 2686 2016-12-07 20:02:41Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "ncmpidtype.h"
-#include "macro.h"
-
-/*----< ncmpi_buffer_attach() >-----------------------------------------------*/
-int
-ncmpi_buffer_attach(int        ncid,
-                    MPI_Offset bufsize)
-{
-    int err;
-    NC *ncp;
-
-    if (bufsize <= 0) DEBUG_RETURN_ERROR(NC_ENULLBUF)
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check if the buffer has been previously attached
-     * note that in nc.c, the NC object is allocated with calloc, so
-     * abuf should be initialized to NULL then
-     */
-    if (ncp->abuf != NULL) DEBUG_RETURN_ERROR(NC_EPREVATTACHBUF)
-
-    ncp->abuf = (NC_buf*) NCI_Malloc(sizeof(NC_buf));
-
-    ncp->abuf->size_allocated = bufsize;
-    ncp->abuf->size_used = 0;
-    ncp->abuf->table_size = NC_ABUF_DEFAULT_TABLE_SIZE;
-    ncp->abuf->occupy_table = (NC_buf_status*)
-               NCI_Calloc(NC_ABUF_DEFAULT_TABLE_SIZE, sizeof(NC_buf_status));
-    ncp->abuf->tail = 0;
-    ncp->abuf->buf = NCI_Malloc((size_t)bufsize);
-    return NC_NOERR;
-}
-
-/*----< ncmpi_buffer_detach() >-----------------------------------------------*/
-int
-ncmpi_buffer_detach(int ncid)
-{
-    int  i, err;
-    NC  *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check if the buffer has been previously attached */
-    if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
-
-    /* this API assumes users are responsible for no pending bput */
-    for (i=0; i<ncp->numPutReqs; i++) {
-        if (ncp->put_list[i].abuf_index >= 0) /* check for a pending bput */
-            DEBUG_RETURN_ERROR(NC_EPENDINGBPUT)
-            /* return now, so users can call wait and try detach again */
-    }
-
-    NCI_Free(ncp->abuf->buf);
-    NCI_Free(ncp->abuf->occupy_table);
-    NCI_Free(ncp->abuf);
-    ncp->abuf = NULL;
-
-    return NC_NOERR;
-}
-
-#ifdef THIS_SEEMS_OVER_DONE_IT
-/*----< ncmpi_buffer_detach() >-----------------------------------------------*/
-/* mimic MPI_Buffer_detach()
- * Note from MPI: Even though the 'bufferptr' argument is declared as
- * 'void *', it is really the address of a void pointer.
- */
-int
-ncmpi_buffer_detach(int         ncid,
-                    void       *bufptr,
-                    MPI_Offset *bufsize)
-{
-    int  i, err;
-    NC  *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check if the buffer has been previously attached */
-    if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
-
-    /* check MPICH2 src/mpi/pt2pt/bsendutil.c for why the bufptr is void* */
-    *(void **)bufptr = ncp->abuf->buf;
-    *bufsize         = ncp->abuf->size_allocated;
-
-    /* this API assumes users are responsible for no pending bput when called */
-    for (i=0; i<ncp->numPutReqs; i++) {
-        if (ncp->put_list[i].abuf_index >= 0) /* check for a pending bput */
-            DEBUG_RETURN_ERROR(NC_EPENDINGBPUT)
-            /* return now, so users can call wait and try detach again */
-    }
-
-    NCI_Free(ncp->abuf->occupy_table);
-    NCI_Free(ncp->abuf);
-    ncp->abuf = NULL;
-
-    return NC_NOERR;
-}
-#endif
-
-
-/*----< ncmpi_inq_buffer_usage() >--------------------------------------------*/
-int
-ncmpi_inq_buffer_usage(int         ncid,
-                       MPI_Offset *usage) /* OUT: in bytes */
-{
-    int  err;
-    NC  *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check if the buffer has been previously attached */
-    if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
-
-    /* return the current usage in bytes */
-    *usage = ncp->abuf->size_used;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_buffer_size() >---------------------------------------------*/
-int
-ncmpi_inq_buffer_size(int         ncid,
-                      MPI_Offset *buf_size) /* OUT: in bytes */
-{
-    int  err;
-    NC  *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check if the buffer has been previously attached */
-    if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
-
-    /* return the current usage in bytes */
-    *buf_size = ncp->abuf->size_allocated;
-
-    return NC_NOERR;
-}
-
-include(`foreach.m4')dnl
-include(`utils.m4')dnl
-dnl
-define(`APINAME',`ifelse(`$2',`',`ncmpi_bput_var$1',`ncmpi_bput_var$1_$2')')dnl
-dnl
-dnl BPUT_API(kind, itype)
-dnl
-define(`BPUT_API',dnl
-`dnl
-/*----< APINAME($1,$2)() >------------------------------------------------*/
-int
-APINAME($1,$2)(int ncid, int varid, ArgKind($1) BufArgs(`put',$2), int *reqid)
-{
-    int         err;
-    NC         *ncp;
-    NC_var     *varp=NULL;
-    ifelse(`$1', `',  `MPI_Offset *start, *count;',
-           `$1', `1', `MPI_Offset *count;')
-
-    if (reqid != NULL) *reqid = NC_REQ_NULL;
-    err = ncmpii_sanity_check(ncid, varid, ArgStartCountStride($1),
-                              ifelse(`$2', `', `bufcount', `0'),
-                              ifelse(`$2', `', `buftype',  `ITYPE2MPI($2)'),
-                              API_KIND($1), ifelse(`$2', `', `1', `0'),
-                              0, WRITE_REQ, NONBLOCKING_IO, &ncp, &varp);
-    if (err != NC_NOERR) return err;
-
-    if (ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
-
-    ifelse(`$1', `',  `GET_FULL_DIMENSIONS(start, count)',
-           `$1', `1', `GET_ONE_COUNT(count)')
-
-    /* APINAME($1,$2) is a special case of APINAME(m,$2) */
-    err = ncmpii_igetput_varm(ncp, varp, start, count, ArgStrideMap($1),
-                              (void*)buf,
-                              ifelse(`$2', `', `bufcount, buftype',
-                                           `-1, ITYPE2MPI($2)'),
-                              reqid, WRITE_REQ, 1, 0);
-    ifelse(`$1', `', `NCI_Free(start);', `$1', `1', `NCI_Free(count);')
-    return err;
-}
-')dnl
-dnl
-/*---- PnetCDF flexible APIs ------------------------------------------------*/
-foreach(`kind', (, 1, a, s, m),`BPUT_API(kind,)
-')
-
-/*---- PnetCDF high-level APIs ----------------------------------------------*/
-foreach(`kind', (, 1, a, s, m),
-        `foreach(`itype', (ITYPE_LIST),
-                 `BPUT_API(kind,itype)'
-)')
diff --git a/src/lib/convert_swap.m4 b/src/lib/convert_swap.m4
deleted file mode 100644
index c2ec6f7..0000000
--- a/src/lib/convert_swap.m4
+++ /dev/null
@@ -1,405 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-/* Do not edit this file. It is produced from the corresponding .m4 source */
-dnl
-/*
- *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: convert_swap.m4 2589 2016-10-30 17:42:43Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h> /* uint16_t, uint32_t, uint64_t */
-#elif defined(HAVE_STDINT_H)
-#include <stdint.h>   /* uint16_t, uint32_t, uint64_t */
-#endif
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "macro.h"
-
-/*
- *  Datatype Mapping:
- *
- *  NETCDF    <--> MPI                    Description
- *   NC_BYTE       MPI_SIGNED_CHAR        signed 1-byte integer
- *   NC_CHAR       MPI_CHAR               char, text (cannot convert to other types)
- *   NC_SHORT      MPI_SHORT              signed 2-byte integer
- *   NC_INT        MPI_INT                signed 4-byte integer
- *   NC_FLOAT      MPI_FLOAT              single precision floating point
- *   NC_DOUBLE     MPI_DOUBLE             double precision floating point
- *   NC_UBYTE      MPI_UNSIGNED_CHAR      unsigned 1-byte int
- *   NC_USHORT     MPI_UNSIGNED_SHORT     unsigned 2-byte int
- *   NC_UINT       MPI_UNSIGNED           unsigned 4-byte int
- *   NC_INT64      MPI_LONG_LONG_INT      signed 8-byte int
- *   NC_UINT64     MPI_UNSIGNED_LONG_LONG unsigned 8-byte int
- *
- *  Assume: MPI_Datatype and nc_type are both enumerable types
- *          (this might not conform with MPI, as MPI_Datatype is intended to be
- *           an opaque data type.)
- *
- *  In OpenMPI, this assumption will fail
- */
-
-inline MPI_Datatype
-ncmpii_nc2mpitype(nc_type xtype)
-{
-    switch(xtype){
-        case NC_BYTE :   return MPI_SIGNED_CHAR;
-        case NC_CHAR :   return MPI_CHAR;
-        case NC_SHORT :  return MPI_SHORT;
-        case NC_INT :    return MPI_INT;
-        case NC_FLOAT :  return MPI_FLOAT;
-        case NC_DOUBLE : return MPI_DOUBLE;
-        case NC_UBYTE :  return MPI_UNSIGNED_CHAR;
-        case NC_USHORT : return MPI_UNSIGNED_SHORT;
-        case NC_UINT :   return MPI_UNSIGNED;
-        case NC_INT64 :  return MPI_LONG_LONG_INT;
-        case NC_UINT64 : return MPI_UNSIGNED_LONG_LONG;
-        default:         return MPI_DATATYPE_NULL;
-    }
-}
-
-inline nc_type
-ncmpii_mpi2nctype(MPI_Datatype itype)
-{
-    if (itype == MPI_SIGNED_CHAR)        return NC_BYTE ;
-    if (itype == MPI_CHAR)               return NC_CHAR ;
-    if (itype == MPI_SHORT)              return NC_SHORT ;
-    if (itype == MPI_INT)                return NC_INT ;
-    if (itype == MPI_FLOAT)              return NC_FLOAT ;
-    if (itype == MPI_DOUBLE)             return NC_DOUBLE ;
-    if (itype == MPI_UNSIGNED_CHAR)      return NC_UBYTE ;
-    if (itype == MPI_UNSIGNED_SHORT)     return NC_USHORT ;
-    if (itype == MPI_UNSIGNED)           return NC_UINT ;
-    if (itype == MPI_LONG_LONG_INT)      return NC_INT64 ;
-    if (itype == MPI_UNSIGNED_LONG_LONG) return NC_UINT64 ;
-    return NC_EBADTYPE;
-}
-
-/*----< ncmpii_need_convert() >----------------------------------------------*/
-/* netCDF specification makes a special case for type conversion between
- * uchar and NC_BYTE: do not check for range error. See
- * http://www.unidata.ucar.edu/software/netcdf/docs/data_type.html#type_conversion
- */
-inline int
-ncmpii_need_convert(int          format, /* 1, 2, or 5 (CDF format number) */
-                    nc_type      xtype,  /* external NC type */
-                    MPI_Datatype itype)  /* internal MPI type */
-{
-
-    if (format > 2) { /* NC_BYTE is considered signed 1-byte integer */
-        if ((xtype == NC_BYTE  && itype == MPI_UNSIGNED_CHAR)
-#if defined(__CHAR_UNSIGNED__) && __CHAR_UNSIGNED__ != 0
-            || (xtype == NC_BYTE  && itype == MPI_CHAR)
-#endif
-           )
-       return 1;
-    }
-
-    return !( (xtype == NC_CHAR   && itype == MPI_CHAR)           ||
-              (xtype == NC_BYTE   && itype == MPI_SIGNED_CHAR)    ||
-              (xtype == NC_BYTE   && itype == MPI_UNSIGNED_CHAR)  ||
-#if defined(__CHAR_UNSIGNED__) && __CHAR_UNSIGNED__ != 0
-              (xtype == NC_BYTE   && itype == MPI_CHAR)           ||
-#endif
-              (xtype == NC_SHORT  && itype == MPI_SHORT)          ||
-              (xtype == NC_INT    && itype == MPI_INT)            ||
-              (xtype == NC_INT    && itype == MPI_LONG &&
-               X_SIZEOF_INT == SIZEOF_LONG)                       ||
-              (xtype == NC_FLOAT  && itype == MPI_FLOAT)          ||
-              (xtype == NC_DOUBLE && itype == MPI_DOUBLE)         ||
-              (xtype == NC_UBYTE  && itype == MPI_UNSIGNED_CHAR)  ||
-#if defined(__CHAR_UNSIGNED__) && __CHAR_UNSIGNED__ != 0
-              (xtype == NC_UBYTE  && itype == MPI_CHAR)           ||
-#endif
-              (xtype == NC_USHORT && itype == MPI_UNSIGNED_SHORT) ||
-              (xtype == NC_UINT   && itype == MPI_UNSIGNED)       ||
-              (xtype == NC_INT64  && itype == MPI_LONG_LONG_INT)  ||
-              (xtype == NC_UINT64 && itype == MPI_UNSIGNED_LONG_LONG)
-            );
-}
-
-/*----< ncmpii_need_swap() >-------------------------------------------------*/
-inline int
-ncmpii_need_swap(nc_type      xtype,  /* external NC type */
-                 MPI_Datatype itype)  /* internal MPI type */
-{
-#ifdef WORDS_BIGENDIAN
-    return 0;
-#else
-    if ((xtype == NC_CHAR  && itype == MPI_CHAR)           ||
-        (xtype == NC_BYTE  && itype == MPI_SIGNED_CHAR)    ||
-        (xtype == NC_UBYTE && itype == MPI_UNSIGNED_CHAR))
-        return 0;
-
-    return 1;
-#endif
-}
-
-/* Endianness byte swap: done in-place */
-#define SWAP(x,y) {tmp = (x); (x) = (y); (y) = tmp;}
-
-/*----< ncmpii_swap() >-------------------------------------------------------*/
-/* out-place byte swap, i.e. dest_p != src_p */
-void
-ncmpii_swapn(void       *dest_p,  /* destination array */
-             const void *src_p,   /* source array */
-             MPI_Offset  nelems,  /* number of elements in buf[] */
-             int         esize)   /* byte size of each element */
-{
-    int  i;
-
-    if (esize <= 1 || nelems <= 0) return;  /* no need */
-
-    if (esize == 4) { /* this is the most common case */
-              uint32_t *dest = (uint32_t*)       dest_p;
-        const uint32_t *src  = (const uint32_t*) src_p;
-        for (i=0; i<nelems; i++) {
-            dest[i] = src[i];
-            dest[i] =  ((dest[i]) << 24)
-                    | (((dest[i]) & 0x0000ff00) << 8)
-                    | (((dest[i]) & 0x00ff0000) >> 8)
-                    | (((dest[i]) >> 24));
-        }
-    }
-    else if (esize == 8) {
-              uint64_t *dest = (uint64_t*)       dest_p;
-        const uint64_t *src  = (const uint64_t*) src_p;
-        for (i=0; i<nelems; i++) {
-            dest[i] = src[i];
-            dest[i] = ((dest[i] & 0x00000000000000FFULL) << 56) | 
-                      ((dest[i] & 0x000000000000FF00ULL) << 40) | 
-                      ((dest[i] & 0x0000000000FF0000ULL) << 24) | 
-                      ((dest[i] & 0x00000000FF000000ULL) <<  8) | 
-                      ((dest[i] & 0x000000FF00000000ULL) >>  8) | 
-                      ((dest[i] & 0x0000FF0000000000ULL) >> 24) | 
-                      ((dest[i] & 0x00FF000000000000ULL) >> 40) | 
-                      ((dest[i] & 0xFF00000000000000ULL) >> 56);
-        }
-    }
-    else if (esize == 2) {
-              uint16_t *dest =       (uint16_t*) dest_p;
-        const uint16_t *src  = (const uint16_t*) src_p;
-        for (i=0; i<nelems; i++) {
-            dest[i] = src[i];
-            dest[i] = (uint16_t)(((dest[i] & 0xff) << 8) |
-                                 ((dest[i] >> 8) & 0xff));
-        }
-    }
-    else {
-              uchar *op = (uchar*) dest_p;
-        const uchar *ip = (uchar*) src_p;
-        /* for esize is not 1, 2, or 4 */
-        while (nelems-- > 0) {
-            for (i=0; i<esize; i++)
-                op[i] = ip[esize-1-i];
-            op += esize;
-            ip += esize;
-        }
-    }
-}
-
-/* Other options to in-place byte-swap
-htonl() is for 4-byte swap
-htons() is for 2-byte swap
-
-#include <arpa/inet.h>
-    dest[i] = htonl(dest[i]);
-    dest[i] = htons(dest[i]);
-
-Or
-
-#include <byteswap.h>
-
-        for (i=0; i<nelems; i++)
-            dest[i] = __bswap_32(dest[i]);
-
-*/
-
-/*----< ncmpii_in_swap() >---------------------------------------------------*/
-/* in-place byte swap */
-void
-ncmpii_in_swapn(void       *buf,
-                MPI_Offset  nelems,  /* number of elements in buf[] */
-                int         esize)   /* byte size of each element */
-{
-    int i;
-
-    if (esize <= 1 || nelems <= 0) return;  /* no need */
-
-    if (esize == 4) { /* this is the most common case */
-        uint32_t *dest = (uint32_t*) buf;
-        for (i=0; i<nelems; i++)
-            dest[i] =  ((dest[i]) << 24)
-                    | (((dest[i]) & 0x0000ff00) << 8)
-                    | (((dest[i]) & 0x00ff0000) >> 8)
-                    | (((dest[i]) >> 24));
-    }
-    else if (esize == 8) {
-        uint64_t *dest = (uint64_t*) buf;
-        for (i=0; i<nelems; i++)
-            dest[i] = ((dest[i] & 0x00000000000000FFULL) << 56) | 
-                      ((dest[i] & 0x000000000000FF00ULL) << 40) | 
-                      ((dest[i] & 0x0000000000FF0000ULL) << 24) | 
-                      ((dest[i] & 0x00000000FF000000ULL) <<  8) | 
-                      ((dest[i] & 0x000000FF00000000ULL) >>  8) | 
-                      ((dest[i] & 0x0000FF0000000000ULL) >> 24) | 
-                      ((dest[i] & 0x00FF000000000000ULL) >> 40) | 
-                      ((dest[i] & 0xFF00000000000000ULL) >> 56);
-    }
-    else if (esize == 2) {
-        uint16_t *dest = (uint16_t*) buf;
-        for (i=0; i<nelems; i++)
-            dest[i] = (uint16_t)(((dest[i] & 0xff) << 8) |
-                                 ((dest[i] >> 8) & 0xff));
-    }
-    else {
-        uchar tmp, *op = (uchar*)buf;
-        /* for esize is not 1, 2, or 4 */
-        while (nelems-- > 0) {
-            for (i=0; i<esize/2; i++)
-                SWAP(op[i], op[esize-1-i])
-            op += esize;
-        }
-    }
-}
-
-dnl
-dnl PUTN_XTYPE(xtype)
-dnl
-define(`PUTN_XTYPE',dnl
-`dnl
-/*----< ncmpii_x_putn_$1() >--------------------------------------------------*/
-inline int
-ncmpii_x_putn_$1(ifelse(`$1',`NC_BYTE',`int cdf_ver,/* 1,2,or 5 CDF format */')
-              void         *xp,     /* buffer of external type $1 */
-              const void   *buf,    /* user buffer of internal type, itype */
-              MPI_Offset    nelems,
-              MPI_Datatype  itype,  /* internal data type (MPI_Datatype) */
-              void         *fillp)  /* in internal representation */
-{
-    if (itype == MPI_CHAR || itype == MPI_SIGNED_CHAR)
-        /* This is for 1-byte integer, assuming ECHAR has been checked before */
-        return ncmpix_putn_$1_schar(&xp, nelems, (signed char*)buf, fillp);
-    else if (itype == MPI_UNSIGNED_CHAR) {
-        ifelse(`$1',`NC_BYTE',
-       `if (cdf_ver < 5)
-            return ncmpix_putn_NC_UBYTE_uchar(&xp, nelems,(const uchar*)buf, fillp);
-        else')
-            return ncmpix_putn_$1_uchar(&xp, nelems, (const uchar*)     buf, fillp);
-    }
-    else if (itype == MPI_SHORT)
-        return ncmpix_putn_$1_short    (&xp, nelems, (const short*)     buf, fillp);
-    else if (itype == MPI_UNSIGNED_SHORT)
-        return ncmpix_putn_$1_ushort   (&xp, nelems, (const ushort*)    buf, fillp);
-    else if (itype == MPI_INT)
-        return ncmpix_putn_$1_int      (&xp, nelems, (const int*)       buf, fillp);
-    else if (itype == MPI_UNSIGNED)
-        return ncmpix_putn_$1_uint     (&xp, nelems, (const uint*)      buf, fillp);
-    else if (itype == MPI_LONG)
-        return ncmpix_putn_$1_long     (&xp, nelems, (const long*)      buf, fillp);
-    else if (itype == MPI_FLOAT)
-        return ncmpix_putn_$1_float    (&xp, nelems, (const float*)     buf, fillp);
-    else if (itype == MPI_DOUBLE)
-        return ncmpix_putn_$1_double   (&xp, nelems, (const double*)    buf, fillp);
-    else if (itype == MPI_LONG_LONG_INT)
-        return ncmpix_putn_$1_longlong (&xp, nelems, (const longlong*)  buf, fillp);
-    else if (itype == MPI_UNSIGNED_LONG_LONG)
-        return ncmpix_putn_$1_ulonglong(&xp, nelems, (const ulonglong*) buf, fillp);
-    DEBUG_RETURN_ERROR(NC_EBADTYPE)
-}
-')dnl
-
-PUTN_XTYPE(NC_UBYTE)
-PUTN_XTYPE(NC_SHORT)
-PUTN_XTYPE(NC_USHORT)
-PUTN_XTYPE(NC_INT)
-PUTN_XTYPE(NC_UINT)
-PUTN_XTYPE(NC_FLOAT)
-PUTN_XTYPE(NC_DOUBLE)
-PUTN_XTYPE(NC_INT64)
-PUTN_XTYPE(NC_UINT64)
-
-/* In CDF-2, NC_BYTE is considered a signed 1-byte integer in signed APIs, and
- * unsigned 1-byte integer in unsigned APIs. In CDF-5, NC_BYTE is always a
- * signed 1-byte integer. See
- * http://www.unidata.ucar.edu/software/netcdf/docs/data_type.html#type_conversion
- */
-PUTN_XTYPE(NC_BYTE)
-
-
-dnl
-dnl GETN_XTYPE(xtype)
-dnl
-define(`GETN_XTYPE',dnl
-`dnl
-/*----< ncmpii_x_getn_$1() >-------------------------------------------------*/
-inline int
-ncmpii_x_getn_$1(ifelse(`$1',`NC_BYTE',`int cdf_ver,/* 1,2,or 5 CDF format */')
-              const void   *xp,     /* buffer of external type $1 */
-              void         *ip,     /* user buffer of internal type, itype */
-              MPI_Offset    nelems,
-              MPI_Datatype  itype)  /* internal data type (MPI_Datatype) */
-{
-    if (itype == MPI_CHAR || itype == MPI_SIGNED_CHAR)
-        /* This is for 1-byte integer, assuming ECHAR has been checked before */
-        return ncmpix_getn_$1_schar(&xp, nelems, (signed char*)ip);
-    else if (itype == MPI_UNSIGNED_CHAR) {
-        ifelse(`$1',`NC_BYTE',`if (cdf_ver < 5)
-            return ncmpix_getn_NC_UBYTE_uchar(&xp, nelems,(uchar*)ip);
-        else')
-            return ncmpix_getn_$1_uchar(&xp, nelems,      (uchar*)ip);
-    }
-    else if (itype == MPI_SHORT)
-        return ncmpix_getn_$1_short    (&xp, nelems,      (short*)ip);
-    else if (itype == MPI_UNSIGNED_SHORT)
-        return ncmpix_getn_$1_ushort   (&xp, nelems,     (ushort*)ip);
-    else if (itype == MPI_INT)
-        return ncmpix_getn_$1_int      (&xp, nelems,        (int*)ip);
-    else if (itype == MPI_UNSIGNED)
-        return ncmpix_getn_$1_uint     (&xp, nelems,       (uint*)ip);
-    else if (itype == MPI_LONG)
-        return ncmpix_getn_$1_long     (&xp, nelems,       (long*)ip);
-    else if (itype == MPI_FLOAT)
-        return ncmpix_getn_$1_float    (&xp, nelems,      (float*)ip);
-    else if (itype == MPI_DOUBLE)
-        return ncmpix_getn_$1_double   (&xp, nelems,     (double*)ip);
-    else if (itype == MPI_LONG_LONG_INT)
-        return ncmpix_getn_$1_longlong (&xp, nelems,   (longlong*)ip);
-    else if (itype == MPI_UNSIGNED_LONG_LONG)
-        return ncmpix_getn_$1_ulonglong(&xp, nelems,  (ulonglong*)ip);
-    DEBUG_RETURN_ERROR(NC_EBADTYPE)
-}
-')dnl
-
-GETN_XTYPE(NC_UBYTE)
-GETN_XTYPE(NC_SHORT)
-GETN_XTYPE(NC_USHORT)
-GETN_XTYPE(NC_INT)
-GETN_XTYPE(NC_UINT)
-GETN_XTYPE(NC_FLOAT)
-GETN_XTYPE(NC_DOUBLE)
-GETN_XTYPE(NC_INT64)
-GETN_XTYPE(NC_UINT64)
-
-/* In CDF-2, NC_BYTE is considered a signed 1-byte integer in signed APIs, and
- * unsigned 1-byte integer in unsigned APIs. In CDF-5, NC_BYTE is always a
- * signed 1-byte integer. See
- * http://www.unidata.ucar.edu/software/netcdf/docs/data_type.html#type_conversion
- */
-GETN_XTYPE(NC_BYTE)
-
diff --git a/src/lib/depend b/src/lib/depend
deleted file mode 100644
index fdeea73..0000000
--- a/src/lib/depend
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# generated from command "gcc -MM file.c"
-#
-mpinetcdf.o: mpinetcdf.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h
-header.o: header.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h
-mpincio.o: mpincio.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h rnd.h macro.h
-attr.o: attr.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h
-dim.o: dim.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h
-error.o: error.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h
-nc.o: nc.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h rnd.h ncx.h nctypes.h macro.h
-ncx.o: ncx.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h
-string.o: string.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h utf8proc.h
-var.o: var.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h
-ncmpidtype.o: ncmpidtype.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncmpidtype.h macro.h
-convert_swap.o: convert_swap.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h
-filetype.o: filetype.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h macro.h
-m_getput_varx.o: m_getput_varx.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h ncmpidtype.h macro.h
-varn.o: varn.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h ncmpidtype.h macro.h
-i_varn.o: i_varn.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h ncmpidtype.h macro.h
-nonblocking.o: nonblocking.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h ncmpidtype.h macro.h
-malloc.o: malloc.c ncconfig.h nc.h
-utf8proc.o: utf8proc.c ncconfig.h utf8proc.h utf8proc_data.h
-ncx.o: ncx.c ncconfig.h nc.h pnetcdf.h ncx.h
-swap.o: swap.c ncconfig.h ncx.h rnd.h nctypes.h pnetcdf.h
-bput.o: bput.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h ncmpidtype.h macro.h
-getput.o: getput.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h ncmpidtype.h macro.h
-i_getput.o: i_getput.c ncconfig.h nc.h pnetcdf.h ncio.h fbits.h ncx.h rnd.h nctypes.h ncmpidtype.h macro.h
-subfile.o: subfile.c ncconfig.h subfile.h pnetcdf.h nc.h ncio.h fbits.h macro.h ncmpidtype.h
-vard.o: vard.c ncconfig.h pnetcdf.h nc.h ncio.h fbits.h rnd.h ncx.h nctypes.h macro.h ncmpidtype.h
-fill.o: fill.c nc.h ncio.h pnetcdf.h fbits.h macro.h
-util.o: util.c nc.h ncio.h pnetcdf.h fbits.h macro.h ncx.h
-hash_func.o: hash_func.c nc.h ncio.h pnetcdf.h fbits.h
diff --git a/src/lib/dim.c b/src/lib/dim.c
deleted file mode 100644
index c8e9ed2..0000000
--- a/src/lib/dim.c
+++ /dev/null
@@ -1,737 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: dim.c 2684 2016-12-07 18:58:55Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "fbits.h"
-#include "macro.h"
-#include "utf8proc.h"
-
-/*
- * Free dim
- * Formerly
-NC_free_dim(dim)
- */
-inline void
-ncmpii_free_NC_dim(NC_dim *dimp)
-{
-    if (dimp == NULL) return;
-    ncmpii_free_NC_string(dimp->name);
-    NCI_Free(dimp);
-}
-
-
-/* allocate and return a new NC_dim object */
-inline NC_dim *
-ncmpii_new_x_NC_dim(NC_string *name)
-{
-    NC_dim *dimp;
-
-    dimp = (NC_dim *) NCI_Malloc(sizeof(NC_dim));
-    if (dimp == NULL) return NULL;
-
-    dimp->name = name;
-    dimp->size = 0;
-
-    return(dimp);
-}
-
-/*----< ncmpii_new_NC_dim() >------------------------------------------------*/
-/*
- * Formerly, NC_new_dim(const char *name, long size)
- */
-static int
-ncmpii_new_NC_dim(NC_dimarray  *ncap,
-                  const char   *name, /* normalized dim name */
-                  MPI_Offset    size,
-                  NC_dim      **dimp)
-{
-    NC_string *strp;
-
-    if (strlen(name) == 0) DEBUG_RETURN_ERROR(NC_EBADNAME)
-
-    strp = ncmpii_new_NC_string(strlen(name), name);
-    if (strp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    *dimp = ncmpii_new_x_NC_dim(strp);
-    if (*dimp == NULL) {
-        ncmpii_free_NC_string(strp);
-        DEBUG_RETURN_ERROR(NC_ENOMEM)
-    }
-    (*dimp)->size = size;
-
-#ifndef SEARCH_NAME_LINEARLY
-    if (ncap != NULL) { /* insert new dim to hash table */
-        int key;
-        NC_nametable *nameT = ncap->nameT; /* dim name lookup table */
-
-        /* We use the first char as key for name lookup */
-        key = HASH_FUNC(name);
-
-        /* allocate or expand the space for nameT[key].list */
-        if (nameT[key].num % NC_NAME_TABLE_CHUNK == 0)
-            nameT[key].list = (int*) NCI_Realloc(nameT[key].list,
-                              (size_t)(nameT[key].num+NC_NAME_TABLE_CHUNK) * sizeof(int));
-
-        /* add the new variable ID to the name lookup table
-         * the new varid will be ncap->ndefined
-         */
-        nameT[key].list[nameT[key].num] = ncap->ndefined;
-        nameT[key].num++;
-    }
-    /* else case is for dimension duplication called from dup_NC_dim() */
-#endif
-
-    return NC_NOERR;
-}
-
-/*----< dup_NC_dim() >-------------------------------------------------------*/
-NC_dim*
-dup_NC_dim(const NC_dim *rdimp)
-{
-    int err;
-    NC_dim *dimp;
-
-    /* rdimp->name->cp is a normalized string */
-    err = ncmpii_new_NC_dim(NULL, rdimp->name->cp, rdimp->size, &dimp);
-    if (err != NC_NOERR) return NULL;
-    return dimp;
-}
-
-/*----< ncmpii_find_NC_Udim() >----------------------------------------------*/
-/*
- * Step thru NC_DIMENSION array, seeking the UNLIMITED dimension.
- * Return dimid or -1 on not found.
- * *dimpp is set to the appropriate NC_dim.
- */
-int
-ncmpii_find_NC_Udim(const NC_dimarray  *ncap,
-                    NC_dim            **dimpp)
-{
-    int dimid;
-
-    assert(ncap != NULL);
-
-    if (ncap->ndefined == 0) return -1;
-
-    /* note that the number of dimensions allowed is < 2^32 */
-    for (dimid=0; dimid<ncap->ndefined; dimid++)
-        if (ncap->value[dimid]->size == NC_UNLIMITED) {
-            /* found the matched name */
-            if (dimpp != NULL)
-                *dimpp = ncap->value[dimid];
-            return dimid;
-        }
-
-    /* not found */
-    return -1;
-}
-
-#ifdef SEARCH_NAME_LINEARLY
-/*----< ncmpii_NC_finddim() >------------------------------------------------*/
-/*
- * Step thru NC_DIMENSION array, seeking match on name.
- * If found, set the dim ID pointed by dimidp, otherwise return NC_EBADDIM
- */
-static int
-ncmpii_NC_finddim(const NC_dimarray *ncap,
-                  const char        *name,  /* normalized dim name */
-                  int               *dimidp)
-{
-    int dimid;
-    size_t nchars=strlen(name);
-
-    assert(ncap != NULL);
-
-    if (ncap->ndefined == 0) return NC_EBADDIM;
-
-    /* note that the number of dimensions allowed is < 2^32 */
-    for (dimid=0; dimid<ncap->ndefined; dimid++) {
-        if (ncap->value[dimid]->name->nchars == nchars &&
-            strncmp(ncap->value[dimid]->name->cp, name, nchars) == 0) {
-            /* found the matched name */
-            if (dimidp != NULL) *dimidp = dimid;
-            return NC_NOERR; /* found it */
-        }
-    }
-    return NC_EBADDIM; /* the name is not found */
-}
-#else
-/*----< ncmpii_NC_finddim() >------------------------------------------------*/
-/*
- * Search name from hash table ncap->nameT.
- * If found, set the dim ID pointed by dimidp, otherwise return NC_EBADDIM
- */
-static int
-ncmpii_NC_finddim(const NC_dimarray *ncap,
-                  const char        *name,  /* normalized dim name */
-                  int               *dimidp)
-{
-    int i, key, dimid;
-
-    assert(ncap != NULL);
-
-    if (ncap->ndefined == 0) return NC_EBADDIM;
-
-    /* hash the dim name into a key for name lookup */
-    key = HASH_FUNC(name);
-
-    /* check the list using linear search */
-    for (i=0; i<ncap->nameT[key].num; i++) {
-        dimid = ncap->nameT[key].list[i];
-        if (strcmp(name, ncap->value[dimid]->name->cp) == 0) {
-            if (dimidp != NULL) *dimidp = dimid;
-            return NC_NOERR; /* the name already exists */
-        }
-    }
-
-    return NC_EBADDIM; /* the name has never been used */
-}
-#endif
-
-
-/* dimarray */
-
-
-/*----< ncmpii_free_NC_dimarray() >------------------------------------------*/
-/*
- * Free NC_dimarray values.
- * formerly
-NC_free_array()
- */
-inline void
-ncmpii_free_NC_dimarray(NC_dimarray *ncap)
-{
-    int i;
-
-    assert(ncap != NULL);
-    if (ncap->nalloc == 0) return;
-
-    assert(ncap->value != NULL);
-    for (i=0; i<ncap->ndefined; i++)
-        ncmpii_free_NC_dim(ncap->value[i]);
-
-    NCI_Free(ncap->value);
-    ncap->value    = NULL;
-    ncap->nalloc   = 0;
-    ncap->ndefined = 0;
-
-    /* free space allocated for dim name lookup table */
-    for (i=0; i<HASH_TABLE_SIZE; i++) {
-        if (ncap->nameT[i].num > 0)
-            NCI_Free(ncap->nameT[i].list);
-        ncap->nameT[i].num = 0;
-    }
-}
-
-
-/*----< ncmpii_dup_NC_dimarray() >-------------------------------------------*/
-int
-ncmpii_dup_NC_dimarray(NC_dimarray *ncap, const NC_dimarray *ref)
-{
-    int i, status=NC_NOERR;
-
-    assert(ref != NULL);
-    assert(ncap != NULL);
-
-    if (ref->nalloc == 0) {
-        ncap->nalloc   = 0;
-        ncap->ndefined = 0;
-        ncap->value    = NULL;
-        return NC_NOERR;
-    }
-
-    if (ref->nalloc > 0) {
-        ncap->value = (NC_dim **) NCI_Calloc((size_t)ref->nalloc, sizeof(NC_dim *));
-        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-        ncap->nalloc = ref->nalloc;
-    }
-
-    ncap->ndefined = 0;
-    for (i=0; i<ref->ndefined; i++) {
-        ncap->value[i] = dup_NC_dim(ref->value[i]);
-        if (ncap->value[i] == NULL) {
-            DEBUG_ASSIGN_ERROR(status, NC_ENOMEM)
-            break;
-        }
-    }
-
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_dimarray(ncap);
-        return status;
-    }
-
-    ncap->ndefined = ref->ndefined;
-
-    /* duplicate dim name lookup table */
-    for (i=0; i<HASH_TABLE_SIZE; i++) {
-        ncap->nameT[i].num = ref->nameT[i].num;
-        ncap->nameT[i].list = NULL;
-        if (ncap->nameT[i].num > 0) {
-            ncap->nameT[i].list = NCI_Malloc((size_t)ncap->nameT[i].num * sizeof(int));
-            memcpy(ncap->nameT[i].list, ref->nameT[i].list,
-                   (size_t)ncap->nameT[i].num * sizeof(int));
-        }
-    }
-
-    return NC_NOERR;
-}
-
-
-/*----< incr_NC_dimarray() >---------------------------------------------- --*/
-/*
- * Add a new handle to the end of an array of handles
- * Formerly, NC_incr_array(array, tail)
- */
-int
-incr_NC_dimarray(NC_dimarray *ncap,
-                 NC_dim      *newdimp)
-{
-    NC_dim **vp;
-
-    assert(ncap != NULL);
-
-    if (ncap->nalloc == 0) {
-        assert(ncap->ndefined == 0);
-        vp = (NC_dim **) NCI_Malloc(NC_ARRAY_GROWBY * sizeof(NC_dim *));
-        if (vp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-        ncap->value = vp;
-        ncap->nalloc = NC_ARRAY_GROWBY;
-    }
-    else if (ncap->ndefined + 1 > ncap->nalloc) {
-        vp = (NC_dim **) NCI_Realloc(ncap->value,
-             (size_t)(ncap->nalloc + NC_ARRAY_GROWBY) * sizeof(NC_dim *));
-        if (vp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-        ncap->value = vp;
-        ncap->nalloc += NC_ARRAY_GROWBY;
-    }
-    /* else here means some space still available */
-
-    if (newdimp != NULL) {
-        ncap->value[ncap->ndefined] = newdimp;
-        ncap->ndefined++;
-    }
-
-    return NC_NOERR;
-}
-
-
-/*----< ncmpii_elem_NC_dimarray() >------------------------------------------*/
-inline NC_dim *
-ncmpii_elem_NC_dimarray(const NC_dimarray *ncap,
-                        int                dimid)
-{
-    /* returns the dimension ID defined earlier */
-    assert(ncap != NULL);
-
-    if (dimid < 0 || ncap->ndefined == 0 || dimid >= ncap->ndefined)
-        return NULL;
-
-    assert(ncap->value != NULL);
-
-    return ncap->value[dimid];
-}
-
-
-/* Public */
-
-/*----< ncmpi_def_dim() >----------------------------------------------------*/
-int
-ncmpi_def_dim(int         ncid,    /* IN:  file ID */
-              const char *name,    /* IN:  name of dimension */
-              MPI_Offset  size,    /* IN:  dimension size */
-              int        *dimidp)  /* OUT: dimension ID */
-{
-    int dimid, err;
-    char *nname=NULL;  /* normalized name */
-    NC *ncp=NULL;
-    NC_dim *dimp=NULL;
-
-    /* check if ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* must be called in define mode */
-    if (!NC_indef(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-        goto err_check;
-    }
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* check if the name string is legal for the netcdf format */
-    err = ncmpii_NC_check_name(name, ncp->format);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    /* MPI_Offset is usually a signed value, but serial netcdf uses
-     * size_t -- normally unsigned
-     * In 1999 ISO C standard, size_t is an unsigned integer type of at least
-     * 16 bit. */
-    if (ncp->format == 2) { /* CDF-2 format, max is 2^32-4 */
-        if (size > X_UINT_MAX - 3 || (size < 0))
-            /* "-3" handles rounded-up size */
-            err = NC_EDIMSIZE;
-    } else if (ncp->format == 5) { /* CDF-5 format*/
-        if (size < 0)
-            err = NC_EDIMSIZE;
-    } else { /* CDF-1 format, max is 2^31-4 */
-        if (size > X_INT_MAX - 3 || (size < 0))
-            /* "-3" handles rounded-up size */
-            err = NC_EDIMSIZE;
-    }
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    if (size == NC_UNLIMITED) {
-#if 0
-        /* check for any existing unlimited dimension, netcdf allows
-         * one per file
-         */
-        dimid = ncmpii_find_NC_Udim(&ncp->dims, &dimp);
-        if (dimid != -1) {
-            DEBUG_ASSIGN_ERROR(err, NC_EUNLIMIT) /* found an existing one */
-            goto err_check;
-        }
-#endif
-        if (ncp->dims.unlimited_id != -1) {
-            DEBUG_ASSIGN_ERROR(err, NC_EUNLIMIT) /* already defined */
-            goto err_check;
-        }
-    }
-
-    /* check if number of dimensions exceeds the upper bound */
-    if (ncp->dims.ndefined >= NC_MAX_DIMS) {
-        DEBUG_ASSIGN_ERROR(err, NC_EMAXDIMS)
-        goto err_check;
-    }
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    /* check if the name string is previously used */
-    err = ncmpii_NC_finddim(&ncp->dims, nname, NULL);
-    if (err != NC_EBADDIM) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
-        goto err_check;
-    }
-    else
-        err = NC_NOERR;
-
-err_check:
-    if (ncp->safe_mode) {
-        int status, mpireturn;
-        char root_name[NC_MAX_NAME];
-        MPI_Offset root_size;
-
-        /* check if name is consistent among all processes */
-        if (name == NULL || *name == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, name, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && strcmp(root_name, name))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_NAME)
-
-        /* check if sizes are consistent across all processes */
-        root_size = size;
-        TRACE_COMM(MPI_Bcast)(&root_size, 1, MPI_OFFSET, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && root_size != size)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_SIZE)
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        }
-        if (err == NC_NOERR) err = status;
-    }
-
-    if (err != NC_NOERR) {
-        if (nname != NULL) free(nname);
-        return err;
-    }
-
-    assert(nname != NULL);
-
-    /* create a new dimension object */
-    err = ncmpii_new_NC_dim(&ncp->dims, nname, size, &dimp);
-    free(nname);
-    if (err != NC_NOERR) {
-        if (dimp != NULL) ncmpii_free_NC_dim(dimp);
-        DEBUG_RETURN_ERROR(err)
-    }
-
-    /* Add a new dim handle to the end of handle array */
-    err = incr_NC_dimarray(&ncp->dims, dimp);
-    if (err != NC_NOERR) {
-        if (dimp != NULL) ncmpii_free_NC_dim(dimp);
-        DEBUG_RETURN_ERROR(err)
-    }
-
-    /* ncp->dims.ndefined has been increased in incr_NC_dimarray() */
-    dimid = (int)ncp->dims.ndefined -1;
-
-    if (size == NC_UNLIMITED) ncp->dims.unlimited_id = dimid;
-
-    if (dimidp != NULL) *dimidp = dimid;
-
-
-    return err;
-}
-
-
-/*----< ncmpi_inq_dimid() >--------------------------------------------------*/
-int
-ncmpi_inq_dimid(int         ncid,
-                const char *name,
-                int        *dimid)
-{
-    int err;
-    char *nname=NULL; /* normalized name */
-    NC *ncp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME)
-        DEBUG_RETURN_ERROR(NC_EBADNAME)
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    err = ncmpii_NC_finddim(&ncp->dims, nname, dimid);
-    free(nname);
-
-    return err;
-}
-
-
-/*----< ncmpi_inq_dim() >----------------------------------------------------*/
-int
-ncmpi_inq_dim(int         ncid,
-              int         dimid,
-              char       *name,
-              MPI_Offset *sizep)
-{
-    int err;
-    NC *ncp=NULL;
-    NC_dim *dimp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    dimp = ncmpii_elem_NC_dimarray(&ncp->dims, dimid);
-    if (dimp == NULL) DEBUG_RETURN_ERROR(NC_EBADDIM)
-
-    if (name != NULL)
-        /* in PnetCDF, name->cp is always NULL character terminated */
-        strcpy(name, dimp->name->cp);
-
-    if (sizep != NULL) {
-        if (dimp->size == NC_UNLIMITED)
-            *sizep = NC_get_numrecs(ncp);
-        else
-            *sizep = dimp->size;
-    }
-    return NC_NOERR;
-}
-
-
-/*----< ncmpi_inq_dimname() >------------------------------------------------*/
-int
-ncmpi_inq_dimname(int   ncid,
-                  int   dimid,
-                  char *name)
-{
-    return ncmpi_inq_dim(ncid, dimid, name, NULL);
-}
-
-
-/*----< ncmpi_inq_dimlen() >-------------------------------------------------*/
-int
-ncmpi_inq_dimlen(int         ncid,
-                 int         dimid,
-                 MPI_Offset *lenp)
-{
-    return ncmpi_inq_dim(ncid, dimid, NULL, lenp);
-}
-
-
-/*----< ncmpi_rename_dim() >--------------------------------------------------*/
-/* This API is collective and can be called in either define or data mode..
- * If the new name is longer than the old name, the netCDF dataset must be in
- * the define mode.
- */
-int
-ncmpi_rename_dim(int         ncid,
-                 int         dimid,
-                 const char *newname)
-{
-    int err;
-    char *nnewname=NULL; /* normalized newname */
-    NC *ncp=NULL;
-    NC_dim *dimp=NULL;
-    NC_string *newStr=NULL;
-
-    /* check whether ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check file's write permission */
-    if (NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    if (newname == NULL || *newname == 0 || strlen(newname) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* check whether newname is legal */
-    err = ncmpii_NC_check_name(newname, ncp->format);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    /* create a normalized character string */
-    nnewname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)newname);
-    if (nnewname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    /* check whether newname is already in use */
-    err = ncmpii_NC_finddim(&ncp->dims, nnewname, NULL);
-    if (err != NC_EBADDIM) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
-        goto err_check;
-    }
-
-    /* retrieve dim object */
-    dimp = ncmpii_elem_NC_dimarray(&ncp->dims, dimid);
-    if (dimp == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADDIM)
-        goto err_check;
-    }
-
-    if (! NC_indef(ncp) && /* when file is in data mode */
-        dimp->name->nchars < (MPI_Offset)strlen(nnewname)) {
-        /* must in define mode when newname is longer */
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-        goto err_check;
-    }
-
-    newStr = ncmpii_new_NC_string(strlen(nnewname), nnewname);
-    if (newStr == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-#ifndef SEARCH_NAME_LINEARLY
-    /* update dim name lookup table, by removing the old name and add
-     * the new name */
-    err = ncmpii_update_name_lookup_table(ncp->dims.nameT, dimid,
-          ncp->dims.value[dimid]->name->cp, nnewname);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-#endif
-
-err_check:
-    if (nnewname != NULL) free(nnewname);
-
-    if (ncp->safe_mode) {
-        int root_dimid, status, mpireturn;
-        char root_name[NC_MAX_NAME];
-
-        /* check if newname is consistent among all processes */
-        if (newname == NULL || *newname == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, newname, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && strcmp(root_name, newname))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_NAME)
-
-        /* check if dimid is consistent across all processes */
-        root_dimid = dimid;
-        TRACE_COMM(MPI_Bcast)(&root_dimid, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && root_dimid != dimid)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        if (err == NC_NOERR) err = status;
-    }
-
-    if (err != NC_NOERR) {
-        if (newStr != NULL) ncmpii_free_NC_string(newStr);
-        return err;
-    }
-
-    /* replace the old name with new name */
-    assert(dimp != NULL);
-    ncmpii_free_NC_string(dimp->name);
-    dimp->name = newStr;
-
-    if (! NC_indef(ncp)) { /* when file is in data mode */
-        /* Let root write the entire header to the file. Note that we cannot
-         * just update the variable name in its space occupied in the file
-         * header, because if the file space occupied by the name shrinks, all
-         * the metadata following it must be moved ahead.
-         */
-        err = ncmpii_write_header(ncp);
-        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-    }
-
-    return err;
-}
diff --git a/src/lib/fbits.h b/src/lib/fbits.h
deleted file mode 100644
index c52d559..0000000
--- a/src/lib/fbits.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: fbits.h 1468 2013-10-26 16:53:18Z wkliao $ */
-
-#ifndef _FBITS_H_
-#define _FBITS_H_
-
-/*
- * Macros for dealing with flag bits.
- */
-#define fSet(t, f)       ((t) |= (f))
-#define fClr(t, f)       ((t) &= ~(f))
-#define fIsSet(t, f)     ((t) & (f))
-#define fMask(t, f)     ((t) & ~(f))
-
-/*
- * Propositions
- */
-/* a implies b */
-#define pIf(a,b) (!(a) || (b))
-/* a if and only if b, use == when it makes sense */
-#define pIff(a,b) (((a) && (b)) || (!(a) && !(b)))
-
-#endif /*!FBITS_H_*/
diff --git a/src/lib/getput.m4 b/src/lib/getput.m4
deleted file mode 100644
index 25b3c49..0000000
--- a/src/lib/getput.m4
+++ /dev/null
@@ -1,753 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-/* Do not edit this file. It is produced from the corresponding .m4 source */
-dnl
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: getput.m4 2724 2016-12-18 06:26:38Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h> /* memcpy() */
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "ncmpidtype.h"
-#include "macro.h"
-#ifdef ENABLE_SUBFILING
-#include "subfile.h"
-#endif
-
-
-/*----< ncmpii_calc_datatype_elems() >---------------------------------------*/
-/* obtain the following metadata about buftype:
- * ptype: element data type (MPI primitive type) in buftype
- * bufcount: If it is -1, then this is called from a high-level API and in
- * this case buftype will be an MPI primitive data type. If not -1, then this
- * is called from a flexible API. In that case, we recalculate bufcount to
- * match with count[].
- * bnelems: number of ptypes in user buffer
- * nbytes: number of bytes (in external data representation) to read/write
- * from/to the file
- * el_size: size of ptype
- * buftype_is_contig: whether buftype is contiguous
- */
-int
-ncmpii_calc_datatype_elems(NC_var           *varp,
-                           const MPI_Offset *count,
-                           MPI_Datatype      buftype,
-                           MPI_Datatype     *ptype,             /* out */
-                           MPI_Offset       *bufcount,          /* in/out */
-                           MPI_Offset       *bnelems,           /* out */
-                           MPI_Offset       *nbytes,            /* out */
-                           int              *el_size,           /* out */
-                           int              *buftype_is_contig) /* out */
-{
-    int i, err=NC_NOERR;
-    MPI_Offset fnelems;
-
-    /* Sanity check for error codes should have already done before reaching
-     * here
-     *
-     * when (*bufcount == -1), same as if (IsPrimityMPIType(buftype)),
-     * it means this subroutine is called from a high-level API.
-     */
-    if (*bufcount != -1 && buftype != MPI_DATATYPE_NULL) {
-        /* This subroutine is called from a flexible API */
-        int isderived;
-        /* check MPI derived datatype error */
-        err = ncmpii_dtype_decode(buftype, ptype, el_size, bnelems,
-                                  &isderived, buftype_is_contig);
-        if (err != NC_NOERR) return err;
-    }
-
-    /* fnelems is the total number of nc_type elements calculated from
-     * count[]. count[] is the access count to the variable defined in
-     * the netCDF file.
-     */
-    fnelems = 1;
-    for (i=0; i<varp->ndims; i++)
-        fnelems *= count[i];
-
-    if (*bufcount == -1) { /* if (IsPrimityMPIType(buftype)) */
-        /* this subroutine is called from a high-level API */
-        *bnelems = *bufcount = fnelems;
-        *ptype = buftype;
-        MPI_Type_size(buftype, el_size); /* buffer element size */
-        *buftype_is_contig = 1;
-        /* nbytes is the amount in bytes of this request to file */
-        *nbytes = *bnelems * varp->xsz; /* varp->xsz is external element size */
-    }
-    else if (buftype == MPI_DATATYPE_NULL) {
-        /* This is called from a flexible API and buftype is set by user
-         * to MPI_DATATYPE_NULL. In this case, bufcount is set to match
-         * count[], and buf's data type to match the data type of variable
-         * defined in the file - no data conversion will be done.
-         */
-        *bnelems = *bufcount = fnelems;
-        *ptype = buftype = ncmpii_nc2mpitype(varp->type);
-        *el_size = varp->xsz;
-        *buftype_is_contig = 1;
-        /* nbytes is the amount in bytes of this request to file */
-        *nbytes = *bnelems * varp->xsz;
-    }
-    else {
-        /* This is called from a flexible API */
-
-        /* make bnelems the number of ptype in the whole user buf */
-        *bnelems *= *bufcount;
-
-        /* check mismatch between bnelems and fnelems */
-        if (fnelems != *bnelems) {
-            DEBUG_ASSIGN_ERROR(err, NC_EIOMISMATCH)
-            (fnelems>*bnelems) ? (fnelems=*bnelems) : (*bnelems=fnelems);
-            /* only handle partial of the request, smaller number of the two */
-        }
-        /* now fnelems == *bnelems */
-
-        /* nbytes is the amount in bytes of this request to file */
-        *nbytes = *bnelems * varp->xsz;
-    }
-    return err;
-}
-
-/*----< ncmpii_create_imaptype() >-------------------------------------------*/
-/* Check if a request is a true varm call. If yes, create an MPI derived
- * data type, imaptype, using imap[]
- */
-int
-ncmpii_create_imaptype(NC_var           *varp,
-                       const MPI_Offset *count,
-                       const MPI_Offset *imap,
-                       const MPI_Offset  bnelems, /* no. elements in user buf */
-                       const int         el_size, /* user buf element size */
-                       MPI_Datatype      ptype,   /* element type in buftype */
-                       MPI_Datatype     *imaptype)/* out */
-{
-    int dim, mpireturn;
-    MPI_Offset imap_contig_blocklen;
-
-    /* check if this is a vars call or a true varm call */
-    *imaptype = MPI_DATATYPE_NULL;
-
-    if (varp->ndims == 0) /* scalar var, only one value at one fixed place */
-        return NC_NOERR;
-
-    if (bnelems == 1) /* one element, same as var1 */
-        return NC_NOERR;
-
-    if (imap == NULL) /* no mapping, same as vars */
-        return NC_NOERR;
-
-    /* test each dim's contiguity in imap[] until the 1st non-contiguous
-     * dim is reached */
-    imap_contig_blocklen = 1;
-    dim = varp->ndims;
-    while (--dim >= 0 && imap_contig_blocklen == imap[dim])
-        imap_contig_blocklen *= count[dim];
-
-    if (dim == -1) /* imap is a contiguous layout */
-        return NC_NOERR;
-
-    /* We have a true varm call, as imap gives non-contiguous layout.
-     * User buffer will be packed (write case) or unpacked (read case)
-     * to/from a contiguous buffer based on imap[], before MPI-IO.
-     * First, we construct a derived data type, imaptype, based on
-     * imap[], and use it to pack lbuf to cbuf (for write), or unpack
-     * cbuf to lbuf (for read).
-     * dim is the first dimension (C order, eg. ZYX) that has
-     * non-contiguous imap.
-     */
-    if (imap_contig_blocklen != (int)imap_contig_blocklen)
-        DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-    if (count[dim] != (int)count[dim] || imap[dim] != (int)imap[dim])
-        DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-
-    mpireturn = MPI_Type_vector((int)count[dim], (int)imap_contig_blocklen,
-                                (int)imap[dim], ptype, imaptype);
-    if (mpireturn != MPI_SUCCESS) {
-        ncmpii_handle_error(mpireturn,"MPI_Type_vector");
-        DEBUG_RETURN_ERROR(NC_EMPI)
-    }
-    mpireturn = MPI_Type_commit(imaptype);
-    if (mpireturn != MPI_SUCCESS) {
-        ncmpii_handle_error(mpireturn,"MPI_Type_commit");
-        DEBUG_RETURN_ERROR(NC_EMPI)
-    }
-
-    for (dim--; dim>=0; dim--) {
-        MPI_Datatype tmptype;
-        if (count[dim] != (int)count[dim])
-            DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-#ifdef HAVE_MPI_TYPE_CREATE_HVECTOR
-        mpireturn = MPI_Type_create_hvector((int)count[dim], 1,
-                    imap[dim]*el_size, *imaptype, &tmptype);
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_Type_create_hvector");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-#else
-        mpireturn = MPI_Type_hvector((int)count[dim], 1, imap[dim]*el_size,
-                    *imaptype, &tmptype);
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_Type_hvector");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-#endif
-        mpireturn = MPI_Type_free(imaptype);
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_Type_free");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-        mpireturn = MPI_Type_commit(&tmptype);
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_Type_commit");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-        *imaptype = tmptype;
-    }
-    return NC_NOERR;
-}
-
-/*----< ncmpii_getput_varm() >------------------------------------------------*/
-/* buffer layers:
-
-   User Level              buf     (user defined buffer of MPI_Datatype)
-   MPI Datatype Level      cbuf    (contiguous buffer of ptype)
-   NetCDF XDR Level        xbuf    (XDR I/O buffer)
-
-   varm: there maybe two layer of memory layout (remapping):
-         one is specified by MPI derived datatype,
-         the other is specified by imap[],
-         it's encouraged to use only one option of them,
-         though using both of them are supported.
-
-   user buffer:                         |--------------------------|
-
-   mpi derived datatype view:           |------|  |------|  |------|
-
-   logic (contig) memory datastream:       |------|------|------|
-
-   imap view:                              |--| |--|    |--| |--|
-
-   contig I/O datastream (internal represent): |--|--|--|--|
-
-   These two layers of memory layout will both be represented in MPI
-   derived datatype, and if double layers of memory layout is used,
-   we need to eliminate the upper one passed in MPI_Datatype parameter
-   from the user, by packing it to logic contig memory datastream view.
-
-   for put_varm:
-     1. pack buf to lbuf based on buftype
-     2. create imap_type based on imap
-     3. pack lbuf to cbuf based on imap_type
-     4. type convert and byte swap cbuf to xbuf
-     5. write from xbuf
-     6. byte swap the buf, if it is swapped
-     7. free up temp buffers
-
-   for get_varm:
-     1. allocate lbuf
-     2. create imap_type based on imap
-     3. allocate cbuf
-     4. allocate xbuf
-     5. read to xbuf
-     6. type convert and byte swap xbuf to cbuf
-     7. unpack cbuf to lbuf based on imap_type
-     8. unpack lbuf to buf based on buftype
-*/
-
-static int
-ncmpii_getput_varm(NC               *ncp,
-                   NC_var           *varp,
-                   const MPI_Offset  start[],
-                   const MPI_Offset  count[],
-                   const MPI_Offset  stride[],  /* can be NULL */
-                   const MPI_Offset  imap[],    /* can be NULL */
-                   void             *buf,
-                   MPI_Offset        bufcount,  /* -1: from high-level API */
-                   MPI_Datatype      buftype,
-                   int               rw_flag,   /* WRITE_REQ or READ_REQ */
-                   int               io_method) /* COLL_IO or INDEP_IO */
-{
-    void *lbuf=NULL, *cbuf=NULL, *xbuf=NULL;
-    int mpireturn, err=NC_NOERR, status=NC_NOERR, warning=NC_NOERR;
-    int el_size, buftype_is_contig;
-    int need_swap=0, need_convert=0, need_swap_back_buf=0;
-    MPI_Offset bnelems=0, nbytes=0, offset=0;
-    MPI_Status mpistatus;
-    MPI_Datatype ptype, filetype=MPI_BYTE, imaptype=MPI_DATATYPE_NULL;
-    MPI_File fh;
-
-#ifdef ENABLE_SUBFILING
-    /* call a separate routine if variable is stored in subfiles */
-    if (varp->num_subfiles > 1) {
-#ifdef SUBFILE_DEBUG
-        printf("var(%s) is stored in subfiles\n", varp->name->cp);
-#endif
-        if (imap != NULL) {
-            fprintf(stderr, "varm APIs for subfiling is yet to be implemented\n");
-            DEBUG_RETURN_ERROR(NC_ENOTSUPPORT)
-        }
-        
-        return ncmpii_subfile_getput_vars(ncp, varp, start, count, stride,
-                                          buf, bufcount, buftype,
-                                          rw_flag, io_method);
-    }
-#endif
-
-    /* calculate the followings:
-     * ptype: element data type (MPI primitive type) in buftype
-     * bufcount: If it is -1, then this is called from a high-level API and in
-     * this case buftype will be an MPI primitive data type. If not, then this
-     * is called from a flexible API. In that case, we recalculate bufcount to
-     * match with count[].
-     * bnelems: number of ptypes in user buffer
-     * nbytes: number of bytes (in external data representation) to read/write
-     * from/to the file
-     * el_size: size of ptype
-     * buftype_is_contig: whether buftype is contiguous
-     */
-    err = ncmpii_calc_datatype_elems(varp, count,
-                                     buftype, &ptype, &bufcount, &bnelems,
-                                     &nbytes, &el_size, &buftype_is_contig);
-    if (err == NC_EIOMISMATCH) DEBUG_ASSIGN_ERROR(warning, err) 
-    else if (err != NC_NOERR) goto err_check;
-
-    /* because nbytes will be used as the argument "count" in MPI-IO
-     * read/write calls and the argument "count" is of type int */
-    if (nbytes != (int)nbytes) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
-        goto err_check;
-    }
-
-    if (nbytes == 0) /* this process has nothing to read/write */
-        goto err_check;
-
-    /* TODO: if record variables are too big (so big that we cannot store the
-     * stride between records in an MPI_Aint, for example) then we will
-     * have to process this one record at a time.
-     */
-
-    /* Create the filetype for this request and calculate the beginning
-     * file offset for this request.  If this request is contiguous in file,
-     * then filetype == MPI_BYTE. Otherwise filetype will be an MPI derived
-     * data type.
-     */
-    err = ncmpii_vars_create_filetype(ncp, varp, start, count, stride, rw_flag,
-                                      NULL, &offset, &filetype, NULL);
-    if (err != NC_NOERR) goto err_check;
-
-    if (bufcount != (int)bufcount) DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
-
-err_check:
-    /* If io_method is COLL_IO and an error occurs, we'll still conduct a
-     * zero-byte read/write (because every process must participate the
-     * collective I/O call).
-     */
-    if (err != NC_NOERR || nbytes == 0) {
-        if (io_method == INDEP_IO) return err;
-
-        /* COLL_IO: participate the collective I/O operations */
-        filetype = MPI_BYTE;
-        status   = err;
-        nbytes   = 0;
-        goto mpi_io;
-    }
-
-    /* check if type conversion and Endianness byte swap is needed */
-    need_convert = ncmpii_need_convert(ncp->format, varp->type, ptype);
-    need_swap    = ncmpii_need_swap(varp->type, ptype);
-
-    /* Check if this is a vars call or a true varm call.
-     * Construct a derived datatype, imaptype, if a true varm call
-     */
-    err = ncmpii_create_imaptype(varp, count, imap, bnelems, el_size, ptype,
-                                 &imaptype);
-    if (status == NC_NOERR) status = err;
-
-    if (rw_flag == WRITE_REQ) { /* pack request to xbuf */
-        int position;
-        MPI_Offset outsize=bnelems*el_size;
-        /* assert(bnelems > 0); */
-        if (outsize != (int)outsize && status == NC_NOERR)
-            DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
-
-        /* Step 1: pack buf into a contiguous buffer, lbuf */
-        if (!buftype_is_contig) { /* buftype is not contiguous */
-            /* pack buf into lbuf, a contiguous buffer, using buftype */
-            lbuf = NCI_Malloc((size_t)outsize);
-            position = 0;
-            MPI_Pack(buf, (int)bufcount, buftype, lbuf, (int)outsize,
-                     &position, MPI_COMM_SELF);
-        }
-        else
-            lbuf = buf;
-
-        /* Step 2: pack lbuf to cbuf if imap is non-contiguous */
-        if (imaptype != MPI_DATATYPE_NULL) { /* true varm */
-            /* pack lbuf to cbuf, a contiguous buffer, using imaptype */
-            cbuf = NCI_Malloc((size_t)outsize);
-            position = 0;
-            MPI_Pack(lbuf, 1, imaptype, cbuf, (int)outsize, &position,
-                     MPI_COMM_SELF);
-            MPI_Type_free(&imaptype);
-        }
-        else /* reuse lbuf */
-            cbuf = lbuf;
-
-        /* lbuf is no longer needed */
-        if (lbuf != buf && lbuf != cbuf) NCI_Free(lbuf);
-
-        /* Step 3: pack cbuf to xbuf. The contents of xbuf will be in the
-         * external representation, ready to be written to file.
-         */
-        xbuf = cbuf;
-        if (need_convert) { /* user buf type != nc var type defined in file */
-            void *fillp; /* fill value in internal representation */
-
-            xbuf = NCI_Malloc((size_t)nbytes);
-
-            /* find the fill value */
-            fillp = NCI_Malloc((size_t)varp->xsz);
-            ncmpii_inq_var_fill(varp, fillp);
-            /* datatype conversion + byte-swap from cbuf to xbuf */
-            DATATYPE_PUT_CONVERT(ncp->format, varp->type, xbuf, cbuf, bnelems,
-                                 ptype, fillp, status)
-            NCI_Free(fillp);
-
-            /* NC_ERANGE can be caused by a subset of buf that is out of range
-             * of the external data type, it is not considered a fatal error.
-             * The request must continue to finish.
-             */
-            if (status != NC_NOERR && status != NC_ERANGE) {
-                if (cbuf != buf)  NCI_Free(cbuf);
-                NCI_Free(xbuf);
-                xbuf = NULL;
-                if (io_method == INDEP_IO) return status;
-
-                /* COLL_IO: participate the collective I/O operations */
-                filetype  = MPI_BYTE;
-                nbytes    = 0;
-                goto mpi_io;
-            }
-        }
-        else if (need_swap) { /* no need to convert, just byte swap */
-#ifdef DISABLE_IN_PLACE_SWAP
-            if (cbuf == buf)
-#else
-            if (cbuf == buf && nbytes <= NC_BYTE_SWAP_BUFFER_SIZE)
-#endif
-            {
-                /* allocate cbuf and copy buf to xbuf, before byte-swap */
-                xbuf = NCI_Malloc((size_t)nbytes);
-                memcpy(xbuf, buf, (size_t)nbytes);
-            }
-
-            /* perform array in-place byte-swap on xbuf */
-            ncmpii_in_swapn(xbuf, bnelems, ncmpix_len_nctype(varp->type));
-
-            if (xbuf == buf) need_swap_back_buf = 1;
-            /* user buf needs to be swapped back to its original contents */
-        }
-        /* cbuf is no longer needed */
-        if (cbuf != buf && cbuf != xbuf) NCI_Free(cbuf);
-    }
-    else { /* rw_flag == READ_REQ */
-        /* allocate xbuf for reading */
-        if (buftype_is_contig && imaptype == MPI_DATATYPE_NULL && !need_convert)
-            xbuf = buf;
-        else
-            xbuf = NCI_Malloc((size_t)nbytes);
-    }
-    /* xbuf is the buffer whose data has been converted into the external
-     * data type, ready to be written to the netCDF file. For read,
-     * after read from file, the contents of xbuf are in external type
-     */
-
-mpi_io:
-    if (io_method == COLL_IO)
-        fh = ncp->nciop->collective_fh;
-    else
-        fh = ncp->nciop->independent_fh;
-
-    /* MPI_File_set_view is collective */
-    err = ncmpii_file_set_view(ncp, fh, &offset, filetype);
-    if (err != NC_NOERR) {
-        nbytes = 0; /* skip this request */
-        if (status == NC_NOERR) status = err;
-    }
-    if (filetype != MPI_BYTE) MPI_Type_free(&filetype);
-
-    if (rw_flag == WRITE_REQ) {
-        if (io_method == COLL_IO) {
-            TRACE_IO(MPI_File_write_at_all)(fh, offset, xbuf, (int)nbytes,
-                                            MPI_BYTE, &mpistatus);
-            if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_write_at_all");
-                /* return the first encountered error if there is any */
-                if (status == NC_NOERR) {
-                    err = (err == NC_EFILE) ? NC_EWRITE : err;
-                    DEBUG_ASSIGN_ERROR(status, err)
-                }
-            }
-            else {
-                ncp->nciop->put_size += nbytes;
-            }
-        }
-        else { /* io_method == INDEP_IO */
-            TRACE_IO(MPI_File_write_at)(fh, offset, xbuf, (int)nbytes,
-                                        MPI_BYTE,  &mpistatus);
-            if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_write_at");
-                /* return the first encountered error if there is any */
-                if (status == NC_NOERR) {
-                    err = (err == NC_EFILE) ? NC_EWRITE : err;
-                    DEBUG_ASSIGN_ERROR(status, err)
-                }
-            }
-            else {
-                ncp->nciop->put_size += nbytes;
-            }
-        }
-    }
-    else {  /* rw_flag == READ_REQ */
-        if (io_method == COLL_IO) {
-            TRACE_IO(MPI_File_read_at_all)(fh, offset, xbuf, (int)nbytes,
-                                           MPI_BYTE, &mpistatus);
-            if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_read_at_all");
-                /* return the first encountered error if there is any */
-                if (status == NC_NOERR) {
-                    err = (err == NC_EFILE) ? NC_EREAD : err;
-                    DEBUG_ASSIGN_ERROR(status, err)
-                }
-            }
-            else {
-                ncp->nciop->get_size += nbytes;
-            }
-        }
-        else { /* io_method == INDEP_IO */
-            TRACE_IO(MPI_File_read_at)(fh, offset, xbuf, (int)nbytes,
-                                       MPI_BYTE, &mpistatus);
-            if (mpireturn != MPI_SUCCESS) {
-                err = ncmpii_handle_error(mpireturn, "MPI_File_read_at");
-                /* return the first encountered error if there is any */
-                if (status == NC_NOERR) {
-                    err = (err == NC_EFILE) ? NC_EREAD : err;
-                    DEBUG_ASSIGN_ERROR(status, err)
-                }
-            }
-            else {
-                ncp->nciop->get_size += nbytes;
-            }
-        }
-    }
-
-    /* No longer need to reset the file view, as the root's fileview includes
-     * the whole file header.
-     TRACE_IO(MPI_File_set_view)(fh, 0, MPI_BYTE, MPI_BYTE, "native",
-                                 MPI_INFO_NULL);
-     */
-
-    if (rw_flag == READ_REQ && nbytes > 0) {
-        /* xbuf contains the data read from file.
-         * Check if it needs to be type-converted + byte-swapped
-         */
-        int position;
-        MPI_Offset insize=bnelems*el_size;
-        if (insize != (int)insize && status == NC_NOERR)
-            DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
-
-        if (need_convert) {
-            /* xbuf cannot be buf, but cbuf can */
-            if (buftype_is_contig && imaptype == MPI_DATATYPE_NULL)
-                cbuf = buf; /* vars call and buftype is contiguous */
-            else
-                cbuf = NCI_Malloc((size_t)insize);
-
-            /* type conversion + byte-swap from xbuf to cbuf */
-            DATATYPE_GET_CONVERT(ncp->format, varp->type, xbuf, cbuf, bnelems,
-                                 ptype, err)
-
-            /* retain the first error status */
-            if (status == NC_NOERR) status = err;
-            NCI_Free(xbuf);
-        } else {
-            if (need_swap) /* perform array in-place byte-swap on xbuf */
-                ncmpii_in_swapn(xbuf, bnelems, ncmpix_len_nctype(varp->type));
-            cbuf = xbuf;
-        }
-        /* done with xbuf */
-
-        /* varm && noncontig: cbuf -> lbuf -> buf
-           vars && noncontig: cbuf == lbuf -> buf
-           varm && contig:    cbuf -> lbuf == buf
-           vars && contig:    cbuf == lbuf == buf
-        */
-        if (imaptype != MPI_DATATYPE_NULL && !buftype_is_contig)
-            /* a true varm and buftype is not contiguous: we need a separate
-             * buffer, lbuf, to unpack cbuf to lbuf using imaptype, and later
-             * unpack lbuf to buf using buftype.
-             * In this case, cbuf cannot be buf and lbuf cannot be buf.
-             */
-            lbuf = NCI_Malloc((size_t)insize);
-        else if (imaptype == MPI_DATATYPE_NULL) /* not varm */
-            lbuf = cbuf;
-        else /* varm and buftype is contiguous */
-            lbuf = buf;
-
-        if (imaptype != MPI_DATATYPE_NULL) {
-            /* unpack cbuf to lbuf based on imaptype */
-            position = 0;
-            MPI_Unpack(cbuf, (int)insize, &position, lbuf, 1, imaptype,
-                       MPI_COMM_SELF);
-            MPI_Type_free(&imaptype);
-        }
-        /* done with cbuf */
-        if (cbuf != lbuf) NCI_Free(cbuf);
-
-        if (!buftype_is_contig) {
-            /* unpack lbuf to buf based on buftype */
-            position = 0;
-            MPI_Unpack(lbuf, (int)insize, &position, buf, (int)bufcount,
-                       buftype, MPI_COMM_SELF);
-        }
-        /* done with lbuf */
-        if (lbuf != buf) NCI_Free(lbuf);
-    }
-    else if (rw_flag == WRITE_REQ) {
-        if (xbuf != NULL && xbuf != buf) NCI_Free(xbuf);
-
-        if (need_swap_back_buf) /* byte-swap back to buf's original contents */
-            ncmpii_in_swapn(buf, bnelems, ncmpix_len_nctype(varp->type));
-
-        if (IS_RECVAR(varp)) {
-            /* update header's number of records in memory */
-            MPI_Offset new_numrecs = ncp->numrecs;
-
-            /* calculate the max record ID written by this request */
-            if (status == NC_NOERR) { /* do this only if no error */
-                if (stride == NULL)
-                    new_numrecs = start[0] + count[0];
-                else
-                    new_numrecs = start[0] + (count[0] - 1) * stride[0] + 1;
-
-                /* note new_numrecs can be smaller than ncp->numrecs */
-            }
-
-            if (io_method == INDEP_IO) {
-                /* For independent put, we delay the sync for numrecs until
-                 * the next collective call, such as end_indep(), sync(),
-                 * enddef(), or close(). This is because if we update numrecs
-                 * to file now, race condition can happen. Note numrecs in
-                 * memory may be inconsistent and obsolete till then.
-                 */
-                if (ncp->numrecs < new_numrecs) {
-                    ncp->numrecs = new_numrecs;
-                    set_NC_ndirty(ncp);
-                }
-            }
-            else { /* COLL_IO: sync numrecs in memory and file */
-                /* In ncmpii_sync_numrecs(), new_numrecs is checked against
-                 * ncp->numrecs.
-                 */
-                err = ncmpii_sync_numrecs(ncp, new_numrecs);
-                if (status == NC_NOERR) status = err;
-            }
-        }
-
-        if (NC_doFsync(ncp)) { /* NC_SHARE is set */
-            TRACE_IO(MPI_File_sync)(fh);
-            if (io_method == COLL_IO)
-                TRACE_COMM(MPI_Barrier)(ncp->nciop->comm);
-        }
-    }
-
-    return ((warning != NC_NOERR) ? warning : status);
-}
-
-include(`foreach.m4')dnl
-include(`utils.m4')dnl
-dnl
-define(`APINAME',`ifelse(`$3',`',`ncmpi_$1_var$2$4',`ncmpi_$1_var$2_$3$4')')dnl
-dnl
-dnl GETPUT_API(get/put, kind, itype, coll/indep)
-dnl
-define(`GETPUT_API',dnl
-`dnl
-/*----< APINAME($1,$2,$3,$4)() >---------------------------------------------*/
-int
-APINAME($1,$2,$3,$4)(int ncid, int varid, ArgKind($2) BufArgs($1,$3))
-{
-    int         err, status;
-    NC         *ncp;
-    NC_var     *varp=NULL;
-    ifelse(`$2', `',  `MPI_Offset *start, *count;',
-           `$2', `1', `MPI_Offset *count;')
-
-    status = ncmpii_sanity_check(ncid, varid, ArgStartCountStride($2),
-                                 ifelse(`$3', `', `bufcount', `0'),
-                                 ifelse(`$3', `', `buftype',  `ITYPE2MPI($3)'),
-                                 API_KIND($2), ifelse(`$3', `', `1', `0'),
-                                 1, ReadWrite($1),
-                                 CollIndep($4), &ncp, &varp);
-    if (status != NC_NOERR) {
-        if (CollIndep($4) == INDEP_IO ||
-            status == NC_EBADID ||
-            status == NC_EPERM ||
-            status == NC_EINDEFINE ||
-            status == NC_EINDEP ||
-            status == NC_ENOTINDEP)
-            return status;  /* fatal error, cannot continue */
-
-        /* for collective API, participate the collective I/O with zero-length
-         * request for this process */
-        err = ncmpii_getput_zero_req(ncp, ReadWrite($1));
-        assert(err == NC_NOERR);
-
-        /* return the error code from sanity check */
-        return status;
-    }
-
-    ifelse(`$2', `',  `GET_FULL_DIMENSIONS(start, count)',
-           `$2', `1', `GET_ONE_COUNT(count)')
-
-    /* APINAME($1,$2,$3,$4) is a special case of APINAME($1,m,$3,$4) */
-    status = ncmpii_getput_varm(ncp, varp, start, count, ArgStrideMap($2),
-                                (void*)buf,
-                                ifelse(`$3', `', `bufcount, buftype',
-                                                 `-1, ITYPE2MPI($3)'),
-                                ReadWrite($1), CollIndep($4));
-    ifelse(`$2', `', `NCI_Free(start);', `$2', `1', `NCI_Free(count);')
-    return status;
-}
-')dnl
-dnl
-/*---- PnetCDF flexible APIs ------------------------------------------------*/
-foreach(`kind', (, 1, a, s, m),
-        `foreach(`putget', (put, get),
-                 `foreach(`collindep', (, _all),
-                          `GETPUT_API(putget,kind,,collindep)'
-)')')
-
-/*---- PnetCDF high-level APIs ----------------------------------------------*/
-foreach(`kind', (, 1, a, s, m),
-        `foreach(`putget', (put, get),
-                 `foreach(`collindep', (, _all),
-                          `foreach(`itype', (ITYPE_LIST),
-                                   `GETPUT_API(putget,kind,itype,collindep)'
-)')')')
diff --git a/src/lib/hash_func.c b/src/lib/hash_func.c
deleted file mode 100644
index cc73682..0000000
--- a/src/lib/hash_func.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- *  Copyright (C) 2016, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: hash_func.c 2589 2016-10-30 17:42:43Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <string.h> /* strlen() */
-
-#include "nc.h"
-
-/* borrow Jenkins hash function:
- * https://en.wikipedia.org/wiki/Jenkins_hash_function
- */
-int ncmpii_jenkins_one_at_a_time_hash(const char *str_name)
-{
-    unsigned int i, hash=0;
-    for (i=0; i<strlen(str_name); ++i) {
-        hash += (unsigned int)str_name[i];
-        hash += (hash << 10);
-        hash ^= (hash >> 6);
-    }
-    hash += (hash << 3);
-    hash ^= (hash >> 11);
-    hash += (hash << 15);
-
-#if 0
-    ret = (int)hash; /* the return value will be used as an array index */
-    return ((ret < 0) ? -ret : ret); /* make the value positive */
-#endif
-    /* this is to avoid expensive % operation, i.e. % HASH_TABLE_SIZE
-    return (int)((hash ^ (hash>>10) ^ (hash>>20)) & (HASH_TABLE_SIZE-1));
-    */
-    return (int)(hash & (HASH_TABLE_SIZE-1));
-    /* return value will be used as an array index */
-}
-
-/* try different hash functions described in
- * http://www.burtleburtle.net/bob/hash/doobs.html
- */
-int ncmpii_additive_hash(const char *str_name)
-{
-    size_t i, len = strlen(str_name);
-    int hash = (int)len;
-    for (i=0; i<len; ++i)
-        hash += str_name[i]; /* additive hash */
-
-    return (hash % 251); /* 251 is the largest prime <= 255 */
-}
-
-int ncmpii_rotating_hash(const char *str_name)
-{
-    size_t i, len = strlen(str_name);
-    unsigned int hash = (unsigned int)len;
-    for (i=0; i<len; ++i)
-        hash = (hash<<4)^(hash>>28)^(unsigned int)str_name[i];
-
-    /* below is a clever way to replace (hash % prime) */
-    return (int)((hash ^ (hash>>10) ^ (hash>>20)) & (HASH_TABLE_SIZE-1));
-}
-
-int ncmpii_Bernstein_hash(const char *str_name)
-{
-    size_t i, len = strlen(str_name);
-    unsigned int hash = (unsigned int)len;
-    for (i=0; i<len; ++i)
-        /* hash = 65*hash+str_name[i]; */
-        hash = hash+(hash<<6)+(unsigned int)str_name[i];
-
-    return (int)((hash ^ (hash>>10) ^ (hash>>20)) & (HASH_TABLE_SIZE-1));
-}
-
-int ncmpii_Pearson_hash(const char *str_name)
-{
-#if HASH_TABLE_SIZE == 256
-    unsigned char T[256] = {
-        251, 175, 119, 215, 81, 14, 79, 191, 103, 49, 181, 143, 186, 157,  0,
-        232, 31, 32, 55, 60, 152, 58, 17, 237, 174, 70, 160, 144, 220, 90, 57,
-        223, 59,  3, 18, 140, 111, 166, 203, 196, 134, 243, 124, 95, 222, 179,
-        197, 65, 180, 48, 36, 15, 107, 46, 233, 130, 165, 30, 123, 161, 209, 23,
-        97, 16, 40, 91, 219, 61, 100, 10, 210, 109, 250, 127, 22, 138, 29, 108,
-        244, 67, 207,  9, 178, 204, 74, 98, 126, 249, 167, 116, 34, 77, 193,
-        200, 121,  5, 20, 113, 71, 35, 128, 13, 182, 94, 25, 226, 227, 199, 75,
-        27, 41, 245, 230, 224, 43, 225, 177, 26, 155, 150, 212, 142, 218, 115,
-        241, 73, 88, 105, 39, 114, 62, 255, 192, 201, 145, 214, 168, 158, 221,
-        148, 154, 122, 12, 84, 82, 163, 44, 139, 228, 236, 205, 242, 217, 11,
-        187, 146, 159, 64, 86, 239, 195, 42, 106, 198, 118, 112, 184, 172, 87,
-        2, 173, 117, 176, 229, 247, 253, 137, 185, 99, 164, 102, 147, 45, 66,
-        231, 52, 141, 211, 194, 206, 246, 238, 56, 110, 78, 248, 63, 240, 189,
-        93, 92, 51, 53, 183, 19, 171, 72, 50, 33, 104, 101, 69, 8, 252, 83, 120,
-        76, 135, 85, 54, 202, 125, 188, 213, 96, 235, 136, 208, 162, 129, 190,
-        132, 156, 38, 47, 1, 7, 254, 24, 4, 216, 131, 89, 21, 28, 133, 37, 153,
-        149, 80, 170, 68, 6, 169, 234, 151
-    };
-    size_t i, len=strlen(str_name);
-    unsigned char hash = (unsigned char)len;
-    for (i=len; i>0; ) hash = T[hash ^ str_name[--i]];
-    return (int)hash;
-#else
-    unsigned int i, hash=strlen(str_name);
-    for (i=0; i<strlen(str_name); ++i)
-        hash ^= str_name[i];
-
-    return (int)((hash ^ (hash>>10) ^ (hash>>20)) & (HASH_TABLE_SIZE-1));
-#endif
-}
-
diff --git a/src/lib/header.c b/src/lib/header.c
deleted file mode 100644
index 1dfc568..0000000
--- a/src/lib/header.c
+++ /dev/null
@@ -1,2660 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: header.c 2657 2016-11-27 22:11:00Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <assert.h>
-#include <string.h>  /* memcpy(), memcmp() */
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "macro.h"
-
-#ifdef SIZEOF_INT
-# if SIZEOF_INT == 4
-#  define lld(x) (x)
-# elif  SIZEOF_INT == 8
-#  define lld(x) (long long)(x)
-# endif
-#endif
-
-/* Prototypes for functions used only in this file */
-static MPI_Offset hdr_len_NC_name(const NC_string *ncstrp, int sizeof_t);
-static MPI_Offset hdr_len_NC_dim(const NC_dim *dimp, int sizeof_t);
-static MPI_Offset hdr_len_NC_dimarray(const NC_dimarray *ncap, int sizeof_t);
-static MPI_Offset hdr_len_NC_attr(const NC_attr *attrp, int sizeof_t);
-static MPI_Offset hdr_len_NC_attrarray(const NC_attrarray *ncap, int sizeof_t);
-static MPI_Offset hdr_len_NC_var(const NC_var *varp, int sizeof_off_t, int sizeof_t);
-static MPI_Offset hdr_len_NC_vararray(const NC_vararray *ncap, int sizeof_t, int sizeof_off_t);
-static int hdr_put_NC_name(bufferinfo *pbp, const NC_string *ncstrp);
-static int hdr_put_NC_attrV(bufferinfo *pbp, const NC_attr *attrp);
-static int hdr_put_NC_dim(bufferinfo *pbp, const NC_dim *dimp);
-static int hdr_put_NC_attr(bufferinfo *pbp, const NC_attr *attrp);
-static int hdr_put_NC_var(bufferinfo *pbp, const NC_var *varp);
-static int hdr_put_NC_dimarray(bufferinfo *pbp, const NC_dimarray *ncap);
-static int hdr_put_NC_attrarray(bufferinfo *pbp, const NC_attrarray *ncap);
-static int hdr_put_NC_vararray(bufferinfo *pbp, const NC_vararray *ncap);
-static int hdr_fetch(bufferinfo *gbp);
-static int hdr_check_buffer(bufferinfo *gbp, MPI_Offset nextread);
-static int hdr_get_NCtype(bufferinfo *gbp, NCtype *typep);
-static int hdr_get_NC_name(bufferinfo *gbp, NC_string **ncstrpp);
-static int hdr_get_NC_dim(bufferinfo *gbp, NC_dim **dimpp);
-static int hdr_get_NC_dimarray(bufferinfo *gbp, NC_dimarray *ncap);
-static int hdr_get_nc_type(bufferinfo *gbp, nc_type *typep);
-static int hdr_get_NC_attrV(bufferinfo *gbp, NC_attr *attrp);
-static int hdr_get_NC_attr(bufferinfo *gbp, NC_attr **attrpp);
-static int hdr_get_NC_attrarray(bufferinfo *gbp, NC_attrarray *ncap);
-static int hdr_get_NC_var(bufferinfo *gbp, NC_var **varpp);
-static int hdr_get_NC_vararray(bufferinfo *gbp, NC_vararray *ncap);
-
-/*
- * "magic number" at beginning of file: 0x43444601 (big endian)
- */
-static const char ncmagic1[] = {'C', 'D', 'F', 0x01};
-static const char ncmagic2[] = {'C', 'D', 'F', 0x02};
-static const char ncmagic5[] = {'C', 'D', 'F', 0x05};
-
-/*
- * Recompute the shapes of all variables
- * Sets ncp->begin_var to start of first variable.
- * Sets ncp->begin_rec to start of first record variable.
- * Returns -1 on error. The only possible error is an reference
- * to a non existent dimension, which would occur for a corrupt
- * netcdf file.
- */
-int
-ncmpii_NC_computeshapes(NC *ncp)
-{
-    NC_var **vpp = (NC_var **)ncp->vars.value;
-    NC_var *const *const end = &vpp[ncp->vars.ndefined];
-    NC_var *first_var = NULL;       /* first "non-record" var */
-    NC_var *first_rec = NULL;       /* first "record" var */
-    int status;
-
-    ncp->begin_var = (MPI_Offset) ncp->xsz;
-    ncp->begin_rec = (MPI_Offset) ncp->xsz;
-    ncp->recsize = 0;
-
-    if (ncp->vars.ndefined == 0) return NC_NOERR;
-
-    for ( /*NADA*/; vpp < end; vpp++) {
-        /* (*vpp)->len is recomputed from dimensions in ncmpii_NC_var_shape64() */
-        status = ncmpii_NC_var_shape64(*vpp, &ncp->dims);
-
-        if (status != NC_NOERR) return status ;
-
-        if (IS_RECVAR(*vpp)) {
-            if (first_rec == NULL)
-                first_rec = *vpp;
-            ncp->recsize += (*vpp)->len;
-        }
-        else {
-            if (first_var == NULL)
-            first_var = *vpp;
-            /*
-             * Overwritten each time thru.
-             * Usually overwritten in first_rec != NULL clause.
-             */
-            ncp->begin_rec = (*vpp)->begin + (MPI_Offset)(*vpp)->len;
-        }
-    }
-
-    if (first_rec != NULL) {
-        if (ncp->begin_rec > first_rec->begin)
-            DEBUG_RETURN_ERROR(NC_ENOTNC) /* not a netCDF file or corrupted */
-
-        ncp->begin_rec = first_rec->begin;
-        /*
-         * for special case of exactly one record variable, pack value
-         */
-        if (ncp->recsize == first_rec->len)
-            ncp->recsize = *first_rec->dsizes * first_rec->xsz;
-    }
-
-    if (first_var != NULL)
-        ncp->begin_var = first_var->begin;
-    else
-        ncp->begin_var = ncp->begin_rec;
-
-    if (ncp->begin_var <= 0 ||
-        ncp->xsz > ncp->begin_var ||
-        ncp->begin_rec <= 0 ||
-        ncp->begin_var > ncp->begin_rec)
-        DEBUG_RETURN_ERROR(NC_ENOTNC) /* not a netCDF file or corrupted */
-
-    return NC_NOERR;
-}
-
-/*
- * To compute how much space will the xdr'd header take
- */
-
-#define X_SIZEOF_NC_TYPE X_SIZEOF_INT
-#define X_SIZEOF_NCTYPE X_SIZEOF_INT
-
-/*----< hdr_len_NC_name() >--------------------------------------------------*/
-inline static MPI_Offset
-hdr_len_NC_name(const NC_string *ncstrp,
-                int              sizeof_t)     /* NON_NEG */
-{
-    /* netCDF file format:
-     * name       = nelems  namestring
-     * nelems     = NON_NEG
-     * namestring = ID1 [IDN ...] padding
-     * ID1        = alphanumeric | '_'
-     * IDN        = alphanumeric | special1 | special2
-     * padding    = <0, 1, 2, or 3 bytes to next 4-byte boundary>
-     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
-     *              <non-negative INT64>  // CDF-5
-     */
-    MPI_Offset sz = sizeof_t; /* nelems */
-
-    assert(ncstrp != NULL);
-
-    if (ncstrp->nchars != 0)  /* namestring */
-        sz += _RNDUP(ncstrp->nchars, X_ALIGN);
-
-    return sz;
-}
-
-/*----< hdr_len_NC_dim() >---------------------------------------------------*/
-inline static MPI_Offset
-hdr_len_NC_dim(const NC_dim *dimp,
-               int           sizeof_t)     /* NON_NEG */
-{
-    /* netCDF file format:
-     *  ...
-     * dim        = name  dim_length
-     * dim_length = NON_NEG
-     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
-     *              <non-negative INT64>  // CDF-5
-     */
-    MPI_Offset sz;
-
-    assert(dimp != NULL);
-
-    sz = hdr_len_NC_name(dimp->name, sizeof_t); /* name */
-    sz += sizeof_t;                             /* dim_length */
-
-    return sz;
-}
-
-/*----< hdr_len_NC_dimarray() >----------------------------------------------*/
-inline static MPI_Offset
-hdr_len_NC_dimarray(const NC_dimarray *ncap,
-                    int                sizeof_t)     /* NON_NEG */
-{
-    /* netCDF file format:
-     *  ...
-     * dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
-     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *                ZERO  ZERO64  // for CDF-5
-     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_DIMENSION = \x00 \x00 \x00 \x0A         // tag for list of dimensions
-     * nelems       = NON_NEG       // number of elements in following sequence
-     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
-     *                <non-negative INT64>        // CDF-5
-     */
-    int i;
-    MPI_Offset xlen;
-
-    xlen = X_SIZEOF_NCTYPE;           /* NC_DIMENSION */
-    xlen += sizeof_t;                 /* nelems */
-
-    if (ncap == NULL) /* ABSENT: no dimension is defined */
-        return xlen;
-
-    /* [dim ...] */
-    for (i=0; i<ncap->ndefined; i++)
-        xlen += hdr_len_NC_dim(ncap->value[i], sizeof_t);
-
-    return xlen;
-}
-
-/*----< hdr_len_NC_attr() >--------------------------------------------------*/
-inline static MPI_Offset
-hdr_len_NC_attr(const NC_attr *attrp,
-                int            sizeof_t)     /* NON_NEG */
-{
-    /* netCDF file format:
-     *  ...
-     * attr    = name  nc_type  nelems  [values ...]
-     * nc_type = NC_BYTE | NC_CHAR | NC_SHORT | ...
-     * nelems  = NON_NEG       // number of elements in following sequence
-     * values  = bytes | chars | shorts | ints | floats | doubles
-     * bytes   = [BYTE ...]  padding
-     * chars   = [CHAR ...]  padding
-     * shorts  = [SHORT ...]  padding
-     * ints    = [INT ...]
-     * floats  = [FLOAT ...]
-     * doubles = [DOUBLE ...]
-     * padding = <0, 1, 2, or 3 bytes to next 4-byte boundary>
-     * NON_NEG = <non-negative INT> |  // CDF-1 and CDF-2
-     *           <non-negative INT64>  // CDF-5
-     */
-    MPI_Offset sz;
-
-    assert(attrp != NULL);
-
-    sz  = hdr_len_NC_name(attrp->name, sizeof_t); /* name */
-    sz += X_SIZEOF_NC_TYPE;                       /* nc_type */
-    sz += sizeof_t;                               /* nelems */
-    sz += attrp->xsz;                             /* [values ...] */
-
-    return sz;
-}
-
-/*----< hdr_len_NC_attrarray() >---------------------------------------------*/
-inline static MPI_Offset
-hdr_len_NC_attrarray(const NC_attrarray *ncap,
-                     int                 sizeof_t)     /* NON_NEG */
-{
-    /* netCDF file format:
-     *  ...
-     * att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
-     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *                ZERO  ZERO64  // for CDF-5
-     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_ATTRIBUTE = \x00 \x00 \x00 \x0C         // tag for list of attributes
-     * nelems       = NON_NEG       // number of elements in following sequence
-     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
-     *                <non-negative INT64>        // CDF-5
-     */
-    int i;
-    MPI_Offset xlen;
-
-    xlen = X_SIZEOF_NCTYPE;        /* NC_ATTRIBUTE */
-    xlen += sizeof_t;              /* nelems */
-
-    if (ncap == NULL) /* ABSENT: no attribute is defined */
-        return xlen;
-
-    for (i=0; i<ncap->ndefined; i++) /* [attr ...] */
-        xlen += hdr_len_NC_attr(ncap->value[i], sizeof_t);
-
-    return xlen;
-}
-
-/*----< hdr_len_NC_var() >---------------------------------------------------*/
-inline static MPI_Offset
-hdr_len_NC_var(const NC_var *varp,
-               int           sizeof_off_t, /* OFFSET */
-               int           sizeof_t)     /* NON_NEG */
-{
-    /* netCDF file format:
-     * netcdf_file = header data
-     * header      = magic numrecs dim_list gatt_list var_list
-     *  ...
-     * var         = name nelems [dimid ...] vatt_list nc_type vsize begin
-     * nelems      = NON_NEG
-     * dimid       = NON_NEG
-     * vatt_list   = att_list
-     * nc_type     = NC_BYTE | NC_CHAR | NC_SHORT | ...
-     * vsize       = NON_NEG
-     * begin       = OFFSET        // Variable start location.
-     * OFFSET      = <non-negative INT> |  // CDF-1
-     *               <non-negative INT64>  // CDF-2 and CDF-5
-     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
-     *               <non-negative INT64>  // CDF-5
-     */
-    MPI_Offset sz;
-
-    assert(varp != NULL);
-
-    /* for CDF-1, sizeof_off_t == 4 && sizeof_t == 4
-     * for CDF-2, sizeof_off_t == 8 && sizeof_t == 4
-     * for CDF-5, sizeof_off_t == 8 && sizeof_t == 8
-     */
-    sz = hdr_len_NC_name(varp->name, sizeof_t);         /* name */
-    sz += sizeof_t;                                     /* nelems */
-    sz += sizeof_t * varp->ndims;                       /* [dimid ...] */
-    sz += hdr_len_NC_attrarray(&varp->attrs, sizeof_t); /* vatt_list */
-    sz += X_SIZEOF_NC_TYPE;                             /* nc_type */
-    sz += sizeof_t;                                     /* vsize */
-    sz += sizeof_off_t;                                 /* begin */
-
-    return sz;
-}
-
-/*----< hdr_len_NC_vararray() >----------------------------------------------*/
-inline static MPI_Offset
-hdr_len_NC_vararray(const NC_vararray *ncap,
-                    int                sizeof_t,     /* NON_NEG */
-                    int                sizeof_off_t) /* OFFSET */
-{
-    /* netCDF file format:
-     * netcdf_file = header  data
-     * header      = magic  numrecs  dim_list  gatt_list  var_list
-     *  ...
-     * var_list    = ABSENT | NC_VARIABLE   nelems  [var ...]
-     * ABSENT      = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *               ZERO  ZERO64  // for CDF-5
-     * ZERO        = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64      = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_VARIABLE = \x00 \x00 \x00 \x0B         // tag for list of variables
-     * nelems      = NON_NEG       // number of elements in following sequence
-     * NON_NEG     = <non-negative INT> |        // CDF-1 and CDF-2
-     *               <non-negative INT64>        // CDF-5
-     */
-    int i;
-    MPI_Offset xlen;
-
-    xlen = X_SIZEOF_NCTYPE;           /* NC_VARIABLE */
-    xlen += sizeof_t;                 /* nelems */
-
-    if (ncap == NULL) /* ABSENT: no variable is defined */
-        return xlen;
-
-    /* for CDF-1, sizeof_off_t == 4 && sizeof_t == 4
-     * for CDF-2, sizeof_off_t == 8 && sizeof_t == 4
-     * for CDF-5, sizeof_off_t == 8 && sizeof_t == 8
-     */
-    for (i=0; i<ncap->ndefined; i++)  /* [var ...] */
-        xlen += hdr_len_NC_var(ncap->value[i], sizeof_off_t, sizeof_t);
-
-    return xlen;
-}
-
-/*----< ncmpii_hdr_len_NC() >------------------------------------------------*/
-MPI_Offset
-ncmpii_hdr_len_NC(const NC *ncp)
-{
-    /* netCDF file format:
-     * netcdf_file = header  data
-     * header      = magic  numrecs  dim_list  gatt_list  var_list
-     *  ...
-     * numrecs     = NON_NEG | STREAMING   // length of record dimension
-     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
-     *               <non-negative INT64>  // CDF-5
-     */
-
-    int sizeof_t, sizeof_off_t;
-    MPI_Offset xlen;
-
-    assert(ncp != NULL);
-
-    if (ncp->format == 5) {        /* CDF-5 */
-        sizeof_t     = X_SIZEOF_INT64; /* 8-byte integer for all integers */
-        sizeof_off_t = X_SIZEOF_INT64; /* 8-byte integer for var begin */
-    }
-    else if (ncp->format == 2) { /* CDF-2 */
-        sizeof_t     = X_SIZEOF_INT; /* 4-byte integer in CDF-1 */
-        sizeof_off_t = X_SIZEOF_INT64; /* 8-byte integer for var begin */
-    }
-    else { /* CDF-1 */
-        sizeof_t     = X_SIZEOF_INT; /* 4-byte integer in CDF-1 */
-        sizeof_off_t = X_SIZEOF_INT; /* 4-byte integer in CDF-1 */
-    }
-
-    xlen  = sizeof(ncmagic1);                                          /* magic */
-    xlen += sizeof_t;                                                  /* numrecs */
-    xlen += hdr_len_NC_dimarray(&ncp->dims,   sizeof_t);               /* dim_list */
-    xlen += hdr_len_NC_attrarray(&ncp->attrs, sizeof_t);               /* gatt_list */
-    xlen += hdr_len_NC_vararray(&ncp->vars,   sizeof_t, sizeof_off_t); /* var_list */
-
-    return xlen; /* return the header size (not yet aligned) */
-}
-
-/* Begin Of put NC */
-
-/*----< hdr_put_NC_name() >--------------------------------------------------*/
-inline static int
-hdr_put_NC_name(bufferinfo      *pbp,
-                const NC_string *ncstrp)
-{
-    /* netCDF file format:
-     *  ...
-     * name       = nelems  namestring
-     * nelems     = NON_NEG
-     * namestring = ID1 [IDN ...] padding
-     * ID1        = alphanumeric | '_'
-     * IDN        = alphanumeric | special1 | special2
-     * padding    = <0, 1, 2, or 3 bytes to next 4-byte boundary>
-     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
-     *              <non-negative INT64>  // CDF-5
-     */
-    int err;
-
-    /* copy nelems */
-    if (pbp->version == 5)
-        err = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)ncstrp->nchars);
-    else {
-        if (ncstrp->nchars != (uint)ncstrp->nchars)
-            DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-        err = ncmpix_put_uint32((void**)(&pbp->pos), (uint)ncstrp->nchars);
-    }
-    if (err != NC_NOERR) return err;
-
-    /* copy namestring */
-    err = ncmpix_pad_putn_text(&pbp->pos, ncstrp->nchars, ncstrp->cp);
-
-    return err;
-}
-
-/*----< hdr_put_NC_attrV() >-------------------------------------------------*/
-/*
- * Put the values of an attribute
- */
-inline static int
-hdr_put_NC_attrV(bufferinfo    *pbp,
-                 const NC_attr *attrp)
-{
-    /* netCDF file format:
-     *  ...
-     * attr    = name  nc_type  nelems  [values ...]
-     *  ...
-     * values  = bytes | chars | shorts | ints | floats | doubles
-     * bytes   = [BYTE ...]  padding
-     * chars   = [CHAR ...]  padding
-     * shorts  = [SHORT ...]  padding
-     * ints    = [INT ...]
-     * floats  = [FLOAT ...]
-     * doubles = [DOUBLE ...]
-     * padding = <0, 1, 2, or 3 bytes to next 4-byte boundary>
-     */
-    MPI_Offset padding, sz;
-
-    /* ncmpix_len_nctype() returns the element size (unaligned) of attrp->type
-       attrp->xsz is the aligned total size of attribute values
-     */
-    sz = ncmpix_len_nctype(attrp->type);
-    sz *= attrp->nelems;
-    padding = attrp->xsz - sz;
-
-    if (sz != (size_t) sz) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-    memcpy(pbp->pos, attrp->xvalue, (size_t)sz);
-    pbp->pos = (void *)((char *)pbp->pos + sz);
-
-    if (padding > 0) {
-        /* zero-padding is per buffer, not per element */
-        memset(pbp->pos, 0, (size_t)padding);
-        pbp->pos = (void *)((char *)pbp->pos + padding);
-    }
-
-    return NC_NOERR;
-}
-
-/*----< hdr_put_NC_dim() >---------------------------------------------------*/
-inline static int
-hdr_put_NC_dim(bufferinfo   *pbp,
-               const NC_dim *dimp)
-{
-    /* netCDF file format:
-     *  ...
-     * dim        = name  dim_length
-     * dim_length = NON_NEG
-     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
-     *              <non-negative INT64>  // CDF-5
-     */
-    int err;
-
-    /* copy name */
-    err = hdr_put_NC_name(pbp, dimp->name);
-    if (err != NC_NOERR) return err;
-
-    /* copy dim_length */
-    if (pbp->version == 5)
-        err = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)dimp->size);
-    else {
-        /* TODO: Isn't checking dimension size already done in def_dim()? */
-        if (dimp->size != (uint)dimp->size) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-        err = ncmpix_put_uint32((void**)(&pbp->pos), (uint)dimp->size);
-    }
-
-    return err;
-}
-
-/*----< hdr_put_NC_dimarray() >----------------------------------------------*/
-inline static int
-hdr_put_NC_dimarray(bufferinfo        *pbp,
-                    const NC_dimarray *ncap)
-{
-    /* netCDF file format:
-     *  ...
-     * dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
-     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *                ZERO  ZERO64  // for CDF-5
-     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_DIMENSION = \x00 \x00 \x00 \x0A         // tag for list of dimensions
-     * nelems       = NON_NEG       // number of elements in following sequence
-     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
-     *                <non-negative INT64>        // CDF-5
-     */
-    int i, status;
-
-    assert(pbp != NULL);
-
-    if (ncap == NULL || ncap->ndefined == 0) { /* ABSENT */
-        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_UNSPECIFIED);
-        if (status != NC_NOERR) return status;
-
-        /* put a ZERO or ZERO64 depending on which CDF format */
-        if (pbp->version == 5)
-            status = ncmpix_put_uint64((void**)(&pbp->pos), 0);
-        else
-            status = ncmpix_put_uint32((void**)(&pbp->pos), 0);
-        if (status != NC_NOERR) return status;
-    }
-    else {
-        /* copy NC_DIMENSION */
-        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_DIMENSION);
-        if (status != NC_NOERR) return status;
-
-        /* copy nelems */
-        if (pbp->version == 5)
-            status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)ncap->ndefined);
-        else
-            status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)ncap->ndefined);
-        if (status != NC_NOERR) return status;
-
-        /* copy [dim ...] */
-        for (i=0; i<ncap->ndefined; i++) {
-            status = hdr_put_NC_dim(pbp, ncap->value[i]);
-            if (status != NC_NOERR) return status;
-        }
-    }
-
-    return NC_NOERR;
-}
-
-/*----< hdr_put_NC_attr() >--------------------------------------------------*/
-inline static int
-hdr_put_NC_attr(bufferinfo    *pbp,
-                const NC_attr *attrp)
-{
-    /* netCDF file format:
-     *  ...
-     * attr    = name  nc_type  nelems  [values ...]
-     * nc_type = NC_BYTE | NC_CHAR | NC_SHORT | ...
-     * nelems  = NON_NEG       // number of elements in following sequence
-     * NON_NEG = <non-negative INT> |  // CDF-1 and CDF-2
-     *           <non-negative INT64>  // CDF-5
-     */
-    int status;
-
-    /* copy name */
-    status = hdr_put_NC_name(pbp, attrp->name);
-    if (status != NC_NOERR) return status;
-
-    /* copy nc_type */
-    status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)attrp->type);
-    if (status != NC_NOERR) return status;
-
-    /* copy nelems */
-    if (pbp->version == 5)
-        status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)attrp->nelems);
-    else {
-        if (attrp->nelems != (uint)attrp->nelems) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-        status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)attrp->nelems);
-    }
-    if (status != NC_NOERR) return status;
-
-    /* copy [values ...] */
-    status = hdr_put_NC_attrV(pbp, attrp);
-    if (status != NC_NOERR) return status;
-
-    return NC_NOERR;
-}
-
-/*----< hdr_put_NC_attrarray() >---------------------------------------------*/
-inline static int
-hdr_put_NC_attrarray(bufferinfo         *pbp,
-                     const NC_attrarray *ncap)
-{
-    /* netCDF file format:
-     *  ...
-     * att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
-     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *                ZERO  ZERO64  // for CDF-5
-     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_ATTRIBUTE = \x00 \x00 \x00 \x0C         // tag for list of attributes
-     * nelems       = NON_NEG       // number of elements in following sequence
-     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
-     *                <non-negative INT64>        // CDF-5
-     */
-    int i, status;
-
-    assert(pbp != NULL);
-
-    if (ncap == NULL || ncap->ndefined == 0) { /* ABSENT */
-        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_UNSPECIFIED);
-        if (status != NC_NOERR) return status;
-
-        /* put a ZERO or ZERO64 depending on which CDF format */
-        if (pbp->version == 5)
-            status = ncmpix_put_uint64((void**)(&pbp->pos), 0);
-        else
-            status = ncmpix_put_uint32((void**)(&pbp->pos), 0);
-        if (status != NC_NOERR) return status;
-    }
-    else {
-        /* copy NC_ATTRIBUTE */
-        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_ATTRIBUTE);
-        if (status != NC_NOERR) return status;
-
-        /* copy nelems */
-        if (pbp->version == 5)
-            status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)ncap->ndefined);
-        else
-            status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)ncap->ndefined);
-        if (status != NC_NOERR) return status;
-
-        /* copy [attr ...] */
-        for (i=0; i<ncap->ndefined; i++) {
-            status = hdr_put_NC_attr(pbp, ncap->value[i]);
-            if (status != NC_NOERR) return status;
-        }
-    }
-
-    return NC_NOERR;
-}
-
-/*----< hdr_put_NC_var() >---------------------------------------------------*/
-static int
-hdr_put_NC_var(bufferinfo   *pbp,
-               const NC_var *varp)
-{
-    /* netCDF file format:
-     * netcdf_file = header data
-     * header      = magic numrecs dim_list gatt_list var_list
-     *  ...
-     * var         = name nelems [dimid ...] vatt_list nc_type vsize begin
-     * nelems      = NON_NEG
-     * dimid       = NON_NEG
-     * vatt_list   = att_list
-     * nc_type     = NC_BYTE | NC_CHAR | NC_SHORT | ...
-     * vsize       = NON_NEG
-     * begin       = OFFSET        // Variable start location.
-     * OFFSET      = <non-negative INT> |  // CDF-1
-     *               <non-negative INT64>  // CDF-2 and CDF-5
-     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
-     *               <non-negative INT64>  // CDF-5
-     */
-    int i, status;
-
-    /* copy name */
-    status = hdr_put_NC_name(pbp, varp->name);
-    if (status != NC_NOERR) return status;
-
-    /* copy nelems */
-    if (pbp->version == 5)
-        status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)varp->ndims);
-    else
-        status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->ndims);
-    if (status != NC_NOERR) return status;
-
-    /* copy [dimid ...] */
-    for (i=0; i<varp->ndims; i++) {
-        if (pbp->version == 5)
-            status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)varp->dimids[i]);
-        else
-            status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->dimids[i]);
-        if (status != NC_NOERR) return status;
-    }
-
-    /* copy vatt_list */
-    status = hdr_put_NC_attrarray(pbp, &varp->attrs);
-    if (status != NC_NOERR) return status;
-
-    /* copy nc_type */
-    status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->type);
-    if (status != NC_NOERR) return status;
-
-    /* copy vsize */
-    /* in CDF-1 and CDF-2, a variable's size in the header is a 32-bit integer
-     * in CDF-5, it is a 64-bit integer
-     */
-    if (pbp->version == 5)
-        status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)varp->len);
-    else {
-        /* Special case, when there is no record variable, the last fixed-size
-         * variable can be larger than 2 GiB if its file starting offset is
-         * less than 2 GiB. This checking has already been done in the call
-         * to ncmpii_NC_check_vlens() in ncmpii_NC_enddef().
-         *
-         * if (varp->len != (int)varp->len) DEBUG_RETURN_ERROR(NC_EVARSIZE)
-         */
-        status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->len);
-    }
-    if (status != NC_NOERR) return status;
-
-    /* copy begin */
-    /* in CDF-1 header, a variable's starting file offset is a 32-bit integer
-     * in CDF-2 and CDF-5, it is a 64-bit integer
-     */
-    if (pbp->version == 1) {
-        if (varp->begin != (uint)varp->begin) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-        status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)varp->begin);
-    }
-    else
-        status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)varp->begin);
-    if (status != NC_NOERR) return status;
-
-    return NC_NOERR;
-}
-
-/*----< hdr_put_NC_vararray() >----------------------------------------------*/
-static int
-hdr_put_NC_vararray(bufferinfo        *pbp,
-                    const NC_vararray *ncap)
-{
-    /* netCDF file format:
-     * netcdf_file = header  data
-     * header      = magic  numrecs  dim_list  gatt_list  var_list
-     *  ...
-     * var_list    = ABSENT | NC_VARIABLE   nelems  [var ...]
-     * ABSENT      = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *               ZERO  ZERO64  // for CDF-5
-     * ZERO        = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64      = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_VARIABLE = \x00 \x00 \x00 \x0B         // tag for list of variables
-     * nelems      = NON_NEG       // number of elements in following sequence
-     * NON_NEG     = <non-negative INT> |        // CDF-1 and CDF-2
-     *               <non-negative INT64>        // CDF-5
-     */
-    int i, status;
-
-    assert(pbp != NULL);
-
-    if (ncap == NULL || ncap->ndefined == 0) { /* ABSENT */
-        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_UNSPECIFIED);
-        if (status != NC_NOERR) return status;
-
-        /* put a ZERO or ZERO64 depending on which CDF format */
-        if (pbp->version == 5)
-            status = ncmpix_put_uint64((void**)(&pbp->pos), 0);
-        else
-            status = ncmpix_put_uint32((void**)(&pbp->pos), 0);
-        if (status != NC_NOERR) return status;
-    }
-    else {
-        /* copy NC_VARIABLE */
-        status = ncmpix_put_uint32((void**)(&pbp->pos), NC_VARIABLE);
-        if (status != NC_NOERR) return status;
-
-        /* copy nelems */
-        if (pbp->version == 5)
-            status = ncmpix_put_uint64((void**)(&pbp->pos), (uint64)ncap->ndefined);
-        else
-            status = ncmpix_put_uint32((void**)(&pbp->pos), (uint)ncap->ndefined);
-        if (status != NC_NOERR) return status;
-
-        /* copy [var ...] */
-        for (i=0; i<ncap->ndefined; i++) {
-            status = hdr_put_NC_var(pbp, ncap->value[i]);
-            if (status != NC_NOERR) return status;
-        }
-    }
-
-    return NC_NOERR;
-}
-
-/*----< ncmpii_hdr_put_NC() >------------------------------------------------*/
-/* fill the file header into the I/O buffer, buf
- * this function is collective */
-int
-ncmpii_hdr_put_NC(NC   *ncp,
-                  void *buf) {
-    int status;
-    bufferinfo putbuf;
-    MPI_Offset nrecs=0;
-
-    putbuf.nciop     = NULL;
-    putbuf.offset    = 0;
-    putbuf.pos       = buf;
-    putbuf.base      = buf;
-    putbuf.size      = ncp->xsz;
-    putbuf.safe_mode = ncp->safe_mode;
-
-    /* netCDF file format:
-     * netcdf_file  = header  data
-     * header       = magic  numrecs  dim_list  gatt_list  var_list
-     */
-
-    /* copy "magic", 4 characters */
-    if (ncp->format == 5) {
-        putbuf.version = 5;
-        status = ncmpix_putn_text(&putbuf.pos, sizeof(ncmagic5), ncmagic5);
-    }
-    else if (ncp->format == 2) {
-        putbuf.version = 2;
-        status = ncmpix_putn_text(&putbuf.pos, sizeof(ncmagic2), ncmagic2);
-    }
-    else {
-        putbuf.version = 1;
-        status = ncmpix_putn_text(&putbuf.pos, sizeof(ncmagic1), ncmagic1);
-    }
-    if (status != NC_NOERR) return status;
-
-    /* copy numrecs, number of records */
-    nrecs = ncp->numrecs;
-    if (ncp->format < 5) {
-        if (nrecs != (uint)nrecs) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-        status = ncmpix_put_uint32((void**)(&putbuf.pos), (uint)nrecs);
-    }
-    else {
-        status = ncmpix_put_uint64((void**)(&putbuf.pos), (uint64)nrecs);
-    }
-    if (status != NC_NOERR) return status;
-
-    /* copy dim_list */
-    status = hdr_put_NC_dimarray(&putbuf, &ncp->dims);
-    if (status != NC_NOERR) return status;
-
-    /* copy gatt_list */
-    status = hdr_put_NC_attrarray(&putbuf, &ncp->attrs);
-    if (status != NC_NOERR) return status;
-
-    /* copy var_list */
-    status = hdr_put_NC_vararray(&putbuf, &ncp->vars);
-    if (status != NC_NOERR) return status;
-
-    return NC_NOERR;
-}
-
-/* End Of put NC */
-
-/* Begin Of get NC */
-
-/*
- * Fetch the next header chunk.  the chunk is 'gbp->size' bytes big
- * Takes care to not overwrite leftover (unused) data in the buffer before
- * fetching a new chunk: the current approach is to re-read the extra data.
- *
- * NOTE: An alternate approach (which we do not do) would be to save the old
- *       data, read the next chunk and then copy the old data into the new
- *       chunk.  This alternate approach might help if it is important for reads
- *       to be aligned.
- */
-static int
-hdr_fetch(bufferinfo *gbp) {
-    int rank, err=NC_NOERR, mpireturn;
-    MPI_Offset slack;        /* any leftover data in the buffer */
-    MPI_Aint pos_addr, base_addr;
-
-    assert(gbp->base != NULL);
-
-#ifdef HAVE_MPI_GET_ADDRESS
-    MPI_Get_address(gbp->pos,  &pos_addr);
-    MPI_Get_address(gbp->base, &base_addr);
-#else
-    MPI_Address(gbp->pos,  &pos_addr);
-    MPI_Address(gbp->base, &base_addr);
-#endif
-    slack = gbp->size - (pos_addr - base_addr);
-    /* . if gbp->pos and gbp->base are the same, there is no leftover buffer
-     *   data to worry about.
-     * In the other extreme, where gbp->size == (gbp->pos - gbp->base), then
-     * all data in the buffer has been consumed */
-    if (slack == gbp->size) slack = 0;
-
-    if (gbp->size != (int)gbp->size) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-
-    memset(gbp->base, 0, (size_t)gbp->size);
-    gbp->pos = gbp->base;
-    gbp->index = 0;
-
-    MPI_Comm_rank(gbp->nciop->comm, &rank);
-    if (rank == 0) {
-        MPI_Status mpistatus;
-        /* fileview is already entire file visible and MPI_File_read_at does
-           not change the file pointer */
-        TRACE_IO(MPI_File_read_at)(gbp->nciop->collective_fh,
-                                   (gbp->offset)-slack, gbp->base,
-                                   (int)gbp->size, MPI_BYTE, &mpistatus);
-        if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_read_at");
-            if (err == NC_EFILE) DEBUG_ASSIGN_ERROR(err, NC_EREAD)
-        }
-        else {
-            int get_size; /* actual read amount can be smaller */
-            MPI_Get_count(&mpistatus, MPI_BYTE, &get_size);
-            gbp->nciop->get_size += get_size;
-        }
-    }
-    /* we might have had to backtrack */
-    gbp->offset += (gbp->size - slack);
-
-    if (gbp->safe_mode == 1) {
-        TRACE_COMM(MPI_Bcast)(&err, 1, MPI_INT, 0, gbp->nciop->comm);
-        if (err != NC_NOERR) return err;
-    }
-
-    /* broadcast root's read (full or partial header) to other processes */
-    TRACE_COMM(MPI_Bcast)(gbp->base, (int)gbp->size, MPI_BYTE, 0, gbp->nciop->comm);
-
-    return err;
-}
-
-/*----< hdr_check_buffer() >--------------------------------------------------*/
-/* Ensure that 'nextread' bytes are available.  */
-inline static int
-hdr_check_buffer(bufferinfo *gbp,
-                 MPI_Offset  nextread)
-{
-    MPI_Aint pos_addr, base_addr;
-
-#ifdef HAVE_MPI_GET_ADDRESS
-    MPI_Get_address(gbp->pos,  &pos_addr);
-    MPI_Get_address(gbp->base, &base_addr);
-#else
-    MPI_Address(gbp->pos,  &pos_addr);
-    MPI_Address(gbp->base, &base_addr);
-#endif
-    if (pos_addr + nextread <= base_addr + gbp->size)
-        return NC_NOERR;
-
-    return hdr_fetch(gbp);
-}
-
-/*----< hdr_get_NCtype() >----------------------------------------------------*/
-inline static int
-hdr_get_NCtype(bufferinfo *gbp,
-               NCtype     *typep)
-{
-    /* NCtype is 4-byte integer */
-    uint type = 0;
-    int status = hdr_check_buffer(gbp, 4);
-    if (status != NC_NOERR) return status;
-
-    /* get an external unsigned 4-byte integer from the file */
-    status = ncmpix_get_uint32((const void**)(&gbp->pos), &type);
-    gbp->index += X_SIZEOF_INT;
-    if (status != NC_NOERR) return status;
-
-    *typep = (NCtype) type;
-    return NC_NOERR;
-}
-
-/*----< hdr_get_uint32() >---------------------------------------------------*/
-inline static int
-hdr_get_uint32(bufferinfo *gbp,
-               uint        *xp)
-{
-    /* in CDF-1 format, all integers are 32-bit
-     * in CDF-2 format, only variable begin (starting file offset) is 64-bit
-     * in CDF-5 format, both variable's begin and size are 64-bit
-     */
-    int status = hdr_check_buffer(gbp, 4); /* size of int32 == 4 */
-    if (status != NC_NOERR) return status;
-    gbp->index += 4;
-
-    status = ncmpix_get_uint32((const void **)(&gbp->pos), xp);
-    return status;
-}
-
-/*----< hdr_get_uint64() >---------------------------------------------------*/
-inline static int
-hdr_get_uint64(bufferinfo *gbp,
-               uint64     *xp)
-{
-    /* in CDF-1 format, all integers are 32-bit
-     * in CDF-2 format, only variable begin (starting file offset) is 64-bit
-     * in CDF-5 format, both variable's begin and size are 64-bit
-     */
-    int status = hdr_check_buffer(gbp, 8); /* size of int64 == 8 */
-    if (status != NC_NOERR) return status;
-    gbp->index += 8;
-
-    status = ncmpix_get_uint64((const void **)(&gbp->pos), xp);
-    return status;
-}
-
-/*----< hdr_get_nc_type() >---------------------------------------------------*/
-inline static int
-hdr_get_nc_type(bufferinfo *gbp,
-                nc_type    *typep)
-{
-    /* nc_type is 4-byte integer, X_SIZEOF_INT */
-    int status;
-    uint type;
-
-    status = hdr_check_buffer(gbp, X_SIZEOF_INT);
-    if (status != NC_NOERR) return status;
-
-    status = ncmpix_get_uint32((const void**)(&gbp->pos), &type);
-    gbp->index += X_SIZEOF_INT;
-    if (status != NC_NOERR) return status;
-
-    if (type != NC_BYTE    &&
-        type != NC_CHAR    &&
-        type != NC_UBYTE   &&
-        type != NC_SHORT   &&
-        type != NC_USHORT  &&
-        type != NC_INT     &&
-        type != NC_UINT    &&
-        type != NC_FLOAT   &&
-        type != NC_DOUBLE  &&
-        type != NC_INT64   &&
-        type != NC_UINT64
-       )
-        DEBUG_RETURN_ERROR(NC_EBADTYPE)
-
-    *typep = (nc_type) type;
-    return NC_NOERR;
-}
-
-/*----< ncmpix_len_nctype() >------------------------------------------------*/
-/* return the length of external data type */
-int
-ncmpix_len_nctype(nc_type type) {
-    switch(type) {
-        case NC_BYTE:
-        case NC_CHAR:
-        case NC_UBYTE:  return X_SIZEOF_CHAR;
-        case NC_SHORT:  return X_SIZEOF_SHORT;
-        case NC_USHORT: return X_SIZEOF_USHORT;
-        case NC_INT:    return X_SIZEOF_INT;
-        case NC_UINT:   return X_SIZEOF_UINT;
-        case NC_FLOAT:  return X_SIZEOF_FLOAT;
-        case NC_DOUBLE: return X_SIZEOF_DOUBLE;
-        case NC_INT64:  return X_SIZEOF_INT64;
-        case NC_UINT64: return X_SIZEOF_UINT64;
-        default: fprintf(stderr,"ncmpix_len_nctype bad type %d\n",type);
-                 assert(0);
-    }
-    return 0;
-}
-
-/*----< hdr_get_NC_name() >---------------------------------------------------*/
-static int
-hdr_get_NC_name(bufferinfo  *gbp,
-                NC_string  **ncstrpp)
-{
-    /* netCDF file format:
-     *  ...
-     * name       = nelems  namestring
-     * nelems     = NON_NEG
-     * namestring = ID1 [IDN ...] padding
-     * ID1        = alphanumeric | '_'
-     * IDN        = alphanumeric | special1 | special2
-     * padding    = <0, 1, 2, or 3 bytes to next 4-byte boundary>
-     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
-     *              <non-negative INT64>  // CDF-5
-     */
-    int err;
-    char *cpos;
-    NC_string *ncstrp;
-    MPI_Aint pos_addr, base_addr;
-    MPI_Offset  nchars, nbytes, padding, bufremain, strcount;
-
-    /* get nelems */
-    if (gbp->version == 5) {
-        uint64 tmp;
-        err = hdr_get_uint64(gbp, &tmp);
-        nchars = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp;
-        err = hdr_get_uint32(gbp, &tmp);
-        nchars = (MPI_Offset)tmp;
-    }
-    if (err != NC_NOERR) return err;
-
-    /* Allocate a NC_string structure large enough to hold nchars characters */
-    ncstrp = ncmpii_new_NC_string((size_t)nchars, NULL);
-    if (ncstrp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    nbytes = nchars * X_SIZEOF_CHAR;
-    padding = _RNDUP(X_SIZEOF_CHAR * ncstrp->nchars, X_ALIGN)
-            - X_SIZEOF_CHAR * ncstrp->nchars;
-#ifdef HAVE_MPI_GET_ADDRESS
-    MPI_Get_address(gbp->pos,  &pos_addr);
-    MPI_Get_address(gbp->base, &base_addr);
-#else
-    MPI_Address(gbp->pos,  &pos_addr);
-    MPI_Address(gbp->base, &base_addr);
-#endif
-    bufremain = gbp->size - (pos_addr - base_addr);
-    cpos = ncstrp->cp;
-
-    /* get namestring with padding */
-    while (nbytes > 0) {
-        if (bufremain > 0) {
-            strcount = MIN(bufremain, nbytes);
-            if (strcount != (size_t)strcount)
-                DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-            memcpy(cpos, gbp->pos, (size_t)strcount);
-            nbytes -= strcount;
-            gbp->pos = (void *)((char *)gbp->pos + strcount);
-            gbp->index += strcount;
-            cpos += strcount;
-            bufremain -= strcount;
-        } else {
-            err = hdr_fetch(gbp);
-            if (err != NC_NOERR) {
-                ncmpii_free_NC_string(ncstrp);
-                return err;
-            }
-            bufremain = gbp->size;
-        }
-    }
-
-    /* handle the padding */
-    if (padding > 0) {
-        /* CDF specification: Header padding uses null (\x00) bytes. */
-        char pad[X_ALIGN-1];
-        memset(pad, 0, X_ALIGN-1);
-        if (memcmp(gbp->pos, pad, (size_t)padding) != 0) {
-#ifdef PNETCDF_DEBUG
-            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header non-zero padding found\n",__FILE__,__func__,__LINE__);
-#endif
-            ncmpii_free_NC_string(ncstrp);
-            DEBUG_RETURN_ERROR(NC_EINVAL)
-        }
-        gbp->pos = (void *)((char *)gbp->pos + padding);
-        gbp->index += padding;
-    }
-
-    *ncstrpp = ncstrp;
-
-    return NC_NOERR;
-}
-
-/*----< hdr_get_NC_dim() >----------------------------------------------------*/
-inline static int
-hdr_get_NC_dim(bufferinfo  *gbp,
-               NC_dim     **dimpp)
-{
-    /* netCDF file format:
-     *  ...
-     * dim        = name  dim_length
-     * dim_length = NON_NEG
-     * NON_NEG    = <non-negative INT> |  // CDF-1 and CDF-2
-     *              <non-negative INT64>  // CDF-5
-     */
-    int status;
-    NC_string *ncstrp;
-    NC_dim *dimp;
-
-    /* get name */
-    status = hdr_get_NC_name(gbp, &ncstrp);
-    if (status != NC_NOERR) return status;
-
-    dimp = ncmpii_new_x_NC_dim(ncstrp);
-    if (dimp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    /* get dim_length */
-    if (gbp->version == 5) {
-        uint64 tmp;
-        status = hdr_get_uint64(gbp, &tmp);
-        dimp->size = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp;
-        status = hdr_get_uint32(gbp, &tmp);
-        dimp->size = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_dim(dimp); /* frees name */
-        return status;
-    }
-
-    *dimpp = dimp;
-    return NC_NOERR;
-}
-
-/*----< hdr_get_NC_dimarray() >-----------------------------------------------*/
-static int
-hdr_get_NC_dimarray(bufferinfo  *gbp,
-                    NC_dimarray *ncap)
-{
-    /* netCDF file format:
-     *  ...
-     * dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
-     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *                ZERO  ZERO64  // for CDF-5
-     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_DIMENSION = \x00 \x00 \x00 \x0A         // tag for list of dimensions
-     * nelems       = NON_NEG       // number of elements in following sequence
-     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
-     *                <non-negative INT64>        // CDF-5
-     */
-    int i, status;
-    NCtype type = NC_UNSPECIFIED;
-    MPI_Offset ndefined;
-
-    assert(gbp != NULL && gbp->pos != NULL);
-    assert(ncap != NULL);
-    assert(ncap->value == NULL);
-
-    /* get NCtype (NC_DIMENSION) */
-    status = hdr_get_NCtype(gbp, &type);
-    if (status != NC_NOERR) return status;
-
-    /* get nelems */
-    if (gbp->version == 5) {
-        uint64 tmp;
-        status = hdr_get_uint64(gbp, &tmp);
-        ndefined = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp;
-        status = hdr_get_uint32(gbp, &tmp);
-        ndefined = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) return status;
-    if (ndefined != (int)ndefined) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-    ncap->ndefined = (int)ndefined;
-    /* TODO: we should allow ndefined > 2^32, considering change the data type
-     * of ndefined from int to MPI_Offset */
-
-    ncap->unlimited_id = -1;
-
-    if (ndefined == 0) {
-        if (type != NC_DIMENSION && type != NC_UNSPECIFIED) {
-#ifdef PNETCDF_DEBUG
-            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header format for NC_DIMENSION\n",__FILE__,__func__,__LINE__);
-#endif
-            DEBUG_RETURN_ERROR(NC_EINVAL)
-        }
-    } else {
-        if (type != NC_DIMENSION) {
-#ifdef PNETCDF_DEBUG
-            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header format for NC_DIMENSION\n",__FILE__,__func__,__LINE__);
-#endif
-            DEBUG_RETURN_ERROR(NC_EINVAL)
-        }
-
-        ncap->value = (NC_dim **) NCI_Malloc((size_t)ndefined * sizeof(NC_dim*));
-        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-        ncap->nalloc = (int)ndefined;
-        /* TODO: we should allow nalloc > 2^32, considering change the data
-         * type of nalloc from int to MPI_Offset */
-
-        for (i=0; i<ndefined; i++) {
-            status = hdr_get_NC_dim(gbp, ncap->value + i);
-            if (status != NC_NOERR) { /* error: fail to get the next dim */
-                ncap->ndefined = i;
-                ncmpii_free_NC_dimarray(ncap);
-                return status;
-            }
-            if (ncap->value[i]->size == NC_UNLIMITED)
-                ncap->unlimited_id = i; /* ID of unlimited dimension */
-        }
-    }
-
-    return NC_NOERR;
-}
-
-/*----< hdr_get_NC_attrV() >--------------------------------------------------*/
-static int
-hdr_get_NC_attrV(bufferinfo *gbp,
-                 NC_attr    *attrp)
-{
-    /* netCDF file format:
-     *  ...
-     * attr    = name  nc_type  nelems  [values ...]
-     *  ...
-     * values  = bytes | chars | shorts | ints | floats | doubles
-     * bytes   = [BYTE ...]  padding
-     * chars   = [CHAR ...]  padding
-     * shorts  = [SHORT ...]  padding
-     * ints    = [INT ...]
-     * floats  = [FLOAT ...]
-     * doubles = [DOUBLE ...]
-     * padding = <0, 1, 2, or 3 bytes to next 4-byte boundary>
-     */
-    void *value = attrp->xvalue;
-    MPI_Offset nbytes, padding, bufremain, attcount;
-    MPI_Aint pos_addr, base_addr;
-
-    nbytes = attrp->nelems * ncmpix_len_nctype(attrp->type);
-    padding = attrp->xsz - nbytes;
-#ifdef HAVE_MPI_GET_ADDRESS
-    MPI_Get_address(gbp->pos,  &pos_addr);
-    MPI_Get_address(gbp->base, &base_addr);
-#else
-    MPI_Address(gbp->pos,  &pos_addr);
-    MPI_Address(gbp->base, &base_addr);
-#endif
-    bufremain = gbp->size - (pos_addr - base_addr);
-
-    /* get values */
-    while (nbytes > 0) {
-        if (bufremain > 0) {
-            attcount = MIN(bufremain, nbytes);
-            if (attcount != (size_t)attcount)
-                DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-            memcpy(value, gbp->pos, (size_t)attcount);
-            nbytes -= attcount;
-            gbp->pos = (void *)((char *)gbp->pos + attcount);
-            gbp->index += attcount;
-            value = (void *)((char *)value + attcount);
-            bufremain -= attcount;
-        } else {
-            int err;
-            err = hdr_fetch(gbp);
-            if (err != NC_NOERR) return err;
-            bufremain = gbp->size;
-        }
-    }
-
-    /* handle the padding */
-    if (padding > 0) {
-        /* CDF specification: Header padding uses null (\x00) bytes. */
-        char pad[X_ALIGN-1];
-        memset(pad, 0, X_ALIGN-1);
-        if (memcmp(gbp->pos, pad, (size_t)padding) != 0) {
-#ifdef PNETCDF_DEBUG
-            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header non-zero padding found\n",__FILE__,__func__,__LINE__);
-#endif
-            DEBUG_RETURN_ERROR(NC_EINVAL)
-        }
-        gbp->pos = (void *)((char *)gbp->pos + padding);
-        gbp->index += padding;
-    }
-
-    return NC_NOERR;
-}
-
-/*----< hdr_get_NC_attr() >---------------------------------------------------*/
-static int
-hdr_get_NC_attr(bufferinfo  *gbp,
-                NC_attr    **attrpp)
-{
-    /* netCDF file format:
-     *  ...
-     * attr    = name  nc_type  nelems  [values ...]
-     * nc_type = NC_BYTE | NC_CHAR | NC_SHORT | ...
-     * nelems  = NON_NEG       // number of elements in following sequence
-     * NON_NEG = <non-negative INT> |  // CDF-1 and CDF-2
-     *           <non-negative INT64>  // CDF-5
-     */
-    int status;
-    NC_string *strp;
-    nc_type type;
-    MPI_Offset nelems;
-    NC_attr *attrp;
-
-    /* get name */
-    status = hdr_get_NC_name(gbp, &strp);
-    if (status != NC_NOERR) return status;
-
-    /* get nc_type */
-    status = hdr_get_nc_type(gbp, &type);
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_string(strp);
-        return status;
-    }
-
-    /* get nelems */
-    if (gbp->version == 5) {
-        uint64 tmp;
-        status = hdr_get_uint64(gbp, &tmp);
-        nelems = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp;
-        status = hdr_get_uint32(gbp, &tmp);
-        nelems = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_string(strp);
-        return status;
-    }
-
-    /* allocate space for attribute object */
-    attrp = ncmpii_new_x_NC_attr(strp, type, nelems);
-    if (attrp == NULL) {
-        ncmpii_free_NC_string(strp);
-        return status;
-    }
-
-    /* get [values ...] */
-    status = hdr_get_NC_attrV(gbp, attrp);
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_attr(attrp); /* frees strp */
-        return status;
-    }
-
-    *attrpp = attrp;
-    return NC_NOERR;
-}
-
-/*----< hdr_get_NC_attrarray() >----------------------------------------------*/
-static int
-hdr_get_NC_attrarray(bufferinfo   *gbp,
-                     NC_attrarray *ncap)
-{
-    /* netCDF file format:
-     *  ...
-     * att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
-     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *                ZERO  ZERO64  // for CDF-5
-     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_ATTRIBUTE = \x00 \x00 \x00 \x0C         // tag for list of attributes
-     * nelems       = NON_NEG       // number of elements in following sequence
-     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
-     *                <non-negative INT64>        // CDF-5
-     */
-    int i, status;
-    NCtype type = NC_UNSPECIFIED;
-    MPI_Offset ndefined;
-
-    assert(gbp != NULL && gbp->pos != NULL);
-    assert(ncap != NULL);
-    assert(ncap->value == NULL);
-
-    /* get NCtype (NC_ATTRIBUTE) */
-    status = hdr_get_NCtype(gbp, &type);
-    if (status != NC_NOERR) return status;
-
-    /* get nelems */
-    if (gbp->version == 5) {
-        uint64 tmp;
-        status = hdr_get_uint64(gbp, &tmp);
-        ndefined = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp;
-        status = hdr_get_uint32(gbp, &tmp);
-        ndefined = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) return status;
-    if (ndefined != (int)ndefined) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-    ncap->ndefined = (int)ndefined;
-
-    if (ndefined == 0) {
-        if (type != NC_ATTRIBUTE && type != NC_UNSPECIFIED) {
-#ifdef PNETCDF_DEBUG
-            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header format for NC_ATTRIBUTE\n",__FILE__,__func__,__LINE__);
-#endif
-            DEBUG_RETURN_ERROR(NC_EINVAL)
-        }
-    } else {
-        if (type != NC_ATTRIBUTE) {
-#ifdef PNETCDF_DEBUG
-            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header format for NC_ATTRIBUTE\n",__FILE__,__func__,__LINE__);
-#endif
-            DEBUG_RETURN_ERROR(NC_EINVAL)
-        }
-
-        ncap->value = (NC_attr **)NCI_Malloc((size_t)ndefined * sizeof(NC_attr*));
-        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-        ncap->nalloc = (int)ndefined;
-
-        /* get [attr ...] */
-        for (i=0; i<ndefined; i++) {
-            status = hdr_get_NC_attr(gbp, ncap->value + i);
-            if (status != NC_NOERR) { /* Error: fail to get the next att */
-                ncap->ndefined = i;
-                ncmpii_free_NC_attrarray(ncap);
-                return status;
-            }
-        }
-    }
-
-    return NC_NOERR;
-}
-
-/*----< hdr_get_NC_var() >---------------------------------------------------*/
-static int
-hdr_get_NC_var(bufferinfo  *gbp,
-               NC_var     **varpp)
-{
-    /* netCDF file format:
-     * netcdf_file = header data
-     * header      = magic numrecs dim_list gatt_list var_list
-     *  ...
-     * var         = name nelems [dimid ...] vatt_list nc_type vsize begin
-     * nelems      = NON_NEG
-     * dimid       = NON_NEG
-     * vatt_list   = att_list
-     * nc_type     = NC_BYTE | NC_CHAR | NC_SHORT | ...
-     * vsize       = NON_NEG
-     * begin       = OFFSET        // Variable start location.
-     * OFFSET      = <non-negative INT> |  // CDF-1
-     *               <non-negative INT64>  // CDF-2 and CDF-5
-     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
-     *               <non-negative INT64>  // CDF-5
-     */
-    int status;
-    NC_string *strp;
-    MPI_Offset ndims=0, dim;
-    MPI_Offset tmp_dimids=0;
-    NC_var *varp;
-
-    /* get name */
-    status = hdr_get_NC_name(gbp, &strp);
-    if (status != NC_NOERR) return status;
-
-    /* nelems */
-    if (gbp->version == 5) {
-        uint64 tmp;
-        status = hdr_get_uint64(gbp, &tmp);
-        ndims = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp;
-        status = hdr_get_uint32(gbp, &tmp);
-        ndims = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) {
-         ncmpii_free_NC_string(strp);
-         return status;
-    }
-    if (ndims != (int)ndims) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-
-    /* allocate space for var object */
-    varp = ncmpii_new_x_NC_var(strp, (int)ndims);
-    if (varp == NULL) {
-        ncmpii_free_NC_string(strp);
-        DEBUG_RETURN_ERROR(NC_ENOMEM)
-    }
-
-    /* get [dimid ...] */
-    for (dim=0; dim<ndims; dim++) {
-        status = hdr_check_buffer(gbp, (gbp->version == 5 ? 8 : 4));
-        if (status != NC_NOERR) {
-            ncmpii_free_NC_var(varp);
-            return status;
-        }
-        if (gbp->version == 5) {
-            uint64 tmp;
-            status = hdr_get_uint64(gbp, &tmp);
-            tmp_dimids = (MPI_Offset)tmp;
-        }
-        else {
-            uint tmp;
-            status = hdr_get_uint32(gbp, &tmp);
-            tmp_dimids = (MPI_Offset)tmp;
-        }
-        /* TODO: consider change the data type of dimids from int to
-         * MPI_Offset */
-        varp->dimids[dim] = (int)tmp_dimids;
-        if (status != NC_NOERR) {
-           return status;
-        }
-    }
-
-    /* get vatt_list */
-    status = hdr_get_NC_attrarray(gbp, &varp->attrs);
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_var(varp);
-        return status;
-    }
-
-    /* get nc_type */
-    status = hdr_get_nc_type(gbp, &varp->type);
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_var(varp);
-        return status;
-    }
-
-    /* get vsize */
-    if (gbp->version == 5) {
-        uint64 tmp;
-        status = hdr_get_uint64(gbp, &tmp);
-        varp->len = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp;
-        status = hdr_get_uint32(gbp, &tmp);
-        varp->len = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_var(varp);
-        return status;
-    }
-    /* As described in CDF-2 format specification, vsize is redundant.
-       Its value may be computed from the product of dimension lengths.
-       In CDF-2, vsize is a 4-byte integer. So, if we define a variable of
-       less than 2^32 elements but size > 2^32-4 bytes, then vsize in CDF-2
-       will overflow. Recompute varp->len can ignore an overflowed value in
-       vsize stored in the file and hence bypass the limitation of CDF-2 on
-       variable size of 2^32-4 bytes.
-
-       Later on, back to ncmpii_hdr_get_NC(), ncmpii_NC_computeshapes() is
-       called which recomputes varp->len using the dimension values and hence
-       overwrites the value read from file above.
-
-       In summary, PnetCDF now ignores the value of vsize stored in the file
-       header.
-     */
-
-    /* next element is 'begin' */
-    status = hdr_check_buffer(gbp, (gbp->version == 1 ? 4 : 8));
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_var(varp);
-        return status;
-    }
-
-    /* get begin */
-    if (gbp->version == 1) {
-        uint tmp=0;
-        status = ncmpix_get_uint32((const void **)(&gbp->pos), &tmp);
-        varp->begin = (MPI_Offset)tmp;
-    }
-    else {
-        uint64 tmp=0;
-        status = ncmpix_get_uint64((const void **)(&gbp->pos), &tmp);
-        varp->begin = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_var(varp);
-        return status;
-    }
-
-    *varpp = varp;
-    return NC_NOERR;
-}
-
-/*----< hdr_get_NC_vararray() >----------------------------------------------*/
-static int
-hdr_get_NC_vararray(bufferinfo  *gbp,
-                    NC_vararray *ncap)
-{
-    /* netCDF file format:
-     * netcdf_file = header  data
-     * header      = magic  numrecs  dim_list  gatt_list  var_list
-     *  ...
-     * var_list    = ABSENT | NC_VARIABLE   nelems  [var ...]
-     * ABSENT      = ZERO  ZERO |  // list is not present for CDF-1 and 2
-     *               ZERO  ZERO64  // for CDF-5
-     * ZERO        = \x00 \x00 \x00 \x00                      // 32-bit zero
-     * ZERO64      = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
-     * NC_VARIABLE = \x00 \x00 \x00 \x0B         // tag for list of variables
-     * nelems      = NON_NEG       // number of elements in following sequence
-     * NON_NEG     = <non-negative INT> |        // CDF-1 and CDF-2
-     *               <non-negative INT64>        // CDF-5
-     */
-    int i, status;
-    NCtype type = NC_UNSPECIFIED;
-    MPI_Offset ndefined;
-
-    assert(gbp != NULL && gbp->pos != NULL);
-    assert(ncap != NULL);
-    assert(ncap->value == NULL);
-
-    /* get NCtype (NC_VARIABLE) from gbp buffer */
-    status = hdr_get_NCtype(gbp, &type);
-    if (status != NC_NOERR) return status;
-
-    /* get nelems (number of variables) from gbp buffer */
-    if (gbp->version == 5) {
-        uint64 tmp;
-        status = hdr_get_uint64(gbp, &tmp);
-        ndefined = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp;
-        status = hdr_get_uint32(gbp, &tmp);
-        ndefined = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) return status;
-    if (ndefined != (int)ndefined) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-    ncap->ndefined = (int)ndefined;
-    /* TODO: we should allow ndefined > 2^32, considering change the data type
-     * of ndefined from int to MPI_Offset */
-
-    if (ndefined == 0) { /* no variable defined */
-        if (type != NC_VARIABLE && type != NC_UNSPECIFIED) {
-#ifdef PNETCDF_DEBUG
-            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header format for NC_VARIABLE\n",__FILE__,__func__,__LINE__);
-#endif
-            DEBUG_RETURN_ERROR(NC_EINVAL)
-        }
-    } else {
-        if (type != NC_VARIABLE) {
-#ifdef PNETCDF_DEBUG
-            fprintf(stderr,"Error in file %s func %s line %d: NetCDF header format for NC_VARIABLE\n",__FILE__,__func__,__LINE__);
-#endif
-            DEBUG_RETURN_ERROR(NC_EINVAL)
-        }
-
-        ncap->value = (NC_var **) NCI_Malloc((size_t)ndefined * sizeof(NC_var*));
-        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-        ncap->nalloc = (int)ndefined;
-
-        /* get [var ...] */
-        for (i=0; i<ndefined; i++) {
-            status = hdr_get_NC_var(gbp, ncap->value + i);
-            if (status != NC_NOERR) { /* Error: fail to get the next var */
-                ncap->ndefined = i;
-                ncmpii_free_NC_vararray(ncap);
-                return status;
-            }
-        }
-    }
-
-    return NC_NOERR;
-}
-
-/*----< ncmpii_hdr_get_NC() >------------------------------------------------*/
-/*  CDF format specification
- *      netcdf_file  = header  data
- *      header       = magic  numrecs  dim_list  gatt_list  var_list
- *      magic        = 'C'  'D'  'F'  VERSION
- *      VERSION      = \x01 |                      // classic format
- *                     \x02 |                      // 64-bit offset format
- *                     \x05                        // 64-bit data format
- *      numrecs      = NON_NEG | STREAMING         // length of record dimension
- *      dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
- *      gatt_list    = att_list                    // global attributes
- *      att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
- *      var_list     = ABSENT | NC_VARIABLE   nelems  [var ...]
- */
-int
-ncmpii_hdr_get_NC(NC *ncp)
-{
-    int status;
-    bufferinfo getbuf;
-    char magic[sizeof(ncmagic1)];
-    MPI_Offset nrecs = 0;
-    MPI_Aint pos_addr, base_addr;
-
-    assert(ncp != NULL);
-
-    /* Initialize the get buffer that stores the header read from the file */
-    getbuf.nciop     = ncp->nciop;
-    getbuf.offset    = 0;   /* read from start of the file */
-    getbuf.safe_mode = ncp->safe_mode;
-
-    /* CDF-5's minimum header size is 4 bytes more than CDF-1 and CDF-2's */
-    getbuf.size = _RNDUP( MAX(MIN_NC_XSZ+4, ncp->chunk), X_ALIGN );
-    if (getbuf.size > NC_DEFAULT_CHUNKSIZE)
-        getbuf.size = NC_DEFAULT_CHUNKSIZE;
-
-    if (getbuf.size != (size_t)getbuf.size) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-    getbuf.pos = getbuf.base = (void *)NCI_Malloc((size_t)getbuf.size);
-    getbuf.index = 0;
-
-    /* Fetch the next header chunk. The chunk is 'gbp->size' bytes big */
-    status = hdr_fetch(&getbuf);
-    if (status != NC_NOERR) return status;
-
-    /* processing the header from getbuf, the get buffer */
-
-    /* First get the file format information, magic */
-    memset(magic, 0, sizeof(magic));
-    status = ncmpix_getn_text((const void **)(&getbuf.pos), sizeof(magic),
-                              magic);
-    if (status != NC_NOERR) return status;
-    getbuf.index += (MPI_Offset)sizeof(magic);
-
-    /* check if the first three bytes are 'C','D','F' */
-    if (memcmp(magic, ncmagic1, sizeof(ncmagic1)-1) != 0) {
-        /* check if is HDF5 file */
-        char signature[8], *hdf5_signature="\211HDF\r\n\032\n";
-        memcpy(signature, magic, 4);
-        ncmpix_getn_text((const void **)(&getbuf.pos), 4, signature+4);
-        if (memcmp(signature, hdf5_signature, 8) == 0) {
-            DEBUG_ASSIGN_ERROR(status, NC_ENOTNC3)
-            if (ncp->safe_mode)
-                fprintf(stderr,"Error: file %s is HDF5 format\n",ncp->nciop->path);
-        }
-        else
-            DEBUG_ASSIGN_ERROR(status, NC_ENOTNC)
-        NCI_Free(getbuf.base);
-        return status;
-    }
-
-    /* check version number in last byte of magic */
-    if (magic[sizeof(ncmagic1)-1] == 0x1) {
-        getbuf.version = 1;
-        fSet(ncp->flags, NC_32BIT);
-        ncp->format = 1;
-    } else if (magic[sizeof(ncmagic1)-1] == 0x2) {
-        getbuf.version = 2;
-        fSet(ncp->flags, NC_64BIT_OFFSET);
-        ncp->format = 2;
-#if SIZEOF_MPI_OFFSET < 8
-        /* take the easy way out: if we can't support all CDF-2
-         * files, return immediately */
-        NCI_Free(getbuf.base);
-        DEBUG_RETURN_ERROR(NC_ESMALL)
-#endif
-    } else if (magic[sizeof(ncmagic1)-1] == 0x5) {
-        getbuf.version = 5;
-        fSet(ncp->flags, NC_64BIT_DATA);
-        ncp->format = 5;
-#if SIZEOF_MPI_OFFSET < 8
-        NCI_Free(getbuf.base);
-        DEBUG_RETURN_ERROR(NC_ESMALL)
-#endif
-    } else {
-        NCI_Free(getbuf.base);
-        DEBUG_RETURN_ERROR(NC_ENOTNC) /* not a netCDF file */
-    }
-
-    /** Ensure that 'nextread' bytes (numrecs) are available. */
-    status = hdr_check_buffer(&getbuf, (getbuf.version == 5) ? 8 : 4);
-    if(status != NC_NOERR) {
-        NCI_Free(getbuf.base);
-        return status;
-    }
-
-    /* get numrecs from getbuf into ncp */
-    if (getbuf.version == 5) {
-        uint64 tmp=0;
-        status = ncmpix_get_uint64((const void **)(&getbuf.pos), &tmp);
-        nrecs = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp=0;
-        status = ncmpix_get_uint32((const void **)(&getbuf.pos), &tmp);
-        nrecs = (MPI_Offset)tmp;
-    }
-    if (status != NC_NOERR) {
-        NCI_Free(getbuf.base);
-        return status;
-    }
-
-    if (getbuf.version == 5)
-        getbuf.index += X_SIZEOF_INT64;
-    else
-        getbuf.index += X_SIZEOF_SIZE_T;
-
-    ncp->numrecs = nrecs;
-
-#ifdef HAVE_MPI_GET_ADDRESS
-    MPI_Get_address(getbuf.pos,  &pos_addr);
-    MPI_Get_address(getbuf.base, &base_addr);
-#else
-    MPI_Address(getbuf.pos,  &pos_addr);
-    MPI_Address(getbuf.base, &base_addr);
-#endif
-    assert(pos_addr < base_addr + getbuf.size);
-
-    /* get dim_list from getbuf into ncp */
-    status = hdr_get_NC_dimarray(&getbuf, &ncp->dims);
-    if (status != NC_NOERR) {
-        NCI_Free(getbuf.base);
-        return status;
-    }
-
-    /* get gatt_list from getbuf into ncp */
-    status = hdr_get_NC_attrarray(&getbuf, &ncp->attrs);
-    if (status != NC_NOERR) {
-        NCI_Free(getbuf.base);
-        return status;
-    }
-
-    /* get var_list from getbuf into ncp */
-    status = hdr_get_NC_vararray(&getbuf, &ncp->vars);
-    if (status != NC_NOERR) {
-        NCI_Free(getbuf.base);
-        return status;
-    }
-
-    /* get the un-aligned size occupied by the file header */
-    ncp->xsz = ncmpii_hdr_len_NC(ncp);
-
-    /* Recompute the shapes of all variables
-     * Sets ncp->begin_var to start of first variable.
-     * Sets ncp->begin_rec to start of first record variable.
-     */
-    status = ncmpii_NC_computeshapes(ncp);
-
-    NCI_Free(getbuf.base);
-
-    return status;
-}
-
-/* End Of get NC */
-
-#define WARN_STR "Warning (inconsistent metadata):"
-
-/*----< ncmpii_comp_dims() >--------------------------------------------------*/
-/* compare the local copy of dim_list against root's
- * If inconsistency is detected, overwrite local's with root's
- * this function is collective.
- */
-static int
-ncmpii_comp_dims(int          safe_mode,
-                 NC_dimarray *root_dim,
-                 NC_dimarray *local_dim)
-{
-    int i, err, status=NC_NOERR;
-
-    if (root_dim->ndefined != local_dim->ndefined) {
-        if (safe_mode)
-            printf("%s number of dimensions (local=%d, root=%d)\n",
-                   WARN_STR, local_dim->ndefined, root_dim->ndefined);
-        DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_DIM_NUM)
-    }
-
-    for (i=0; i<root_dim->ndefined; i++) {
-
-        if (i >= local_dim->ndefined) { /* if local list is shorter */
-            /* copy root's dim to local */
-            NC_dim *new_dim = dup_NC_dim(root_dim->value[i]);
-            err = incr_NC_dimarray(local_dim, new_dim);
-            if (err != NC_NOERR) return err; /* this is a fatal error */
-            continue;
-        }
-
-        /* check dimension name */
-        NC_string *root_name, *local_name;
-         root_name =  root_dim->value[i]->name;
-        local_name = local_dim->value[i]->name;
-
-        err = NC_NOERR;
-        if (root_name->nchars != local_name->nchars) {
-            if (safe_mode)
-                printf("%s dimension name length (local=%lld, root=%lld)\n",
-                       WARN_STR, local_name->nchars, root_name->nchars);
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_NAME)
-        }
-        else if (memcmp(root_name->cp, local_name->cp, (size_t)root_name->nchars) != 0) {
-            if (safe_mode)
-                printf("%s dimension name (local=%s, root=%s)\n",
-                       WARN_STR, local_name->cp, root_name->cp);
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_NAME)
-        }
-        else if (root_dim->value[i]->size != local_dim->value[i]->size) {
-            /* check dimension size */
-            if (safe_mode)
-                printf("%s dimension %s's size (local=%lld, root=%lld)\n",
-                       WARN_STR, root_dim->value[i]->name->cp,
-                       root_dim->value[i]->size, local_dim->value[i]->size);
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_DIM_SIZE)
-        }
-        if (status == NC_NOERR) status = err;
-
-        /* overwrite local's dim with root's */
-        if (err != NC_NOERR) {
-            ncmpii_free_NC_dim(local_dim->value[i]);
-            local_dim->value[i] = dup_NC_dim(root_dim->value[i]);
-        }
-    }
-
-    /* delete extra dimensions defined only in local copy */
-    for (; i<local_dim->ndefined; i++)
-        ncmpii_free_NC_dim(local_dim->value[i]);
-
-    local_dim->ndefined = root_dim->ndefined;
-
-#ifndef SEARCH_NAME_LINEARLY
-    if (status != NC_NOERR) {
-        /* dims are not consistent, must rebuild dim name lookup table */
-        for (i=0; i<HASH_TABLE_SIZE; i++) {
-            if (local_dim->nameT[i].num > 0)
-                NCI_Free(local_dim->nameT[i].list);
-            local_dim->nameT[i].num = 0;
-            local_dim->nameT[i].list = NULL;
-        }
-
-        /* populate dim name lookup table */
-        for (i=0; i<local_dim->ndefined; i++) {
-            /* hash the dim name into a key for name lookup */
-            int key = HASH_FUNC(local_dim->value[i]->name->cp);
-            NC_nametable *nameT = &local_dim->nameT[key];
-            if (nameT->num % NC_NAME_TABLE_CHUNK == 0)
-                nameT->list = (int*) NCI_Realloc(nameT->list,
-                              (size_t)(nameT->num+NC_NAME_TABLE_CHUNK) * sizeof(int));
-            nameT->list[nameT->num] = i;
-            nameT->num++;
-        }
-    }
-#endif
-
-    return status;
-}
-
-/*----< ncmpii_comp_attrs() >-------------------------------------------------*/
-/* compare the local copy of attr_list against root's
- * If inconsistency is detected, overwrite local's with root's
- */
-static int
-ncmpii_comp_attrs(int           safe_mode,
-                  NC_attrarray *root_attr,
-                  NC_attrarray *local_attr)
-{
-    int i, j, err, status=NC_NOERR;
-    char *msg;
-
-    /* check if the numbers of attributes are the same */
-    if (root_attr->ndefined != local_attr->ndefined) {
-        if (safe_mode)
-            printf("%s number of attributes (root=%d, local=%d)\n",
-                   WARN_STR, root_attr->ndefined, local_attr->ndefined);
-        DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_ATTR_NUM)
-    }
-
-    for (i=0; i<root_attr->ndefined; i++) {
-
-        if (i >= local_attr->ndefined) { /* if local list is shorter */
-            /* copy root's attr to local */
-            NC_attr *new_attr = dup_NC_attr(root_attr->value[i]);
-            err = incr_NC_attrarray(local_attr, new_attr);
-            if (err != NC_NOERR) return err; /* a fatal error */
-            continue;
-        }
-
-        NC_attr *v1 = root_attr->value[i];
-        NC_attr *v2 = local_attr->value[i];
-        char *name = v1->name->cp;
-
-#define ATTR_WARN(msg, attr, root, local) \
-    if (safe_mode) printf(msg, WARN_STR, attr, root, local);
-
-#define ATTR_WARN_J(msg, attr, j, root, local) \
-    if (safe_mode) printf(msg, WARN_STR, attr, j, root, local);
-
-        err = NC_NOERR;
-        if (v1->name->nchars != v2->name->nchars ||
-            memcmp(name, v2->name->cp, (size_t)v1->name->nchars) != 0) {
-            msg ="%s attribute %s (root=%s, local=%s)\n";
-            ATTR_WARN(msg, "name", name, v2->name->cp)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_NAME)
-        }
-        else if (v1->type != v2->type) {
-            msg = "%s attribute \"%s\" type (root=%d, local=%d)\n";
-            ATTR_WARN(msg, name, v1->type, v2->type)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_TYPE)
-        }
-        else if (v1->nelems != v2->nelems) {
-            msg = "%s attribute \"%s\" length (root=%lld, local=%lld)\n";
-            ATTR_WARN(msg, name, lld(v1->nelems), lld(v2->nelems))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_LEN)
-        }
-        else if (v1->xsz != v2->xsz) { /* internal check */
-            msg = "%s attribute \"%s\" size (root=%lld, local=%lld)\n";
-            ATTR_WARN(msg, name, lld(v1->xsz), lld(v2->xsz))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_SIZE)
-        }
-        /* hereinafter, we have v1->nelems == v2->nelems */
-        else if (v1->type == NC_CHAR) {
-            if (memcmp(v1->xvalue, v2->xvalue, (size_t)v1->nelems)) {
-                msg = "%s attribute \"%s\" CHAR (root=%s, local=%s)\n";
-                ATTR_WARN(msg, name, (char*)v1->xvalue, (char*)v2->xvalue);
-                DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-            }
-        }
-        else if (v1->type == NC_BYTE) {
-            schar *sba = (schar*) v1->xvalue;
-            schar *sbb = (schar*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                if (sba[j] != sbb[j]) {
-                    msg = "%s attribute \"%s\"[%d] BYTE (root=%hhdb, local=%hhdb)\n";
-                    ATTR_WARN_J(msg, name, j, sba[j], sbb[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_UBYTE) {
-            uchar *uba = (uchar*) v1->xvalue;
-            uchar *ubb = (uchar*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                if (uba[j] != ubb[j]) {
-                    msg = "%s attribute \"%s\"[%d] UBYTE (root=%hhuub, local=%hhuub)\n";
-                    ATTR_WARN_J(msg, name, j, uba[j], ubb[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_SHORT) {
-            short *ssa = (short*) v1->xvalue;
-            short *ssb = (short*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                if (ssa[j] != ssb[j]) {
-                    msg = "%s attribute \"%s\"[%d] SHORT (root=%hds, local=%hds)\n";
-                    ATTR_WARN_J(msg, name, j, ssa[j], ssb[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_USHORT) {
-            ushort *usa = (ushort*) v1->xvalue;
-            ushort *usb = (ushort*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                if (usa[j] != usb[j]) {
-                    msg = "%s attribute \"%s\"[%d] USHORT (root=%huus, local=%huus)\n";
-                    ATTR_WARN_J(msg, name, j, usa[j], usb[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_INT) {
-            int *sia = (int*) v1->xvalue;
-            int *sib = (int*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                if (sia[j] != sib[j]) {
-                    msg = "%s attribute \"%s\"[%d] INT (root=%d, local=%d)\n";
-                    ATTR_WARN_J(msg, name, j, sia[j], sib[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_UINT) {
-            uint *uia = (uint*) v1->xvalue;
-            uint *uib = (uint*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                if (uia[j] != uib[j]) {
-                    msg = "%s attribute \"%s\"[%d] UINT (root=%uu, local=%uu)\n";
-                    ATTR_WARN_J(msg, name, j, uia[j], uib[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_FLOAT) {
-            float *fa = (float*) v1->xvalue;
-            float *fb = (float*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                /* floating-point inequality here but we genuinely do
-                 * expect all processors to set bit-for-bit identical
-                 * headers
-                if (fa[j] != fb[j]) {
-                 */
-                if (memcmp(fa+j, fb+j, sizeof(float))) {
-                    msg = "%s attribute \"%s\"[%d] FLOAT (root=%f, local=%f)\n";
-                    ATTR_WARN_J(msg, name, j, fa[j], fb[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_DOUBLE) {
-            double *da = (double*) v1->xvalue;
-            double *db = (double*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                /* floating-point inequality here but we genuinely do
-                 * expect all processors to set bit-for-bit identical
-                 * headers
-                if (da[j] != db[j]) {
-                 */
-                if (memcmp(da+j, db+j, sizeof(double))) {
-                    msg = "%s attribute \"%s\"[%d] DOUBLE (root=%f, local=%f)\n";
-                    ATTR_WARN_J(msg, name, j, da[j], db[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_INT64) {
-            long long *slla = (long long*) v1->xvalue;
-            long long *sllb = (long long*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                if (slla[j] != sllb[j]) {
-                    msg = "%s attribute \"%s\"[%d] INT64 (root=%lldll, local=%lldll)\n";
-                    ATTR_WARN_J(msg, name, j, slla[j], sllb[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        else if (v1->type == NC_UINT64) {
-            unsigned long long *ulla = (unsigned long long*) v1->xvalue;
-            unsigned long long *ullb = (unsigned long long*) v2->xvalue;
-            for (j=0; j<v1->nelems; j++) {
-                if (ulla[j] != ullb[j]) {
-                    msg = "%s attribute \"%s\"[%d] UINT64 (root=%llull, local=%llull)\n";
-                    ATTR_WARN_J(msg, name, j, ulla[j], ullb[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_ATTR_VAL)
-                    break;
-                }
-            }
-        }
-        if (status == NC_NOERR) status = err;
-
-        /* overwrite local's attr with root's */
-        if (ErrIsHeaderDiff(err)) {
-            ncmpii_free_NC_attr(local_attr->value[i]);
-            local_attr->value[i] = dup_NC_attr(root_attr->value[i]);
-        }
-    }
-
-    /* delete extra attributes defined only in local copy */
-    for (; i<local_attr->ndefined; i++)
-        ncmpii_free_NC_attr(local_attr->value[i]);
-
-    local_attr->ndefined = root_attr->ndefined;
-
-    return status;
-}
-
-/*----< ncmpii_comp_vars() >--------------------------------------------------*/
-/* compare the local copy of var_list against root's
- * If inconsistency is detected, overwrite local's with root's
- */
-static int
-ncmpii_comp_vars(int          safe_mode,
-                 NC_vararray *root_var,
-                 NC_vararray *local_var)
-{
-    int i, j, err, status=NC_NOERR;
-    char *msg;
-
-    /* check if the numbers of variables are the same */
-    if (root_var->ndefined != local_var->ndefined) {
-        if (safe_mode)
-            printf("%s number of variables (root=%d, local=%d)\n",
-                   WARN_STR, root_var->ndefined, local_var->ndefined);
-        DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_VAR_NUM)
-    }
-
-    for (i=0; i<root_var->ndefined; i++) {
-
-        if (i >= local_var->ndefined) { /* if local list is shorter */
-            /* copy root's variable to local */
-            NC_var *new_var = dup_NC_var(root_var->value[i]);
-            err = incr_NC_vararray(local_var, new_var);
-            if (err != NC_NOERR) return err; /* a fatal error */
-            /* local_var->ndefined is increased by 1 in incr_NC_vararray() */
-            continue;
-        }
-
-        NC_var *v1 = root_var->value[i];
-        NC_var *v2 = local_var->value[i];
-        char *name = v1->name->cp;
-
-#define VAR_WARN(msg, var, root, local) \
-    if (safe_mode) printf(msg, WARN_STR, var, root, local);
-
-#define VAR_WARN_J(msg, var, j, root, local) \
-    if (safe_mode) printf(msg, WARN_STR, var, j, root, local);
-
-        err = NC_NOERR;
-        if (v1->name->nchars != v2->name->nchars ||
-            strncmp(v1->name->cp, v2->name->cp, (size_t)v1->name->nchars) != 0) {
-            msg = "%s variable %s (root=%s, local=%s)\n";
-            VAR_WARN(msg, "name", name, v2->name->cp)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_NAME)
-        }
-        else if (v1->ndims != v2->ndims) {
-            msg = "%s variable %s's ndims (root=%d, local=%d)\n";
-            VAR_WARN(msg, name, v1->ndims, v2->ndims)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_NDIMS)
-        }
-        else if (v1->type != v2->type) {
-            msg = "%s variable %s's type (root=%d, local=%d)\n";
-            VAR_WARN(msg, name, v1->type, v2->type)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_TYPE)
-        }
-        else if (v1->len != v2->len) {
-            msg = "%s variable %s's len (root=%lld, local=%lld)\n";
-            VAR_WARN(msg, name, v1->len, v2->len)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_LEN)
-        }
-        else if (v1->begin != v2->begin) {
-            msg = "%s variable %s's begin (root=%lld, local=%lld)\n";
-            VAR_WARN(msg, name, v1->begin, v2->begin)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_BEGIN)
-        }
-        else {
-            for (j=0; j<v1->ndims; j++) {
-                if (v1->dimids[j] != v2->dimids[j]) {
-                    msg = "%s variable %s's %dth dim ID (root=%d, local=%ld)\n";
-                    VAR_WARN_J(msg, name, j, v1->dimids[j], v2->dimids[j])
-                    DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_DIMIDS)
-                    break;
-                }
-            }
-        }
-        /* compare variable's attributes if by far no inconsistency is found */
-        if (err == NC_NOERR) {
-            err = ncmpii_comp_attrs(safe_mode, &(v1->attrs), &(v2->attrs));
-            if (err != NC_NOERR && !ErrIsHeaderDiff(err))
-                return err; /* a fatal error */
-        }
-
-        if (status == NC_NOERR) status = err;
-
-        /* if there is any inconsistency, overwrite local's var with root's */
-        if (ErrIsHeaderDiff(err)) {
-            ncmpii_free_NC_var(local_var->value[i]);
-            local_var->value[i] = dup_NC_var(root_var->value[i]);
-            /* note once a new var is created, one must call
-             * ncmpii_NC_computeshapes() to recalculate the shape */
-        }
-    }
-
-    /* delete extra variables defined only in local copy */
-    for (; i<local_var->ndefined; i++)
-        ncmpii_free_NC_var(local_var->value[i]);
-
-    local_var->ndefined = root_var->ndefined;
-
-#ifndef SEARCH_NAME_LINEARLY
-    if (status != NC_NOERR) {
-        /* vars are not consistent, must rebuild var name lookup table */
-        for (i=0; i<HASH_TABLE_SIZE; i++) {
-            if (local_var->nameT[i].num > 0)
-                NCI_Free(local_var->nameT[i].list);
-            local_var->nameT[i].num = 0;
-            local_var->nameT[i].list = NULL;
-        }
-
-        /* populate var name lookup table */
-        for (i=0; i<local_var->ndefined; i++) {
-            /* hash the var name into a key for name lookup */
-            int key = HASH_FUNC(local_var->value[i]->name->cp);
-            NC_nametable *nameT = &local_var->nameT[key];
-            if (nameT->num % NC_NAME_TABLE_CHUNK == 0)
-                nameT->list = (int*) NCI_Realloc(nameT->list,
-                              (size_t)(nameT->num+NC_NAME_TABLE_CHUNK) * sizeof(int));
-            nameT->list[nameT->num] = i;
-            nameT->num++;
-        }
-    }
-#endif
-
-    return status;
-}
-
-/*----< ncmpii_hdr_check_NC() >-----------------------------------------------*/
-/* This function is only called by NC_check_header()
- * It checks the header of local copy against root's and overwrites local's
- * header object, ncp, with root's header if any inconsistency is detected.
- * This function is called independently and should not contain any MPI
- * communication calls.
- *
- * Possible error codes returned:
- * NC_ENOTNC3, NC_ENOTNC, NC_ESMALL, and all inconsistency errors
- * NC_EMULTIDEFINE_XXX
- */
-int
-ncmpii_hdr_check_NC(bufferinfo *getbuf, /* header from root */
-                    NC         *ncp)
-{
-    int err, status=NC_NOERR;
-    char magic[sizeof(ncmagic1)]; /* root's file format signature */
-    MPI_Offset nrecs=0, chunksize=NC_DEFAULT_CHUNKSIZE;
-    MPI_Aint pos_addr, base_addr;
-    NC *root_ncp;
-
-    assert(ncp != NULL);
-    assert(getbuf != NULL);
-
-    /* check the file format signature in root's header */
-    memset(magic, 0, sizeof(magic));
-    err = ncmpix_getn_text((const void **)(&getbuf->pos), sizeof(magic), magic);
-    if (err != NC_NOERR) {
-        /* Fatal error, as root's header is significant */
-        if (ncp->safe_mode) fprintf(stderr,"Error: CDF magic number from root's header\n");
-        return err;
-    }
-    getbuf->index += (MPI_Offset)sizeof(magic);
-
-    /* check if the first 3 letters are "CDF" */
-    if (memcmp(magic, ncmagic1, sizeof(ncmagic1)-1) != 0) {
-        /* Fatal error, as root's header is significant */
-        /* check if is HDF5 file */
-        char signature[8], *hdf5_signature="\211HDF\r\n\032\n";
-        memcpy(signature, magic, 4);
-        ncmpix_getn_text((const void **)(&getbuf->pos), 4, signature+4);
-        if (memcmp(signature, hdf5_signature, 8) == 0) {
-            DEBUG_ASSIGN_ERROR(status, NC_ENOTNC3)
-            if (ncp->safe_mode)
-                fprintf(stderr,"Error: root's header indicates an HDF5 file\n");
-        }
-        else {
-            DEBUG_ASSIGN_ERROR(status, NC_ENOTNC)
-            if (ncp->safe_mode)
-                fprintf(stderr,"Error: root's header indicates not a CDF file\n");
-        }
-        return status; /* should not continue */
-    }
-
-    /* allocate a header object and fill it with root's header */
-    root_ncp = ncmpii_new_NC(&chunksize);
-
-    /* in safe_mode, consistency of magic numbers have already been checked in
-     * ncmpi_create()
-     */
-    if (magic[sizeof(ncmagic1)-1] == 0x5) {
-        fSet(root_ncp->flags, NC_64BIT_DATA);
-        root_ncp->format = 5;
-        getbuf->version = 5;
-    }
-    else if (magic[sizeof(ncmagic1)-1] == 0x2) {
-        fSet(root_ncp->flags, NC_64BIT_OFFSET);
-        root_ncp->format = 2;
-        getbuf->version = 2;
-    }
-    else if (magic[sizeof(ncmagic1)-1] != 0x1) {
-        getbuf->version = 1;
-        root_ncp->format = 1;
-        /* Fatal error, as root's header is significant */
-        if (ncp->safe_mode)
-            fprintf(stderr,"Error: root's header indicates not CDF 1/2/5 format\n");
-        DEBUG_RETURN_ERROR(NC_ENOTNC) /* should not continue */
-    }
-
-    if (! ncp->safe_mode) {
-        /* check local's version number in last byte of magic against root's */
-        int root_ver = magic[sizeof(ncmagic1)-1];
-
-        if (ncp->format != root_ver) {
-#ifdef PNETCDF_DEBUG
-            printf("%s CDF file format (local=CDF-%d, root=CDF-%d)\n",
-                   WARN_STR, ncp->format, root_ver);
-#endif
-
-            /* overwrite the local header object with root's */
-            if      (ncp->format == 5) fClr(ncp->flags, NC_64BIT_DATA);
-            else if (ncp->format == 2) fClr(ncp->flags, NC_64BIT_OFFSET);
-
-            if      (root_ver == 5) fSet(ncp->flags, NC_64BIT_DATA);
-            else if (root_ver == 2) fSet(ncp->flags, NC_64BIT_OFFSET);
-
-            /* this inconsistency is not fatal */
-            DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_CMODE)
-        }
-        getbuf->version = root_ver;
-        ncp->format     = root_ver;
-    }
-
-#if SIZEOF_MPI_OFFSET < 8
-    if (getbuf->version > 1) {
-        /* for NC_64BIT_DATA or NC_64BIT_OFFSET, MPI_Offset must be 8 bytes */
-        if (ncp->safe_mode)
-            fprintf(stderr,"Error: cannot support CDF-2 and CDF-5 on this machine\n");
-        DEBUG_RETURN_ERROR(NC_ESMALL) /* should not continue */
-    }
-#endif
-
-    /* since getbuf contains the entire root's header, we do not need to check
-     * for any next element in the buffer. Similarly, for all possible calls
-     * to hdr_check_buffer() from this subroutine, hdr_fetch() will never be
-     * called.
-     * (move on to the next element in header: number of records)
-     err = hdr_check_buffer(getbuf, (getbuf->version == 5) ? 8 : 4);
-     if (err != NC_NOERR) {
-         if (ncp->safe_mode)
-             fprintf(stderr,"Error: root's header is too short\n");
-         return err;
-     }
-     */
-
-    if (getbuf->version == 5) {
-        uint64 tmp=0;
-        err = ncmpix_get_uint64((const void **)(&getbuf->pos), &tmp);
-        nrecs = (MPI_Offset)tmp;
-    }
-    else {
-        uint tmp=0;
-        err = ncmpix_get_uint32((const void **)(&getbuf->pos), &tmp);
-        nrecs = (MPI_Offset)tmp;
-    }
-    if (err != NC_NOERR) {
-        if (ncp->safe_mode)
-            fprintf(stderr,"Error: failed to read numrecs from root's header\n");
-        return err; /* should not continue */
-    }
-
-    /* move the buffer point forward */
-    if (getbuf->version == 5)
-        getbuf->index += X_SIZEOF_INT64;
-    else
-        getbuf->index += X_SIZEOF_SIZE_T;
-
-    root_ncp->numrecs = nrecs;
-    if (root_ncp->numrecs != ncp->numrecs) {
-        if (ncp->safe_mode)
-            printf("%s number of records (local=%lld, root=%lld)\n",
-                   WARN_STR, ncp->numrecs, root_ncp->numrecs);
-        /* overwrite the local header's numrecs */
-        ncp->numrecs = root_ncp->numrecs;
-        if (status == NC_NOERR) DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_NUMRECS)
-    }
-
-#ifdef HAVE_MPI_GET_ADDRESS
-    MPI_Get_address(getbuf->pos,  &pos_addr);
-    MPI_Get_address(getbuf->base, &base_addr);
-#else
-    MPI_Address(getbuf->pos,  &pos_addr);
-    MPI_Address(getbuf->base, &base_addr);
-#endif
-    assert(pos_addr < base_addr + getbuf->size);
-
-    /* get the next header element dim_list from getbuf to root_ncp */
-    err = hdr_get_NC_dimarray(getbuf, &root_ncp->dims);
-    if (err != NC_NOERR) return err; /* fatal error */
-
-    /* compare local's and root's dim_list */
-    err = ncmpii_comp_dims(ncp->safe_mode, &root_ncp->dims, &ncp->dims);
-    if (err != NC_NOERR && !ErrIsHeaderDiff(err))
-        return err; /* a fatal error */
-    if (status == NC_NOERR) status = err;
-
-    /* get the next header element gatt_list from getbuf to root_ncp */
-    err = hdr_get_NC_attrarray(getbuf, &root_ncp->attrs);
-    if (err != NC_NOERR) return err; /* fatal error */
-
-    /* get the next header element att_list from getbuf to root_ncp */
-    err = ncmpii_comp_attrs(ncp->safe_mode, &root_ncp->attrs, &ncp->attrs);
-    if (err != NC_NOERR && !ErrIsHeaderDiff(err))
-        return err; /* a fatal error */
-    if (status == NC_NOERR) status = err;
-
-    /* get the next header element var_list from getbuf to root_ncp */
-    err = hdr_get_NC_vararray(getbuf, &root_ncp->vars);
-    if (err != NC_NOERR) return err; /* fatal error */
-
-    /* compare local's and root's var_list */
-    err = ncmpii_comp_vars(ncp->safe_mode, &root_ncp->vars, &ncp->vars);
-    if (err != NC_NOERR && !ErrIsHeaderDiff(err))
-        return err; /* a fatal error */
-    if (status == NC_NOERR) status = err;
-
-    if (err != NC_NOERR) { /* header has been sync-ed with root */
-        /* recompute shape is required for every new variable created */
-        err = ncmpii_NC_computeshapes(ncp);
-        if (err != NC_NOERR) return err; /* a fatal error */
-    }
-    /* now, the local header object has been sync-ed with root */
-
-    if (ncp->safe_mode && ErrIsHeaderDiff(status)) {
-        /* recompute header size */
-        MPI_Offset root_xsz, local_xsz;
-         root_xsz = ncmpii_hdr_len_NC(root_ncp);
-        local_xsz = ncmpii_hdr_len_NC(ncp);
-        /* root's header size is getbuf->size */
-        assert( ncp->xsz == getbuf->size &&
-                root_xsz == local_xsz    &&
-               local_xsz == getbuf->size);
-    }
-    ncmpii_free_NC(root_ncp);
-    return status;
-}
-
-/*----< ncmpii_write_header() >-----------------------------------------------*/
-/* This function is called only in data mode (collective or independent) and by
- * 1. ncmpi_rename_att()
- * 2. ncmpi_copy_att()
- * 3. ncmpii_put_att()
- * 4. ncmpi_rename_dim()
- * 5. ncmpi_rename_var()
- *
- * This function is collective (even in independent data mode) */
-int ncmpii_write_header(NC *ncp)
-{
-    int rank, status=NC_NOERR, mpireturn, err;
-    MPI_File fh;
-
-    /* Write the entire header to the file. This function may be called from
-     * a rename API. In that case, we cannot just change the variable name in
-     * the file header, because if the file space occupied by the name shrinks,
-     * all metadata following the new name must be moved ahead.
-     */
-
-    fh = ncp->nciop->collective_fh;
-    if (NC_indep(ncp))
-        fh = ncp->nciop->independent_fh;
-
-    /* update file header size, as this subroutine may be called from a rename
-     * API (var or attribute) and the new name is smaller/bigger which changes
-     * the header size. We recalculate ncp->xsz by getting the un-aligned size
-     * occupied by the file header */
-    ncp->xsz = ncmpii_hdr_len_NC(ncp);
-
-    MPI_Comm_rank(ncp->nciop->comm, &rank);
-    if (rank == 0) { /* only root writes to file header */
-        MPI_Status mpistatus;
-        void *buf = NCI_Malloc((size_t)ncp->xsz); /* header's write buffer */
-
-        /* copy header object to write buffer */
-        status = ncmpii_hdr_put_NC(ncp, buf);
-
-        if (ncp->xsz != (int)ncp->xsz) {
-            NCI_Free(buf);
-            DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-        }
-        TRACE_IO(MPI_File_write_at)(fh, 0, buf, (int)ncp->xsz, MPI_BYTE, &mpistatus);
-        if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_write_at");
-            if (status == NC_NOERR) {
-                err = (err == NC_EFILE) ? NC_EWRITE : err;
-                DEBUG_ASSIGN_ERROR(status, err)
-            }
-        }
-        else {
-            ncp->nciop->put_size += ncp->xsz;
-        }
-        NCI_Free(buf);
-    }
-
-    if (ncp->safe_mode == 1) {
-        /* broadcast root's status, because only root writes to the file */
-        int root_status = status;
-        TRACE_COMM(MPI_Bcast)(&root_status, 1, MPI_INT, 0, ncp->nciop->comm);
-        /* root's write has failed, which is serious */
-        if (root_status == NC_EWRITE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_Bcast");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-    }
-
-    if (NC_doFsync(ncp)) { /* NC_SHARE is set */
-        TRACE_IO(MPI_File_sync)(fh);
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_File_sync");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-        TRACE_COMM(MPI_Barrier)(ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_Barrier");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-    }
-
-    return status;
-}
-
diff --git a/src/lib/i_varn.m4 b/src/lib/i_varn.m4
deleted file mode 100644
index 1927797..0000000
--- a/src/lib/i_varn.m4
+++ /dev/null
@@ -1,327 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-/* Do not edit this file. It is produced from the corresponding .m4 source */
-dnl
-/*
- *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: i_varn.m4 2664 2016-12-02 00:50:43Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "ncmpidtype.h"
-#include "macro.h"
-
-include(`foreach.m4')
-include(`utils.m4')
-
-/* ncmpi_iget/iput_varn_<type>_<mode> API:
- *    type:   data type of I/O buffer, buf
- *    mode:   indpendent (<nond>) or collective (_all)
- *
- * arguments:
- *    num:    number of start and count pairs
- *    starts: an 2D array of size [num][ndims]. Each starts[i][*] indicates
- *            the starting array indices for a subarray request. ndims is
- *            the number of dimensions of the defined netCDF variable.
- *    counts: an 2D array of size [num][ndims]. Each counts[i][*] indicates
- *            the number of array elements to be accessed. This argument
- *            can be NULL, equivalent to counts with all 1s.
- *    bufcount and buftype: these 2 arguments are only available for flexible
- *            APIs, indicating the I/O buffer memory layout. When buftype is
- *            MPI_DATATYPE_NULL, bufcount is ignored and the data type of buf
- *            is considered matched the variable data type defined in the file.
- *    reqid:  request ID returned to user
- */
-
-static int
-ncmpii_igetput_varn(NC                *ncp,
-                    NC_var            *varp,
-                    int                num,
-                    MPI_Offset* const *starts,  /* [num][varp->ndims] */
-                    MPI_Offset* const *counts,  /* [num][varp->ndims] */
-                    void              *buf,
-                    MPI_Offset         bufcount,
-                    MPI_Datatype       buftype,   /* data type of the bufer */
-                    int               *reqid,
-                    int                rw_flag,
-                    int                use_abuf);
-
-dnl
-define(`IsBput',    `ifelse(`$1',`bput', `1', `0')')dnl
-define(`BufConst',  `ifelse(`$1',`iget', , `const')')dnl
-dnl
-dnl VARN_FLEXIBLE()
-dnl
-define(`VARN_FLEXIBLE',dnl
-`dnl
-/*----< ncmpi_$1_varn() >-----------------------------------------------------*/
-int
-ncmpi_$1_varn(int                 ncid,
-              int                 varid,
-              int                 num,
-              MPI_Offset* const  *starts,
-              MPI_Offset* const  *counts,
-              BufConst($1) void  *buf,
-              MPI_Offset          bufcount,
-              MPI_Datatype        buftype,
-              int                *reqid)
-{
-    int     status;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    if (reqid != NULL) *reqid = NC_REQ_NULL;
-
-    /* check for zero-size request */
-    if (num == 0 || bufcount == 0) return NC_NOERR;
-
-    status = ncmpii_sanity_check(ncid, varid, NULL, NULL, NULL, bufcount,
-                                 buftype, API_VARN, 1, 0, ReadWrite($1),
-                                 NONBLOCKING_IO, &ncp, &varp);
-    if (status != NC_NOERR) return status;
-
-    return ncmpii_igetput_varn(ncp, varp, num, starts, counts, (void*)buf,
-                               bufcount, buftype, reqid, ReadWrite($1),
-                               IsBput($1));
-}
-')dnl
-
-dnl PnetCDF flexible APIs
-VARN_FLEXIBLE(iput)
-VARN_FLEXIBLE(iget)
-VARN_FLEXIBLE(bput)
-
-dnl
-dnl VARN()
-dnl
-define(`VARN',dnl
-`dnl
-/*----< ncmpi_$1_varn_$2() >--------------------------------------------------*/
-int
-ncmpi_$1_varn_$2(int                ncid,
-                 int                varid,
-                 int                num,
-                 MPI_Offset* const *starts,
-                 MPI_Offset* const *counts,
-                 BufConst($1) $3   *buf,
-                 int               *reqid)
-{
-    int     status;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    if (reqid != NULL) *reqid = NC_REQ_NULL;
-
-    /* check for zero request */
-    if (num == 0) return NC_NOERR;
-
-    status = ncmpii_sanity_check(ncid, varid, NULL, NULL, NULL, 0,
-                                 ITYPE2MPI($2), API_VARN, 0, 0, ReadWrite($1),
-                                 NONBLOCKING_IO, &ncp, &varp);
-    if (status != NC_NOERR) return status;
-
-    /* set bufcount to -1 indicating non-flexible API */
-    return ncmpii_igetput_varn(ncp, varp, num, starts, counts, (void*)buf,
-                               -1, $4, reqid, ReadWrite($1), IsBput($1));
-}
-')dnl
-dnl
-foreach(`putget', (iput, iget, bput),
-        `foreach(`itype', (ITYPE_LIST),
-                 `VARN(putget,itype,FUNC2ITYPE(itype),ITYPE2MPI(itype))
-')')
-
-/*----< ncmpii_igetput_varn() >-----------------------------------------------*/
-static int
-ncmpii_igetput_varn(NC                *ncp,
-                    NC_var            *varp,
-                    int                num,
-                    MPI_Offset* const *starts,  /* [num][varp->ndims] */
-                    MPI_Offset* const *counts,  /* [num][varp->ndims] */
-                    void              *buf,
-                    MPI_Offset         bufcount,
-                    MPI_Datatype       buftype,   /* data type of the bufer */
-                    int               *reqidp,    /* OUT: request ID */
-                    int                rw_flag,   /* WRITE_REQ or READ_REQ */
-                    int                use_abuf)  /* if use attached buffer */
-{
-    int i, j, el_size, status=NC_NOERR, free_cbuf=0, isSameGroup, reqid;
-    void *cbuf=NULL;
-    char *bufp;
-    MPI_Offset **_counts=NULL;
-    MPI_Datatype ptype;
-
-    if (use_abuf && ncp->abuf == NULL) DEBUG_RETURN_ERROR(NC_ENULLABUF)
-
-    /* it is illegal for starts to be NULL */
-    if (starts == NULL)
-        DEBUG_RETURN_ERROR(NC_ENULLSTART)
-    else { /* it is illegal for any starts[i] to be NULL */
-        for (i=0; i<num; i++) {
-            if (starts[i] == NULL)
-                DEBUG_RETURN_ERROR(NC_ENULLSTART)
-        }
-    }
-
-    if (counts != NULL) {
-        for (j=0; j<num; j++) {
-            if (counts[j] == NULL)
-                DEBUG_RETURN_ERROR(NC_ENULLCOUNT)
-            for (i=0; i<varp->ndims; i++) {
-                if (counts[j][i] < 0) /* no negative counts[][] */
-                    DEBUG_RETURN_ERROR(NC_ENEGATIVECNT)
-            }
-        }
-    }
-
-    cbuf = buf;
-    if (buftype == MPI_DATATYPE_NULL) {
-        /* In this case, we make ptype match the variable data type defined
-         * in file - no data conversion will be done. Also, it means buf is
-         * contiguous. buftype will no longer be used.
-         */
-        ptype = ncmpii_nc2mpitype(varp->type);
-        MPI_Type_size(ptype, &el_size); /* buffer element size */
-    }
-    else if (bufcount == -1) { /* if (IsPrimityMPIType(buftype)) */
-        /* this subroutine is called from a high-level API
-         * Also, it means the user buf is contiguous.
-         * Assign ptype to buftype, and buftype will no longer be used.
-         */
-        ptype = buftype;
-        MPI_Type_size(ptype, &el_size); /* buffer element size */
-    }
-    else { /* (bufcount > 0) flexible API is used */
-        /* pack buf into cbuf, a contiguous buffer */
-        int isderived, iscontig_of_ptypes;
-        MPI_Offset bnelems=0;
-
-        /* ptype (primitive MPI data type) from buftype
-         * el_size is the element size of ptype
-         * bnelems is the total number of ptype elements in buftype
-         */
-        status = ncmpii_dtype_decode(buftype, &ptype, &el_size, &bnelems,
-                                     &isderived, &iscontig_of_ptypes);
-
-        if (status != NC_NOERR) return status;
-
-        if (bufcount != (int)bufcount) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-
-        /* check if buftype is contiguous, if not, pack to one, cbuf */
-        if (! iscontig_of_ptypes && bnelems > 0) {
-            int position = 0;
-            MPI_Offset packsize = bnelems*el_size;
-            if (packsize != (int)packsize) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-
-            cbuf = NCI_Malloc((size_t)packsize);
-            free_cbuf = 1;
-            /* if not use_abuf, need a callback to free cbuf */
-
-            if (rw_flag == WRITE_REQ)
-                MPI_Pack(buf, (int)bufcount, buftype, cbuf, (int)packsize,
-                         &position, MPI_COMM_SELF);
-        }
-    }
-
-    /* We allow counts == NULL and treat this the same as all 1s */
-    if (counts == NULL) {
-        _counts    = (MPI_Offset**) NCI_Malloc((size_t)num * sizeof(MPI_Offset*));
-        _counts[0] = (MPI_Offset*)  NCI_Malloc((size_t)(num * varp->ndims *
-                                                        SIZEOF_MPI_OFFSET));
-        for (i=1; i<num; i++)
-            _counts[i] = _counts[i-1] + varp->ndims;
-        for (i=0; i<num; i++)
-            for (j=0; j<varp->ndims; j++)
-                _counts[i][j] = 1;
-    }
-    else {
-        _counts = (MPI_Offset**) counts;
-    }
-    /* from this point forward, _counts != NULL */
-
-    /* break buf into num pieces */
-    reqid = NC_REQ_NULL;
-    isSameGroup=0;
-    bufp = (char*)cbuf;
-    for (i=0; i<num; i++) {
-        MPI_Offset buflen;
-
-        /* check whether start, count, and stride are valid */
-        status = NC_start_count_stride_ck(ncp, varp, starts[i], _counts[i], NULL, rw_flag);
-        if (status != NC_NOERR) goto err_check;
-
-        for (buflen=1, j=0; j<varp->ndims; j++)
-            buflen *= _counts[i][j];
-
-        if (buflen == 0) continue;
-        status = ncmpii_igetput_varm(ncp, varp, starts[i], _counts[i], NULL,
-                                     NULL, bufp, buflen, ptype, &reqid,
-                                     rw_flag, use_abuf, isSameGroup);
-        if (status != NC_NOERR) goto err_check;
-
-        /* use isSamegroup so we end up with one nonblocking request (only the
-         * first request gets a request ID back, the rest reuse the same ID.
-         * This single ID represents num nonblocking requests */
-        isSameGroup=1;
-        bufp += buflen * el_size;
-    }
-
-    if (free_cbuf) { /* cbuf != buf, cbuf is temp allocated */
-        if (rw_flag == READ_REQ) {
-            /* Set the last lead request object to let wait() unpack cbuf to
-             * buf and free cbuf */
-            for (i=ncp->numGetReqs-1; i>=0; i--)
-                if (ncp->get_list[i].num_recs > 0)
-                    break;
-            ncp->get_list[i].tmpBuf   = cbuf;
-            ncp->get_list[i].userBuf  = buf;
-            ncp->get_list[i].bufcount = (int)bufcount;
-            MPI_Type_dup(buftype, &ncp->get_list[i].buftype);
-        }
-        else { /* WRITE_REQ */
-            if (use_abuf)
-                /* cbuf has been copied to the attached buffer, so it is safe
-                 * to free cbuf now */
-                NCI_Free(cbuf);
-            else {
-                for (i=ncp->numPutReqs-1; i>=0; i--)
-                    if (ncp->put_list[i].num_recs > 0)
-                        break;
-                assert(i >= 0);
-                /* Set the last request object to let wait() to free cbuf */
-                ncp->put_list[i].tmpBuf = cbuf;
-            }
-        }
-    }
-
-err_check:
-    if (_counts != counts) {
-        NCI_Free(_counts[0]);
-        NCI_Free(_counts);
-    }
-
-    if (status != NC_NOERR) {
-        if (reqid != NC_REQ_NULL) /* cancel pending nonblocking request */
-            ncmpii_cancel(ncp, 1, &reqid, NULL);
-        if (free_cbuf) NCI_Free(cbuf);
-    }
-    if (reqidp != NULL) *reqidp = reqid;
-
-    return status;
-}
diff --git a/src/lib/m_getput_varx.m4 b/src/lib/m_getput_varx.m4
deleted file mode 100644
index 788dac7..0000000
--- a/src/lib/m_getput_varx.m4
+++ /dev/null
@@ -1,1090 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-/* Do not edit this file. It is produced from the corresponding .m4 source */
-dnl
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: m_getput_varx.m4 2686 2016-12-07 20:02:41Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "ncmpidtype.h"
-#include "macro.h"
-
-
-/* buffer layers:
-
-        User Level              buf     (user defined buffer of MPI_Datatype)
-        MPI Datatype Level      cbuf    (contiguous buffer of ptype)
-        NetCDF XDR Level        xbuf    (XDR I/O buffer)
-*/
-
-static int
-ncmpii_mgetput_varm(int                ncid,
-                    int                num,
-                    int                varids[],    /* [num] */
-                    MPI_Offset* const  starts[],    /* [num] */
-                    MPI_Offset* const  counts[],    /* [num] */
-                    MPI_Offset* const  strides[],   /* [num] */
-                    MPI_Offset* const  imaps[],     /* [num] */
-                    void              *bufs[],      /* [num] */
-                    MPI_Offset         bufcounts[], /* [num] */
-                    MPI_Datatype       datatypes[], /* [num] */
-                    int                rw_flag,     /* WRITE_REQ or READ_REQ */
-                    int                io_method);  /* COLL_IO or INDEP_IO */
-
-/*----< ncmpi_mput_var() >---------------------------------------------------*/
-int
-ncmpi_mput_var(int           ncid,
-               int           num,
-               int           varids[],    /* [num] */
-               void         *bufs[],      /* [num] */
-               MPI_Offset    bufcounts[], /* [num] */
-               MPI_Datatype  datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, NULL, NULL, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               WRITE_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mput_var_all() >-----------------------------------------------*/
-int
-ncmpi_mput_var_all(int           ncid,
-                   int           num,
-                   int           varids[],    /* [num] */
-                   void         *bufs[],      /* [num] */
-                   MPI_Offset    bufcounts[], /* [num] */
-                   MPI_Datatype  datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, NULL, NULL, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               WRITE_REQ, COLL_IO);
-}
-
-dnl
-dnl MPUT_VAR(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MPUT_VAR',dnl
-`dnl
-/*----< ncmpi_mput_var_$1$5() >-----------------------------------------------*/
-int
-ncmpi_mput_var_$1$5(int ncid,
-                    int num,
-                    int varids[],
-                    $2 *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, NULL, NULL, NULL,
-                              NULL, (void**)bufs, NULL, datatypes,
-                              WRITE_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MPUT_VAR(text,      char,               MPI_CHAR,               INDEP_IO)
-MPUT_VAR(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MPUT_VAR(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MPUT_VAR(short,     short,              MPI_SHORT,              INDEP_IO)
-MPUT_VAR(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MPUT_VAR(int,       int,                MPI_INT,                INDEP_IO)
-MPUT_VAR(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MPUT_VAR(long,      long,               MPI_LONG,               INDEP_IO)
-MPUT_VAR(float,     float,              MPI_FLOAT,              INDEP_IO)
-MPUT_VAR(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MPUT_VAR(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MPUT_VAR(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MPUT_VAR(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MPUT_VAR(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MPUT_VAR(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MPUT_VAR(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MPUT_VAR(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MPUT_VAR(int,       int,                MPI_INT,                COLL_IO, _all)
-MPUT_VAR(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MPUT_VAR(long,      long,               MPI_LONG,               COLL_IO, _all)
-MPUT_VAR(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MPUT_VAR(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MPUT_VAR(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MPUT_VAR(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mput_var1() >--------------------------------------------------*/
-int
-ncmpi_mput_var1(int                ncid,
-                int                num,
-                int                varids[],    /* [num] */
-                MPI_Offset* const  starts[],    /* [num] */
-                void              *bufs[],      /* [num] */
-                MPI_Offset         bufcounts[], /* [num] */
-                MPI_Datatype       datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, NULL, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               WRITE_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mput_var1_all() >----------------------------------------------*/
-int
-ncmpi_mput_var1_all(int                ncid,
-                    int                num,
-                    int                varids[],    /* [num] */
-                    MPI_Offset* const  starts[],    /* [num] */
-                    void              *bufs[],      /* [num] */
-                    MPI_Offset         bufcounts[], /* [num] */
-                    MPI_Datatype       datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, NULL, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               WRITE_REQ, COLL_IO);
-}
-
-dnl
-dnl MPUT_VAR1(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MPUT_VAR1',dnl
-`dnl
-/*----< ncmpi_mput_var1_$1$5() >----------------------------------------------*/
-int
-ncmpi_mput_var1_$1$5(int                ncid,
-                     int                num,
-                     int                varids[],
-                     MPI_Offset* const  starts[],    /* [num] */
-                     $2                *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, starts, NULL, NULL,
-                              NULL, (void**)bufs, NULL, datatypes,
-                              WRITE_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MPUT_VAR1(text,      char,               MPI_CHAR,               INDEP_IO)
-MPUT_VAR1(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MPUT_VAR1(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MPUT_VAR1(short,     short,              MPI_SHORT,              INDEP_IO)
-MPUT_VAR1(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MPUT_VAR1(int,       int,                MPI_INT,                INDEP_IO)
-MPUT_VAR1(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MPUT_VAR1(long,      long,               MPI_LONG,               INDEP_IO)
-MPUT_VAR1(float,     float,              MPI_FLOAT,              INDEP_IO)
-MPUT_VAR1(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MPUT_VAR1(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MPUT_VAR1(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MPUT_VAR1(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MPUT_VAR1(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MPUT_VAR1(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MPUT_VAR1(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MPUT_VAR1(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MPUT_VAR1(int,       int,                MPI_INT,                COLL_IO, _all)
-MPUT_VAR1(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MPUT_VAR1(long,      long,               MPI_LONG,               COLL_IO, _all)
-MPUT_VAR1(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MPUT_VAR1(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MPUT_VAR1(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MPUT_VAR1(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mput_vara() >--------------------------------------------------*/
-int
-ncmpi_mput_vara(int                ncid,
-                int                num,
-                int                varids[],    /* [num] */
-                MPI_Offset* const  starts[],    /* [num] */
-                MPI_Offset* const  counts[],    /* [num] */
-                void              *bufs[],      /* [num] */
-                MPI_Offset         bufcounts[], /* [num] */
-                MPI_Datatype       datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               WRITE_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mput_vara_all() >----------------------------------------------*/
-int
-ncmpi_mput_vara_all(int                ncid,
-                    int                num,
-                    int                varids[],    /* [num] */
-                    MPI_Offset* const  starts[],    /* [num] */
-                    MPI_Offset* const  counts[],    /* [num] */
-                    void              *bufs[],      /* [num] */
-                    MPI_Offset         bufcounts[], /* [num] */
-                    MPI_Datatype       datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               WRITE_REQ, COLL_IO);
-}
-
-dnl
-dnl MPUT_VARA(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MPUT_VARA',dnl
-`dnl
-/*----< ncmpi_mput_vara_$1$5() >----------------------------------------------*/
-int
-ncmpi_mput_vara_$1$5(int                ncid,
-                     int                num,
-                     int                varids[],
-                     MPI_Offset* const  starts[],    /* [num] */
-                     MPI_Offset* const  counts[],    /* [num] */
-                     $2                *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, starts, counts, NULL,
-                              NULL, (void**)bufs, NULL, datatypes,
-                              WRITE_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MPUT_VARA(text,      char,               MPI_CHAR,               INDEP_IO)
-MPUT_VARA(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MPUT_VARA(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MPUT_VARA(short,     short,              MPI_SHORT,              INDEP_IO)
-MPUT_VARA(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MPUT_VARA(int,       int,                MPI_INT,                INDEP_IO)
-MPUT_VARA(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MPUT_VARA(long,      long,               MPI_LONG,               INDEP_IO)
-MPUT_VARA(float,     float,              MPI_FLOAT,              INDEP_IO)
-MPUT_VARA(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MPUT_VARA(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MPUT_VARA(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MPUT_VARA(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MPUT_VARA(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MPUT_VARA(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MPUT_VARA(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MPUT_VARA(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MPUT_VARA(int,       int,                MPI_INT,                COLL_IO, _all)
-MPUT_VARA(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MPUT_VARA(long,      long,               MPI_LONG,               COLL_IO, _all)
-MPUT_VARA(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MPUT_VARA(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MPUT_VARA(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MPUT_VARA(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mput_vars() >--------------------------------------------------*/
-int
-ncmpi_mput_vars(int                ncid,
-                int                num,
-                int                varids[],    /* [num] */
-                MPI_Offset* const  starts[],    /* [num] */
-                MPI_Offset* const  counts[],    /* [num] */
-                MPI_Offset* const  strides[],   /* [num] */
-                void              *bufs[],      /* [num] */
-                MPI_Offset         bufcounts[], /* [num] */
-                MPI_Datatype       datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                               NULL, bufs, bufcounts, datatypes,
-                               WRITE_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mput_vars_all() >----------------------------------------------*/
-int
-ncmpi_mput_vars_all(int                ncid,
-                    int                num,
-                    int                varids[],    /* [num] */
-                    MPI_Offset* const  starts[],    /* [num] */
-                    MPI_Offset* const  counts[],    /* [num] */
-                    MPI_Offset* const  strides[],   /* [num] */
-                    void              *bufs[],      /* [num] */
-                    MPI_Offset         bufcounts[], /* [num] */
-                    MPI_Datatype       datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                               NULL, bufs, bufcounts, datatypes,
-                               WRITE_REQ, COLL_IO);
-}
-
-dnl
-dnl MPUT_VARS(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MPUT_VARS',dnl
-`dnl
-/*----< ncmpi_mput_vars_$1$5() >----------------------------------------------*/
-int
-ncmpi_mput_vars_$1$5(int                ncid,
-                     int                num,
-                     int                varids[],
-                     MPI_Offset* const  starts[],    /* [num] */
-                     MPI_Offset* const  counts[],    /* [num] */
-                     MPI_Offset* const  strides[],   /* [num] */
-                     $2                *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                              NULL, (void**)bufs, NULL, datatypes,
-                              WRITE_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MPUT_VARS(text,      char,               MPI_CHAR,               INDEP_IO)
-MPUT_VARS(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MPUT_VARS(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MPUT_VARS(short,     short,              MPI_SHORT,              INDEP_IO)
-MPUT_VARS(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MPUT_VARS(int,       int,                MPI_INT,                INDEP_IO)
-MPUT_VARS(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MPUT_VARS(long,      long,               MPI_LONG,               INDEP_IO)
-MPUT_VARS(float,     float,              MPI_FLOAT,              INDEP_IO)
-MPUT_VARS(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MPUT_VARS(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MPUT_VARS(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MPUT_VARS(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MPUT_VARS(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MPUT_VARS(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MPUT_VARS(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MPUT_VARS(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MPUT_VARS(int,       int,                MPI_INT,                COLL_IO, _all)
-MPUT_VARS(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MPUT_VARS(long,      long,               MPI_LONG,               COLL_IO, _all)
-MPUT_VARS(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MPUT_VARS(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MPUT_VARS(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MPUT_VARS(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mput_varm() >--------------------------------------------------*/
-int
-ncmpi_mput_varm(int                ncid,
-                int                num,
-                int                varids[],    /* [num] */
-                MPI_Offset* const  starts[],    /* [num] */
-                MPI_Offset* const  counts[],    /* [num] */
-                MPI_Offset* const  strides[],   /* [num] */
-                MPI_Offset* const  imaps[],     /* [num] */
-                void              *bufs[],      /* [num] */
-                MPI_Offset         bufcounts[], /* [num] */
-                MPI_Datatype       datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                               imaps, bufs, bufcounts, datatypes,
-                               WRITE_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mput_varm_all() >----------------------------------------------*/
-int
-ncmpi_mput_varm_all(int                ncid,
-                    int                num,
-                    int                varids[],    /* [num] */
-                    MPI_Offset* const  starts[],    /* [num] */
-                    MPI_Offset* const  counts[],    /* [num] */
-                    MPI_Offset* const  strides[],   /* [num] */
-                    MPI_Offset* const  imaps[],     /* [num] */
-                    void              *bufs[],      /* [num] */
-                    MPI_Offset         bufcounts[], /* [num] */
-                    MPI_Datatype       datatypes[]) /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                               imaps, bufs, bufcounts, datatypes,
-                               WRITE_REQ, COLL_IO);
-}
-
-dnl
-dnl MPUT_VARM(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MPUT_VARM',dnl
-`dnl
-/*----< ncmpi_mput_varm_$1$5() >----------------------------------------------*/
-int
-ncmpi_mput_varm_$1$5(int                ncid,
-                     int                num,
-                     int                varids[],
-                     MPI_Offset* const  starts[],    /* [num] */
-                     MPI_Offset* const  counts[],    /* [num] */
-                     MPI_Offset* const  strides[],   /* [num] */
-                     MPI_Offset* const  imaps[],     /* [num] */
-                     $2                *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                              imaps, (void**)bufs, NULL, datatypes,
-                              WRITE_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MPUT_VARM(text,      char,               MPI_CHAR,               INDEP_IO)
-MPUT_VARM(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MPUT_VARM(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MPUT_VARM(short,     short,              MPI_SHORT,              INDEP_IO)
-MPUT_VARM(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MPUT_VARM(int,       int,                MPI_INT,                INDEP_IO)
-MPUT_VARM(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MPUT_VARM(long,      long,               MPI_LONG,               INDEP_IO)
-MPUT_VARM(float,     float,              MPI_FLOAT,              INDEP_IO)
-MPUT_VARM(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MPUT_VARM(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MPUT_VARM(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MPUT_VARM(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MPUT_VARM(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MPUT_VARM(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MPUT_VARM(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MPUT_VARM(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MPUT_VARM(int,       int,                MPI_INT,                COLL_IO, _all)
-MPUT_VARM(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MPUT_VARM(long,      long,               MPI_LONG,               COLL_IO, _all)
-MPUT_VARM(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MPUT_VARM(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MPUT_VARM(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MPUT_VARM(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mget_var() >---------------------------------------------------*/
-int
-ncmpi_mget_var(int           ncid,
-               int           num,
-               int           varids[],     /* [num] */
-               void         *bufs[],       /* [num] */
-               MPI_Offset    bufcounts[],  /* [num] */
-               MPI_Datatype  datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, NULL, NULL, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               READ_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mget_var_all() >-----------------------------------------------*/
-int
-ncmpi_mget_var_all(int           ncid,
-                   int           num,
-                   int           varids[],     /* [num] */
-                   void         *bufs[],       /* [num] */
-                   MPI_Offset    bufcounts[],  /* [num] */
-                   MPI_Datatype  datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, NULL, NULL, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               READ_REQ, COLL_IO);
-}
-
-dnl
-dnl MGET_VAR(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MGET_VAR',dnl
-`dnl
-/*----< ncmpi_mget_var_$1$5() >-----------------------------------------------*/
-int
-ncmpi_mget_var_$1$5(int ncid,
-                    int num,
-                    int varids[],
-                    $2 *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, NULL, NULL, NULL,
-                              NULL, (void**)bufs, NULL, datatypes,
-                              READ_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MGET_VAR(text,      char,               MPI_CHAR,               INDEP_IO)
-MGET_VAR(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MGET_VAR(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MGET_VAR(short,     short,              MPI_SHORT,              INDEP_IO)
-MGET_VAR(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MGET_VAR(int,       int,                MPI_INT,                INDEP_IO)
-MGET_VAR(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MGET_VAR(long,      long,               MPI_LONG,               INDEP_IO)
-MGET_VAR(float,     float,              MPI_FLOAT,              INDEP_IO)
-MGET_VAR(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MGET_VAR(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MGET_VAR(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MGET_VAR(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MGET_VAR(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MGET_VAR(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MGET_VAR(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MGET_VAR(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MGET_VAR(int,       int,                MPI_INT,                COLL_IO, _all)
-MGET_VAR(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MGET_VAR(long,      long,               MPI_LONG,               COLL_IO, _all)
-MGET_VAR(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MGET_VAR(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MGET_VAR(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MGET_VAR(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mget_var1() >--------------------------------------------------*/
-int
-ncmpi_mget_var1(int                ncid,
-                int                num,
-                int                varids[],     /* [num] */
-                MPI_Offset* const  starts[],     /* [num] */
-                void              *bufs[],       /* [num] */
-                MPI_Offset         bufcounts[],  /* [num] */
-                MPI_Datatype       datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, NULL, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               READ_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mget_var1_all() >----------------------------------------------*/
-int
-ncmpi_mget_var1_all(int                ncid,
-                    int                num,
-                    int                varids[],     /* [num] */
-                    MPI_Offset* const  starts[],     /* [num] */
-                    void              *bufs[],       /* [num] */
-                    MPI_Offset         bufcounts[],  /* [num] */
-                    MPI_Datatype       datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, NULL, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               READ_REQ, COLL_IO);
-}
-
-dnl
-dnl MGET_VAR1(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MGET_VAR1',dnl
-`dnl
-/*----< ncmpi_mget_var1_$1$5() >----------------------------------------------*/
-int
-ncmpi_mget_var1_$1$5(int                ncid,
-                     int                num,
-                     int                varids[],
-                     MPI_Offset* const  starts[],    /* [num] */
-                     $2                *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, starts, NULL, NULL,
-                              NULL, (void**)bufs, NULL, datatypes,
-                              READ_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MGET_VAR1(text,      char,               MPI_CHAR,               INDEP_IO)
-MGET_VAR1(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MGET_VAR1(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MGET_VAR1(short,     short,              MPI_SHORT,              INDEP_IO)
-MGET_VAR1(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MGET_VAR1(int,       int,                MPI_INT,                INDEP_IO)
-MGET_VAR1(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MGET_VAR1(long,      long,               MPI_LONG,               INDEP_IO)
-MGET_VAR1(float,     float,              MPI_FLOAT,              INDEP_IO)
-MGET_VAR1(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MGET_VAR1(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MGET_VAR1(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MGET_VAR1(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MGET_VAR1(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MGET_VAR1(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MGET_VAR1(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MGET_VAR1(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MGET_VAR1(int,       int,                MPI_INT,                COLL_IO, _all)
-MGET_VAR1(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MGET_VAR1(long,      long,               MPI_LONG,               COLL_IO, _all)
-MGET_VAR1(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MGET_VAR1(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MGET_VAR1(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MGET_VAR1(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mget_vara() >--------------------------------------------------*/
-int
-ncmpi_mget_vara(int                ncid,
-                int                num,
-                int                varids[],     /* [num] */
-                MPI_Offset* const  starts[],     /* [num] */
-                MPI_Offset* const  counts[],     /* [num] */
-                void              *bufs[],       /* [num] */
-                MPI_Offset         bufcounts[],  /* [num] */
-                MPI_Datatype       datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               READ_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mget_vara_all() >----------------------------------------------*/
-int
-ncmpi_mget_vara_all(int                ncid,
-                    int                num,
-                    int                varids[],     /* [num] */
-                    MPI_Offset* const  starts[],     /* [num] */
-                    MPI_Offset* const  counts[],     /* [num] */
-                    void              *bufs[],       /* [num] */
-                    MPI_Offset         bufcounts[],  /* [num] */
-                    MPI_Datatype       datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, NULL,
-                               NULL, bufs, bufcounts, datatypes,
-                               READ_REQ, COLL_IO);
-}
-
-dnl
-dnl MGET_VARA(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MGET_VARA',dnl
-`dnl
-/*----< ncmpi_mget_vara_$1$5() >----------------------------------------------*/
-int
-ncmpi_mget_vara_$1$5(int                ncid,
-                     int                num,
-                     int                varids[],
-                     MPI_Offset* const  starts[],    /* [num] */
-                     MPI_Offset* const  counts[],    /* [num] */
-                     $2                *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, starts, counts, NULL,
-                              NULL, (void**)bufs, NULL, datatypes,
-                              READ_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MGET_VARA(text,      char,               MPI_CHAR,               INDEP_IO)
-MGET_VARA(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MGET_VARA(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MGET_VARA(short,     short,              MPI_SHORT,              INDEP_IO)
-MGET_VARA(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MGET_VARA(int,       int,                MPI_INT,                INDEP_IO)
-MGET_VARA(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MGET_VARA(long,      long,               MPI_LONG,               INDEP_IO)
-MGET_VARA(float,     float,              MPI_FLOAT,              INDEP_IO)
-MGET_VARA(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MGET_VARA(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MGET_VARA(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MGET_VARA(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MGET_VARA(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MGET_VARA(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MGET_VARA(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MGET_VARA(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MGET_VARA(int,       int,                MPI_INT,                COLL_IO, _all)
-MGET_VARA(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MGET_VARA(long,      long,               MPI_LONG,               COLL_IO, _all)
-MGET_VARA(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MGET_VARA(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MGET_VARA(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MGET_VARA(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mget_vars() >--------------------------------------------------*/
-int
-ncmpi_mget_vars(int                ncid,
-                int                num,
-                int                varids[],     /* [num] */
-                MPI_Offset* const  starts[],     /* [num] */
-                MPI_Offset* const  counts[],     /* [num] */
-                MPI_Offset* const  strides[],    /* [num] */
-                void              *bufs[],       /* [num] */
-                MPI_Offset         bufcounts[],  /* [num] */
-                MPI_Datatype       datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                               NULL, bufs, bufcounts, datatypes,
-                               READ_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mget_vars_all() >----------------------------------------------*/
-int
-ncmpi_mget_vars_all(int                ncid,
-                    int                num,
-                    int                varids[],     /* [num] */
-                    MPI_Offset* const  starts[],     /* [num] */
-                    MPI_Offset* const  counts[],     /* [num] */
-                    MPI_Offset* const  strides[],    /* [num] */
-                    void              *bufs[],       /* [num] */
-                    MPI_Offset         bufcounts[],  /* [num] */
-                    MPI_Datatype       datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                               NULL, bufs, bufcounts, datatypes,
-                               READ_REQ, COLL_IO);
-}
-
-dnl
-dnl MGET_VARS(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MGET_VARS',dnl
-`dnl
-/*----< ncmpi_mget_vars_$1$5() >----------------------------------------------*/
-int
-ncmpi_mget_vars_$1$5(int                ncid,
-                     int                num,
-                     int                varids[],
-                     MPI_Offset* const  starts[],    /* [num] */
-                     MPI_Offset* const  counts[],    /* [num] */
-                     MPI_Offset* const  strides[],   /* [num] */
-                     $2                *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                              NULL, (void**)bufs, NULL, datatypes,
-                              READ_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MGET_VARS(text,      char,               MPI_CHAR,               INDEP_IO)
-MGET_VARS(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MGET_VARS(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MGET_VARS(short,     short,              MPI_SHORT,              INDEP_IO)
-MGET_VARS(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MGET_VARS(int,       int,                MPI_INT,                INDEP_IO)
-MGET_VARS(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MGET_VARS(long,      long,               MPI_LONG,               INDEP_IO)
-MGET_VARS(float,     float,              MPI_FLOAT,              INDEP_IO)
-MGET_VARS(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MGET_VARS(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MGET_VARS(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MGET_VARS(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MGET_VARS(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MGET_VARS(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MGET_VARS(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MGET_VARS(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MGET_VARS(int,       int,                MPI_INT,                COLL_IO, _all)
-MGET_VARS(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MGET_VARS(long,      long,               MPI_LONG,               COLL_IO, _all)
-MGET_VARS(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MGET_VARS(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MGET_VARS(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MGET_VARS(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpi_mget_varm() >--------------------------------------------------*/
-int
-ncmpi_mget_varm(int                ncid,
-                int                num,
-                int                varids[],     /* [num] */
-                MPI_Offset* const  starts[],     /* [num] */
-                MPI_Offset* const  counts[],     /* [num] */
-                MPI_Offset* const  strides[],    /* [num] */
-                MPI_Offset* const  imaps[],      /* [num] */
-                void              *bufs[],       /* [num] */
-                MPI_Offset         bufcounts[],  /* [num] */
-                MPI_Datatype       datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                               imaps, bufs, bufcounts, datatypes,
-                               READ_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_mget_varm_all() >----------------------------------------------*/
-int
-ncmpi_mget_varm_all(int                ncid,
-                    int                num,
-                    int                varids[],     /* [num] */
-                    MPI_Offset* const  starts[],     /* [num] */
-                    MPI_Offset* const  counts[],     /* [num] */
-                    MPI_Offset* const  strides[],    /* [num] */
-                    MPI_Offset* const  imaps[],      /* [num] */
-                    void              *bufs[],       /* [num] */
-                    MPI_Offset         bufcounts[],  /* [num] */
-                    MPI_Datatype       datatypes[])  /* [num] */
-{
-    return ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                               imaps, bufs, bufcounts, datatypes,
-                               READ_REQ, COLL_IO);
-}
-
-dnl
-dnl MGET_VARM(btype_name, btype, mpi_type, mode, mode_name)
-dnl
-define(`MGET_VARM',dnl
-`dnl
-/*----< ncmpi_mget_varm_$1$5() >----------------------------------------------*/
-int
-ncmpi_mget_varm_$1$5(int                ncid,
-                     int                num,
-                     int                varids[],
-                     MPI_Offset* const  starts[],    /* [num] */
-                     MPI_Offset* const  counts[],    /* [num] */
-                     MPI_Offset* const  strides[],   /* [num] */
-                     MPI_Offset* const  imaps[],     /* [num] */
-                     $2                *bufs[])
-{
-    int i, err;
-    MPI_Datatype *datatypes;
-
-    datatypes = (MPI_Datatype*) NCI_Malloc((size_t)num * sizeof(MPI_Datatype));
-    for (i=0; i<num; i++)
-        datatypes[i] = $3;
-
-    err = ncmpii_mgetput_varm(ncid, num, varids, starts, counts, strides,
-                              imaps, (void**)bufs, NULL, datatypes,
-                              READ_REQ, $4);
-    NCI_Free(datatypes);
-    return err;
-}
-')dnl
-
-MGET_VARM(text,      char,               MPI_CHAR,               INDEP_IO)
-MGET_VARM(schar,     signed char,        MPI_SIGNED_CHAR,        INDEP_IO)
-MGET_VARM(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      INDEP_IO)
-MGET_VARM(short,     short,              MPI_SHORT,              INDEP_IO)
-MGET_VARM(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     INDEP_IO)
-MGET_VARM(int,       int,                MPI_INT,                INDEP_IO)
-MGET_VARM(uint,      unsigned int,       MPI_UNSIGNED,           INDEP_IO)
-MGET_VARM(long,      long,               MPI_LONG,               INDEP_IO)
-MGET_VARM(float,     float,              MPI_FLOAT,              INDEP_IO)
-MGET_VARM(double,    double,             MPI_DOUBLE,             INDEP_IO)
-MGET_VARM(longlong,  long long,          MPI_LONG_LONG_INT,      INDEP_IO)
-MGET_VARM(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, INDEP_IO)
-
-MGET_VARM(text,      char,               MPI_CHAR,               COLL_IO, _all)
-MGET_VARM(schar,     signed char,        MPI_SIGNED_CHAR,        COLL_IO, _all)
-MGET_VARM(uchar,     unsigned char,      MPI_UNSIGNED_CHAR,      COLL_IO, _all)
-MGET_VARM(short,     short,              MPI_SHORT,              COLL_IO, _all)
-MGET_VARM(ushort,    unsigned short,     MPI_UNSIGNED_SHORT,     COLL_IO, _all)
-MGET_VARM(int,       int,                MPI_INT,                COLL_IO, _all)
-MGET_VARM(uint,      unsigned int,       MPI_UNSIGNED,           COLL_IO, _all)
-MGET_VARM(long,      long,               MPI_LONG,               COLL_IO, _all)
-MGET_VARM(float,     float,              MPI_FLOAT,              COLL_IO, _all)
-MGET_VARM(double,    double,             MPI_DOUBLE,             COLL_IO, _all)
-MGET_VARM(longlong,  long long,          MPI_LONG_LONG_INT,      COLL_IO, _all)
-MGET_VARM(ulonglong, unsigned long long, MPI_UNSIGNED_LONG_LONG, COLL_IO, _all)
-
-/*----< ncmpii_mgetput_varm() >-----------------------------------------------*/
-int
-ncmpii_mgetput_varm(int                ncid,
-                    int                num,
-                    int                varids[],    /* [num] */
-                    MPI_Offset* const  starts[],    /* [num] */
-                    MPI_Offset* const  counts[],    /* [num] */
-                    MPI_Offset* const  strides[],   /* [num] */
-                    MPI_Offset* const  imaps[],     /* [num] */
-                    void              *bufs[],      /* [num] */
-                    MPI_Offset         bufcounts[], /* [num] */
-                    MPI_Datatype       datatypes[], /* [num] */
-                    int                rw_flag,     /* WRITE_REQ or READ_REQ */
-                    int                io_method)   /* COLL_IO or INDEP_IO */
-{
-    int i, j, err, status=NC_NOERR, *req_ids=NULL, *statuses=NULL;
-    NC *ncp=NULL;
-
-    /* check if ncid is valid */
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-    /* if ncid is invalid, we must return the error now. However, the program
-     * might hang when only a subset or processes have this error.
-     */
-
-    /* check if it is in define mode. This must be called in data mode */
-    if (NC_indef(ncp)) {
-        DEBUG_ASSIGN_ERROR(status, NC_EINDEFINE)
-        goto err_check;
-    }
-
-    /* check file write permission if this is write request */
-    if (rw_flag == WRITE_REQ && NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(status, NC_EPERM)
-        goto err_check;
-    }
-
-err_check:
-    /* at this point, if status is not NC_NOERR, it is a fatal error */
-    if (ncp->safe_mode == 1 && io_method == COLL_IO) {
-        int mpireturn, min_st;
-        TRACE_COMM(MPI_Allreduce)(&status, &min_st, 1, MPI_INT, MPI_MIN,
-                                  ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce"); 
-        if (min_st != NC_NOERR) return status;
-    }
-
-    if (io_method == INDEP_IO && status != NC_NOERR)
-        return status;
-
-    if (status != NC_NOERR)
-        /* this can only be reached for COLL_IO and safe_mode == 0, set num=0
-         * just so this process can participate the collective calls in
-         * wait_all */
-        num = 0;
-
-    if (num > 0) {
-        req_ids  = (int*) NCI_Malloc((size_t)(2 * num * SIZEOF_INT));
-        statuses = req_ids + num;
-    }
-
-    /* for each request call ncmpi_igetput_varm() */
-    for (i=0; i<num; i++) {
-        NC_var *varp;
-        MPI_Offset *start, *count, buflen=0;
-
-        req_ids[i] = NC_REQ_NULL;
-
-        err = ncmpii_NC_lookupvar(ncp, varids[i], &varp);
-        if (err != NC_NOERR) {
-            if (status == NC_NOERR) status = err;
-            continue; /* invalid varid, skip this request */
-        }
-
-        if (bufcounts != NULL) buflen = bufcounts[i];
-
-        if (starts == NULL) {         /* var */
-            GET_FULL_DIMENSIONS(start, count)
-            /* when bufcounts == NULL, it means the same as counts[] */
-            if (bufcounts == NULL) {
-                for (buflen=1, j=0; j<varp->ndims; j++)
-                    buflen *= count[j];
-            }
-            err = ncmpii_igetput_varm(ncp, varp, start, count, NULL, NULL,
-                                      bufs[i], buflen, datatypes[i],
-                                      &req_ids[i], rw_flag, 0, 0);
-            if (status == NC_NOERR) status = err;
-            NCI_Free(start);
-        } else if (counts == NULL) {  /* var1 */
-            /* check whether starts[i] is valid */
-            err = NC_start_count_stride_ck(ncp, varp, starts[i], NULL, NULL, rw_flag);
-            if (status == NC_NOERR) status = err;
-            if (err != NC_NOERR) continue; /* skip this request */
-            GET_ONE_COUNT(count)
-            /* when bufcounts == NULL, it means the same as counts[] */
-            if (bufcounts == NULL) buflen = 1;
-
-            err = ncmpii_igetput_varm(ncp, varp, starts[i], count, NULL, NULL,
-                                      bufs[i], buflen, datatypes[i],
-                                      &req_ids[i], rw_flag, 0, 0);
-            if (status == NC_NOERR) status = err;
-            NCI_Free(count);
-        } else if (strides == NULL) { /* vara */
-            /* check whether starts[i] and counts[i] are valid */
-            err = NC_start_count_stride_ck(ncp, varp, starts[i], counts[i], NULL, rw_flag);
-            if (status == NC_NOERR) status = err;
-            if (err != NC_NOERR) continue; /* skip this request */
-            /* when bufcounts == NULL, it means the same as counts[] */
-            if (bufcounts == NULL) {
-                for (buflen=1, j=0; j<varp->ndims; j++)
-                    buflen *= counts[i][j];
-            }
-            err = ncmpii_igetput_varm(ncp, varp, starts[i], counts[i], NULL,
-                                      NULL, bufs[i], buflen, datatypes[i],
-                                      &req_ids[i], rw_flag, 0, 0);
-            if (status == NC_NOERR) status = err;
-        } else if (imaps == NULL) {   /* vars */
-            /* check whether starts[i], counts[i], and strides[i] are valid */
-            err = NC_start_count_stride_ck(ncp, varp, starts[i], counts[i], strides[i], rw_flag);
-            if (status == NC_NOERR) status = err;
-            if (err != NC_NOERR) continue; /* skip this request */
-            /* when bufcounts == NULL, it means the same as counts[] */
-            if (bufcounts == NULL) {
-                for (buflen=1, j=0; j<varp->ndims; j++)
-                    buflen *= counts[i][j];
-            }
-            err = ncmpii_igetput_varm(ncp, varp, starts[i], counts[i],
-                                      strides[i], NULL, bufs[i], buflen,
-                                      datatypes[i], &req_ids[i],
-                                      rw_flag, 0, 0);
-            if (status == NC_NOERR) status = err;
-        } else {                      /* varm */
-            /* check whether starts[i], counts[i], and strides[i] are valid */
-            err = NC_start_count_stride_ck(ncp, varp, starts[i], counts[i], strides[i], rw_flag);
-            if (status == NC_NOERR) status = err;
-            if (err != NC_NOERR) continue; /* skip this request */
-            /* when bufcounts == NULL, it means the same as counts[] */
-            if (bufcounts == NULL) {
-                for (buflen=1, j=0; j<varp->ndims; j++)
-                    buflen *= counts[i][j];
-            }
-            err = ncmpii_igetput_varm(ncp, varp, starts[i], counts[i],
-                                      strides[i], imaps[i], bufs[i],
-                                      buflen, datatypes[i],
-                                      &req_ids[i], rw_flag, 0, 0);
-            if (status == NC_NOERR) status = err;
-        }
-    }
-
-    if (io_method == COLL_IO)
-        err = ncmpi_wait_all(ncid, num, req_ids, statuses);
-    else
-        err = ncmpi_wait(ncid, num, req_ids, statuses);
-
-    /* return the first error if there is one */
-    if (status == NC_NOERR) status = err;
-    if (status == NC_NOERR) {
-        for (i=0; i<num; i++)
-            if (statuses[i] != NC_NOERR) {
-                status = statuses[i];
-                break;
-            }
-    }
-
-    if (num > 0) NCI_Free(req_ids);
-
-    return status;
-}
diff --git a/src/lib/macro.h b/src/lib/macro.h
deleted file mode 100644
index cec30b6..0000000
--- a/src/lib/macro.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: macro.h 2590 2016-10-31 21:37:02Z wkliao $ */
-
-#ifndef _H_MACRO
-#define _H_MACRO
-
-#ifndef MAX
-#define MAX(mm,nn) (((mm) > (nn)) ? (mm) : (nn))
-#endif
-#ifndef MIN
-#define MIN(mm,nn) (((mm) < (nn)) ? (mm) : (nn))
-#endif
-
-void *NCI_Malloc_fn(size_t size, int lineno, const char *func, const char *fname);
-void *NCI_Calloc_fn(size_t nelem, size_t elsize, int lineno, const char *func, const char *fname);
-void *NCI_Realloc_fn(void *ptr, size_t size, int lineno, const char *func, const char *fname);
-void  NCI_Free_fn(void *ptr, int lineno, const char *func, const char *fname);
-
-#define NCI_Malloc(a)    NCI_Malloc_fn(a,__LINE__,__func__,__FILE__)
-#define NCI_Calloc(a,b)  NCI_Calloc_fn(a,b,__LINE__,__func__,__FILE__)
-#define NCI_Realloc(a,b) NCI_Realloc_fn(a,b,__LINE__,__func__,__FILE__)
-#define NCI_Free(a)      NCI_Free_fn(a,__LINE__,__func__,__FILE__)
-
-
-#define CHECK_MPI_ERROR(mpi_errorcode, err_msg, nc_err) {                     \
-    if (mpi_errorcode != MPI_SUCCESS) {                                       \
-        char errorString[MPI_MAX_ERROR_STRING];                               \
-        int rank, errorStringLen;                                             \
-        MPI_Comm_rank(ncp->nciop->comm, &rank);                               \
-        MPI_Error_string(mpi_errorcode, errorString, &errorStringLen);        \
-        printf("%2d: MPI Failure at line %d of %s (%s : %s)\n",               \
-               rank, __LINE__, __FILE__, err_msg, errorString);               \
-        mpi_err = nc_err;                                                     \
-    }                                                                         \
-}
-
-#ifdef PNETCDF_DEBUG
-#define DEBUG_RETURN_ERROR(err) {                                       \
-    char *_env_str = getenv("PNETCDF_VERBOSE_DEBUG_MODE");              \
-    if (_env_str != NULL && *_env_str != '0') {                         \
-        int _rank;                                                      \
-        MPI_Comm_rank(MPI_COMM_WORLD, &_rank);                          \
-        fprintf(stderr, "Rank %d: %s error at line %d of %s in %s\n",   \
-        _rank,ncmpi_strerrno(err),__LINE__,__func__,__FILE__);          \
-    }                                                                   \
-    return err;                                                         \
-}
-#define DEBUG_ASSIGN_ERROR(status, err) {                               \
-    char *_env_str = getenv("PNETCDF_VERBOSE_DEBUG_MODE");              \
-    if (_env_str != NULL && *_env_str != '0') {                         \
-        int _rank;                                                      \
-        MPI_Comm_rank(MPI_COMM_WORLD, &_rank);                          \
-        fprintf(stderr, "Rank %d: %s error at line %d of %s in %s\n",   \
-        _rank,ncmpi_strerrno(err),__LINE__,__func__,__FILE__);          \
-    }                                                                   \
-    status = err;                                                       \
-}
-#define DEBUG_TRACE_ERROR {                                             \
-    char *_env_str = getenv("PNETCDF_VERBOSE_DEBUG_MODE");              \
-    if (_env_str != NULL && *_env_str != '0') {                         \
-        int _rank;                                                      \
-        MPI_Comm_rank(MPI_COMM_WORLD, &_rank);                          \
-        fprintf(stderr, "Rank %d: %s error at line %d of %s in %s\n",   \
-        _rank,ncmpi_strerrno(err),__LINE__,__func__,__FILE__);          \
-    }                                                                   \
-}
-#else
-#define DEBUG_RETURN_ERROR(err) return err;
-#define DEBUG_ASSIGN_ERROR(status, err) status = err;
-#define DEBUG_TRACE_ERROR
-#endif
-
-#define GET_ONE_COUNT(count) {                                                \
-    int _i;                                                                   \
-    count = (MPI_Offset*) NCI_Malloc((size_t)varp->ndims * SIZEOF_MPI_OFFSET);\
-    for (_i=0; _i<varp->ndims; _i++)                                          \
-        count[_i] = 1;                                                        \
-}
-
-#ifdef ENABLE_SUBFILING
-#define GET_FULL_DIMENSIONS(start, count) {                                   \
-    int _i;                                                                   \
-    int _ndims = (varp->num_subfiles>1?varp->ndims_org:varp->ndims);          \
-    start = (MPI_Offset*) NCI_Malloc((size_t)_ndims*2*SIZEOF_MPI_OFFSET);     \
-    count = start + _ndims;                                                   \
-                                                                              \
-    for (_i=0; _i<_ndims; _i++) {                                             \
-        NC_dim *dimp;                                                         \
-        int _dimid;                                                           \
-        _dimid = (varp->num_subfiles>1)?varp->dimids_org[_i]:varp->dimids[_i];\
-        dimp = ncmpii_elem_NC_dimarray(&ncp->dims, _dimid);                   \
-        if (dimp->size == NC_UNLIMITED)                                       \
-            count[_i] = NC_get_numrecs(ncp);                                  \
-        else                                                                  \
-            count[_i] = dimp->size;                                           \
-        start[_i] = 0;                                                        \
-    }                                                                         \
-}
-#else /* without subfiling */
-#define GET_FULL_DIMENSIONS(start, count) {                                   \
-    int _i=0;                                                                 \
-    start = (MPI_Offset*) NCI_Malloc((size_t)varp->ndims*2*SIZEOF_MPI_OFFSET);\
-    count = start + varp->ndims;                                              \
-                                                                              \
-    if (IS_RECVAR(varp)) { /* find current numrec if varp is record var */    \
-        count[0] = NC_get_numrecs(ncp);                                       \
-        start[0] = 0;                                                         \
-        _i = 1;                                                               \
-    }                                                                         \
-    for (; _i<varp->ndims; _i++) {                                            \
-        count[_i] = varp->shape[_i];                                          \
-        start[_i] = 0;                                                        \
-    }                                                                         \
-}
-#endif
-
-#define DATATYPE_GET_CONVERT(cdf_ver,xtype,xbuf,ibuf,bnelems,itype,err) {     \
-    /* xtype is the NC variable's external data type stored in the nc file    \
-     * itype (internal type) is the user I/O buffer data type (MPI_Datatype)  \
-     * xbuf is the buffer containing the data read from the nc file in the    \
-     * external representation, to be converted to internal representation r  \
-     * into user buffer, ibuf */                                              \
-    switch(xtype) {                                                           \
-        case NC_BYTE:                                                         \
-            err = ncmpii_x_getn_NC_BYTE(cdf_ver,xbuf,ibuf,bnelems,itype);     \
-            break;                                                            \
-        case NC_UBYTE:                                                        \
-            err = ncmpii_x_getn_NC_UBYTE(xbuf,ibuf,bnelems,itype);            \
-            break;                                                            \
-        case NC_SHORT:                                                        \
-            err = ncmpii_x_getn_NC_SHORT(xbuf,ibuf,bnelems,itype);            \
-            break;                                                            \
-        case NC_USHORT:                                                       \
-            err = ncmpii_x_getn_NC_USHORT(xbuf,ibuf,bnelems,itype);           \
-            break;                                                            \
-        case NC_INT:                                                          \
-            err = ncmpii_x_getn_NC_INT(xbuf,ibuf,bnelems,itype);              \
-            break;                                                            \
-        case NC_UINT:                                                         \
-            err = ncmpii_x_getn_NC_UINT(xbuf,ibuf,bnelems,itype);             \
-            break;                                                            \
-        case NC_FLOAT:                                                        \
-            err = ncmpii_x_getn_NC_FLOAT(xbuf,ibuf,bnelems,itype);            \
-            break;                                                            \
-        case NC_DOUBLE:                                                       \
-            err = ncmpii_x_getn_NC_DOUBLE(xbuf,ibuf,bnelems,itype);           \
-            break;                                                            \
-        case NC_INT64:                                                        \
-            err = ncmpii_x_getn_NC_INT64(xbuf,ibuf,bnelems,itype);            \
-            break;                                                            \
-        case NC_UINT64:                                                       \
-            err = ncmpii_x_getn_NC_UINT64(xbuf,ibuf,bnelems,itype);           \
-            break;                                                            \
-        default:                                                              \
-            err = NC_EBADTYPE;                                                \
-            break;                                                            \
-    }                                                                         \
-}
-
-#define DATATYPE_PUT_CONVERT(cdf_ver,xtype,xbuf,ibuf,cnelems,itype,fillp,err) {\
-    /* xtype is the NC variable's external data type stored in the nc file    \
-     * itype (internal type)is the user I/O buffer data type (MPI_Datatype)   \
-     * ibuf is user buffer containing the data in internal format of itype,   \
-     * they meed to be converted to external format to external buffer, xbuf, \
-     * so xbuf can be used to write to the nc file through the call to        \
-     * MPI_FIle_write call */                                                 \
-    switch(xtype) {                                                           \
-        case NC_BYTE:                                                         \
-            err = ncmpii_x_putn_NC_BYTE(cdf_ver,xbuf,ibuf,cnelems,itype,fillp);\
-            break;                                                            \
-        case NC_UBYTE:                                                        \
-            err = ncmpii_x_putn_NC_UBYTE(xbuf,ibuf,cnelems,itype,fillp);      \
-            break;                                                            \
-        case NC_SHORT:                                                        \
-            err = ncmpii_x_putn_NC_SHORT(xbuf,ibuf,cnelems,itype,fillp);      \
-            break;                                                            \
-        case NC_USHORT:                                                       \
-            err = ncmpii_x_putn_NC_USHORT(xbuf,ibuf,cnelems,itype,fillp);     \
-            break;                                                            \
-        case NC_INT:                                                          \
-            err = ncmpii_x_putn_NC_INT(xbuf,ibuf,cnelems,itype,fillp);        \
-            break;                                                            \
-        case NC_UINT:                                                         \
-            err = ncmpii_x_putn_NC_UINT(xbuf,ibuf,cnelems,itype,fillp);       \
-            break;                                                            \
-        case NC_FLOAT:                                                        \
-            err = ncmpii_x_putn_NC_FLOAT(xbuf,ibuf,cnelems,itype,fillp);      \
-            break;                                                            \
-        case NC_DOUBLE:                                                       \
-            err = ncmpii_x_putn_NC_DOUBLE(xbuf,ibuf,cnelems,itype,fillp);     \
-            break;                                                            \
-        case NC_INT64:                                                        \
-            err = ncmpii_x_putn_NC_INT64(xbuf,ibuf,cnelems,itype,fillp);      \
-            break;                                                            \
-        case NC_UINT64:                                                       \
-            err = ncmpii_x_putn_NC_UINT64(xbuf,ibuf,cnelems,itype,fillp);     \
-            break;                                                            \
-        default:                                                              \
-            err = NC_EBADTYPE;                                                \
-            break;                                                            \
-    }                                                                         \
-}
-
-#endif
diff --git a/src/lib/mpincio.c b/src/lib/mpincio.c
deleted file mode 100644
index 5b98b67..0000000
--- a/src/lib/mpincio.c
+++ /dev/null
@@ -1,633 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: mpincio.c 2676 2016-12-05 03:11:14Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#ifdef HAVE_ACCESS
-#include <unistd.h>  /* access() */
-#endif
-#include <assert.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <errno.h>
-#include <string.h>  /* strchr() */
-#ifdef _MSC_VER /* Microsoft Compilers */
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
-
-/* #define INSTRUMENT 1 */
-#ifdef INSTRUMENT /* debugging */
-#undef NDEBUG
-#include <stdio.h>
-#include "instr.h"
-#endif
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncio.h"
-#include "fbits.h"
-#include "rnd.h"
-#include "macro.h"
-
-#if !defined(NDEBUG) && !defined(X_INT_MAX)
-#define  X_INT_MAX INT_MAX
-#endif
-
-#if 0 /* !defined(NDEBUG) && !defined(X_ALIGN) */
-#define  X_ALIGN 4
-#else
-#undef X_ALIGN
-#endif
-
-#define MAX_NC_ID 1024
-
-/* ncid corresponds to the index of IDalloc. The content of IDalloc[ncid] is
- * either 0 or 1. 1 means ncid is corresponds to an opened file. 0 for
- * otherwise. (not thread-safe)
- */
-static unsigned char IDalloc[MAX_NC_ID];
-
-inline void
-ncmpiio_free(ncio *nciop) {
-    if (nciop != NULL) {
-#ifdef HAVE_MPI_INFO_FREE
-        if (nciop->mpiinfo != MPI_INFO_NULL)
-            MPI_Info_free(&(nciop->mpiinfo));
-#endif
-        if (nciop->comm != MPI_COMM_NULL)
-            MPI_Comm_free(&(nciop->comm));
-
-        NCI_Free(nciop);
-    }
-}
-
-inline ncio *
-ncmpiio_new(const char *path, int ioflags)
-{
-    size_t sz_ncio = M_RNDUP(sizeof(ncio));
-    size_t sz_path = M_RNDUP(strlen(path) +1);
-    ncio *nciop;
-
-    nciop = (ncio *) NCI_Malloc(sz_ncio + sz_path);
-    if (nciop == NULL) return NULL;
-
-    nciop->ioflags  = ioflags;
-    nciop->comm     = MPI_COMM_NULL;
-    nciop->mpiinfo  = MPI_INFO_NULL;
-    nciop->put_size = 0;
-    nciop->get_size = 0;
-
-    nciop->path = (char *) ((char *)nciop + sz_ncio);
-    (void) strcpy((char *)nciop->path, path);
-
-    return nciop;
-}
-
-/*----< ncmpiio_extract_hints() >--------------------------------------------*/
-/* this is where the I/O hints designated to pnetcdf are extracted */
-static
-void ncmpiio_extract_hints(ncio     *nciop,
-                           MPI_Info  info)
-{
-    char value[MPI_MAX_INFO_VAL];
-    int  flag;
-
-    /* value 0 indicates the hint is not set */
-    nciop->hints.h_align                = 0;
-    nciop->hints.v_align                = 0;
-    nciop->hints.r_align                = 0;
-    nciop->hints.header_read_chunk_size = 0;
-#ifdef ENABLE_SUBFILING
-    nciop->hints.subfile_mode           = 1;
-    nciop->hints.num_subfiles           = 0;
-#endif
-
-    /* extract NC hints */
-    if (info == MPI_INFO_NULL) return;
-
-    MPI_Info_get(info, "nc_header_align_size", MPI_MAX_INFO_VAL-1, value,
-                 &flag);
-    if (flag) nciop->hints.h_align = strtoll(value,NULL,10);
-
-    MPI_Info_get(info, "nc_var_align_size",    MPI_MAX_INFO_VAL-1, value,
-                 &flag);
-    if (flag) nciop->hints.v_align = strtoll(value,NULL,10);
-
-    MPI_Info_get(info, "nc_record_align_size", MPI_MAX_INFO_VAL-1,
-                 value, &flag);
-    if (flag) nciop->hints.r_align = strtoll(value,NULL,10);
-
-    MPI_Info_get(info, "nc_header_read_chunk_size", MPI_MAX_INFO_VAL-1,
-                 value, &flag);
-    if (flag) nciop->hints.header_read_chunk_size = strtoll(value,NULL,10);
-
-#ifdef ENABLE_SUBFILING
-    MPI_Info_get(info, "pnetcdf_subfiling", MPI_MAX_INFO_VAL-1,
-                 value, &flag);
-    if (flag && strcasecmp(value, "disable") == 0)
-        nciop->hints.subfile_mode = 0;
-
-    MPI_Info_get(info, "nc_num_subfiles", MPI_MAX_INFO_VAL-1,
-                 value, &flag);
-    if (flag) nciop->hints.num_subfiles = (int)strtol(value,NULL,10);
-#endif
-
-    /* nc_header_align_size, nc_var_align_size, and nciop->hints.r_align
-     * take effect when a file is created or opened and later adding more
-     * header or variable data */
-
-    if (nciop->hints.h_align < 0)
-        nciop->hints.h_align = 0;
-    if (nciop->hints.v_align < 0)
-        nciop->hints.v_align = 0;
-    if (nciop->hints.r_align < 0)
-        nciop->hints.r_align = 0;
-    if (nciop->hints.header_read_chunk_size < 0)
-        nciop->hints.header_read_chunk_size = 0;
-#ifdef ENABLE_SUBFILING
-    if (nciop->hints.num_subfiles < 0)
-        nciop->hints.num_subfiles = 0;
-    /* override subfile hints if env var is set */
-    char *num_sf_env;
-    num_sf_env = getenv("NC_NUM_SUBFILES");
-    if (num_sf_env != NULL)
-        nciop->hints.num_subfiles = (int)strtol(num_sf_env,NULL,10);
-    if (nciop->hints.subfile_mode == 0)
-        nciop->hints.num_subfiles = 0;
-#endif
-}
-
-/*----< ncmpiio_create() >---------------------------------------------------*/
-int
-ncmpiio_create(MPI_Comm     comm,
-               const char  *path,
-               int          ioflags,
-               MPI_Info     info,
-               NC          *ncp)
-{
-    ncio *nciop;
-    int i, rank, mpireturn, err;
-    int mpiomode = MPI_MODE_RDWR | MPI_MODE_CREATE;
-
-    /* checking path consistency is expected done in MPI-IO */
-
-    MPI_Comm_rank(comm, &rank);
-
-    /* NC_CLOBBER is the default mode, even if it is not used in cmode.
-     * Note ioflags has been checked for consistency before entering this API.
-     */
-    if (fIsSet(ioflags, NC_NOCLOBBER)) {
-        /* check if file exists: NetCDF requires NC_EEXIST returned if the file
-         * already exists and NC_NOCLOBBER mode is used in create
-         */
-#ifdef HAVE_ACCESS
-        int file_exist;
-        /* if access() is available, use it to check whether file already exists
-         * rank 0 calls access() and broadcasts file_exist */
-        if (rank == 0) {
-            /* remove the file system type prefix name if there is any.
-             * For example, path=="lustre:/home/foo/testfile.nc",
-             * use "/home/foo/testfile.nc" when calling access()
-             */
-            char *filename = strchr(path, ':');
-            if (filename == NULL) /* no prefix */
-                filename = (char*)path;
-            else
-                filename++;
-
-            if (access(filename, F_OK) == 0) file_exist = 1;
-            else                             file_exist = 0;
-        }
-        TRACE_COMM(MPI_Bcast)(&file_exist, 1, MPI_INT, 0, comm);
-        if (file_exist) DEBUG_RETURN_ERROR(NC_EEXIST)
-#else
-        /* use MPI_MODE_EXCL mode in MPI_File_open and check returned error */
-        fSet(mpiomode, MPI_MODE_EXCL);
-#endif
-    }
-    else { /* NC_CLOBBER is the default mode in create */
-        /* rank 0 deletes the file and ignores error code for file not exist
-         * Note calling MPI_File_set_size is expensive as it calls truncate()
-         */
-        if (rank == 0) {
-#ifdef HAVE_UNLINK
-            err = unlink(path);
-            if (err < 0 && errno != ENOENT) /* ignore ENOENT: file not exist */
-                DEBUG_ASSIGN_ERROR(err, NC_EFILE) /* other error */
-            else
-                err = NC_NOERR;
-#else
-            err = NC_NOERR;
-            TRACE_IO(MPI_File_delete)((char*)path, MPI_INFO_NULL);
-            if (mpireturn != MPI_SUCCESS) {
-                int errorclass;
-                MPI_Error_class(mpireturn, &errorclass);
-                if (errorclass != MPI_ERR_NO_SUCH_FILE) /* ignore this error */
-                    err = ncmpii_handle_error(mpireturn, "MPI_File_delete");
-            }
-#endif
-        }
-        /* all processes must wait here until file deletion is completed */
-        TRACE_COMM(MPI_Bcast)(&err, 1, MPI_INT, 0, comm);
-        if (err != NC_NOERR) return err;
-    }
-
-    /* ignore if NC_NOWRITE set by user */
-    fSet(ioflags, NC_WRITE);
-
-    /* allocate ncio object */
-    nciop = ncmpiio_new(path, ioflags);
-    if (nciop == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    nciop->mpiomode  = MPI_MODE_RDWR;
-    nciop->mpioflags = 0;
-
-    /* intialize hints and extract PnetCDF-level hints */
-    ncmpiio_extract_hints(nciop, info);
-
-    /* open file in parallel */
-    TRACE_IO(MPI_File_open)(comm, (char *)path, mpiomode, info,
-                            &nciop->collective_fh);
-    if (mpireturn != MPI_SUCCESS) {
-        ncmpiio_free(nciop);
-#ifndef HAVE_ACCESS
-        if (fIsSet(ioflags, NC_NOCLOBBER)) {
-            /* This is the case when NC_NOCLOBBER is used in file creation and
-             * function access() is not available. MPI_MODE_EXCL is set in open
-             * mode. When MPI_MODE_EXCL is used and the file already exists,
-             * MPI-IO should return error class MPI_ERR_FILE_EXISTS. But, some
-             * MPI-IO implementations (older ROMIO) do not correctly return
-             * this error class. In this case, we can do the followings: check
-             * errno to see if it set to EEXIST. Note usually rank 0 makes the
-             * file open call and can be the only one having errno set.
-             */
-            TRACE_COMM(MPI_Bcast)(&errno, 1, MPI_INT, 0, comm);
-            if (errno == EEXIST) DEBUG_RETURN_ERROR(NC_EEXIST)
-        }
-#endif
-        return ncmpii_handle_error(mpireturn, "MPI_File_open");
-        /* for NC_NOCLOBBER, MPI_MODE_EXCL was added to mpiomode. If the file
-         * already exists, MPI-IO should return error class MPI_ERR_FILE_EXISTS
-         * which PnetCDF will return error code NC_EEXIST. This is checked
-         * inside of ncmpii_handle_error()
-         */
-    }
-
-    for (i=0; i<MAX_NC_ID; i++)
-        if (IDalloc[i] == 0)
-            break;
-
-    if (i == MAX_NC_ID) {
-        ncmpiio_free(nciop);
-        DEBUG_RETURN_ERROR(NC_ENFILE)
-    }
-
-    nciop->fd = i;
-    IDalloc[i] = 1;
-
-    /* collective I/O mode is the default mode */
-    set_NC_collectiveFh(nciop);
-
-    /* duplicate communicator as user may free it later */
-    mpireturn = MPI_Comm_dup(comm, &(nciop->comm));
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_Comm_dup");
-
-    /* get the file info actually used by MPI-IO (maybe alter user's info) */
-    mpireturn = MPI_File_get_info(nciop->collective_fh, &nciop->mpiinfo);
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_File_get_info");
-
-    ncp->nciop = nciop;
-    return NC_NOERR;
-}
-
-/*----< ncmpiio_open() >-----------------------------------------------------*/
-int
-ncmpiio_open(MPI_Comm     comm,
-             const char  *path,
-             int          ioflags,
-             MPI_Info     info,
-             NC          *ncp)
-{
-    ncio *nciop;
-    int i, mpireturn;
-    int mpiomode = fIsSet(ioflags, NC_WRITE) ? MPI_MODE_RDWR : MPI_MODE_RDONLY;
-
-    /* Note ioflags has been checked for consistency before entering this API.
-     */
-
-    assert(ncp != NULL);
-
-    /* checking path consistency is expected done in MPI-IO */
-
-    /* When open an non-existing file for read, we can either call access() to
-     * check and return error code NC_ENOENT, or call MPI_File_open and expect
-     * error class MPI_ERR_NO_SUCH_FILE. For now, we let MPI-IO to check.
-     */
-#if 0 && defined(HAVE_ACCESS)
-    if (mpiomode == MPI_MODE_RDONLY) { /* file should already exit */
-        int rank, file_exist;
-        MPI_Comm_rank(comm, &rank);
-        if (rank == 0) {
-            if (access(path, F_OK) == 0) file_exist = 1;
-            else                         file_exist = 0;
-        }
-        TRACE_COMM(MPI_Bcast)(&file_exist, 1, MPI_INT, 0, comm);
-        if (!file_exist) DEBUG_RETURN_ERROR(NC_ENOENT)
-    }
-#endif
-
-    /* allocate ncio object */
-    nciop = ncmpiio_new(path, ioflags);
-    if (nciop == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    nciop->mpiomode  = mpiomode;
-    nciop->mpioflags = 0;
-
-    /* intialize hints and extract PnetCDF-level hints */
-    ncmpiio_extract_hints(nciop, info);
-
-    /* open file in parallel */
-    TRACE_IO(MPI_File_open)(comm, (char *)path, mpiomode, info,
-                            &nciop->collective_fh);
-    if (mpireturn != MPI_SUCCESS) {
-        ncmpiio_free(nciop);
-        return ncmpii_handle_error(mpireturn, "MPI_File_open");
-    }
-
-    /* check if max number of opened files is reached */
-    for (i=0; i<MAX_NC_ID && IDalloc[i] != 0; i++);
-    if (i == MAX_NC_ID) {
-        ncmpiio_free(nciop);
-        DEBUG_RETURN_ERROR(NC_ENFILE)
-    }
-    nciop->fd = i;
-    IDalloc[i] = 1;
-
-    /* default mode is collective */
-    set_NC_collectiveFh(nciop);
-
-    /* duplicate MPI communicator as user may free it later */
-    mpireturn = MPI_Comm_dup(comm, &(nciop->comm));
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_Comm_dup");
-
-    /* get the file info used by MPI-IO */
-    mpireturn = MPI_File_get_info(nciop->collective_fh, &nciop->mpiinfo);
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_File_get_info");
-
-    ncp->nciop = nciop;
-    return NC_NOERR;
-}
-
-/*----< ncmpiio_sync() >-----------------------------------------------------*/
-/* This function must be called collectively, no matter if it is in collective
- * or independent data mode.
- */
-inline int
-ncmpiio_sync(ncio *nciop) {
-#ifndef DISABLE_FILE_SYNC
-    int mpireturn;
-
-    if (NC_independentFhOpened(nciop)) {
-        TRACE_IO(MPI_File_sync)(nciop->independent_fh);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_File_sync");
-    }
-    if (NC_collectiveFhOpened(nciop)) {
-        TRACE_IO(MPI_File_sync)(nciop->collective_fh);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_File_sync");
-    }
-    TRACE_COMM(MPI_Barrier)(nciop->comm);
-#endif
-    return NC_NOERR;
-}
-
-/*----< ncmpiio_close() >----------------------------------------------------*/
-int
-ncmpiio_close(ncio *nciop, int doUnlink) {
-    int mpireturn;
-
-    if (nciop == NULL) /* this should never occur */
-        DEBUG_RETURN_ERROR(NC_EINVAL)
-
-    if (NC_independentFhOpened(nciop)) {
-        TRACE_IO(MPI_File_close)(&(nciop->independent_fh));
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_File_close");
-    }
-
-    if (NC_collectiveFhOpened(nciop)) {
-        TRACE_IO(MPI_File_close)(&(nciop->collective_fh));
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_File_close");
-    }
-    IDalloc[nciop->fd] = 0;
-
-    if (doUnlink) {
-        TRACE_IO(MPI_File_delete)((char *)nciop->path, nciop->mpiinfo);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_File_delete");
-    }
-    ncmpiio_free(nciop);
-
-    return NC_NOERR;
-}
-
-/*----< ncmpiio_move() >-----------------------------------------------------*/
-int
-ncmpiio_move(ncio *const nciop,
-             MPI_Offset  to,
-             MPI_Offset  from,
-             MPI_Offset  nbytes)
-{
-    int rank, nprocs, bufcount, mpireturn, err, status=NC_NOERR, min_st;
-    void *buf;
-    int chunk_size=1048576; /* move 1 MB per process at a time */
-    MPI_Status mpistatus;
-
-    MPI_Comm_size(nciop->comm, &nprocs);
-    MPI_Comm_rank(nciop->comm, &rank);
-
-    /* if the file striping unit size is known (obtained from MPI-IO), then
-     * we use that instead of 1 MB */
-    if (nciop->striping_unit > 0) chunk_size = nciop->striping_unit;
-
-    /* buf will be used as a temporal buffer to move data in chunks, i.e.
-     * read a chunk and later write to the new location */
-    buf = NCI_Malloc((size_t)chunk_size);
-    if (buf == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    /* make fileview entire file visible */
-    TRACE_IO(MPI_File_set_view)(nciop->collective_fh, 0, MPI_BYTE, MPI_BYTE,
-                                "native", MPI_INFO_NULL);
-
-    /* move the variable starting from its tail toward its beginning */
-    while (nbytes > 0) {
-        int get_size=0;
-
-        /* calculate how much to move at each time */
-        bufcount = chunk_size;
-        if (nbytes < (MPI_Offset)nprocs * chunk_size) {
-            /* handle the last group of chunks */
-            MPI_Offset rem_chunks = nbytes / chunk_size;
-            if (rank > rem_chunks) /* these processes do not read/write */
-                bufcount = 0;
-            else if (rank == rem_chunks) /* this process reads/writes less */
-                bufcount = (int)(nbytes % chunk_size);
-            nbytes = 0;
-        }
-        else {
-            nbytes -= chunk_size*nprocs;
-        }
-
-        /* explicitly initialize mpistatus object to 0, see comments below */
-        memset(&mpistatus, 0, sizeof(MPI_Status));
-
-        /* read the original data @ from+nbytes+rank*chunk_size */
-        TRACE_IO(MPI_File_read_at_all)(nciop->collective_fh,
-                                       from+nbytes+rank*chunk_size,
-                                       buf, bufcount, MPI_BYTE, &mpistatus);
-        if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_read_at_all");
-            if (err == NC_EFILE) DEBUG_ASSIGN_ERROR(status, NC_EREAD)
-        }
-        else {
-            /* for zero-length read, MPI_Get_count may report incorrect result
-             * for some MPICH version, due to the uninitialized MPI_Status
-             * object passed to MPI-IO calls. Thus we initialize it above to
-             * work around. Otherwise we can just use:
-            nciop->get_size += bufcount;
-             */
-            MPI_Get_count(&mpistatus, MPI_BYTE, &get_size);
-            nciop->get_size += get_size;
-        }
-
-        /* MPI_Barrier(nciop->comm); */
-        /* important, in case new region overlaps old region */
-        TRACE_COMM(MPI_Allreduce)(&status, &min_st, 1, MPI_INT, MPI_MIN, nciop->comm);
-        status = min_st;
-        if (status != NC_NOERR) break;
-
-        /* write to new location @ to+nbytes+rank*chunk_size
-         *
-         * Ideally, we should write the amount of get_size returned from a call
-         * to MPI_Get_count in the below MPI write. This is in case some
-         * variables are defined but never been written. The value returned by
-         * MPI_Get_count is supposed to be the actual amount read by the MPI
-         * read call. If partial data (or none) is available for read, then we
-         * should just write that amount. Note this MPI write is collective,
-         * and thus all processes must participate the call even if get_size
-         * is 0. However, in some MPICH versions MPI_Get_count fails to report
-         * the correct value due to an internal error that fails to initialize
-         * the MPI_Status object. Therefore, the solution can be either to
-         * explicitly initialize the status object to zeros, or to just use
-         * bufcount for write. Note that the latter will write the variables
-         * that have not been written before. Below uses the former option.
-         */
-        TRACE_IO(MPI_File_write_at_all)(nciop->collective_fh,
-                                        to+nbytes+rank*chunk_size,
-                                        buf, get_size /* bufcount */,
-                                        MPI_BYTE, &mpistatus);
-        if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_write_at_all");
-            if (err == NC_EFILE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
-        }
-        else {
-            /* for zero-length read, MPI_Get_count may report incorrect result
-             * for some MPICH version, due to the uninitialized MPI_Status
-             * object passed to MPI-IO calls. Thus we initialize it above to
-             * work around. Otherwise we can just use:
-            nciop->put_size += bufcount;
-             */
-            int put_size;
-            MPI_Get_count(&mpistatus, MPI_BYTE, &put_size);
-            nciop->put_size += put_size;
-        }
-        TRACE_COMM(MPI_Allreduce)(&status, &min_st, 1, MPI_INT, MPI_MIN, nciop->comm);
-        status = min_st;
-        if (status != NC_NOERR) break;
-    }
-    NCI_Free(buf);
-    return status;
-}
-
-/*----< ncmpiio_move_fixed_vars() >-------------------------------------------*/
-/* move one fixed variable at a time, only when the new begin > old begin */
-int
-ncmpiio_move_fixed_vars(NC *ncp,
-                        NC *old)
-{
-    int i, err, status=NC_NOERR;
-
-    /* move starting from the last fixed variable */
-    for (i=old->vars.ndefined-1; i>=0; i--) {
-        if (IS_RECVAR(old->vars.value[i])) continue;
-
-        MPI_Offset from = old->vars.value[i]->begin;
-        MPI_Offset to   = ncp->vars.value[i]->begin;
-        if (to > from) {
-            err = ncmpiio_move(ncp->nciop, to, from, ncp->vars.value[i]->len);
-            if (status == NC_NOERR) status = err;
-        }
-    }
-    return status;
-}
-
-int ncmpiio_get_hint(NC *ncp, char *key, char *value, int *flag)
-{
-    MPI_Info info;
-
-    /* info hints can come from the file system but can also come from
-     * user-specified hints.  the MPI implementation probably should
-     * merge the two, but some implementations not only ignore hints
-     * they don't understand, but also fail to incorporate those hints
-     * into the info struct (this is unfortunate for us, but entirely
-     * standards compliant).
-     *
-     * Our policy will be to use the implementation's info first
-     * (perhaps the implementation knows something about the underlying
-     * file system), and then consult user-supplied hints should we not
-     * find the hint in the info associated with the MPI file descriptor
-     */
-
-    /* first check the hint from the MPI library ... */
-    MPI_File_get_info(ncp->nciop->collective_fh, &info);
-    if (info != MPI_INFO_NULL)
-        MPI_Info_get(info, key, MPI_MAX_INFO_VAL-1, value, flag);
-    if (*flag == 0)  {
-        /* ... then check the hint passed in through ncmpi_create */
-        if (ncp->nciop->mpiinfo != MPI_INFO_NULL) {
-            MPI_Info_get(ncp->nciop->mpiinfo, key,
-                    MPI_MAX_INFO_VAL-1, value, flag);
-        }
-    }
-#ifdef HAVE_MPI_INFO_FREE
-    if (info != MPI_INFO_NULL)
-        MPI_Info_free(&info);
-#endif
-
-    return 0;
-}
-
-/*
- * Local variables:
- *  c-indent-level: 4
- *  c-basic-offset: 4
- * End:
- *
- * vim: ts=8 sts=4 sw=4 expandtab
- */
diff --git a/src/lib/mpinetcdf.c b/src/lib/mpinetcdf.c
deleted file mode 100644
index 442b139..0000000
--- a/src/lib/mpinetcdf.c
+++ /dev/null
@@ -1,1430 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: mpinetcdf.c 2686 2016-12-07 20:02:41Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <assert.h>
-#include <string.h>  /* strtok(), strcpy(), strchr() */
-#include <strings.h> /* strcasecmp() */
-#include <fcntl.h>   /* open() */
-#include <unistd.h>  /* read(), close() */
-#include <errno.h>   /* errno */
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "macro.h"
-#ifdef ENABLE_SUBFILING
-#include "subfile.h"
-#endif
-
-/* The const string below is for the RCS ident(1) command to find a string like
- * "\044Id: \100(#) PnetCDF library version 1.4.0 of 16 Nov 2013 $"
- * in the library file (libpnetcdf.a).
- *
- * This string must be made a global variable. Otherwise, it won't work
- * when compiled with optimization options, e.g. -O2
- */
-char const pnetcdf_libvers[] =
-        "\044Id: \100(#) PnetCDF library version "PNETCDF_VERSION" of "PNETCDF_RELEASE_DATE" $";
-
-/* a cleaner version for running command "strings", e.g.
- * % strings libpnetcdf.a | grep "PnetCDF library version"
- * or
- * % strings a.out | grep "PnetCDF library version"
- */
-char pnetcdf_lib_vers[] = "PnetCDF library version "PNETCDF_VERSION" of "PNETCDF_RELEASE_DATE;
-
-/* pnetcdf_libvers is slightly different from the one returned from
- * ncmpi_inq_libvers(). The string pnetcdf_libvers is for command "ident" to
- * use. People can run command ident libpnetcdf.a to obtain the version of a
- * library (or an executable built from that library). In PnetCDF case, the
- * command will print the string of pnetcdf_libvers. Command "ident' looks for
- * a specific keyword pattern and print it. See man page of ident.
- *
- * The API ncmpi_inq_libvers() below on the other hand returns a string to be
- * used by the utility tools like ncmpidump, ncmpigen, etc. Check the last line
- * of output from command "ncmpidump -v".
- */
-
-/*----< ncmpi_inq_libvers() >------------------------------------------------*/
-inline const char*
-ncmpi_inq_libvers(void) {
-
-    /* match the style used by netCDF API nc_inq_libvers()
-     * for example, "4.3.0 of Jun 16 2013 12:11:30 $" */
-    /* we need some silly operation so the compiler will emit the otherwise
-     * unused pnetcdf_libvers */
-    if ((void *)pnetcdf_libvers != (void *)ncmpi_inq_libvers) {
-	; /* do nothing */
-    }
-    return PNETCDF_VERSION " of " PNETCDF_RELEASE_DATE;
-}
-
-/* Begin Of Dataset Functions */
-
-/*----< ncmpi_create() >-----------------------------------------------------*/
-/**  \ingroup datasets
-Create a new netCDF file.
-
-This function creates a new netCDF dataset, returning a netCDF ID that can
-subsequently be used to refer to the netCDF dataset in other PnetCDF function
-calls. The new netCDF dataset opened for write access and placed in define
-mode, ready for you to add dimensions, variables, and attributes.
-
-\param comm The MPI communicator. This API is a collective routine: all
-processes must provide the same value for cmode, and all processes must provide
-filenames that reference the same file. (Values for info may vary.) comm must
-be an MPI intracommunicator.
-
-\param path The file name of the new netCDF dataset.
-
-\param cmode The creation mode flag. The following flags are available:
-NC_NOCLOBBER, NC_SHARE, NC_64BIT_OFFSET, and NC_64BIT_DATA.
-
-\param info MPI info object. It is used to provide file access hints,including
-existing MPI hints as well as PnetCDF hints.  For MPI hints, users are referred
-to MPI user guide for further information. For PnetCDF hints see below.
-
-\param ncidp Pointer to location where returned netCDF ID is to be stored.
-
-<h2>The cmode Flag</h2>
-
-The cmode flag is used to control the type of file created, and some aspects of
-how it may be used.
-
-Setting NC_NOCLOBBER means you do not want to clobber (overwrite) an existing
-dataset; an error (NC_EEXIST) is returned if the specified dataset already
-exists.
-
-The NC_SHARE flag in PnetCDF does not mean sharing the file with the processes
-in this MPI program. Instead, it means the file will be concurrently shared
-by a different MPI program. Hence, PnetCDF calls MPI_File_sync() right after
-every time an MPI_File_write() call is made. This includes writing to metadata
-(file header) as well as array data.
-
-Setting NC_64BIT_OFFSET causes PnetCDF to create a 64-bit offset format file
-(CDF-2), instead of a netCDF classic format file.  The 64-bit offset format
-imposes far fewer restrictions on large (i.e. over 2 GB) data files.  See Large
-File Support (The PnetCDF Users Guide).
-
-Setting NC_64BIT_DATA causes PnetCDF to create a 64-bit data format file
-(CDF-5). The 64-bit data format allows define variables with more than 4
-billion array elements. See Large File Support (The PnetCDF Users Guide).
-
-A zero value (defined for convenience as NC_CLOBBER) specifies the default
-behavior: overwrite any existing dataset with the same file name.
-
-<h2>The info object Flag</h2>
-
-Starting from version 1.3.1, the following PnetCDF hints are available:
-
-- nc_header_align_size: This hint allows some extra space between the end of
-the header describing the entire file and the first variable. If you have an
-application that periodically wishes to add more variables to an already
-existing file, expanding the file header size may result in an expensive move
-of the entire data file to make room for the definition of the new variables.
-Hence, setting this hint to a value that is big enough to accommodate any
-additional variables means you may leave your application code as-is and yet
-still see tremendous performance improvements.
-
-- nc_var_align_size: If you are writing to a block-based parallel file system,
-such as IBM's GPFS or Lustre, then an application write becomes a block write
-at the file system layer. If a write straddles two blocks, then locks must be
-acquired for both blocks. Aligning the start of a variable to a block boundary,
-combined with collective I/O optimization in the MPI-IO library can often
-eliminate all unaligned file system accesses.
-
-- nc_record_align_size: This hint aligns the starting file offset of the
-record variable section.
-
-- nc_header_read_chunk_size: PnetCDF reads the file headers in chunks. This
-hint indicates the chunk size (in bytes). The default is 256 KB.
-
-\returns ::NC_NOERR No error.
-\returns ::NC_ENOMEM System out of memory.
-\returns ::NC_EEXIST Specified file name exists when using NC_NOCLOBBER.
-Can be use to check if the file exists.
-\returns ::NC_EMULTIDEFINE_OMODE Bad file create/open mode or modes are
-inconsistent across processes
-\returns ::NC_EFILE: Unknown error in file operation
-
-<h1>Examples</h1>
-
-In this example we create a netCDF dataset named foo.nc; we want the dataset to
-be created in the current directory only if a dataset with that name does not
-already exist:
-
- at code
-     #include <mpi.h>
-     #include <pnetcdf.h>
-        ...
-     int status;
-     int ncid;
-     MPI_Info info;
-        ...
-     MPI_Info_create (&info);
-     MPI_Info_set (info, "romio_no_indep_rw",    "true");
-     MPI_Info_set (info, "nc_header_align_size", "4194304");
-     MPI_Info_set (info, "nc_var_align_size",    "1048576");
-     MPI_Info_set (info, "nc_record_align_size", "1048576");
-
-     status = ncmpi_create(MPI_COMM_WORLD, "foo.nc", NC_NOCLOBBER, info, &ncid);
-     if (status != NC_NOERR) handle_error(status);
-     MPI_Info_free(&info);
- at endcode
-
-In this example we create a netCDF dataset named foo.nc. It will
-be in the CDF-5 format.
-
- at code
-     #include <mpi.h>
-     #include <pnetcdf.h>
-        ...
-     int status;
-     int ncid;
-     int cmode = NC_NOCLOBBER | NC_64BIT_DATA;
-     MPI_Info info = MPI_INFO_NULL;
-        ...
-     status = ncmpi_create(MPI_COMM_WORLD, "foo.nc", cmode, info, &ncid);
-     if (status != NC_NOERR) handle_error(status);
- at endcode
-*/
-int
-ncmpi_create(MPI_Comm    comm,
-             const char *path,
-             int         cmode,
-             MPI_Info    info,
-             int        *ncidp)
-{
-    int i, err, status, safe_mode=0, mpireturn, default_format, root_cmode;
-    char *env_str;
-    MPI_Info   env_info=MPI_INFO_NULL;
-    MPI_Offset chunksize=NC_DEFAULT_CHUNKSIZE;
-    NC *ncp=NULL;
-
-#ifdef PNETCDF_DEBUG
-    safe_mode = 1;
-    /* this configure time setting will be overwritten by the run-time
-     * environment variable PNETCDF_SAFE_MODE */
-#endif
-    /* get environment variable PNETCDF_SAFE_MODE
-     * if it is set to 1, then we perform a strict parameter consistent test
-     */
-    if ((env_str = getenv("PNETCDF_SAFE_MODE")) != NULL) {
-        if (*env_str == '0') safe_mode = 0;
-        else                 safe_mode = 1;
-        /* if PNETCDF_SAFE_MODE is set but without a value, *env_str can
-         * be '\0' (null character). In this case, safe_mode is enabled */
-    }
-
-    /* path's validity is checked in MPI-IO with error code MPI_ERR_BAD_FILE
-     * path consistency is checked in MPI-IO with error code MPI_ERR_NOT_SAME
-     */
-    if (path == NULL || *path == '\0') DEBUG_RETURN_ERROR(NC_EBAD_FILE)
-
-    /* check default format */
-    ncmpi_inq_default_format(&default_format);
-
-    /* check if cmode is consistent with root's */
-    root_cmode = cmode;
-    TRACE_COMM(MPI_Bcast)(&root_cmode, 1, MPI_INT, 0, comm);
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-
-    /* only root's cmode matters */
-    status = NC_NOERR;
-    if (root_cmode != cmode) {
-        cmode = root_cmode;
-        DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_CMODE)
-    }
-
-    if (safe_mode) { /* return now if cmode is inconsistent */
-        err = status;
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        if (status != NC_NOERR) return status;
-    } /* otherwise, use root's cmode to create file */
-
-#if SIZEOF_MPI_OFFSET <  8
-    /* check cmode */
-    if (fIsSet(cmode, NC_64BIT_DATA)     ||
-        fIsSet(cmode, NC_64BIT_OFFSET)   ||
-        default_format == NC_FORMAT_CDF5 || 
-        default_format == NC_FORMAT_CDF2) {
-        /* unlike serial netcdf, we will not bother to support
-         * NC_64BIT_OFFSET on systems with off_t smaller than 8 bytes.
-         * serial netcdf has proven it's possible if datasets are small, but
-         * that's a hassle we don't want to worry about */
-        DEBUG_RETURN_ERROR(NC_ESMALL)
-    }
-#endif
-
-    /* NC_DISKLESS is not supported yet */
-    if (cmode & NC_DISKLESS) DEBUG_RETURN_ERROR(NC_EINVAL_CMODE)
-
-    /* NC_MMAP is not supported yet */
-    if (cmode & NC_MMAP) DEBUG_RETURN_ERROR(NC_EINVAL_CMODE)
-
-    /* It is illegal to have both NC_64BIT_OFFSET & NC_64BIT_DATA */
-    if ((cmode & (NC_64BIT_OFFSET|NC_64BIT_DATA)) ==
-                 (NC_64BIT_OFFSET|NC_64BIT_DATA)) {
-        DEBUG_RETURN_ERROR(NC_EINVAL_CMODE)
-    }
-
-    /* take hints from the environment variable PNETCDF_HINTS
-     * a string of hints separated by ";" and each hint is in the
-     * form of hint=value. E.g. cb_nodes=16;cb_config_list=*:6
-     * If this environment variable is set, it overrides any values that
-     * were set by using calls to MPI_Info_set in the application code.
-     */
-    if (info != MPI_INFO_NULL) {
-#ifdef HAVE_MPI_INFO_DUP
-        mpireturn = MPI_Info_dup(info, &env_info);
-        if (mpireturn != MPI_SUCCESS)
-            DEBUG_RETURN_ERROR(ncmpii_handle_error(mpireturn, "MPI_Info_dup"))
-#else
-        printf("Warning: MPI info is ignored as MPI_Info_dup() is missing\n");
-#endif
-    }
-    if ((env_str = getenv("PNETCDF_HINTS")) != NULL) {
-        if (env_info == MPI_INFO_NULL)
-            MPI_Info_create(&env_info); /* ignore error */
-
-        char *env_str_cpy, *key;
-        env_str_cpy = (char*) NCI_Malloc(strlen(env_str)+1);
-        strcpy(env_str_cpy, env_str);
-        key = strtok(env_str_cpy, ";");
-        while (key != NULL) {
-            char *val;
-            val = strchr(key, '=');
-            if (val == NULL) continue; /* ill-formed hint */
-            *val = '\0';
-            val++;
-            /* printf("env hint: key=%s val=%s\n",key,val); */
-            MPI_Info_set(env_info, key, val); /* override or add */
-            key = strtok(NULL, ";");
-        }
-        NCI_Free(env_str_cpy);
-    }
-
-    /* get header chunk size from user info */
-    if (env_info != MPI_INFO_NULL) {
-        int flag;
-        char value[MPI_MAX_INFO_VAL];
-        MPI_Info_get(env_info, "nc_header_read_chunk_size", MPI_MAX_INFO_VAL-1,
-                     value, &flag);
-        if (flag) chunksize = strtoll(value,NULL,10);
-    }
-
-    /* allocate buffer for header object NC */
-    ncp = ncmpii_new_NC(&chunksize);
-    if (ncp == NULL) {
-        if (env_info != MPI_INFO_NULL) MPI_Info_free(&env_info);
-        DEBUG_RETURN_ERROR(NC_ENOMEM)
-    }
-
-    ncp->safe_mode = safe_mode;
-    ncp->abuf      = NULL;
-    ncp->old       = NULL;
-#ifdef ENABLE_SUBFILING
-    ncp->subfile_mode = 1;
-    if (env_info != MPI_INFO_NULL) {
-        int flag;
-        char value[MPI_MAX_INFO_VAL];
-        MPI_Info_get(env_info, "pnetcdf_subfiling", MPI_MAX_INFO_VAL-1,
-                     value, &flag);
-        if (flag && strcasecmp(value, "disable") == 0)
-            ncp->subfile_mode = 0;
-    }
-    ncp->ncid_sf = -1; /* subfile ncid; init to -1 */
-    ncp->nc_num_subfiles = 0; /* num_subfiles; init to 0 */
-#endif
-
-    /* set the file format version based on the create mode, cmode */
-    if (fIsSet(cmode, NC_64BIT_DATA)) {
-        fSet(ncp->flags, NC_64BIT_DATA);
-        ncp->format = 5;
-    } else if (fIsSet(cmode, NC_64BIT_OFFSET)) {
-        fSet(ncp->flags, NC_64BIT_OFFSET);
-        ncp->format = 2;
-    } else {
-        if (default_format == NC_FORMAT_CDF5) {
-            fSet(ncp->flags, NC_64BIT_DATA);
-            ncp->format = 5;
-        }
-        else if (default_format == NC_FORMAT_CDF2) {
-            fSet(ncp->flags, NC_64BIT_OFFSET);
-            ncp->format = 2;
-        }
-        else {
-            fSet(ncp->flags, NC_32BIT);
-            ncp->format = 1;
-        }
-    }
-
-    /* find the true header size (not-yet aligned) */
-    ncp->xsz = ncmpii_hdr_len_NC(ncp);
-
-    /* PnetCDF default fill mode is no fill */
-    fSet(ncp->flags, NC_NOFILL);
-
-    /* open file collectively */
-    err = ncmpiio_create(comm, path, cmode, env_info, ncp);
-    if (err != NC_NOERR) { /* fatal error */
-        if (err == NC_EMULTIDEFINE_OMODE) err = NC_EMULTIDEFINE_CMODE;
-        if (env_info != MPI_INFO_NULL) MPI_Info_free(&env_info);
-        ncmpii_free_NC(ncp);
-        DEBUG_RETURN_ERROR(err)
-    }
-
-    fSet(ncp->flags, NC_CREAT);
-
-    /* initialize arrays storing pending non-blocking requests */
-    ncp->numGetReqs = 0;
-    ncp->numPutReqs = 0;
-    ncp->get_list   = NULL;
-    ncp->put_list   = NULL;
-
-    /* add to the linked list of opened files */
-    ncmpii_add_to_NCList(ncp);
-    *ncidp = ncp->nciop->fd;
-
-    if (env_info != MPI_INFO_NULL) MPI_Info_free(&env_info);
-
-    /* initialize unlimited_id as no unlimited dimension yet defined */
-    ncp->dims.unlimited_id = -1;
-
-#ifndef SEARCH_NAME_LINEARLY
-    for (i=0; i<HASH_TABLE_SIZE; i++) {
-        /* initialize dim name lookup table */
-        ncp->dims.nameT[i].num = 0;
-        ncp->dims.nameT[i].list = NULL;
-        /* initialize var name lookup table */
-        ncp->vars.nameT[i].num = 0;
-        ncp->vars.nameT[i].list = NULL;
-    }
-#endif
-
-    return status;
-}
-
-/*----< ncmpi_open() >-------------------------------------------------------*/
-int
-ncmpi_open(MPI_Comm    comm,
-           const char *path,
-           int         omode,
-           MPI_Info    info,
-           int        *ncidp)
-{
-    int i, err, status, safe_mode=0, mpireturn, root_omode;
-    char *env_str;
-    MPI_Info   env_info=MPI_INFO_NULL;
-    MPI_Offset chunksize=NC_DEFAULT_CHUNKSIZE;
-    NC *ncp=NULL;
-#ifndef SEARCH_NAME_LINEARLY
-    NC_nametable *nameT;
-#endif
-
-#ifdef PNETCDF_DEBUG
-    safe_mode = 1;
-    /* this configure time setting will be overwritten by the run-time
-     * environment variable PNETCDF_SAFE_MODE */
-#endif
-    /* get environment variable PNETCDF_SAFE_MODE
-     * if it is set to 1, then we perform a strict parameter consistent test
-     */
-    if ((env_str = getenv("PNETCDF_SAFE_MODE")) != NULL) {
-        if (*env_str == '0') safe_mode = 0;
-        else                 safe_mode = 1;
-        /* if PNETCDF_SAFE_MODE is set but without a value, *env_str can
-         * be '\0' (null character). In this case, safe_mode is enabled */
-    }
-
-    /* path's validity is checked in MPI-IO with error code MPI_ERR_BAD_FILE
-     * path consistency is checked in MPI-IO with error code MPI_ERR_NOT_SAME
-     */
-    if (path == NULL || *path == '\0') DEBUG_RETURN_ERROR(NC_EBAD_FILE)
-
-    /* check if omode is consistent with root's */
-
-    /* Note if omode contains NC_NOWRITE, it is equivalent to NC_CLOBBER.
-     * In pnetcdf.h, they both are defined the same value, 0.
-     * Only root's omode matters.
-     */
-    root_omode = omode;
-    TRACE_COMM(MPI_Bcast)(&root_omode, 1, MPI_INT, 0, comm);
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-
-    status = NC_NOERR;
-    if (root_omode != omode) {
-        omode = root_omode;
-        DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE_OMODE)
-    }
-
-    if (safe_mode) { /* return now if omode is inconsistent */
-        err = status;
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        if (status != NC_NOERR) return status;
-    } /* otherwise, use root's omode to open file */
-
-    /* NC_DISKLESS is not supported yet */
-    if (omode & NC_DISKLESS) DEBUG_RETURN_ERROR(NC_EINVAL_OMODE)
-
-    /* NC_MMAP is not supported yet */
-    if (omode & NC_MMAP) DEBUG_RETURN_ERROR(NC_EINVAL_OMODE)
-
-    /* take hints from the environment variable PNETCDF_HINTS
-     * a string of hints separated by ";" and each hint is in the
-     * form of hint=value. E.g. cb_nodes=16;cb_config_list=*:6
-     * If this environment variable is set, it  overrides any values that
-     * were set by using calls to MPI_Info_set in the application code.
-     */
-    if (info != MPI_INFO_NULL) {
-#ifdef HAVE_MPI_INFO_DUP
-        mpireturn = MPI_Info_dup(info, &env_info);
-        if (mpireturn != MPI_SUCCESS)
-            DEBUG_RETURN_ERROR(ncmpii_handle_error(mpireturn, "MPI_Info_dup"))
-#else
-        printf("Warning: MPI info is ignored as MPI_Info_dup() is missing\n");
-#endif
-    }
-    if ((env_str = getenv("PNETCDF_HINTS")) != NULL) {
-        if (env_info == MPI_INFO_NULL)
-            MPI_Info_create(&env_info); /* ignore error */
-
-        char *env_str_cpy, *key;
-        env_str_cpy = (char*) NCI_Malloc(strlen(env_str)+1);
-        strcpy(env_str_cpy, env_str);
-        key = strtok(env_str_cpy, ";");
-        while (key != NULL) {
-            char *val;
-            val = strchr(key, '=');
-            if (val == NULL) continue; /* ill-formed hint */
-            *val = '\0';
-            val++;
-            /* printf("env hint: key=%s val=%s\n",key,val); */
-            MPI_Info_set(env_info, key, val); /* override or add */
-            key = strtok(NULL, ";");
-        }
-        NCI_Free(env_str_cpy);
-    }
-
-    /* get header chunk size from user info, if provided */
-    if (env_info != MPI_INFO_NULL) {
-        int flag;
-        char value[MPI_MAX_INFO_VAL];
-        MPI_Info_get(env_info, "nc_header_read_chunk_size", MPI_MAX_INFO_VAL-1,
-                     value, &flag);
-        if (flag) chunksize = strtoll(value,NULL,10);
-    }
-
-    /* allocate NC file object */
-    ncp = ncmpii_new_NC(&chunksize);
-    if (ncp == NULL) {
-        if (env_info != MPI_INFO_NULL) MPI_Info_free(&env_info);
-        DEBUG_RETURN_ERROR(NC_ENOMEM)
-    }
-
-    ncp->safe_mode = safe_mode;
-    ncp->old       = NULL;
-#ifdef ENABLE_SUBFILING
-    ncp->subfile_mode = 1;
-    if (env_info != MPI_INFO_NULL) {
-        int flag;
-        char value[MPI_MAX_INFO_VAL];
-        MPI_Info_get(env_info, "pnetcdf_subfiling", MPI_MAX_INFO_VAL-1,
-                     value, &flag);
-        if (flag && strcasecmp(value, "disable") == 0)
-            ncp->subfile_mode = 0;
-    }
-    ncp->ncid_sf   = -1;
-    ncp->nc_num_subfiles = 0;
-#endif
-
-    /* open the file in parallel */
-    err = ncmpiio_open(comm, path, omode, env_info, ncp);
-    if (err != NC_NOERR) { /* fatal error */
-        if (env_info != MPI_INFO_NULL) MPI_Info_free(&env_info);
-        ncmpii_free_NC(ncp);
-        DEBUG_RETURN_ERROR(err)
-    }
-
-    /* PnetCDF's default mode is no fill */
-    fSet(ncp->flags, NC_NOFILL);
-
-    /* read header from file into an NC object pointed by ncp */
-    err = ncmpii_hdr_get_NC(ncp);
-    if (err != NC_NOERR) { /* fatal error */
-        ncmpiio_close(ncp->nciop, 0);
-        if (env_info != MPI_INFO_NULL) MPI_Info_free(&env_info);
-        ncmpii_free_NC(ncp);
-        DEBUG_RETURN_ERROR(err)
-    }
-
-    /* initialize arrays storing pending non-blocking requests */
-    ncp->numGetReqs = 0;
-    ncp->numPutReqs = 0;
-    ncp->get_list   = NULL;
-    ncp->put_list   = NULL;
-
-    /* add NC object to the linked list of opened files */
-    ncmpii_add_to_NCList(ncp);
-    *ncidp = ncp->nciop->fd;
-
-#ifdef ENABLE_SUBFILING
-    if (ncp->subfile_mode) {
-        /* check attr for subfiles */
-        err = ncmpi_get_att_int(ncp->nciop->fd, NC_GLOBAL, "num_subfiles",
-                                &ncp->nc_num_subfiles);
-        if (err == NC_NOERR && ncp->nc_num_subfiles > 1) {
-            /* ignore error NC_ENOTATT if this attribute is not defined */
-            int nvars;
-
-            err = ncmpi_inq_nvars(ncp->nciop->fd, &nvars);
-            if (status == NC_NOERR) status = err;
-
-            for (i=0; i<nvars; i++) {
-                err = ncmpi_get_att_int(ncp->nciop->fd, i, "num_subfiles",
-                                        &ncp->vars.value[i]->num_subfiles);
-                if (err == NC_ENOTATT) continue;
-                if (err != NC_NOERR && status == NC_NOERR) { /* other error */
-                    status = err;
-                    continue;
-                }
-
-                if (ncp->vars.value[i]->num_subfiles > 1) {
-                    err = ncmpi_get_att_int(ncp->nciop->fd, i, "ndims_org",
-                                            &ncp->vars.value[i]->ndims_org);
-                    if (status == NC_NOERR) status = err;
-                }
-            }
-
-            if (ncp->nc_num_subfiles > 1) {
-                err = ncmpii_subfile_open(ncp, &ncp->ncid_sf);
-                if (status == NC_NOERR) status = err;
-            }
-        }
-    }
-    else
-        ncp->nc_num_subfiles = 0;
-#endif
-
-    if (env_info != info) MPI_Info_free(&env_info);
-
-    /* update the total number of record variables */
-    ncp->vars.num_rec_vars = 0;
-    for (i=0; i<ncp->vars.ndefined; i++)
-        ncp->vars.num_rec_vars += IS_RECVAR(ncp->vars.value[i]);
-
-#ifndef SEARCH_NAME_LINEARLY
-    /* initialize dim name lookup table */
-    nameT = ncp->dims.nameT;
-    memset(nameT, 0, sizeof(NC_nametable) * HASH_TABLE_SIZE);
-
-    /* populate dim name lookup table */
-    for (i=0; i<ncp->dims.ndefined; i++) {
-        /* hash the dim name into a key for name lookup */
-        int key = HASH_FUNC(ncp->dims.value[i]->name->cp);
-        nameT = &ncp->dims.nameT[key];
-        if (nameT->num % NC_NAME_TABLE_CHUNK == 0)
-            nameT->list = (int*) NCI_Realloc(nameT->list,
-                          (size_t)(nameT->num+NC_NAME_TABLE_CHUNK) * sizeof(int));
-        nameT->list[nameT->num] = i;
-        nameT->num++;
-    }
-
-    /* initialize var name lookup table */
-    nameT = ncp->vars.nameT;
-    memset(nameT, 0, sizeof(NC_nametable) * HASH_TABLE_SIZE);
-
-    /* populate var name lookup table */
-    for (i=0; i<ncp->vars.ndefined; i++) {
-        /* hash the var name into a key for name lookup */
-        int key = HASH_FUNC(ncp->vars.value[i]->name->cp);
-        nameT = &ncp->vars.nameT[key];
-        if (nameT->num % NC_NAME_TABLE_CHUNK == 0)
-            nameT->list = (int*) NCI_Realloc(nameT->list,
-                          (size_t)(nameT->num+NC_NAME_TABLE_CHUNK) * sizeof(int));
-        nameT->list[nameT->num] = i;
-        nameT->num++;
-    }
-#endif
-
-    return status;
-}
-
-/*----< ncmpi_inq_format() >-------------------------------------------------*/
-/* This is an independent subroutine. */
-int
-ncmpi_inq_format(int  ncid,
-                 int *formatp) /* out */
-{
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (ncp->format == 5) {
-        *formatp = NC_FORMAT_CDF5;
-    } else if (ncp->format == 2) {
-        *formatp = NC_FORMAT_CDF2;
-    } else if (ncp->format == 1) {
-        *formatp = NC_FORMAT_CLASSIC;
-    } else {
-        /* this should not happen, because if ncid is valid, checking whether
-         * the file is in a supported CDF format should have already been done
-         * at ncmpi_open or ncmpi_create
-         */
-        *formatp = NC_FORMAT_UNKNOWN;
-    }
-    return err;
-}
-
-/*----< ncmpi_inq_file_format() >--------------------------------------------*/
-/* This is an independent subroutine. */
-int
-ncmpi_inq_file_format(const char *filename,
-                      int        *formatp) /* out */
-{
-#ifdef _USE_NCMPI
-    int ncid, err;
-    NC *ncp;
-
-    /* open file for reading its header */
-    err = ncmpi_open(MPI_COMM_SELF, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid);
-    if (err != NC_NOERR) {
-        if (err == NC_ENOTNC3)
-            DEBUG_ASSIGN_ERROR(*formatp, NC_FORMAT_NETCDF4)
-        else if (err == NC_ENOTNC)
-            DEBUG_ASSIGN_ERROR(*formatp, NC_FORMAT_UNKNOWN)
-        return err;
-    }
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (ncp->format == 5) {
-        *formatp = NC_FORMAT_CDF5;
-    } else if (ncp->format == 2) {
-        *formatp = NC_FORMAT_CDF2;
-    } else {  /* if (ncp->format == 1) */
-        *formatp = NC_FORMAT_CLASSIC;
-    }
-    err = ncmpi_close(ncid);
-
-    return err;
-#else
-    char *cdf_signature="CDF";
-    char *hdf5_signature="\211HDF\r\n\032\n";
-    char signature[8];
-    int fd;
-    ssize_t rlen;
-
-    *formatp = NC_FORMAT_UNKNOWN;
-
-    if ((fd = open(filename, O_RDONLY, 0700)) == -1) {
-             if (errno == ENOENT)       return NC_ENOENT;
-        else if (errno == EACCES)       return NC_EACCESS;
-        else if (errno == ENAMETOOLONG) return NC_EBAD_FILE;
-        else                            return NC_EFILE;
-    }
-    /* get first 8 bytes of file */
-    rlen = read(fd, signature, 8);
-    if (rlen != 8) {
-        close(fd); /* ignore error */
-        return NC_EFILE;
-    }
-    if (close(fd) == -1) {
-        return NC_EFILE;
-    }
-
-    if (memcmp(signature, hdf5_signature, 8) == 0) {
-        /* whether the file is NC_FORMAT_NETCDF4_CLASSIC is determined by HDF5
-         * attribute "_nc3_strict" which requires a call to H5Aget_name(). Here
-         * we do not distinquish NC_CLASSIC_MODEL, but simply return NETCDF4
-         * format.
-         */
-        *formatp = NC_FORMAT_NETCDF4;
-    }
-    else if (memcmp(signature, cdf_signature, 3) == 0) {
-             if (signature[3] == 5)  *formatp = NC_FORMAT_CDF5;
-        else if (signature[3] == 2)  *formatp = NC_FORMAT_CDF2;
-        else if (signature[3] == 1)  *formatp = NC_FORMAT_CLASSIC;
-    }
-
-    return NC_NOERR;
-#endif
-}
-
-/*----< ncmpi_inq_file_info() >-----------------------------------------------*/
-/* This is an independent subroutine. */
-int
-ncmpi_inq_file_info(int       ncid,
-                    MPI_Info *info_used)
-{
-    int mpireturn, err;
-    char value[MPI_MAX_INFO_VAL];
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-#ifdef HAVE_MPI_INFO_DUP
-    mpireturn = MPI_Info_dup(ncp->nciop->mpiinfo, info_used);
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_Info_dup");
-#else
-    mpireturn = MPI_File_get_info(ncp->nciop->collective_fh, info_used);
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_File_get_info");
-#endif
-
-    sprintf(value, "%lld", ncp->nciop->hints.h_align);
-    MPI_Info_set(*info_used, "nc_header_align_size", value);
-
-    sprintf(value, "%lld", ncp->nciop->hints.v_align);
-    MPI_Info_set(*info_used, "nc_var_align_size", value);
-
-    sprintf(value, "%lld", ncp->nciop->hints.r_align);
-    MPI_Info_set(*info_used, "nc_record_align_size", value);
-
-    sprintf(value, "%lld", ncp->nciop->hints.header_read_chunk_size);
-    MPI_Info_set(*info_used, "nc_header_read_chunk_size", value);
-
-#ifdef ENABLE_SUBFILING
-    sprintf(value, "%d", ncp->nciop->hints.subfile_mode);
-    MPI_Info_set(*info_used, "pnetcdf_subfiling", value);
-    sprintf(value, "%d", ncp->nciop->hints.num_subfiles);
-    MPI_Info_set(*info_used, "nc_num_subfiles", value);
-#endif
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_get_file_info() >-----------------------------------------------*/
-/* This is an independent subroutine. */
-int
-ncmpi_get_file_info(int       ncid,
-                    MPI_Info *info_used)
-{
-    return ncmpi_inq_file_info(ncid, info_used);
-}
-
-/*----< ncmpi_redef() >------------------------------------------------------*/
-/* This is a collective subroutine. */
-int
-ncmpi_redef(int ncid) {
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (NC_readonly(ncp)) DEBUG_RETURN_ERROR(NC_EPERM) /* read-only */
-    /* if open mode is inconsistent, then this return might cause parallel
-     * program to hang */
-
-    /* cannot be in define mode, must enter from data mode */
-    if (NC_indef(ncp)) DEBUG_RETURN_ERROR(NC_EINDEFINE)
-
-    /* sync all metadata, including numrecs, if changed in independent mode.
-     * also ensure exiting define mode always entering collective data mode
-     */
-    if (NC_indep(ncp))
-        ncmpii_end_indep_data(ncp);
-
-    if (NC_doFsync(ncp)) { /* re-read the header from file */
-        err = ncmpii_read_NC(ncp);
-        if (err != NC_NOERR) return err;
-    }
-
-    /* duplicate a header to be used in enddef() for checking if header grows */
-    ncp->old = ncmpii_dup_NC(ncp);
-    if (ncp->old == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    /* we are now entering define mode */
-    fSet(ncp->flags, NC_INDEF);
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_begin_indep_data() >-------------------------------------------*/
-/* This is a collective subroutine. */
-int
-ncmpi_begin_indep_data(int ncid)
-{
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (NC_indef(ncp))  /* must not be in define mode */
-        DEBUG_RETURN_ERROR(NC_EINDEFINE)
-
-    if (NC_indep(ncp))  /* already in indep data mode */
-        return NC_NOERR;
-
-    /* we need no MPI_File_sync() here. If users want a stronger data
-     * consistency, they can call ncmpi_sync()
-     */
-#if 0 && !defined(DISABLE_FILE_SYNC)
-    if (!NC_readonly(ncp) && NC_collectiveFhOpened(ncp->nciop)) {
-        /* calling file sync for those already open the file */
-        int err, mpireturn;
-        /* MPI_File_sync() is collective */
-        TRACE_IO(MPI_File_sync)(ncp->nciop->collective_fh);
-        if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_sync");
-            if (err == NC_NOERR) return err;
-        }
-        TRACE_COMM(MPI_Barrier)(ncp->nciop->comm);
-    }
-#endif
-
-    fSet(ncp->flags, NC_INDEP);
-
-    err = ncmpii_check_mpifh(ncp, 0);
-
-    return err;
-}
-
-/*----< ncmpi_end_indep_data() >---------------------------------------------*/
-/* This is a collective subroutine. */
-int
-ncmpi_end_indep_data(int ncid) {
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (!NC_indep(ncp)) /* must be in independent data mode */
-        DEBUG_RETURN_ERROR(NC_ENOTINDEP)
-
-    return ncmpii_end_indep_data(ncp);
-}
-
-/*----< ncmpii_end_indep_data() >--------------------------------------------*/
-/* this function is called when:
- * 1. ncmpi_end_indep_data()
- * 2. ncmpi_redef() from independent data mode entering to define more
- * 3. ncmpii_close() when closing the file
- * This function is collective.
- */
-int
-ncmpii_end_indep_data(NC *ncp)
-{
-    int status=NC_NOERR;
-
-    if (!NC_readonly(ncp)) {
-        if (ncp->vars.num_rec_vars > 0) {
-            /* numrecs dirty bit may not be the same across all processes.
-             * force sync in memory no matter if dirty or not.
-             */
-            set_NC_ndirty(ncp);
-            status = ncmpii_sync_numrecs(ncp, ncp->numrecs);
-            /* the only possible dirty part of the header is numrecs */
-        }
-
-#ifndef DISABLE_FILE_SYNC
-        /* calling file sync for those already open the file */
-        if (NC_doFsync(ncp) && NC_independentFhOpened(ncp->nciop)) {
-            int mpireturn;
-            /* MPI_File_sync() is collective */
-            TRACE_IO(MPI_File_sync)(ncp->nciop->independent_fh);
-            if (mpireturn != MPI_SUCCESS) {
-                int err = ncmpii_handle_error(mpireturn, "MPI_File_sync");
-                if (status == NC_NOERR) status = err;
-            }
-            TRACE_COMM(MPI_Barrier)(ncp->nciop->comm);
-            if (mpireturn != MPI_SUCCESS)
-                return ncmpii_handle_error(mpireturn, "MPI_Barrier");
-        }
-#endif
-    }
-
-    fClr(ncp->flags, NC_INDEP);
-
-    return status;
-}
-
-/*----< ncmpi_enddef() >-----------------------------------------------------*/
-/* This is a collective subroutine. */
-int
-ncmpi_enddef(int ncid) {
-    int err;
-    NC *ncp;
-
-    /* check if file ID ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (!NC_indef(ncp)) /* must currently in define mode */
-        DEBUG_RETURN_ERROR(NC_ENOTINDEFINE)
-
-    return ncmpii_enddef(ncp);
-}
-
-/*----< ncmpi__enddef() >-----------------------------------------------------*/
-/* This is a collective subroutine. */
-int
-ncmpi__enddef(int        ncid,
-              MPI_Offset h_minfree,
-              MPI_Offset v_align,
-              MPI_Offset v_minfree,
-              MPI_Offset r_align)
-{
-    int err;
-    NC *ncp;
-
-    /* check if file ID ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (!NC_indef(ncp)) /* must currently in define mode */
-        DEBUG_RETURN_ERROR(NC_ENOTINDEFINE)
-
-    if (ncp->safe_mode) {
-        int status, mpireturn;
-        MPI_Offset root_args[4];
-
-        /* check if h_minfree, v_align, v_minfree, and r_align are consistent
-         * among all processes */
-        root_args[0] = h_minfree;
-        root_args[1] = v_align;
-        root_args[2] = v_minfree;
-        root_args[3] = r_align;
-        TRACE_COMM(MPI_Bcast)(&root_args, 4, MPI_OFFSET, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-
-        if (root_args[0] != h_minfree ||
-            root_args[1] != v_align   ||
-            root_args[2] != v_minfree ||
-            root_args[3] != r_align)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-
-        if (status != NC_NOERR) return status;
-    }
-
-    return ncmpii__enddef(ncp, h_minfree, v_align, v_minfree, r_align);
-}
-
-/*----< ncmpi_sync_numrecs() >------------------------------------------------*/
-/* this API is collective, but can be called in independent data mode.
- * Note numrecs is always sync-ed in memory and update in file in collective
- * data mode.
- */
-int
-ncmpi_sync_numrecs(int ncid) {
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* cannot be in define mode */
-    if (NC_indef(ncp)) DEBUG_RETURN_ERROR(NC_EINDEFINE)
-
-    /* check if we have defined record variables */
-    if (ncp->vars.num_rec_vars == 0) return NC_NOERR;
-
-    if (!NC_indep(ncp)) /* in collective data mode, numrecs is always sync-ed */
-        return NC_NOERR;
-    else /* if called in independent mode, we force sync in memory */
-        set_NC_ndirty(ncp);
-
-    /* sync numrecs in memory and file */
-    err = ncmpii_sync_numrecs(ncp, ncp->numrecs);
-
-#ifndef DISABLE_FILE_SYNC
-    if (NC_doFsync(ncp)) { /* NC_SHARE is set */
-        int mpierr, mpireturn;
-        if (NC_indep(ncp)) {
-            TRACE_IO(MPI_File_sync)(ncp->nciop->independent_fh);
-        }
-        else {
-            TRACE_IO(MPI_File_sync)(ncp->nciop->collective_fh);
-        }
-        if (mpireturn != MPI_SUCCESS) {
-            mpierr = ncmpii_handle_error(mpireturn, "MPI_File_sync");
-            if (err == NC_NOERR) err = mpierr;
-        }
-        TRACE_COMM(MPI_Barrier)(ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Barrier");
-    }
-#endif
-    return err;
-}
-
-/*----< ncmpi_sync() >--------------------------------------------------------*/
-/* This API is a collective subroutine, and must be called in data mode, no
- * matter if it is in collective or independent data mode.
- */
-int
-ncmpi_sync(int ncid) {
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* cannot be in define mode */
-    if (NC_indef(ncp)) DEBUG_RETURN_ERROR(NC_EINDEFINE)
-
-    if (NC_readonly(ncp))
-        /* calling sync for file opened for read only means re-read header */
-        return ncmpii_read_NC(ncp);
-
-    /* the only part of header that can be dirty is numrecs (caused only by
-     * independent APIs) */
-    if (ncp->vars.num_rec_vars > 0 && NC_indep(ncp)) {
-        /* sync numrecs in memory among processes and in file */
-        set_NC_ndirty(ncp);
-        err = ncmpii_sync_numrecs(ncp, ncp->numrecs);
-        if (err != NC_NOERR) return err;
-    }
-
-    /* calling MPI_File_sync() on both collective and independent handlers */
-    return ncmpiio_sync(ncp->nciop);
-}
-
-/*----< ncmpi_abort() >------------------------------------------------------*/
-/* This API is a collective subroutine */
-int
-ncmpi_abort(int ncid) {
-   /*
-    * In data mode, same as ncmpiio_close.
-    * In define mode, descard new definition.
-    * If file is just created, remove the file.
-    */
-    int status, err, doUnlink = 0;
-    NC *ncp;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    /* delete the file if it is newly created by ncmpi_create() */
-    doUnlink = NC_IsNew(ncp);
-
-    if (ncp->old != NULL) {
-        /* a plain redef, not a create */
-        assert(!NC_IsNew(ncp));
-        assert(fIsSet(ncp->flags, NC_INDEF));
-        ncmpii_free_NC(ncp->old);
-        ncp->old = NULL;
-        fClr(ncp->flags, NC_INDEF);
-    }
-
-    if (!doUnlink) {
-        if (!NC_readonly(ncp) &&  /* file is open for write */
-             NC_indep(ncp)) {     /* in independent data mode */
-            status = ncmpii_end_indep_data(ncp); /* sync header */
-        }
-
-        if (NC_doFsync(ncp)) {
-            err = ncmpiio_sync(ncp->nciop); /* calling MPI_File_sync() */
-            if (status == NC_NOERR ) status = err;
-        }
-    }
-
-    /* close the file */
-    err = ncmpiio_close(ncp->nciop, doUnlink);
-    if (status == NC_NOERR ) status = err;
-
-    ncp->nciop = NULL;
-
-    /* remove this file from the list of opened files */
-    ncmpii_del_from_NCList(ncp);
-
-    /* free up space occupied by the header metadata */
-    ncmpii_free_NC(ncp);
-
-    return status;
-}
-
-/*----< ncmpi_close() >------------------------------------------------------*/
-/* This is a collective subroutine. */
-int
-ncmpi_close(int ncid) {
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* calling the implementation of ncmpi_close() */
-    return ncmpii_close(ncp);
-}
-
-/*----< ncmpi_delete() >-----------------------------------------------------*/
-/* ncmpi_delete:
- * doesn't do anything to release resources, so call ncmpi_close before calling
- * this function.
- *
- * filename: the name of the
- * file we will remove.  info: mpi info, in case underlying file system needs
- * hints.
- */
-int
-ncmpi_delete(const char *filename,
-             MPI_Info    info)
-{
-    int err=NC_NOERR, mpireturn;
-
-    TRACE_IO(MPI_File_delete)((char*)filename, info);
-    if (mpireturn != MPI_SUCCESS)
-        err = ncmpii_handle_error(mpireturn, "MPI_File_delete");
-    return err;
-}
-
-/* End Of Dataset Functions */
-
-/*----< ncmpii_check_mpifh() >-----------------------------------------------*/
-int
-ncmpii_check_mpifh(NC  *ncp,
-                   int  collective)
-{
-    int mpireturn;
-
-    if (collective && NC_indep(ncp)) /* collective handle but in indep mode */
-        DEBUG_RETURN_ERROR(NC_EINDEP)
-
-    if (!collective && !NC_indep(ncp)) /* indep handle but in collective mode */
-        DEBUG_RETURN_ERROR(NC_ENOTINDEP)
-
-    if (collective && !NC_collectiveFhOpened(ncp->nciop)) {
-        TRACE_IO(MPI_File_open)(ncp->nciop->comm, (char*)ncp->nciop->path,
-                                ncp->nciop->mpiomode, ncp->nciop->mpiinfo,
-                                &ncp->nciop->collective_fh);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_File_open");
-
-        set_NC_collectiveFh(ncp->nciop);
-    }
-    else if (!collective && !NC_independentFhOpened(ncp->nciop)) {
-        TRACE_IO(MPI_File_open)(MPI_COMM_SELF, (char*)ncp->nciop->path,
-                                ncp->nciop->mpiomode, ncp->nciop->mpiinfo,
-                                &ncp->nciop->independent_fh);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_File_open");
-
-        set_NC_independentFh(ncp->nciop);
-    }
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_put_size() >------------------------------------------------*/
-/* This is an independent subroutine. */
-/* returns the amount of writes, in bytes, committed to file system so far */
-int
-ncmpi_inq_put_size(int         ncid,
-                   MPI_Offset *size)
-{
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    *size = ncp->nciop->put_size;
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_get_size() >------------------------------------------------*/
-/* This is an independent subroutine. */
-/* returns the amount of reads, in bytes, obtained from file system so far */
-int
-ncmpi_inq_get_size(int         ncid,
-                   MPI_Offset *size)
-{
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    *size = ncp->nciop->get_size;
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_striping() >------------------------------------------------*/
-/* This is an independent subroutine.
- * return file (system) striping settings, striping size and count, if they are
- * available from MPI-IO hint. Otherwise, 0s are returned.
- */
-int
-ncmpi_inq_striping(int  ncid,
-                   int *striping_size,
-                   int *striping_count)
-{
-    int flag, err;
-    char value[MPI_MAX_INFO_VAL];
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (striping_size != NULL) {
-        MPI_Info_get(ncp->nciop->mpiinfo, "striping_unit", MPI_MAX_INFO_VAL-1,
-                     value, &flag);
-        *striping_size = 0;
-        if (flag) *striping_size = (int)strtol(value,NULL,10);
-    }
-
-    if (striping_count != NULL) {
-        MPI_Info_get(ncp->nciop->mpiinfo, "striping_factor", MPI_MAX_INFO_VAL-1,
-                     value, &flag);
-        *striping_count = 0;
-        if (flag) *striping_count = (int)strtol(value,NULL,10);
-    }
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_malloc_size() >--------------------------------------------*/
-/* This is an independent subroutine.
- * report the current aggregate size allocated by malloc, yet to be freed */
-int ncmpi_inq_malloc_size(MPI_Offset *size)
-{
-#ifdef PNC_MALLOC_TRACE
-    ncmpii_inq_malloc_size(size);
-    return NC_NOERR;
-#else
-    DEBUG_RETURN_ERROR(NC_ENOTENABLED)
-#endif
-}
-
-/*----< ncmpi_inq_malloc_max_size() >----------------------------------------*/
-/* This is an independent subroutine.
- * get the max watermark ever researched by malloc (aggregated amount) */
-int ncmpi_inq_malloc_max_size(MPI_Offset *size)
-{
-#ifdef PNC_MALLOC_TRACE
-    ncmpii_inq_malloc_max_size(size);
-    return NC_NOERR;
-#else
-    DEBUG_RETURN_ERROR(NC_ENOTENABLED)
-#endif
-}
-
-/*----< ncmpi_inq_malloc_list() >--------------------------------------------*/
-/* This is an independent subroutine.
- * walk the malloc tree and print yet-to-be-freed malloc residues */
-int ncmpi_inq_malloc_list(void)
-{
-#ifdef PNC_MALLOC_TRACE
-    ncmpii_inq_malloc_list();
-    return NC_NOERR;
-#else
-    DEBUG_RETURN_ERROR(NC_ENOTENABLED)
-#endif
-}
-
-/*----< ncmpi_inq_files_opened() >-------------------------------------------*/
-/* This is an independent subroutine. */
-int
-ncmpi_inq_files_opened(int *num, int *ncids)
-{
-    return ncmpii_inq_files_opened(num, ncids);
-}
-
-/*----< ncmpi_inq_recsize() >------------------------------------------------*/
-/* This is an independent subroutine. */
-int
-ncmpi_inq_recsize(int         ncid,
-                  MPI_Offset *recsize)
-{
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    *recsize = ncp->recsize;
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_header_extent() >-------------------------------------------*/
-/* This is an independent subroutine. */
-int
-ncmpi_inq_header_extent(int         ncid,
-                        MPI_Offset *extent)
-{
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    *extent = ncp->begin_var;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_header_size() >---------------------------------------------*/
-/* This is an independent subroutine. */
-int
-ncmpi_inq_header_size(int         ncid,
-                      MPI_Offset *size)
-{
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    *size = ncp->xsz;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_path() >----------------------------------------------------*/
-/* Get the file pathname which was used to open/create the ncid's file.
- * This is an independent subroutine.
- */
-int
-ncmpi_inq_path(int   ncid,
-               int  *pathlen,/* Ignored if NULL */
-               char *path)   /*  must already be allocated. Ignored if NULL */
-{        
-    int err;
-    NC *ncp;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (ncp->nciop->path == NULL) {
-        if (pathlen != NULL) *pathlen = 0;
-        if (path    != NULL) *path = '\0';
-    } else {
-        if (pathlen != NULL) *pathlen = (int)strlen(ncp->nciop->path);
-        if (path    != NULL) strcpy(path, ncp->nciop->path);
-    }
-
-    return NC_NOERR;
-}
-
diff --git a/src/lib/nc.c b/src/lib/nc.c
deleted file mode 100644
index 0a2a8fd..0000000
--- a/src/lib/nc.c
+++ /dev/null
@@ -1,1727 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: nc.c 2686 2016-12-07 20:02:41Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "rnd.h"
-#include "ncx.h"
-#include "macro.h"
-#ifdef ENABLE_SUBFILING
-#include "subfile.h"
-#endif
-
-/* list of opened netcdf file objects (not thread-safe) */
-static NC *NClist = NULL;
-
-/* This is the default create format for ncmpi_create and nc__create.
- * The use of this file scope variable is not thread-safe.
- */
-static int ncmpi_default_create_format = NC_FORMAT_CLASSIC;
-
-/* These have to do with version numbers. */
-#define MAGIC_NUM_LEN 4
-#define VER_CLASSIC 1
-#define VER_64BIT_OFFSET 2
-#define VER_HDF5 3
-#define VER_64BIT_DATA 5
-
-/* Prototypes for functions used only in this file */
-#if 0
-static int move_data_r(NC *ncp, NC *old);
-static int move_vars_r(NC *ncp, NC *old);
-static int NC_check_def(MPI_Comm comm, void *buf, MPI_Offset nn);
-#endif
-
-/*----< ncmpii_add_to_NCList() >---------------------------------------------*/
-void
-ncmpii_add_to_NCList(NC *ncp)
-{
-    assert(ncp != NULL);
-
-    /* add the newly created NC object to the head of linked list */
-    ncp->prev = NULL;
-    if (NClist != NULL)
-        NClist->prev = ncp;
-    ncp->next = NClist;
-    NClist = ncp;
-}
-
-/*----< ncmpii_del_from_NCList() >-------------------------------------------*/
-void
-ncmpii_del_from_NCList(NC *ncp)
-{
-    assert(ncp != NULL);
-
-    if (NClist == ncp) {
-        assert(ncp->prev == NULL);
-        NClist = ncp->next;
-    }
-    else {
-        assert(ncp->prev != NULL);
-        ncp->prev->next = ncp->next;
-    }
-
-    if (ncp->next != NULL)
-        ncp->next->prev = ncp->prev;
-
-    ncp->next = NULL;
-    ncp->prev = NULL;
-}
-
-#ifdef _CHECK_HEADER_IN_DETAIL
-/*----< NC_check_header() >--------------------------------------------------*/
-/*
- * Check the consistency of defined header metadata across all processes and
- * overwrite the local header objects with root's if inconsistency is found.
- * This function is collective.
- */
-static int
-NC_check_header(NC         *ncp,
-                void       *buf,
-                MPI_Offset  local_xsz) /* size of buf */
-{
-    int h_size, rank, g_status, status=NC_NOERR, mpireturn;
-
-    /* root's header size has been broadcasted in NC_begin() and saved in
-     * ncp->xsz.
-     */
-
-    /* TODO: When root process 0 broadcasts its header,
-     * currently the header size cannot be larger than 2^31 bytes,
-     * due to the 2nd argument, count, of MPI_Bcast being of type int.
-     * Possible solution is to broadcast in chunks of 2^31 bytes.
-     */
-    h_size = (int)ncp->xsz;
-    if (ncp->xsz != h_size)
-        DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-
-    MPI_Comm_rank(ncp->nciop->comm, &rank);
-
-    if (rank == 0) {
-        TRACE_COMM(MPI_Bcast)(buf, h_size, MPI_BYTE, 0, ncp->nciop->comm);
-    }
-    else {
-        bufferinfo gbp;
-        void *cmpbuf = (void*) NCI_Malloc((size_t)h_size);
-
-        TRACE_COMM(MPI_Bcast)(cmpbuf, h_size, MPI_BYTE, 0, ncp->nciop->comm);
-
-        if (h_size != local_xsz || memcmp(buf, cmpbuf, h_size)) {
-            /* now part of this process's header is not consistent with root's
-             * check and report the inconsistent part
-             */
-
-            /* Note that gbp.nciop and gbp.offset below will not be used in
-             * ncmpii_hdr_check_NC() */
-            gbp.nciop  = ncp->nciop;
-            gbp.offset = 0;
-            gbp.size   = h_size;   /* entire header is in the buffer, cmpbuf */
-            gbp.index  = 0;
-            gbp.pos    = gbp.base = cmpbuf;
-
-            /* find the inconsistent part of the header, report the difference,
-             * and overwrite the local header object with root's.
-             * ncmpii_hdr_check_NC() should not have any MPI communication
-             * calls.
-             */
-            status = ncmpii_hdr_check_NC(&gbp, ncp);
-
-            /* header consistency is only checked on non-root processes. The
-             * returned status can be a fatal error or header inconsistency
-             * error, (fatal errors are due to object allocation), but never
-             * NC_NOERR.
-             */
-        }
-        NCI_Free(cmpbuf);
-    }
-
-    if (ncp->safe_mode) {
-        TRACE_COMM(MPI_Allreduce)(&status, &g_status, 1, MPI_INT, MPI_MIN,
-                                  ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce"); 
-        }
-        if (g_status != NC_NOERR) { /* some headers are inconsistent */
-            if (status == NC_NOERR) DEBUG_ASSIGN_ERROR(status, NC_EMULTIDEFINE)
-        }
-    }
-
-    return status;
-}
-#endif
-
-
-#if 0
-/* 'defined but not used': seems like a useful function though. why did we
- * write it?  should we be using it? */
-
-static int
-NC_check_def(MPI_Comm comm, void *buf, MPI_Offset nn) {
-  int rank;
-  int errcheck;
-  MPI_Offset compare = 0;
-  void *cmpbuf;
-  MPI_Offset max_size;
-
-  MPI_Comm_rank(comm, &rank);
-
-  if (rank == 0)
-    max_size = nn;
-  MPI_Bcast(&max_size, 1, MPI_OFFSET, 0, comm);
-
-  compare = max_size - nn;
-
-  MPI_Allreduce(&compare, &errcheck, 1, MPI_OFFSET, MPI_LOR, comm);
-
-  if (errcheck)
-    DEBUG_RETURN_ERROR(NC_EMULTIDEFINE)
-
-  if (rank == 0)
-    cmpbuf = buf;
-  else
-    cmpbuf = (void *)NCI_Malloc(nn);
-
-  MPI_Bcast(cmpbuf, nn, MPI_BYTE, 0, comm);
-
-  if (rank != 0) {
-    compare = memcmp(buf, cmpbuf, nn);
-    NCI_Free(cmpbuf);
-  }
-
-  MPI_Allreduce(&compare, &errcheck, 1, MPI_OFFSET, MPI_LOR, comm);
-
-  if (errcheck){
-    DEBUG_RETURN_ERROR(NC_EMULTIDEFINE)
-  }else{
-    return NC_NOERR;
-  }
-}
-#endif
-
-/*----< ncmpii_NC_check_id() >-----------------------------------------------*/
-int
-ncmpii_NC_check_id(int   ncid,
-                   NC  **ncpp)
-{
-    NC *ncp;
-
-    if (ncid >= 0) {
-        for (ncp = NClist; ncp != NULL; ncp = ncp->next) {
-            if (ncp->nciop->fd == ncid) {
-                if (ncpp != NULL) *ncpp = ncp;
-                return NC_NOERR; /* normal return */
-            }
-        }
-    }
-
-    /* else, not found */
-    DEBUG_RETURN_ERROR(NC_EBADID)
-}
-
-
-/*----< ncmpii_inq_files_opened() >------------------------------------------*/
-int
-ncmpii_inq_files_opened(int *num, int *ncids)
-{
-    NC *ncp;
-
-/*
-    for (ncp=NClist; ncp!=NULL; ncp=ncp->next)
-        printf("still open %s\n",ncp->nciop->path);
-*/
-    if (num == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
-
-    *num = 0;
-    for (ncp=NClist; ncp!=NULL; ncp=ncp->next)
-        (*num)++;
-
-    if (*num > 0 && ncids != NULL) {
-        /* when ncids is NULL, we skip getting the values */
-        int i=0;
-        for (ncp=NClist; ncp!=NULL; ncp=ncp->next)
-            ncids[i] = ncp->nciop->fd;
-    }
-    return NC_NOERR;
-}
-
-
-/*----< ncmpii_free_NC() >----------------------------------------------------*/
-inline void
-ncmpii_free_NC(NC *ncp)
-{
-    if (ncp == NULL) return;
-
-    ncmpii_free_NC_dimarray(&ncp->dims);
-    ncmpii_free_NC_attrarray(&ncp->attrs);
-    ncmpii_free_NC_vararray(&ncp->vars);
-
-    NCI_Free(ncp);
-}
-
-
-/*----< ncmpii_new_NC() >----------------------------------------------------*/
-inline NC *
-ncmpii_new_NC(const MPI_Offset *chunkp)
-{
-    NC *ncp = (NC *) NCI_Calloc(1, sizeof(NC));
-
-    if (ncp == NULL) return NULL;
-
-    ncp->chunk = (chunkp != NULL) ? *chunkp : NC_SIZEHINT_DEFAULT;
-
-    return ncp;
-}
-
-/*----< ncmpi_set_default_format() >-----------------------------------------*/
-/* This function sets a default create file format.
- * Valid formats are NC_FORMAT_CLASSIC, NC_FORMAT_CDF2, and NC_FORMAT_CDF5
- * This API is NOT collective, as there is no way to check against an MPI
- * communicator. It should be called by all MPI processes that intend to
- * create a file later. Consistency check will have to be done in other APIs.
- */
-int
-ncmpi_set_default_format(int format, int *old_formatp)
-{
-    /* Return existing format if desired. */
-    if (old_formatp != NULL)
-        *old_formatp = ncmpi_default_create_format;
-
-    /* Make sure only valid format is set. */
-    if (format != NC_FORMAT_CLASSIC &&
-        format != NC_FORMAT_CDF2 &&
-        format != NC_FORMAT_CDF5) {
-        DEBUG_RETURN_ERROR(NC_EINVAL)
-    }
-    ncmpi_default_create_format = format;
-
-    return NC_NOERR;
-}
-
-/* returns a value suitable for a create flag.  Will return one or more of the
- * following values OR-ed together:
- * NC_64BIT_OFFSET, NC_CLOBBER, NC_LOCK, NC_SHARE */
-int
-ncmpi_inq_default_format(int *formatp)
-{
-    if (formatp == NULL) DEBUG_RETURN_ERROR(NC_EINVAL)
-
-    *formatp = ncmpi_default_create_format;
-    return NC_NOERR;
-}
-
-/*----< ncmpii_dup_NC() >----------------------------------------------------*/
-NC *
-ncmpii_dup_NC(const NC *ref)
-{
-    NC *ncp;
-
-    ncp = (NC *) NCI_Malloc(sizeof(NC));
-    if (ncp == NULL) return NULL;
-
-    memset(ncp, 0, sizeof(NC));
-
-    if (ncmpii_dup_NC_dimarray(&ncp->dims,   &ref->dims)  != NC_NOERR ||
-        ncmpii_dup_NC_attrarray(&ncp->attrs, &ref->attrs) != NC_NOERR ||
-        ncmpii_dup_NC_vararray(&ncp->vars,   &ref->vars)  != NC_NOERR) {
-        ncmpii_free_NC(ncp);
-        return NULL;
-    }
-
-    ncp->xsz       = ref->xsz;
-    ncp->begin_var = ref->begin_var;
-    ncp->begin_rec = ref->begin_rec;
-    ncp->recsize   = ref->recsize;
-
-    NC_set_numrecs(ncp, NC_get_numrecs(ref));
-    return ncp;
-}
-
-
-/*
- *  Verify that this is a user nc_type
- * Formerly
-NCcktype()
- * Sense of the return is changed.
- */
-inline int
-ncmpii_cktype(int     cdf_ver,
-              nc_type type)
-{
-    /* the max data type supported by CDF-5 is NC_UINT64 */
-    if (type <= 0 || type > NC_UINT64)
-        DEBUG_RETURN_ERROR(NC_EBADTYPE)
-
-    /* For CDF-1 and CDF-2 files, only classic types are allowed. */
-    if (cdf_ver < 5 && type > NC_DOUBLE)
-        DEBUG_RETURN_ERROR(NC_ESTRICTCDF2)
-
-    return NC_NOERR;
-}
-
-
-/*
- * How many objects of 'type'
- * will fit into xbufsize?
- */
-inline MPI_Offset
-ncmpix_howmany(nc_type type, MPI_Offset xbufsize)
-{
-    switch(type){
-        case NC_BYTE:
-        case NC_UBYTE:
-        case NC_CHAR:   return xbufsize;
-        case NC_SHORT:  return xbufsize/X_SIZEOF_SHORT;
-        case NC_USHORT: return xbufsize/X_SIZEOF_USHORT;
-        case NC_INT:    return xbufsize/X_SIZEOF_INT;
-        case NC_UINT:   return xbufsize/X_SIZEOF_UINT;
-        case NC_FLOAT:  return xbufsize/X_SIZEOF_FLOAT;
-        case NC_DOUBLE: return xbufsize/X_SIZEOF_DOUBLE;
-        case NC_INT64:  return xbufsize/X_SIZEOF_INT64;
-        case NC_UINT64: return xbufsize/X_SIZEOF_UINT64;
-        default:
-                assert("ncmpix_howmany: Bad type" == 0);
-                return(0);
-    }
-}
-
-#define D_RNDUP(x, align) _RNDUP(x, (off_t)(align))
-
-/*----< NC_begins() >--------------------------------------------------------*/
-/*
- * This function is only called at enddef().
- * It computes each variable's 'begin' offset, and sets/updates the followings:
- *    ncp->xsz                   ---- header size
- *    ncp->vars.value[*]->begin  ---- each variable's 'begin' offset
- *    ncp->begin_var             ---- offset of first non-record variable
- *    ncp->begin_rec             ---- offset of first     record variable
- *    ncp->recsize               ---- sum of single records
- *    ncp->numrecs               ---- number of records (set only if new file)
- */
-static int
-NC_begins(NC         *ncp,
-          MPI_Offset  h_align,  /* header alignment */
-          MPI_Offset  h_minfree,/* free space for header */
-          MPI_Offset  v_align,  /* alignment for each fixed variable */
-          MPI_Offset  v_minfree,/* free space for fixed variable section */
-          MPI_Offset  r_align)  /* alignment for record variable section */
-{
-    int i, j, rank, mpireturn;
-    MPI_Offset end_var=0;
-    NC_var *last = NULL;
-    NC_var *first_var = NULL;       /* first "non-record" var */
-
-    /* CDF file format determines the size of variable's "begin" in the header */
-
-    /* get the true header size (not header extent) */
-    MPI_Comm_rank(ncp->nciop->comm, &rank);
-    ncp->xsz = ncmpii_hdr_len_NC(ncp);
-
-    if (ncp->safe_mode) { /* this consistency check is redundant as metadata is
-                             kept consistent at all time when safe mode is on */
-        int err, status;
-        MPI_Offset root_xsz = ncp->xsz;
-
-        /* only root's header size matters */
-        TRACE_COMM(MPI_Bcast)(&root_xsz, 1, MPI_OFFSET, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast"); 
-
-        err = NC_NOERR;
-        if (root_xsz != ncp->xsz) err = NC_EMULTIDEFINE;
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-    }
-
-    /* This function is called in ncmpi_enddef(), which can happen either when
-     * creating a new file or opening an existing file with metadata modified.
-     * For the former case, ncp->begin_var == 0 here.
-     * For the latter case, we set begin_var a new value only if the new header
-     * grows out of its extent or the start of non-record variables is not
-     * aligned as requested by h_align.
-     * Note ncp->xsz is header size and ncp->begin_var is header extent.
-     * Add the minimum header free space requested by user.
-     */
-    if (h_minfree < 0) h_minfree = 0;
-    ncp->begin_var = D_RNDUP(ncp->xsz + h_minfree, h_align);
-
-    if (ncp->old != NULL) {
-        /* If this define mode was entered from a redef(), we check whether
-         * the new begin_var against the old begin_var. We do not shrink
-         * the header extent.
-         */
-        if (ncp->begin_var < ncp->old->begin_var)
-            ncp->begin_var = ncp->old->begin_var;
-    }
-
-    /* ncp->begin_var is the aligned starting file offset of the first
-       variable, also the extent of file header */
-
-    /* Now calculate the starting file offsets for all variables.
-       loop thru vars, first pass is for the 'non-record' vars */
-    end_var = ncp->begin_var;
-    for (j=0, i=0; i<ncp->vars.ndefined; i++) {
-        if (IS_RECVAR(ncp->vars.value[i]))
-            /* skip record variables on this pass */
-            continue;
-        if (first_var == NULL) first_var = ncp->vars.value[i];
-
-        /* for CDF-1 check if over the file size limit 32-bit integer */
-        if (ncp->format == 1 && end_var > X_OFF_MAX)
-            DEBUG_RETURN_ERROR(NC_EVARSIZE)
-
-        /* this will pad out non-record variables with zero to the
-         * requested alignment.  record variables are a bit trickier.
-         * we don't do anything special with them */
-        ncp->vars.value[i]->begin = D_RNDUP(end_var, v_align);
-
-        if (ncp->old != NULL) {
-            /* move to the next fixed variable */
-            for (; j<ncp->old->vars.ndefined; j++)
-                if (!IS_RECVAR(ncp->old->vars.value[j]))
-                    break;
-            if (j < ncp->old->vars.ndefined) {
-                if (ncp->vars.value[i]->begin < ncp->old->vars.value[j]->begin)
-                    /* the first ncp->vars.ndefined non-record variables should
-                       be the same. If the new begin is smaller, reuse the old
-                       begin */
-                    ncp->vars.value[i]->begin = ncp->old->vars.value[j]->begin;
-                j++;
-            }
-        }
-        /* end_var is the end offset of variable i */
-        end_var = ncp->vars.value[i]->begin + ncp->vars.value[i]->len;
-    }
-
-    /* end_var now is pointing to the end of last non-record variable */
-
-    /* only (re)calculate begin_rec if there is not sufficient
-     * space at end of non-record variables or if start of record
-     * variables is not aligned as requested by r_align.
-     * If the existing begin_rec is already >= index, then leave the
-     * begin_rec as is (in case some non-record variables are deleted)
-     */
-    if (ncp->begin_rec < end_var ||
-        ncp->begin_rec != D_RNDUP(ncp->begin_rec, v_align))
-        ncp->begin_rec = D_RNDUP(end_var, v_align);
-
-    /* expand free space for fixed variable section */
-    if (ncp->begin_rec < end_var + v_minfree)
-        ncp->begin_rec = D_RNDUP(end_var + v_minfree, v_align);
-
-    /* align the starting offset for record variable section */
-    if (r_align > 1)
-        ncp->begin_rec = D_RNDUP(ncp->begin_rec, r_align);
-
-    if (ncp->old != NULL) {
-        /* check whether the new begin_rec is smaller */
-        if (ncp->begin_rec < ncp->old->begin_rec)
-            ncp->begin_rec = ncp->old->begin_rec;
-    }
-
-    if (first_var != NULL)
-        ncp->begin_var = first_var->begin;
-    else
-        ncp->begin_var = ncp->begin_rec;
-
-    end_var = ncp->begin_rec;
-    /* end_var now is pointing to the beginning of record variables
-     * note that this can be larger than the end of last non-record variable
-     */
-
-    ncp->recsize = 0;
-
-    /* TODO: alignment for record variables (maybe using a new hint) */
-
-    /* loop thru vars, second pass is for the 'record' vars,
-     * re-calculate the starting offset for each record variable */
-    for (j=0, i=0; i<ncp->vars.ndefined; i++) {
-        if (!IS_RECVAR(ncp->vars.value[i]))
-            /* skip non-record variables on this pass */
-            continue;
-
-        /* X_OFF_MAX is the max of 32-bit integer */
-        if (ncp->format == 1 && end_var > X_OFF_MAX)
-            DEBUG_RETURN_ERROR(NC_EVARSIZE)
-
-        /* A few attempts at aligning record variables have failed
-         * (either with range error or 'value read not that expected',
-         * or with an error in ncmpi_redef )).  Not sufficient to align
-         * 'begin', but haven't figured out what else to adjust */
-        ncp->vars.value[i]->begin = end_var;
-
-        if (ncp->old != NULL) {
-            /* move to the next record variable */
-            for (; j<ncp->old->vars.ndefined; j++)
-                if (IS_RECVAR(ncp->old->vars.value[j]))
-                    break;
-            if (j < ncp->old->vars.ndefined) {
-                if (ncp->vars.value[i]->begin < ncp->old->vars.value[j]->begin)
-                    /* if the new begin is smaller, use the old begin */
-                    ncp->vars.value[i]->begin = ncp->old->vars.value[j]->begin;
-                j++;
-            }
-        }
-        end_var += ncp->vars.value[i]->len;
-        /* end_var is the end offset of record variable i */
-
-        /* check if record size must fit in 32-bits (for CDF-1) */
-#if SIZEOF_OFF_T == SIZEOF_SIZE_T && SIZEOF_SIZE_T == 4
-        if (ncp->recsize > X_UINT_MAX - ncp->vars.value[i]->len)
-            DEBUG_RETURN_ERROR(NC_EVARSIZE)
-#endif
-        ncp->recsize += ncp->vars.value[i]->len;
-        last = ncp->vars.value[i];
-    }
-
-    /*
-     * for special case (Check CDF-1 and CDF-2 file format specifications.)
-     * "A special case: Where there is exactly one record variable, we drop the
-     * requirement that each record be four-byte aligned, so in this case there
-     * is no record padding."
-     */
-    if (last != NULL) {
-        if (ncp->recsize == last->len) {
-            /* exactly one record variable, pack value */
-            ncp->recsize = *last->dsizes * last->xsz;
-        }
-#if 0
-        else if (last->len == UINT32_MAX) { /* huge last record variable */
-            ncp->recsize += *last->dsizes * last->xsz;
-        }
-#endif
-    }
-
-/* below is only needed if alignment is performed on record variables */
-#if 0
-    /*
-     * for special case of exactly one record variable, pack value
-     */
-    /* if there is exactly one record variable, then there is no need to
-     * pad for alignment -- there's nothing after it */
-    if (last != NULL && ncp->recsize == last->len)
-        ncp->recsize = *last->dsizes * last->xsz;
-#endif
-
-    if (NC_IsNew(ncp))
-        NC_set_numrecs(ncp, 0);
-
-    return NC_NOERR;
-}
-
-#define NC_NUMRECS_OFFSET 4
-
-/*----< ncmpii_write_numrecs() >-----------------------------------------------*/
-/* root process writes the new record number into file.
- * This function is called by:
- * 1. ncmpii_sync_numrecs
- * 2. collective nonblocking wait API, if the new number of records is bigger
- */
-int
-ncmpii_write_numrecs(NC         *ncp,
-                     MPI_Offset  new_numrecs)
-{
-    int rank, mpireturn, err;
-    MPI_File fh;
-
-    /* root process writes numrecs in file */
-    MPI_Comm_rank(ncp->nciop->comm, &rank);
-    if (rank > 0) return NC_NOERR;
-
-    /* return now if there is no record variabled defined */
-    if (ncp->vars.num_rec_vars == 0) return NC_NOERR;
-
-    fh = ncp->nciop->collective_fh;
-    if (NC_indep(ncp))
-        fh = ncp->nciop->independent_fh;
-
-    if (new_numrecs > ncp->numrecs || NC_ndirty(ncp)) {
-        int len;
-        char pos[8], *buf=pos;
-        MPI_Offset max_numrecs;
-        MPI_Status mpistatus;
-
-        max_numrecs = MAX(new_numrecs, ncp->numrecs);
-
-        if (ncp->format < 5) {
-            if (max_numrecs != (int)max_numrecs)
-                DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-            len = X_SIZEOF_SIZE_T;
-            err = ncmpix_put_uint32((void**)&buf, (uint)max_numrecs);
-            if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-        }
-        else {
-            len = X_SIZEOF_INT64;
-            err = ncmpix_put_uint64((void**)&buf, (uint64)max_numrecs);
-            if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-        }
-        /* ncmpix_put_xxx advances the 1st argument with size len */
-
-        /* root's file view always includes the entire file header */
-        TRACE_IO(MPI_File_write_at)(fh, NC_NUMRECS_OFFSET, (void*)pos, len,
-                                    MPI_BYTE, &mpistatus);
-        if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_write_at");
-            if (err == NC_EFILE) DEBUG_RETURN_ERROR(NC_EWRITE)
-        }
-        else {
-            ncp->nciop->put_size += len;
-        }
-    }
-    return NC_NOERR;
-}
-
-/*----< ncmpii_sync_numrecs() >-----------------------------------------------*/
-/* Synchronize the number of records in memory and write numrecs to file.
- * This function is called by:
- * 1. ncmpi_sync_numrecs(): by the user
- * 2. ncmpi_sync(): by the user
- * 3. ncmpii_end_indep_data(): exit from independent data mode
- * 4. all blocking collective put APIs when writing record variables
- * 5. ncmpii_close(): file close and currently in independent data mode
- *
- * This function is collective.
- */
-int
-ncmpii_sync_numrecs(NC         *ncp,
-                    MPI_Offset  new_numrecs)
-{
-    int status=NC_NOERR, mpireturn;
-    MPI_Offset max_numrecs;
-
-    assert(!NC_readonly(ncp));
-    assert(!NC_indef(ncp)); /* can only be called by APIs in data mode */
-
-    /* return now if there is no record variabled defined */
-    if (ncp->vars.num_rec_vars == 0) return NC_NOERR;
-
-    /* find the max new_numrecs among all processes
-     * Note new_numrecs may be smaller than ncp->numrecs
-     */
-    TRACE_COMM(MPI_Allreduce)(&new_numrecs, &max_numrecs, 1, MPI_OFFSET,
-                              MPI_MAX, ncp->nciop->comm);
-    if (mpireturn != MPI_SUCCESS)
-        return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-
-    /* root process writes max_numrecs to file */
-    status = ncmpii_write_numrecs(ncp, max_numrecs);
-
-    if (ncp->safe_mode == 1) {
-        /* broadcast root's status, because only root writes to the file */
-        int root_status = status;
-        TRACE_COMM(MPI_Bcast)(&root_status, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        /* root's write has failed, which is serious */
-        if (root_status == NC_EWRITE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
-    }
-
-    /* update numrecs in all processes's memory only if the new one is larger.
-     * Note new_numrecs may be smaller than ncp->numrecs
-     */
-    if (max_numrecs > ncp->numrecs) ncp->numrecs = max_numrecs;
-
-    /* clear numrecs dirty bit */
-    fClr(ncp->flags, NC_NDIRTY);
-
-    return status;
-}
-
-/*
- * Read in the header
- * It is expensive.
- */
-
-inline int
-ncmpii_read_NC(NC *ncp) {
-  int status = NC_NOERR;
-
-  ncmpii_free_NC_dimarray(&ncp->dims);
-  ncmpii_free_NC_attrarray(&ncp->attrs);
-  ncmpii_free_NC_vararray(&ncp->vars);
-
-  status = ncmpii_hdr_get_NC(ncp);
-
-  if (status == NC_NOERR)
-      fClr(ncp->flags, NC_NDIRTY);
-
-  return status;
-}
-
-/*----< write_NC() >---------------------------------------------------------*/
-/*
- * This function is collective and only called by enddef().
- * Write out the header
- * 1. Call ncmpii_hdr_put_NC() to copy the header object, ncp, to a buffer.
- * 2. Call NC_check_header() to check if header is consistent across all
- *    processes.
- * 3. Process rank 0 writes the header to file.
- * This is a collective call.
- */
-static int
-write_NC(NC *ncp)
-{
-    void *buf;
-    int status, mpireturn, err, rank;
-    MPI_Offset local_xsz;
-
-    assert(!NC_readonly(ncp));
-
-    /* In NC_begins(), root's ncp->xsz, root's header size, has been
-     * broadcasted, so ncp->xsz is now root's header size. To check any
-     * inconsistency in file header, we need to calculate local's header
-     * size by calling ncmpii_hdr_len_NC()./
-     */
-    local_xsz = ncmpii_hdr_len_NC(ncp);
-
-    /* Note valgrind will complain about uninitialized buf below, but buf will
-     * be first filled with header of size ncp->xsz and later write to file.
-     * So, no need to change to NCI_Calloc for the sake of valgrind.
-     */
-    buf = NCI_Malloc((size_t)local_xsz); /* buffer for local header object */
-
-    /* copy the entire local header object to buffer */
-    status = ncmpii_hdr_put_NC(ncp, buf);
-    if (status != NC_NOERR) { /* a fatal error */
-        NCI_Free(buf);
-        return status;
-    }
-
-    MPI_Comm_rank(ncp->nciop->comm, &rank);
-
-#ifdef _DIFF_HEADER
-    if (ncp->safe_mode == 0) {
-        int h_size=(int)ncp->xsz;
-        void *root_header;
-
-        /* check header against root's */
-        if (rank == 0)
-            root_header = buf;
-        else
-            root_header = (void*) NCI_Malloc((size_t)h_size);
-
-        TRACE_COMM(MPI_Bcast)(root_header, h_size, MPI_BYTE, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast"); 
-
-        if (rank > 0) {
-            if (h_size != local_xsz || memcmp(buf, root_buf, h_size))
-                status = NC_EMULTIDEFINE;
-            NCI_Free(root_buf);
-        }
-
-        /* report error if header is inconsistency */
-        TRACE_COMM(MPI_Allreduce)(&status, &err, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_Allreduce");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-        if (err != NC_NOERR) {
-            /* TODO: this error return is harsh. Maybe relax for inconsistent
-             * attribute contents? */
-            if (status == NC_NOERR) status = err;
-            NCI_Free(buf);
-            return status;
-        }
-    }
-#endif
-
-#ifdef _CHECK_HEADER_IN_DETAIL
-    /* check the header consistency across all processes and sync header.
-     * When safe_mode is on:
-     *   The returned status on root can be either NC_NOERR (all headers are
-     *   consistent) or NC_EMULTIDEFINE (some headers are inconsistent).
-     *   The returned status on non-root processes can be NC_NOERR, fatal
-     *   error (>-250), or inconsistency error (-250 to -269).
-     * When safe_mode is off:
-     *   The returned status on root is always NC_NOERR
-     *   The returned status on non-root processes can be NC_NOERR, fatal
-     *   error (>-250), or inconsistency error (-250 to -269).
-     * For fatal error, we should stop. For others, we can continue.
-     */
-    int max_err;
-    status = NC_check_header(ncp, buf, local_xsz);
-
-    /* check for fatal error */
-    err =  (status != NC_NOERR && !ErrIsHeaderDiff(status)) ? 1 : 0;
-    max_err = err;
-
-    if (ncp->safe_mode == 1) {
-        TRACE_COMM(MPI_Allreduce)(&err, &max_err, 1, MPI_INT, MPI_MAX,
-                                  ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            ncmpii_handle_error(mpireturn,"MPI_Allreduce");
-            DEBUG_RETURN_ERROR(NC_EMPI)
-        }
-    }
-    if (max_err == 1) { /* some processes encounter a fatal error */
-        NCI_Free(buf);
-        return status;
-    }
-#endif
-    /* For non-fatal error, we continue to write header to the file, as now the
-     * header object in memory has been sync-ed across all processes. */
-
-    /* only rank 0's header gets written to the file */
-    if (rank == 0) {
-        /* rank 0's fileview already includes the file header */
-        MPI_Status mpistatus;
-        if (ncp->xsz != (int)ncp->xsz)
-            DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
-
-        TRACE_IO(MPI_File_write_at)(ncp->nciop->collective_fh, 0, buf,
-                                    (int)ncp->xsz, MPI_BYTE, &mpistatus);
-        if (mpireturn != MPI_SUCCESS) {
-            err = ncmpii_handle_error(mpireturn, "MPI_File_write_at");
-            /* write has failed, which is more serious than inconsistency */
-            if (err == NC_EFILE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
-        }
-        else {
-            ncp->nciop->put_size += ncp->xsz;
-        }
-    }
-
-    if (ncp->safe_mode == 1) {
-        /* broadcast root's status, because only root writes to the file */
-        int root_status = status;
-        TRACE_COMM(MPI_Bcast)(&root_status, 1, MPI_INT, 0, ncp->nciop->comm);
-        /* root's write has failed, which is more serious than inconsistency */
-        if (root_status == NC_EWRITE) DEBUG_ASSIGN_ERROR(status, NC_EWRITE)
-    }
-
-    fClr(ncp->flags, NC_NDIRTY);
-    NCI_Free(buf);
-
-    return status;
-}
-
-inline int
-ncmpii_dset_has_recvars(NC *ncp)
-{
-    /* possible further optimization: set a flag on the header data
-     * structure when record variable created so we can skip this loop*/
-    int i;
-    NC_var **vpp;
-
-    vpp = ncp->vars.value;
-    for (i=0; i< ncp->vars.ndefined; i++, vpp++) {
-        if (IS_RECVAR(*vpp)) return 1;
-    }
-    return 0;
-}
-
-
-#if 0
-/*
- * header size increases, shift all record and non-record variables down
- */
-static int
-move_data_r(NC *ncp, NC *old) {
-    /* no new record or non-record variable inserted, header size increases,
-     * must shift (move) the whole contiguous data part down
-     * Note ncp->numrecs may be > old->numrecs
-     */
-    return ncmpiio_move(ncp->nciop, ncp->begin_var, old->begin_var,
-                        old->begin_rec - old->begin_var +
-                        ncp->recsize * ncp->numrecs);
-}
-#endif
-
-/*
- * Move the record variables down,
- * re-arrange records as needed
- * Fill as needed.
- */
-static int
-move_recs_r(NC *ncp, NC *old) {
-    int status;
-    MPI_Offset recno;
-    const MPI_Offset nrecs = ncp->numrecs;
-    const MPI_Offset ncp_recsize = ncp->recsize;
-    const MPI_Offset old_recsize = old->recsize;
-    const off_t ncp_off = ncp->begin_rec;
-    const off_t old_off = old->begin_rec;
-
-    assert(ncp_recsize >= old_recsize);
-
-    if (ncp_recsize == old_recsize) {
-        if (ncp_recsize == 0) /* no record variable defined yet */
-            return NC_NOERR;
-
-        /* No new record variable inserted, move all record variables as a whole */
-        status = ncmpiio_move(ncp->nciop, ncp_off, old_off, ncp_recsize * nrecs);
-        if (status != NC_NOERR)
-            return status;
-    } else {
-        /* new record variables inserted, move one whole record at a time */
-        for (recno = nrecs-1; recno >= 0; recno--) {
-            status = ncmpiio_move(ncp->nciop,
-                                  ncp_off+recno*ncp_recsize,
-                                  old_off+recno*old_recsize,
-                                  old_recsize);
-            if (status != NC_NOERR)
-                return status;
-        }
-    }
-
-    return NC_NOERR;
-}
-
-
-#if 0
-/*
- * Move the "non record" variables "out".
- * Fill as needed.
- */
-
-static int
-move_vars_r(NC *ncp, NC *old) {
-  return ncmpiio_move(ncp->nciop, ncp->begin_var, old->begin_var,
-                   old->begin_rec - old->begin_var);
-}
-#endif
-
-/*
- * Given a valid ncp, check all variables for their sizes against the maximal
- * allowable sizes. Different CDF formation versions have different maximal
- * sizes. This function returns NC_EVARSIZE if any variable has a bad len
- * (product of non-rec dim sizes too large), else return NC_NOERR.
- */
-static int
-ncmpii_NC_check_vlens(NC *ncp)
-{
-    NC_var **vpp;
-    /* maximum permitted variable size (or size of one record's worth
-       of a record variable) in bytes.  This is different for format 1
-       and format 2. */
-    MPI_Offset ii, vlen_max, rec_vars_count;
-    MPI_Offset large_fix_vars_count, large_rec_vars_count;
-    int last = 0;
-
-    if (ncp->vars.ndefined == 0)
-        return NC_NOERR;
-
-    if (ncp->format >= 5) /* CDF-5 */
-        return NC_NOERR;
-
-    /* only CDF-1 and CDF-2 need to continue */
-
-    if (ncp->flags & NC_64BIT_OFFSET) /* CDF2 format */
-        vlen_max = X_UINT_MAX - 3; /* "- 3" handles rounded-up size */
-    else
-        vlen_max = X_INT_MAX - 3; /* CDF1 format */
-
-    /* Loop through vars, first pass is for non-record variables */
-    large_fix_vars_count = 0;
-    rec_vars_count = 0;
-    vpp = ncp->vars.value;
-    for (ii = 0; ii < ncp->vars.ndefined; ii++, vpp++) {
-        if (!IS_RECVAR(*vpp)) {
-            last = 0;
-            if (ncmpii_NC_check_vlen(*vpp, vlen_max) == 0) {
-                /* check this variable's shape product against vlen_max */
-                large_fix_vars_count++;
-                last = 1;
-            }
-        } else {
-            rec_vars_count++;
-        }
-    }
-    /* OK if last non-record variable size too large, since not used to
-       compute an offset */
-    if (large_fix_vars_count > 1)  /* only one "too-large" variable allowed */
-        DEBUG_RETURN_ERROR(NC_EVARSIZE)
-
-    /* The only "too-large" variable must be the last one defined */
-    if (large_fix_vars_count == 1 && last == 0)
-        DEBUG_RETURN_ERROR(NC_EVARSIZE)
-
-    if (rec_vars_count == 0) return NC_NOERR;
-
-    /* if there is a "too-large" fixed-size variable, no record variable is
-     * allowed */
-    if (large_fix_vars_count == 1)
-        DEBUG_RETURN_ERROR(NC_EVARSIZE)
-
-    /* Loop through vars, second pass is for record variables.   */
-    large_rec_vars_count = 0;
-    vpp = ncp->vars.value;
-    for (ii = 0; ii < ncp->vars.ndefined; ii++, vpp++) {
-        if (IS_RECVAR(*vpp)) {
-            last = 0;
-            if (ncmpii_NC_check_vlen(*vpp, vlen_max) == 0) {
-                /* check this variable's shape product against vlen_max */
-                large_rec_vars_count++;
-                last = 1;
-            }
-        }
-    }
-
-    /* For CDF-2, no record variable can require more than 2^32 - 4 bytes of
-     * storage for each record's worth of data, unless it is the last record
-     * variable. See
-     * http://www.unidata.ucar.edu/software/netcdf/docs/file_structure_and_performance.html#offset_format_limitations
-     */
-    if (large_rec_vars_count > 1)  /* only one "too-large" variable allowed */
-        DEBUG_RETURN_ERROR(NC_EVARSIZE)
-
-    /* and it has to be the last one */
-    if (large_rec_vars_count == 1 && last == 0)
-        DEBUG_RETURN_ERROR(NC_EVARSIZE)
-
-    return NC_NOERR;
-}
-
-#define DEFAULT_ALIGNMENT 512
-#define HEADER_ALIGNMENT_LB 4
-
-/* Many subroutines called in ncmpii_NC_enddef() are collective. We check the
- * error codes of all processes only in safe mode, so the program can stop
- * collectively, if any one process got an error. However, when safe mode is
- * off, we simply return the error and program may hang if some processes
- * do not get error and proceed to the next subroutine call.
- */ 
-#define CHECK_ERROR(status) {                                                \
-    if (ncp->safe_mode == 1) {                                               \
-        int g_status;                                                        \
-        TRACE_COMM(MPI_Allreduce)(&status, &g_status, 1, MPI_INT, MPI_MIN,   \
-                                  ncp->nciop->comm);                         \
-        if (mpireturn != MPI_SUCCESS)                                        \
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");          \
-        if (g_status != NC_NOERR) return status;                             \
-    }                                                                        \
-    else if (status != NC_NOERR)                                             \
-        return status;                                                       \
-}
-
-/*----< ncmpii_NC_enddef() >-------------------------------------------------*/
-static int
-ncmpii_NC_enddef(NC         *ncp,
-                 MPI_Offset  h_align,
-                 MPI_Offset  h_minfree,
-                 MPI_Offset  v_align,
-                 MPI_Offset  v_minfree,
-                 MPI_Offset  r_align)
-{
-    int i, err, status=NC_NOERR, mpireturn;
-    char value[MPI_MAX_INFO_VAL];
-#ifdef ENABLE_SUBFILING
-    NC *ncp_sf=NULL;
-#endif
-
-    assert(h_align > 0);  /* alignment size cannot be zero */
-    assert(v_align > 0);
-    assert(r_align > 0);
-
-    /* all CDF formats require 4-bytes alignment */
-    h_align = D_RNDUP(h_align, 4);
-    v_align = D_RNDUP(v_align, 4);
-    r_align = D_RNDUP(r_align, 4);
-
-    /* reflect the hint changes to the MPI info object, so the user can
-     * query exactly what hint values are being used
-     */
-    ncp->nciop->hints.h_align = h_align;
-    ncp->nciop->hints.v_align = v_align;
-    ncp->nciop->hints.r_align = r_align;
-
-    sprintf(value, "%lld", h_align);
-    MPI_Info_set(ncp->nciop->mpiinfo, "nc_header_align_size", value);
-    sprintf(value, "%lld", v_align);
-    MPI_Info_set(ncp->nciop->mpiinfo, "nc_var_align_size", value);
-    sprintf(value, "%lld", r_align);
-    MPI_Info_set(ncp->nciop->mpiinfo, "nc_record_align_size", value);
-
-#ifdef ENABLE_SUBFILING
-    /* num of subfiles has been determined already */
-    ncp->subfile_mode    = ncp->nciop->hints.subfile_mode;
-    ncp->nc_num_subfiles = ncp->nciop->hints.num_subfiles;
-
-    if (ncp->nc_num_subfiles > 1) {
-        /* TODO: should return subfile-related msg when there's an error */
-        status = ncmpii_subfile_partition(ncp, &ncp->ncid_sf);
-        if (status != NC_NOERR)
-            printf("Error in file %s line %d (%s)\n",__FILE__,__LINE__,
-                   ncmpi_strerror(status));
-
-        CHECK_ERROR(status)
-    }
-#endif
-
-    /* check whether sizes of all variables are legal */
-    status = ncmpii_NC_check_vlens(ncp);
-    CHECK_ERROR(status)
-
-    /* When ncp->old == NULL, this enddef is called the first time after file
-     * create call. In this case, we compute each variable's 'begin', starting
-     * file offset as well as the offsets of record variables.
-     * When ncp->old != NULL, this enddef is called after a redef. In this
-     * case, we re-used all variable offsets as many as possible.
-     *
-     * Note in NC_begins, root broadcasts ncp->xsz, the file header size, to
-     * all processes.
-     */
-    status = NC_begins(ncp, h_align, h_minfree, v_align, v_minfree, r_align);
-    CHECK_ERROR(status)
-
-#ifdef ENABLE_SUBFILING
-    if (ncp->nc_num_subfiles > 1) {
-        /* get ncp info for the subfile */
-        status = ncmpii_NC_check_id(ncp->ncid_sf, &ncp_sf);
-        if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-        status = NC_begins(ncp_sf, h_align, h_minfree, v_align, v_minfree,
-                           r_align);
-        CHECK_ERROR(status)
-    }
-#endif
-
-    if (ncp->old != NULL) {
-        /* The current define mode was entered from ncmpi_redef, not from
-         * ncmpi_create. We must check if header has been expanded.
-         */
-
-        assert(!NC_IsNew(ncp));
-        assert(fIsSet(ncp->flags, NC_INDEF));
-        assert(ncp->begin_rec >= ncp->old->begin_rec);
-        assert(ncp->begin_var >= ncp->old->begin_var);
-        assert(ncp->vars.ndefined >= ncp->old->vars.ndefined);
-        /* ncp->numrecs has already sync-ed in ncmpi_redef */
-
-        if (ncp->vars.ndefined > 0) { /* no. record and non-record variables */
-            if (ncp->begin_var > ncp->old->begin_var) {
-                /* header size increases, shift the entire data part down */
-                /* shift record variables first */
-                status = move_recs_r(ncp, ncp->old);
-                CHECK_ERROR(status)
-
-                /* shift non-record variables */
-                /* status = move_vars_r(ncp, ncp->old); */
-                status = ncmpiio_move_fixed_vars(ncp, ncp->old);
-                CHECK_ERROR(status)
-            }
-            else if (ncp->begin_rec > ncp->old->begin_rec ||
-                     ncp->recsize   > ncp->old->recsize) {
-                /* number of non-record variables increases, or
-                   number of records of record variables increases,
-                   shift and move all record variables down */
-                status = move_recs_r(ncp, ncp->old);
-                CHECK_ERROR(status)
-            }
-        }
-    } /* ... ncp->old != NULL */
-
-    /* first sync header objects in memory across all processes, and then root
-     * writes the header to file. Note safe_mode error check will be done in
-     * write_NC() */
-    status = write_NC(ncp);
-
-    /* we should continue to exit define mode, even if header is inconsistent
-     * among processes, so the program can proceed, say to close file properly.
-     * However, if ErrIsHeaderDiff(status) is true, this error should
-     * be considered fatal, as inconsistency is about the data structure,
-     * rather then contents (such as attribute values) */
-
-#ifdef ENABLE_SUBFILING
-    /* write header to subfile */
-    if (ncp->nc_num_subfiles > 1) {
-        err = write_NC(ncp_sf);
-        if (status == NC_NOERR) status = err;
-    }
-#endif
-
-    /* update the total number of record variables */
-    ncp->vars.num_rec_vars = 0;
-    for (i=0; i<ncp->vars.ndefined; i++)
-        ncp->vars.num_rec_vars += IS_RECVAR(ncp->vars.value[i]);
-
-    /* fill variables according to their fill mode settings */
-    if (ncp->vars.ndefined > 0) {
-        err = ncmpii_fill_vars(ncp);
-        if (status == NC_NOERR) status = err;
-    }
-
-    if (ncp->old != NULL) {
-        ncmpii_free_NC(ncp->old);
-        ncp->old = NULL;
-    }
-    fClr(ncp->flags, NC_CREAT | NC_INDEF);
-
-#ifdef ENABLE_SUBFILING
-    if (ncp->nc_num_subfiles > 1)
-        fClr(ncp_sf->flags, NC_CREAT | NC_INDEF);
-#endif
-
-    /* If the user sets NC_SHARE, we enforce a stronger data consistency */
-    if (NC_doFsync(ncp))
-        ncmpiio_sync(ncp->nciop); /* calling MPI_File_sync() */
-
-    return status;
-}
-
-/*----< ncmpii_inq_env_align_hints() >---------------------------------------*/
-/* check if environment variable PNETCDF_HINTS sets any of the following hints.
- * nc_header_align_size      if yes, set its value to h_align
- * nc_var_align_size         if yes, set its value to v_align
- * nc_header_read_chunk_size if yes, set its value to h_chunk
- * nc_record_align_size      if yes, set its value to r_align
- */
-static int
-ncmpii_inq_env_align_hints(MPI_Offset *h_align,
-                           MPI_Offset *v_align,
-                           MPI_Offset *h_chunk,
-                           MPI_Offset *r_align)
-{
-    /* TODO: env variables have been checked in ncmpi_create and ncmpi_open
-     * Maybe this can be part of that
-     */
-    char *env_str;
-
-    *h_align = 0;
-    *v_align = 0;
-    *h_chunk = 0;
-    *r_align = 0;
-
-    if ((env_str = getenv("PNETCDF_HINTS")) != NULL) {
-        char *env_str_cpy, *key;
-        env_str_cpy = (char*) NCI_Malloc(strlen(env_str)+1);
-        strcpy(env_str_cpy, env_str);
-        key = strtok(env_str_cpy, ";");
-        while (key != NULL) {
-            char *val = strchr(key, '=');
-            if (val == NULL) continue; /* ill-formed hint */
-            *val = '\0';
-            val++;
-            if (strcasecmp(key, "nc_header_align_size") == 0)
-                *h_align = strtoll(val,NULL,10);
-            else if (strcasecmp(key, "nc_var_align_size") == 0)
-                *v_align = strtoll(val,NULL,10);
-            else if (strcasecmp(key, "nc_header_read_chunk_size") == 0)
-                *h_chunk = strtoll(val,NULL,10);
-            else if (strcasecmp(key, "nc_record_align_size") == 0)
-                *r_align = strtoll(val,NULL,10);
-            key = strtok(NULL, ";");
-        }
-        NCI_Free(env_str_cpy);
-    }
-    return 1;
-}
-
-/*----< ncmpii_enddef() >----------------------------------------------------*/
-int
-ncmpii_enddef(NC *ncp)
-{
-    int i, flag, striping_unit;
-    char value[MPI_MAX_INFO_VAL];
-    MPI_Offset h_align, v_align, r_align, all_var_size;
-    MPI_Offset env_h_align, env_v_align, env_h_chunk, env_r_align;
-
-    assert(!NC_readonly(ncp));
-    assert(NC_indef(ncp));
-
-    /* calculate a good align size for PnetCDF level hints:
-     * header_align_size and var_align_size based on the MPI-IO hint
-     * striping_unit. This hint can be either supplied by the user or obtained
-     * from MPI-IO (for example, ROMIO's Lustre driver makes a system call to
-     * get the striping parameters of a file).
-     */
-    MPI_Info_get(ncp->nciop->mpiinfo, "striping_unit", MPI_MAX_INFO_VAL-1,
-                 value, &flag);
-    striping_unit = 0;
-    if (flag) striping_unit = (int)strtol(value,NULL,10);
-    ncp->nciop->striping_unit = striping_unit;
-
-    all_var_size = 0;  /* sum of all defined variables */
-    for (i=0; i<ncp->vars.ndefined; i++)
-        all_var_size += ncp->vars.value[i]->len;
-
-    /* check if any hints have been set in the environment variable
-     * PNETCDF_HINTS, as they will overwrite the ones set in the MPI_info
-     * provided in ncmpi_creat() or ncmpi_open() */
-    ncmpii_inq_env_align_hints(&env_h_align, &env_v_align, &env_h_chunk,
-                               &env_r_align);
-
-    /* align file offsets for file header space and fixed variables.
-       These alignment hints have been extracted from the MPI_Info object when
-       ncmpi_create() is called.
-     */
-    h_align = (env_h_align == 0) ? ncp->nciop->hints.h_align : env_h_align;
-    v_align = (env_v_align == 0) ? ncp->nciop->hints.v_align : env_v_align;
-    r_align = (env_r_align == 0) ? ncp->nciop->hints.r_align : env_r_align;
-
-    if (h_align == 0) { /* user info does not set hint nc_header_align_size */
-        if (striping_unit &&
-            all_var_size > HEADER_ALIGNMENT_LB * striping_unit)
-            /* if striping_unit is available and file size sufficiently large */
-            h_align = striping_unit;
-        else
-            h_align = DEFAULT_ALIGNMENT;
-    }
-    /* else respect user hint */
-
-    if (v_align == 0) { /* user info does not set hint nc_var_align_size */
-        if (striping_unit &&
-            all_var_size > HEADER_ALIGNMENT_LB * striping_unit)
-            /* if striping_unit is available and file size sufficiently large */
-            v_align = striping_unit;
-        else
-            v_align = DEFAULT_ALIGNMENT;
-    }
-    /* else respect user hint */
-
-    if (r_align == 0) { /* user info does not set hint nc_record_align_size */
-        if (striping_unit)
-            r_align = striping_unit;
-        else
-            r_align = DEFAULT_ALIGNMENT;
-    }
-    /* else respect user hint */
-
-    return ncmpii_NC_enddef(ncp, h_align, 0, v_align, 0, r_align);
-}
-
-/*----< ncmpii__enddef() >---------------------------------------------------*/
-int
-ncmpii__enddef(NC         *ncp,
-               MPI_Offset  h_minfree,
-               MPI_Offset  v_align,
-               MPI_Offset  v_minfree,
-               MPI_Offset  r_align)
-{
-    int i, flag, striping_unit;
-    char value[MPI_MAX_INFO_VAL];
-    MPI_Offset h_align, all_var_size;
-    MPI_Offset env_h_align, env_v_align, env_h_chunk, env_r_align;
-
-    assert(!NC_readonly(ncp));
-    assert(NC_indef(ncp));
-
-    /* calculate a good align size for PnetCDF level hints:
-     * header_align_size and var_align_size based on the MPI-IO hint
-     * striping_unit. This hint can be either supplied by the user or obtained
-     * from MPI-IO (for example, ROMIO's Lustre driver makes a system call to
-     * get the striping parameters of a file).
-     */
-    MPI_Info_get(ncp->nciop->mpiinfo, "striping_unit", MPI_MAX_INFO_VAL-1,
-                 value, &flag);
-    striping_unit = 0;
-    if (flag) striping_unit = (int)strtol(value,NULL,10);
-    ncp->nciop->striping_unit = striping_unit;
-
-    all_var_size = 0;  /* sum of all defined variables */
-    for (i=0; i<ncp->vars.ndefined; i++)
-        all_var_size += ncp->vars.value[i]->len;
-
-    /* check if any hints have been set in the environment variable
-     * PNETCDF_HINTS, as they will overwrite the ones passed in this function
-     * and those passed-in alignment values will overwrite the ones set in the
-     * MPI_info provided in ncmpi_creat() or ncmpi_open() */
-    ncmpii_inq_env_align_hints(&env_h_align, &env_v_align, &env_h_chunk,
-                               &env_r_align);
-
-    /* align file offsets for file header space and fixed variables */
-    h_align = (env_h_align == 0) ? ncp->nciop->hints.h_align : env_h_align;
-    v_align = (env_v_align == 0) ? v_align                   : env_v_align;
-    r_align = (env_r_align == 0) ? r_align                   : env_r_align;
-
-    if (v_align == 0) /* 0 means let PnetCDF decide, 1 means no align */
-        v_align = ncp->nciop->hints.v_align;
-
-    if (r_align == 0) /* 0 means let PnetCDF decide, 1 means no align */
-        r_align = ncp->nciop->hints.r_align;
-
-    if (h_align == 0) { /* user does not set hint nc_header_align_size */
-        if (striping_unit &&
-            all_var_size > HEADER_ALIGNMENT_LB * striping_unit)
-            /* if striping_unit is available and file size sufficiently large */
-            h_align = striping_unit;
-        else
-            h_align = DEFAULT_ALIGNMENT;
-    }
-    /* else respect user hint */
-
-    if (v_align == 0) { /* user does not set hint nc_var_align_size */
-        if (striping_unit &&
-            all_var_size > HEADER_ALIGNMENT_LB * striping_unit)
-            /* if striping_unit is available and file size sufficiently large */
-            v_align = striping_unit;
-        else
-            v_align = DEFAULT_ALIGNMENT;
-    }
-    /* else respect user hint */
-
-    if (r_align == 0) { /* user does not set hint nc_record_align_size */
-        if (striping_unit)
-            r_align = striping_unit;
-        else
-            r_align = DEFAULT_ALIGNMENT;
-    }
-    /* else respect user hint */
-
-    return ncmpii_NC_enddef(ncp, h_align, h_minfree, v_align, v_minfree,
-                            r_align);
-}
-
-/*----< ncmpii_close() >------------------------------------------------------*/
-/* This function is collective */
-int
-ncmpii_close(NC *ncp)
-{
-    int err, status=NC_NOERR;
-
-    if (NC_indef(ncp)) { /* currently in define mode */
-        status = ncmpii_enddef(ncp); /* TODO: defaults */
-        if (status != NC_NOERR ) {
-            /* To do: Abort new definition, if any */
-            if (ncp->old != NULL) {
-                ncmpii_free_NC(ncp->old);
-                ncp->old = NULL;
-                fClr(ncp->flags, NC_INDEF);
-            }
-        }
-    }
-
-    if (!NC_readonly(ncp) &&  /* file is open for write */
-         NC_indep(ncp)) {     /* exit independent data mode will sync header */
-        err = ncmpii_end_indep_data(ncp);
-        if (status == NC_NOERR ) status = err;
-    }
-
-    /* if entering this function in  collective data mode, we do not have to
-     * update header in file, as file header is always up-to-date */
-
-#ifdef ENABLE_SUBFILING
-    /* ncmpii_enddef() will update nc_num_subfiles */
-    /* TODO: should check ncid_sf? */
-    /* if the file has subfiles, close them first */
-    if (ncp->nc_num_subfiles > 1)
-        ncmpii_subfile_close(ncp);
-#endif
-
-    /* We can cancel or complete all outstanding nonblocking I/O.
-     * For now, cancelling makes more sense. */
-#ifdef COMPLETE_NONBLOCKING_IO
-    if (ncp->numGetReqs > 0) {
-        ncmpii_wait(ncp, INDEP_IO, NC_GET_REQ_ALL, NULL, NULL);
-        if (status == NC_NOERR ) status = NC_EPENDING;
-    }
-    if (ncp->numPutReqs > 0) {
-        ncmpii_wait(ncp, INDEP_IO, NC_PUT_REQ_ALL, NULL, NULL);
-        if (status == NC_NOERR ) status = NC_EPENDING;
-    }
-#else
-    if (ncp->numGetReqs > 0) {
-        int rank;
-        MPI_Comm_rank(ncp->nciop->comm, &rank);
-        printf("PnetCDF warning: %d nonblocking get requests still pending on process %d. Cancelling ...\n",ncp->numGetReqs,rank);
-        ncmpii_cancel(ncp, NC_GET_REQ_ALL, NULL, NULL);
-        if (status == NC_NOERR ) status = NC_EPENDING;
-    }
-    if (ncp->numPutReqs > 0) {
-        int rank;
-        MPI_Comm_rank(ncp->nciop->comm, &rank);
-        printf("PnetCDF warning: %d nonblocking put requests still pending on process %d. Cancelling ...\n",ncp->numPutReqs,rank);
-        ncmpii_cancel(ncp, NC_PUT_REQ_ALL, NULL, NULL);
-        if (status == NC_NOERR ) status = NC_EPENDING;
-    }
-#endif
-
-    /* If the user wants a stronger data consistency by setting NC_SHARE */
-    if (fIsSet(ncp->nciop->ioflags, NC_SHARE))
-        ncmpiio_sync(ncp->nciop); /* calling MPI_File_sync() */
-
-    /* calling MPI_File_close() */
-    ncmpiio_close(ncp->nciop, 0);
-    ncp->nciop = NULL;
-
-    /* remove this file from the list of opened files */
-    ncmpii_del_from_NCList(ncp);
-
-    /* free up space occupied by the header metadata */
-    ncmpii_free_NC(ncp);
-
-    return status;
-}
-
-/* Public */
-
-int
-ncmpi_inq(int  ncid,
-          int *ndimsp,
-          int *nvarsp,
-          int *nattsp,
-          int *xtendimp)
-{
-    int status;
-    NC *ncp;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    if (ndimsp != NULL)
-        *ndimsp = (int) ncp->dims.ndefined;
-    if (nvarsp != NULL)
-        *nvarsp = (int) ncp->vars.ndefined;
-    if (nattsp != NULL)
-        *nattsp = (int) ncp->attrs.ndefined;
-    if (xtendimp != NULL)
-        /* *xtendimp = ncmpii_find_NC_Udim(&ncp->dims, NULL); */
-        *xtendimp = ncp->dims.unlimited_id;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_version() >-----------------------------------------------*/
-int
-ncmpi_inq_version(int ncid, int *nc_mode)
-{
-    int status;
-    NC *ncp;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    if (ncp->format == 5)
-        *nc_mode = NC_64BIT_DATA;
-    else if (ncp->format == 2)
-        *nc_mode = NC_64BIT_OFFSET;
-    else
-        *nc_mode = NC_CLASSIC_MODEL;
-
-    return NC_NOERR;
-}
-
-
-int
-ncmpi_inq_ndims(int ncid, int *ndimsp)
-{
-    int status;
-    NC *ncp;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    if (ndimsp != NULL)
-        *ndimsp = (int) ncp->dims.ndefined;
-
-    return NC_NOERR;
-}
-
-int
-ncmpi_inq_nvars(int ncid, int *nvarsp)
-{
-    int status;
-    NC *ncp;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    if (nvarsp != NULL)
-        *nvarsp = (int) ncp->vars.ndefined;
-
-    return NC_NOERR;
-}
-
-int
-ncmpi_inq_natts(int ncid, int *nattsp)
-{
-    int status;
-    NC *ncp;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    if (nattsp != NULL)
-        *nattsp = (int) ncp->attrs.ndefined;
-
-    return NC_NOERR;
-}
-
-int
-ncmpi_inq_unlimdim(int ncid, int *xtendimp)
-{
-    int status;
-    NC *ncp;
-
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    /* TODO: it makes no sense xtendimp being NULL */
-    if (xtendimp != NULL)
-        /* *xtendimp = ncmpii_find_NC_Udim(&ncp->dims, NULL); */
-        *xtendimp = ncp->dims.unlimited_id;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_num_rec_vars() >-------------------------------------------*/
-int
-ncmpi_inq_num_rec_vars(int ncid, int *nvarsp)
-{
-    int i, status;
-    NC *ncp;
-
-    /* get ncp object */
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    if (nvarsp != NULL) {
-        if (NC_indef(ncp)) {
-            /* if in define mode, recalculate the number of record variables */
-            *nvarsp = 0;
-            for (i=0; i<ncp->vars.ndefined; i++)
-                *nvarsp += IS_RECVAR(ncp->vars.value[i]);
-        }
-        else
-            *nvarsp = ncp->vars.num_rec_vars;
-    }
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_num_fix_vars() >-------------------------------------------*/
-int
-ncmpi_inq_num_fix_vars(int ncid, int *nvarsp)
-{
-    int i, status;
-    NC *ncp;
-
-    /* get ncp object */
-    status = ncmpii_NC_check_id(ncid, &ncp);
-    if (status != NC_NOERR) DEBUG_RETURN_ERROR(status)
-
-    if (nvarsp != NULL) {
-        if (NC_indef(ncp)) {
-            /* if in define mode, recalculate the number of record variables */
-            *nvarsp = 0;
-            for (i=0; i<ncp->vars.ndefined; i++)
-                *nvarsp += IS_RECVAR(ncp->vars.value[i]);
-        }
-        else
-            *nvarsp = ncp->vars.num_rec_vars;
-
-        /* no. fixed-size == ndefined - no. record variables */
-        *nvarsp = ncp->vars.ndefined- *nvarsp;
-    }
-
-    return NC_NOERR;
-}
-
diff --git a/src/lib/nc.h b/src/lib/nc.h
deleted file mode 100644
index ba5d062..0000000
--- a/src/lib/nc.h
+++ /dev/null
@@ -1,861 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: nc.h 2723 2016-12-18 06:21:12Z wkliao $ */
-#ifndef _NC_H_
-#define _NC_H_
-
-/*
- * netcdf library 'private' data structures, objects and interfaces
- */
-
-#include <stddef.h>     /* size_t */
-#include <sys/types.h>  /* off_t */
-
-#include "ncio.h"       /* ncio */
-#include "fbits.h"
-
-/* for put request less than 4KB, copy it to a buffer and do byte swap there,
- * so if the user buffer is immutable (assuming smaller than 4KB), it will not
- * cause seg fault. Not a perfect solution, but should be sufficient for most
- * of the cases.
- */
-#define NC_BYTE_SWAP_BUFFER_SIZE 4096
-
-/* define MPI_OFFSET if not defined */
-#ifndef HAVE_MPI_OFFSET_DATATYPE
-    #ifdef HAVE_MPI_LONG_LONG_INT
-        #define MPI_OFFSET MPI_LONG_LONG_INT
-    #else
-        #define MPI_OFFSET MPI_INT
-    #endif
-#endif
-
-enum API_KIND {
-    API_VARD, /* do not check start and count, no flexible APIs */
-    API_VARN, /* do not check start and count */
-    API_VAR,  /* do not check start and count */
-    API_VAR1, /* check start */
-    API_VARA, /* check start and count */
-    API_VARS, /* check start and count */
-    API_VARM  /* check start and count */
-};
-
-#define WRITE_REQ 0
-#define READ_REQ  1
-
-#define INDEP_IO 0
-#define COLL_IO  1
-#define NONBLOCKING_IO  -1
-
-/* C macros for TRACE MPI calls */
-#ifdef PNETCDF_TRACE_MPI_COMM
-#define TRACE_COMM(x) printf("TRACE-MPI-COMM: FILE %s FUNC %s() LINE %d calling %s()\n",__FILE__,__func__,__LINE__,#x),mpireturn=x
-#else
-#define TRACE_COMM(x) mpireturn=x
-#endif
-
-#ifdef PNETCDF_TRACE_MPI_IO
-#define TRACE_IO(x) printf("TRACE-MPI-IO:   FILE %s FUNC %s() LINE %d calling %s()\n",__FILE__,__func__,__LINE__,#x),mpireturn=x
-#else
-#define TRACE_IO(x) mpireturn=x
-#endif
-
-
-/* XXX: this seems really low.  do we end up spending a ton of time mallocing?
- * could we reduce that by increasing this to something 21st century? */
-#ifndef NC_ARRAY_GROWBY
-#define NC_ARRAY_GROWBY 4
-#endif
-
-/* ncmpi_create/ncmpi_open set up header to be 'chunksize' big and to grow
- * by 'chunksize' as new items added. This used to be 4k. 256k lets us read
- * in an entire climate header in one go */
-#define NC_DEFAULT_CHUNKSIZE 262144
-
-/* when variable's nctype is NC_CHAR, I/O buffer's MPI type must be MPI_CHAR
- * and vice versa */
-#define NCMPII_ECHAR(nctype, mpitype) ((((nctype) == NC_CHAR) == ((mpitype) != MPI_CHAR)) ? NC_ECHAR : NC_NOERR)
-
-/*
- * The extern size of an empty
- * netcdf version 1 file.
- * The initial value of ncp->xsz.
- */
-#define MIN_NC_XSZ 32
-
-/* netcdf file format:
-     netcdf_file  = header  data
-     header       = magic  numrecs  dim_list  gatt_list  var_list
-     magic        = 'C'  'D'  'F'  VERSION
-     VERSION      = \x01 | \x02 | \x05
-     numrecs      = NON_NEG | STREAMING
-     dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
-     gatt_list    = att_list
-     att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
-     var_list     = ABSENT | NC_VARIABLE   nelems  [var ...]
-     ABSENT       = ZERO  ZERO                  // Means list is not present
-     ZERO         = \x00 \x00 \x00 \x00         // 32-bit zero
-
-  Minimum happens when nothing is defined, i.e.
-     magic              -- 4 bytes
-     numrecs            -- 4 bytes for CDF-1 and CDF-2, 8 bytes for CDF-5
-     dim_list = ABSENT  -- 8 bytes
-     gatt_list = ABSENT -- 8 bytes
-     var_list = ABSENT  -- 8 bytes
-*/
-
-typedef struct NC NC; /* forward reference */
-
-/*
- *  The internal data types
- */
-typedef enum {
-    NC_UNSPECIFIED =  0,
-/*  NC_BITFIELD    =  7, */
-/*  NC_STRING      =  8, */
-    NC_DIMENSION   = 10,  /* \x00 \x00 \x00 \x0A */
-    NC_VARIABLE    = 11,  /* \x00 \x00 \x00 \x0B */
-    NC_ATTRIBUTE   = 12   /* \x00 \x00 \x00 \x0C */
-} NCtype;
-
-
-/*
- * Counted string for names and such
- */
-typedef struct {
-    /* all xdr'd */
-    MPI_Offset  nchars;
-    char       *cp;     /* [nchars+1] one additional char for '\0' */
-} NC_string;
-
-extern NC *
-ncmpii_new_NC(const MPI_Offset *chunkp);
-
-extern NC *
-ncmpii_dup_NC(const NC *ref);
-
-/* Begin defined in string.c */
-extern void
-ncmpii_free_NC_string(NC_string *ncstrp);
-
-extern int
-ncmpii_NC_check_name(const char *name, int file_ver);
-
-extern NC_string *
-ncmpii_new_NC_string(size_t slen, const char *str);
-
-extern int
-ncmpii_set_NC_string(NC_string *ncstrp, const char *str);
-
-/* End defined in string.c */
-
-/*
- * NC dimension structure
- */
-typedef struct {
-    /* all xdr'd */
-    NC_string *name;
-    MPI_Offset size;
-#ifdef ENABLE_SUBFILING
-    int range[2]; /* subfile range {start, end} */
-    MPI_Offset rcount; /* subfile range count */
-    int num_subfiles;
-#endif
-} NC_dim;
-
-#define NC_NAME_TABLE_CHUNK 16
-#define HASH_TABLE_SIZE 256
-/*
-#define HASH_FUNC(x) ncmpii_jenkins_one_at_a_time_hash(x)
-#define HASH_FUNC(x) ncmpii_additive_hash(x)
-#define HASH_FUNC(x) ncmpii_rotating_hash(x)
-#define HASH_FUNC(x) ncmpii_Pearson_hash(x)
-*/
-#define HASH_FUNC(x) ncmpii_Bernstein_hash(x)
-/* Look like Bernstein's hashing function performs the best */
-
-/* For the initial naive implementation of hashing:
- * #define HASH_FUNC(x) (unsigned char)x[0]
- * if used this simple hash function, HASH_TABLE_SIZE must be 256 which is the
- * number of possible keys can be stored in an unsigned char
- */
-
-typedef struct NC_nametable {
-    int  num;  /* number of elements added in the list array. Its value starts
-                  with zero and incremented with new name is created. When its
-                  value becomes a multiple of NC_NAME_TABLE_CHUNK, list will be
-                  reallocated to a space of size (num + NC_NAME_TABLE_CHUNK) */
-    int *list; /* dimension or variable IDs */
-} NC_nametable;
-
-/* the dimension ID returned from ncmpi_def_dim() is an integer pointer
- * which means the total number of defined dimension allowed in a file
- * is up to 2^31-1. Thus, the member ndefined below should be of type int.
- */
-typedef struct NC_dimarray {
-    int            nalloc;        /* number allocated >= ndefined */
-    int            ndefined;      /* number of defined dimensions */
-    int            unlimited_id;  /* -1 for not defined, otherwise >= 0 */
-    NC_dim       **value;
-    NC_nametable   nameT[HASH_TABLE_SIZE]; /* table for quick name lookup.
-                    * indices 0, 1, ... HASH_TABLE_SIZE-1 are the hash keys.
-                    * nameT[i].num is the number of hash collisions. The IDs of
-                    * dimensions with names producing the same hash key i are
-                    * stored in nameT[i].list[*]
-                    */
-} NC_dimarray;
-
-/* Begin defined in dim.c */
-
-extern void
-ncmpii_free_NC_dim(NC_dim *dimp);
-
-extern NC_dim *
-ncmpii_new_x_NC_dim(NC_string *name);
-
-extern int
-ncmpii_find_NC_Udim(const NC_dimarray *ncap, NC_dim **dimpp);
-
-extern int
-incr_NC_dimarray(NC_dimarray *ncap, NC_dim *newdimp);
-
-extern NC_dim*
-dup_NC_dim(const NC_dim *dimp);
-
-/* dimarray */
-
-extern void
-ncmpii_free_NC_dimarray(NC_dimarray *ncap);
-
-extern int
-ncmpii_dup_NC_dimarray(NC_dimarray *ncap, const NC_dimarray *ref);
-
-extern NC_dim *
-ncmpii_elem_NC_dimarray(const NC_dimarray *ncap, int elem);
-
-/* End defined in dim.c */
-
-/*
- * NC attribute
- *
- * Number of attributes is limited by 2^31-1 because the argument attnump in
- *  int nc_inq_attid(int ncid, int varid, const char *name, int *attnump);
- * is a signed 4-byte integer.
- */
-typedef struct {
-    MPI_Offset xsz;      /* amount of space at xvalue (4-byte aligned) */
-    NC_string *name;     /* name of the attributes */
-    nc_type    type;     /* the discriminant */
-    MPI_Offset nelems;   /* number of attribute elements */
-    void      *xvalue;   /* the actual data, in external representation */
-} NC_attr;
-
-typedef struct NC_attrarray {
-    int       nalloc;    /* number allocated >= ndefined */
-    int       ndefined;  /* number of defined attributes */
-    NC_attr **value;
-} NC_attrarray;
-
-/* Begin defined in attr.c */
-
-extern void
-ncmpii_free_NC_attr(NC_attr *attrp);
-
-extern NC_attr *
-ncmpii_new_x_NC_attr(NC_string *strp, nc_type type, MPI_Offset nelems);
-
-extern int
-incr_NC_attrarray(NC_attrarray *ncap, NC_attr *newelemp);
-
-extern NC_attr*
-dup_NC_attr(const NC_attr *rattrp);
-
-extern int
-ncmpii_NC_findattr(const NC_attrarray *ncap, const char *uname);
-
-/* attrarray */
-
-extern void
-ncmpii_free_NC_attrarray(NC_attrarray *ncap);
-
-extern int
-ncmpii_dup_NC_attrarray(NC_attrarray *ncap, const NC_attrarray *ref);
-
-extern NC_attr *
-ncmpii_elem_NC_attrarray(const NC_attrarray *ncap, MPI_Offset elem);
-
-/* End defined in attr.c */
-
-/*
- * NC variable: description and data
- */
-typedef struct {
-    int           xsz;    /* byte size of 1 array element */
-    MPI_Offset   *shape;  /* dim->size of each dim */
-    MPI_Offset   *dsizes; /* the right to left product of shape */
-    NC_string    *name;   /* name of the variable */
-    int           ndims;  /* number of dimensions */
-    int          *dimids; /* array of dimension IDs */
-    NC_attrarray  attrs;  /* attribute array */
-    nc_type       type;   /* variable's data type */
-    MPI_Offset    len;    /* this is the "vsize" defined in header format, the
-                             total size in bytes of the array variable.
-                             For record variable, this is the record size */
-    MPI_Offset    begin;  /* starting file offset of this variable */
-    char          no_fill;
-#ifdef ENABLE_SUBFILING
-    int           ndims_org;  /* ndims before subfiling */
-    int          *dimids_org; /* dimids before subfiling */
-    int           num_subfiles;
-#endif
-} NC_var;
-
-/* note: we only allow less than 2^31-1 variables defined in a file */
-typedef struct NC_vararray {
-    int            nalloc;      /* number allocated >= ndefined */
-    int            ndefined;    /* number of defined variables */
-    int            num_rec_vars;/* number of defined record variables */
-    NC_var       **value;
-    NC_nametable   nameT[HASH_TABLE_SIZE]; /* table for quick name lookup.
-                    * indices 0, 1, ... HASH_TABLE_SIZE-1 are the hash keys.
-                    * nameT[i].num is the number of hash collisions. The IDs of
-                    * variables with names producing the same hash key i are
-                    * stored in nameT[i].list[*]
-                    */
-} NC_vararray;
-
-/* Begin defined in var.c */
-
-extern void
-ncmpii_free_NC_var(NC_var *varp);
-
-extern NC_var *
-ncmpii_new_x_NC_var(NC_string *strp, int ndims);
-
-extern NC_var*
-dup_NC_var(const NC_var *rvarp);
-
-extern int
-incr_NC_vararray(NC_vararray *ncap, NC_var *newvarp);
-
-/* vararray */
-
-extern void
-ncmpii_free_NC_vararray(NC_vararray *ncap);
-
-extern int
-ncmpii_dup_NC_vararray(NC_vararray *ncap, const NC_vararray *ref);
-
-extern int
-ncmpii_NC_var_shape64(NC_var *varp, const NC_dimarray *dims);
-
-extern int
-ncmpii_NC_check_vlen(NC_var *varp, MPI_Offset vlen_max);
-
-extern int
-ncmpii_NC_lookupvar(NC *ncp, int varid, NC_var **varp);
-
-/* End defined in var.c */
-
-#define IS_RECVAR(vp) \
-        ((vp)->shape != NULL ? (*(vp)->shape == NC_UNLIMITED) : 0 )
-
-/*
- *  The PnetCDF non-blocking I/O request type
- */
-typedef struct NC_req {
-    int            id;          /* even number for write, odd for read */
-    void          *buf;         /* the original user buffer */
-    void          *xbuf;        /* the buffer used to read/write, may point to
-                                   the same address as buf */
-    MPI_Offset     num_recs;    /* number of records requested (1 for
-                                   fixed-size variable) */
-    int            buftype_is_contig;
-    int            need_swap_back_buf;
-    int            abuf_index;  /* index in the abuf occupy_table
-                                   -1 means not using attached buffer */
-
-    void          *tmpBuf;      /* tmp buffer to be freed, used only by
-                                   nonblocking varn when buftype is noncontig */
-    void          *userBuf;     /* user buffer to be unpacked from tmpBuf. used
-                                   only by by nonblocking varn when buftype is
-                                   noncontig */
-    NC_var        *varp;
-    MPI_Offset    *start;        /* [varp->ndims] */
-    MPI_Offset    *count;        /* [varp->ndims] */
-    MPI_Offset    *stride;       /* [varp->ndims] */
-    MPI_Offset     bnelems;      /* number of elements in user buffer */
-    MPI_Offset     offset_start; /* starting of aggregate access region */
-    MPI_Offset     offset_end;   /*   ending of aggregate access region */
-    MPI_Offset     bufcount;     /* the number of buftype in this request */
-    MPI_Datatype   buftype;      /* user defined derived data type */
-    MPI_Datatype   ptype;        /* element data type in buftype */
-    MPI_Datatype   imaptype;     /* derived data type constructed from imap */
-    int           *status;       /* pointer to user's status */
-} NC_req;
-
-#define NC_ABUF_DEFAULT_TABLE_SIZE 128
-
-typedef struct NC_buf_status {
-    int        is_used;
-    MPI_Aint   buf_addr;
-    MPI_Offset req_size;
-} NC_buf_status;
-
-typedef struct NC_buf {
-    MPI_Offset     size_allocated;
-    MPI_Offset     size_used;
-    int            table_size;
-    NC_buf_status *occupy_table; /* [table_size] */
-    int            tail;         /* index of last free entry */
-    void          *buf;
-} NC_buf;
-
-/* chunk size for allocating read/write nonblocking request lists */
-#define NC_REQUEST_CHUNK 1024
-
-struct NC {
-    /* linked list of currently opened netcdf files */
-    struct NC *next;
-    struct NC *prev;
-#ifdef ENABLE_SUBFILING
-    int nc_num_subfiles; /* # of subfiles */
-    int ncid_sf; /* ncid of subfile */
-#endif
-    /* contains the previous NC during redef. */
-    struct NC *old;
-    /* flags */
-#define NC_INDEP  0x10000   /* in independent data mode, cleared by endindep */
-#define NC_CREAT  0x20000   /* in create phase, cleared by enddef */
-#define NC_INDEF  0x80000   /* in define mode, cleared by enddef */
-#define NC_NSYNC  0x100000  /* synchronise numrecs on change */
-#define NC_HSYNC  0x200000  /* synchronise whole header on change */
-#define NC_NDIRTY 0x400000  /* numrecs has changed */
-#define NC_HDIRTY 0x800000  /* header info has changed */
-/* NC_NOFILL is defined in netcdf.h, historical interface */
-    int           format;   /* 1, 2, or 5 corresponding to CDF-1, 2, or 5 */
-    int           flags;
-    int           safe_mode;    /* 0 or 1, for parameter consistency check */
-    int           subfile_mode; /* 0 or 1, for disable/enable subfiling */
-    ncio         *nciop;
-    MPI_Offset    chunk;    /* largest extent this layer will request from
-                               ncio->get() */
-    MPI_Offset    xsz;      /* external size of this header, <= var[0].begin */
-    MPI_Offset    begin_var;/* file offset of the first (non-record) var */
-    MPI_Offset    begin_rec;/* file offset of the first 'record' */
-
-    MPI_Offset    recsize;  /* length of 'record': sum of single record sizes
-                               of all the record variables */
-    MPI_Offset    numrecs;  /* number of 'records' allocated */
-    NC_dimarray   dims;     /* dimensions defined */
-    NC_attrarray  attrs;    /* global attributes defined */
-    NC_vararray   vars;     /* variables defined */
-    int           numGetReqs;  /* number of pending nonblocking get requests */
-    int           numPutReqs;  /* number of pending nonblocking put requests */
-    NC_req       *get_list;    /* list of nonblocking read requests */
-    NC_req       *put_list;    /* list of nonblocking write requests */
-    NC_buf       *abuf;        /* attached buffer, used by bput APIs */
-};
-
-#define NC_readonly(ncp) \
-        (!fIsSet((ncp)->nciop->ioflags, NC_WRITE))
-
-#define NC_IsNew(ncp) \
-        fIsSet((ncp)->flags, NC_CREAT)
-
-#define NC_indep(ncp) \
-        fIsSet((ncp)->flags, NC_INDEP)
-
-#define NC_indef(ncp) \
-        (NC_IsNew(ncp) || fIsSet((ncp)->flags, NC_INDEF))
-
-#define set_NC_ndirty(ncp) \
-        fSet((ncp)->flags, NC_NDIRTY)
-
-#define NC_ndirty(ncp) \
-        fIsSet((ncp)->flags, NC_NDIRTY)
-
-#define set_NC_hdirty(ncp) \
-        fSet((ncp)->flags, NC_HDIRTY)
-
-#define NC_hdirty(ncp) \
-        fIsSet((ncp)->flags, NC_HDIRTY)
-
-#define NC_dofill(ncp) \
-        (!fIsSet((ncp)->flags, NC_NOFILL))
-
-#define NC_doFsync(ncp) \
-        fIsSet((ncp)->nciop->ioflags, NC_SHARE)
-
-#define NC_doHsync(ncp) \
-        fIsSet((ncp)->flags, NC_HSYNC)
-
-#define NC_doNsync(ncp) \
-        fIsSet((ncp)->flags, NC_NSYNC)
-
-#define NC_get_numrecs(ncp) \
-        ((ncp)->numrecs)
-
-#define NC_set_numrecs(ncp, nrecs) \
-        {((ncp)->numrecs = (nrecs));}
-
-#define NC_increase_numrecs(ncp, nrecs) \
-        {if((nrecs) > (ncp)->numrecs) ((ncp)->numrecs = (nrecs));}
-
-#define ErrIsHeaderDiff(err) \
-        (NC_EMULTIDEFINE_FIRST >= (err) && (err) >= NC_EMULTIDEFINE_LAST)
-
-#define IsPrimityMPIType(buftype) (buftype == MPI_FLOAT          || \
-                                   buftype == MPI_DOUBLE         || \
-                                   buftype == MPI_INT            || \
-                                   buftype == MPI_CHAR           || \
-                                   buftype == MPI_SIGNED_CHAR    || \
-                                   buftype == MPI_UNSIGNED_CHAR  || \
-                                   buftype == MPI_SHORT          || \
-                                   buftype == MPI_UNSIGNED_SHORT || \
-                                   buftype == MPI_UNSIGNED       || \
-                                   buftype == MPI_LONG           || \
-                                   buftype == MPI_LONG_LONG_INT  || \
-                                   buftype == MPI_UNSIGNED_LONG_LONG)
-
-/* Begin defined in nc.c */
-
-extern int
-ncmpii_NC_check_id(int ncid, NC **ncpp);
-
-extern int
-ncmpii_cktype(int cdf_ver, nc_type datatype);
-
-extern MPI_Offset
-ncmpix_howmany(nc_type type, MPI_Offset xbufsize);
-
-extern int
-ncmpii_dset_has_recvars(NC *ncp);
-
-extern int
-ncmpii_write_header(NC *ncp);
-
-extern void
-ncmpii_free_NC(NC *ncp);
-
-extern void
-ncmpii_add_to_NCList(NC *ncp);
-
-extern void
-ncmpii_del_from_NCList(NC *ncp);
-
-extern int
-ncmpii_read_NC(NC *ncp);
-
-extern int
-ncmpii_enddef(NC *ncp);
-
-extern int
-ncmpii__enddef(NC *ncp, MPI_Offset h_minfree, MPI_Offset v_align,
-               MPI_Offset v_minfree, MPI_Offset r_align);
-
-extern int
-ncmpii_close(NC *ncp);
-
-/* End defined in nc.c */
-
-#if 0
-/* Begin defined in v1hpg.c */
-
-extern size_t
-ncx_len_NC(const NC *ncp, MPI_Offset sizeof_off_t);
-
-extern int
-ncx_put_NC(const NC *ncp, void **xpp, MPI_Offset offset, MPI_Offset extent);
-
-extern int
-nc_get_NC( NC *ncp);
-
-/* End defined in v1hpg.c */
-
-/* Begin defined in putget.c */
-
-extern int
-ncmpii_fill_NC_var(NC *ncp, const NC_var *varp, MPI_Offset recno);
-
-extern int
-ncmpii_inq_rec(int ncid, MPI_Offset *nrecvars, MPI_Offset *recvarids, MPI_Offset *recsizes);
-
-extern int
-ncmpii_get_rec(int ncid, MPI_Offset recnum, void **datap);
-
-extern int
-ncmpii_put_rec(int ncid, MPI_Offset recnum, void *const *datap);
-#endif
-
-/* End defined in putget.c */
-
-/* Begin defined in header.c */
-typedef struct bufferinfo {
-    ncio       *nciop;
-    MPI_Offset  offset;   /* current read/write offset in the file */
-    int         version;  /* 1, 2, and 5 for CDF-1, 2, and 5 respectively */
-    int         safe_mode;/* 0: disabled, 1: enabled */
-    void       *base;     /* beginning of read/write buffer */
-    void       *pos;      /* current position in buffer */
-    MPI_Offset  size;     /* size of the buffer */
-    MPI_Offset  index;    /* index of current position in buffer */
-} bufferinfo;
-
-extern int
-ncmpix_len_nctype(nc_type type);
-
-#if 0
-extern int
-hdr_put_NC_attrarray(bufferinfo *pbp, const NC_attrarray *ncap);
-#endif
-
-extern MPI_Offset
-ncmpii_hdr_len_NC(const NC *ncp);
-
-extern int
-ncmpii_hdr_get_NC(NC *ncp);
-
-extern int
-ncmpii_hdr_put_NC(NC *ncp, void *buf);
-
-extern int
-ncmpii_NC_computeshapes(NC *ncp);
-
-extern int
-ncmpii_hdr_check_NC(bufferinfo *getbuf, NC *ncp);
-/* end defined in header.c */
-
-/* begin defined in mpincio.c */
-extern int
-ncmpiio_create(MPI_Comm comm, const char *path, int ioflags, MPI_Info info,
-               NC *ncp);
-
-extern int
-ncmpiio_open(MPI_Comm comm, const char *path, int ioflags, MPI_Info info,
-             NC *ncp);
-extern int
-ncmpiio_sync(ncio *nciop);
-
-extern int
-ncmpiio_move(ncio *const nciop, MPI_Offset to, MPI_Offset from,
-             MPI_Offset nbytes);
-
-extern int
-ncmpiio_move_fixed_vars(NC *ncp, NC *old);
-
-extern int
-ncmpiio_get_hint(NC *ncp, char *key, char *value, int *flag);
-
-extern int
-NC_computeshapes(NC *ncp);
-
-/* end defined in mpincio.h */
-
-/* begin defined in error.c */
-
-int ncmpii_handle_error(int mpi_errorcode, char *msg);
-
-/* end defined in error.c */
-/*
- * These functions are used to support
- * interface version 2 backward compatibility.
- * N.B. these are tested in ../nc_test even though they are
- * not public. So, be careful to change the declarations in
- * ../nc_test/tests.h if you change these.
- */
-
-int ncmpii_x_putn_NC_CHAR  (void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_putn_NC_BYTE  (int cdf_ver,
-                           void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_UBYTE (void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_SHORT (void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_USHORT(void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_INT   (void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_UINT  (void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_FLOAT (void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_DOUBLE(void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_INT64 (void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-int ncmpii_x_putn_NC_UINT64(void *xbuf, const void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype, void *fillp);
-
-int ncmpii_x_getn_NC_CHAR  (const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_BYTE  (int cdf_ver,
-                           const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_UBYTE (const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_SHORT (const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_USHORT(const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_INT   (const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_UINT  (const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_FLOAT (const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_DOUBLE(const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_INT64 (const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-int ncmpii_x_getn_NC_UINT64(const void *xbuf, void *buf, MPI_Offset nelems,
-                           MPI_Datatype datatype);
-
-int NC_start_count_stride_ck(const NC *ncp, const NC_var *varp,
-                const MPI_Offset *start, const MPI_Offset *count,
-                const MPI_Offset *stride, const int rw_flag);
-
-int ncmpii_need_convert(int format, nc_type nctype, MPI_Datatype mpitype);
-
-int ncmpii_need_swap(nc_type nctype,MPI_Datatype mpitype);
-
-void ncmpii_swapn(void *dest_p, const void* src_p, MPI_Offset nelems, int esize);
-
-void ncmpii_in_swapn(void *buf, MPI_Offset nelems, int esize);
-
-int ncmpii_is_request_contiguous(NC *ncp, NC_var *varp,
-                const MPI_Offset starts[], const MPI_Offset  counts[]);
-
-int ncmpii_get_offset(NC *ncp, NC_var *varp, const MPI_Offset starts[],
-                const MPI_Offset counts[], const MPI_Offset strides[],
-                const int rw_flag, MPI_Offset *offset_ptr);
-
-int ncmpii_check_mpifh(NC* ncp, int collective);
-
-int ncmpii_write_numrecs(NC *ncp, MPI_Offset new_numrecs);
-
-int ncmpii_sync_numrecs(NC *ncp, MPI_Offset newnumrecs);
-
-int ncmpii_vars_create_filetype(NC* ncp, NC_var* varp,
-                const MPI_Offset start[], const MPI_Offset count[],
-                const MPI_Offset stride[], int rw_flag, int *blocklen,
-                MPI_Offset *offset, MPI_Datatype *filetype,
-                int *is_filetype_contig);
-
-extern int
-ncmpii_igetput_varm(NC *ncp, NC_var *varp, const MPI_Offset *start,
-                const MPI_Offset *stride, const MPI_Offset *imap,
-                const MPI_Offset *count, void *buf, MPI_Offset bufcount,
-                MPI_Datatype datatype, int *reqid, int rw_flag, int use_abuf,
-                int isSameGroup);
-
-extern int
-ncmpii_wait(NC *ncp, int io_method, int num_reqs, int *req_ids,
-                int *statuses);
-
-extern int
-ncmpii_cancel(NC *ncp, int num_req, int *req_ids, int *statuses);
-
-extern int
-ncmpii_inq_malloc_size(MPI_Offset *size);
-
-extern int
-ncmpii_inq_malloc_max_size(MPI_Offset *size);
-
-extern int
-ncmpii_inq_malloc_list(void);
-
-#ifdef PNC_MALLOC_TRACE
-void ncmpii_init_malloc_tracing(void);
-#endif
-
-extern void *
-NCI_Malloc_fn(size_t size, const int lineno, const char *func,
-              const char *filename);
-
-extern void *
-NCI_Calloc_fn(size_t nelem, size_t elsize, const int lineno, const char *func,
-              const char *filename);
-
-extern void *
-NCI_Realloc_fn(void *ptr, size_t size, const int lineno, const char *func,
-               const char *filename);
-
-extern void
-NCI_Free_fn(void *ptr, const int lineno, const char *func,
-            const char *filename);
-
-extern int
-ncmpii_inq_files_opened(int *num, int *ncids);
-
-extern MPI_Datatype
-ncmpii_nc2mpitype(nc_type type);
-
-extern nc_type
-ncmpii_mpi2nctype(MPI_Datatype itype);
-
-extern int
-ncmpii_end_indep_data(NC *ncp); 
-
-extern int                
-ncmpii_file_set_view(NC *ncp, MPI_File fh, MPI_Offset *offset, MPI_Datatype filetype);
-
-extern int
-ncmpii_create_imaptype(NC_var *varp, const MPI_Offset *count,
-                       const MPI_Offset *imap, const MPI_Offset  bnelems,
-                       const int el_size, MPI_Datatype ptype,
-                       MPI_Datatype *imaptype);
-
-extern int
-ncmpii_calc_datatype_elems(NC_var *varp, const MPI_Offset *count,
-                           MPI_Datatype buftype,
-                           MPI_Datatype *ptype, MPI_Offset *bufcount,
-                           MPI_Offset *bnelems, MPI_Offset *nbytes,
-                           int *el_size, int *buftype_is_contig);
-
-extern int
-ncmpii_fill_vars(NC *ncp);
-
-extern int
-ncmpii_sanity_check(int ncid, int varid, const MPI_Offset *start,
-                    const MPI_Offset *count, const MPI_Offset *stride,
-                    MPI_Offset bufcount, MPI_Datatype buftype,
-                    enum API_KIND api, int isFlexibleAPI, int mustInDataMode,
-                    int rw_flag, int io_method, NC **ncp, NC_var **varp);
-
-extern char*
-ncmpii_err_code_name(int err);
-
-extern int
-ncmpii_jenkins_one_at_a_time_hash(const char *str_name);
-
-extern int
-ncmpii_additive_hash(const char *str_name);
-
-extern int
-ncmpii_rotating_hash(const char *str_name);
-
-extern int
-ncmpii_Bernstein_hash(const char *str_name);
-
-extern int
-ncmpii_Pearson_hash(const char *str_name);
-
-extern int
-ncmpii_update_name_lookup_table(NC_nametable *nameT, const int id,
-                                const char *oldname, const char *newname);
-
-extern int
-ncmpii_inq_var_fill(NC_var *varp, void *fill_value);
-
-extern int
-ncmpii_inq_default_fill_value(int type, void *fill_value);
-
-extern int
-ncmpii_getput_zero_req(NC *ncp, int rw_flag);
-
-#endif /* _NC_H_ */
diff --git a/src/lib/ncio.h b/src/lib/ncio.h
deleted file mode 100644
index a145b6f..0000000
--- a/src/lib/ncio.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: ncio.h 2017 2015-04-01 21:27:21Z wkliao $ */
-
-#ifndef _NCIO_H_
-#define _NCIO_H_
-
-#include <stddef.h>       /* size_t */
-#include <sys/types.h>    /* off_t */
-#include <mpi.h>
-#include "pnetcdf.h"
-
-#define MPI_COLLECTIVE_FH 2
-#define MPI_INDEPENDENT_FH 8
-
-#define NC_collectiveFhOpened(nciop) \
-    (fIsSet(nciop->mpioflags, MPI_COLLECTIVE_FH))
-
-#define NC_independentFhOpened(nciop) \
-    (fIsSet(nciop->mpioflags, MPI_INDEPENDENT_FH))
-
-#define set_NC_collectiveFh(nciop) \
-    fSet((nciop)->mpioflags, MPI_COLLECTIVE_FH)
-
-#define set_NC_independentFh(nciop) \
-    fSet((nciop)->mpioflags, MPI_INDEPENDENT_FH)
-
-
-/*
- * I/O hints used by PnetCDF, but MPI-IO
- */
-typedef struct {
-    MPI_Offset h_align; /* file alignment size for header */
-    MPI_Offset v_align; /* file alignment size for each fixed variable */
-    MPI_Offset r_align; /* file alignment size for record variable section */
-    MPI_Offset header_read_chunk_size;
-#ifdef ENABLE_SUBFILING
-    int subfile_mode;
-    int num_subfiles;
-#endif
-} nc_hints;
-
-/*
- * netcdf i/o abstraction
- */
-typedef struct {
-    /*
-     * A copy of the ioflags argument passed in to ncmpiio_open()
-     * or ncmpiio_create().
-     */
-    int ioflags;
-
-    /*
-     * The file descriptor of the netcdf file.
-     * This gets handed to the user as the netcdf id.
-     */
-    int fd;
-
-    /*
-     * The MPI File handle and the communicator
-     */
-    MPI_File collective_fh;
-    MPI_File independent_fh;
-    MPI_Comm comm;
-    MPI_Info mpiinfo;
-
-    int mpiomode;        /* mode used in MPI_File_open */
-    int mpioflags;       /* MPI_COLLECTIVE_FH or MPI_INDEPENDENT_FH */
-    int striping_unit;   /* file stripe size of the file */
-
-    nc_hints hints;      /* I/O hints used by PnetCDF only */
-
-    /*
-     * A copy of the 'path' argument passed in to ncmpiio_open()
-     * or ncmpiio_create(). Used by ncabort() to remove (unlink)
-     * the file and by error messages.
-     */
-    const char *path;
-
-    MPI_Offset put_size;  /* amount of writes committed so far in bytes */
-    MPI_Offset get_size;  /* amount of reads  committed so far in bytes */
-} ncio;
-
-extern ncio *
-ncmpiio_new(const char *path, int ioflags);
-
-extern void
-ncmpiio_free(ncio *nciop);
-
-extern int
-ncmpiio_close(ncio *nciop, int doUnlink);
-
-#endif /* _NCIO_H_ */
diff --git a/src/lib/ncmpidtype.c b/src/lib/ncmpidtype.c
deleted file mode 100644
index 444c0a9..0000000
--- a/src/lib/ncmpidtype.c
+++ /dev/null
@@ -1,583 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: ncmpidtype.c 2664 2016-12-02 00:50:43Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncmpidtype.h"
-#include "macro.h"
-
-/*@
-  ncmpii_type_filter - Map a basic MPI datatype into one of the eight
-  that we process natively.
-
-  We unfortunately need to wrap all these types in case they aren't defined.
-
-  Return:
-  On success, one of MPI_CHAR, MPI_SIGNED_CHAR, MPI_UNSIGNED_CHAR, MPI_BYTE,
-  MPI_SHORT, MPI_INT, MPI_LONG, MPI_FLOAT, and MPI_DOUBLE.
-  On failure, MPI_DATATYPE_NULL.
-@*/
-static MPI_Datatype ncmpii_type_filter(MPI_Datatype type)
-{
-    /* char types */
-#ifdef HAVE_MPI_CHARACTER
-    if (type == MPI_CHARACTER)
-        return  MPI_CHAR;
-#endif
-    if (type == MPI_CHAR)
-        return  MPI_CHAR;
-
-    /* unsigned char types */
-    if (type == MPI_UNSIGNED_CHAR)
-        return  MPI_UNSIGNED_CHAR;
-
-    /* signed char types */
-    if (type == MPI_SIGNED_CHAR)
-        return  MPI_SIGNED_CHAR;
-
-#ifdef HAVE_MPI_INTEGER1
-    if (type == MPI_INTEGER1)
-        return  MPI_SIGNED_CHAR;
-#endif
-    if (type == MPI_BYTE)
-        return  MPI_BYTE;
-
-    /* 2-byte integer types (only supported if MPI_SHORT is 2-bytes). */
-#if (SIZEOF_SHORT == 2)
-  #ifdef HAVE_MPI_INTEGER2
-    if (type == MPI_INTEGER2)
-        return  MPI_SHORT;
-  #endif
-    if (type == MPI_SHORT)
-        return  MPI_SHORT;
-
-    if (type == MPI_UNSIGNED_SHORT)
-        return  MPI_UNSIGNED_SHORT;
-#endif
-
-    /* 4-byte integer types */
-  {
-    MPI_Datatype int_4byte;
-#if (SIZEOF_LONG == 4)
-    MPI_Datatype uint_4byte;
-#endif
-#if (SIZEOF_INT == 4)
-     int_4byte = MPI_INT;
-#if (SIZEOF_LONG == 4)
-    uint_4byte = MPI_UNSIGNED;
-#endif
-#elif (SIZEOF_SHORT == 4)
-     int_4byte = MPI_SHORT;
-#if (SIZEOF_LONG == 4)
-    uint_4byte = MPI_UNSIGNED_SHORT;
-#endif
-#else
-     int_4byte = MPI_DATATYPE_NULL; /* no 4-byte type? */
-#if (SIZEOF_LONG == 4)
-    uint_4byte = MPI_DATATYPE_NULL;
-#endif
-#endif
-
-#ifdef HAVE_MPI_INTEGER
-    if (type == MPI_INTEGER)
-        return int_4byte;
-#endif
-#ifdef HAVE_MPI_INTEGER4
-    if (type == MPI_INTEGER4)
-        return int_4byte;
-#endif
-#if (SIZEOF_LONG == 4)
-    if (type == MPI_LONG)
-        return int_4byte;
-    if (type == MPI_UNSIGNED_LONG)
-        return uint_4byte;
-#endif
-#if (SIZEOF_INT == 4)
-    if (type == MPI_INT)
-        return  MPI_INT;
-    if (type == MPI_UNSIGNED)
-        return  MPI_UNSIGNED;
-#elif (SIZEOF_SHORT == 4)
-    if (type == MPI_SHORT)
-        return  MPI_SHORT;
-    if (type == MPI_UNSIGNED_SHORT)
-        return  MPI_UNSIGNED_SHORT;
-#endif
-  }
-
-     /* 8-byte integer types (only supported if MPI_INT or MPI_LONG
-      * is 8-bytes).
-      */
-#if (SIZEOF_INT == 8) || (SIZEOF_LONG == 8)
-  #ifdef HAVE_MPI_INTEGER8
-    if (type == MPI_INTEGER8)
-      #if (SIZEOF_INT == 8)
-        return MPI_INT;
-      #else
-        return MPI_LONG;
-      #endif
-  #endif
-  #ifdef HAVE_MPI_UNSIGNED_INTEGER8
-    if (type == MPI_UNSIGNED_INTEGER8)
-      #if (SIZEOF_UINT == 8)
-        return MPI_UNSIGNED;
-      #else
-        return MPI_UNSIGNED_LONG;
-      #endif
-  #endif
-
-  #if (SIZEOF_INT == 8)
-    if (type == MPI_INT)
-        return  MPI_INT;
-    if (type == MPI_UNSIGNED)
-        return  MPI_UNSIGNED;
-  #endif
-  #if (SIZEOF_LONG == 8)
-    if (type == MPI_LONG)
-      #if (SIZEOF_INT == 8)
-        return MPI_INT;
-      #else
-        return MPI_LONG;
-      #endif
-    if (type == MPI_UNSIGNED_LONG)
-      #if (SIZEOF_UINT == 8)
-        return MPI_UNSIGNED;
-      #else
-        return MPI_UNSIGNED_LONG;
-      #endif
-  #endif
-#endif
-
-    /* 4-byte float types (we assume float is 4-bytes). */
-#ifdef HAVE_MPI_REAL
-    if (type == MPI_REAL)
-        return  MPI_FLOAT;
-#endif
-#ifdef HAVE_MPI_REAL4
-    if (type == MPI_REAL4)
-        return  MPI_FLOAT;
-#endif
-    if (type == MPI_FLOAT)
-        return  MPI_FLOAT;
-
-    /* 8-byte float types (we assume double is 8-bytes). */
-#ifdef HAVE_MPI_REAL8
-    if (type == MPI_REAL8)
-        return MPI_DOUBLE;
-#endif
-#ifdef HAVE_MPI_DOUBLE_PRECISION
-    if (type == MPI_DOUBLE_PRECISION)
-        return  MPI_DOUBLE;
-#endif
-    if (type == MPI_DOUBLE)
-        return  MPI_DOUBLE;
-
-    if (type == MPI_LONG_LONG_INT)
-        return  MPI_LONG_LONG_INT;
-
-    if (type == MPI_UNSIGNED_LONG_LONG)
-        return  MPI_UNSIGNED_LONG_LONG;
-
-/* HP-MPI for example needs to handle MPI_LB and MPI_UB */
-#ifdef HAVE_MPI_LB
-    if (type == MPI_LB) {
-#if SIZEOF_SIZE_T == 8
-        return MPI_DOUBLE;
-#elif SIZEOF_SIZE_T == 4
-        return MPI_DOUBLE;
-#endif
-    }
-#endif
-#ifdef HAVE_MPI_UB
-    if (type == MPI_UB) {
-#if SIZEOF_SIZE_T == 8
-        return MPI_DOUBLE;
-#elif SIZEOF_SIZE_T == 4
-        return MPI_DOUBLE;
-#endif
-    }
-#endif
-
-/* default */
-    return MPI_DATATYPE_NULL;
-}
-
-/*@
-  ncmpi_darray_get_totalblock - Count the total number of blocks assigned
-  to the calling process by the darray datatype.
-
-  Input:
-. rank - rank of calling process
-. ndims - number of dimensions for the array and process grid
-. array_of_gsizes - Number of elements of type oldtype in each dimension
-                    of global array (array of positive integers)
-. array_of_distribs - Distribution of array in each dimension (array of state)
-. array_of_dargs - Distribution argument in each dimension
-                   (array of positive integers)
-. array_of_psizes - Size of process grid in each dimension
-                    (array of positive integers)
-
-  Return:
-. total number of blocks assigned from the distributed array
-@*/
-#ifdef HAVE_MPI_COMBINER_DARRAY
-static int
-ncmpii_darray_get_totalblks(int rank,
-                            MPI_Offset ndims,
-                            int array_of_gsizes[],
-                            int array_of_distribs[],
-                            int array_of_dargs[],
-                            int array_of_psizes[])
-{
-  int total_blocks = 1;
-  int subblocks, cycle, remain_cycle;
-  int i;
-  int pcoord;
-
-  /* Process Grid ranking is always in C ORDER,
-     so compute proc coordinates from last dim */
-
-  for (i=(int)ndims-1; i>=0; i--) {
-    if ( array_of_distribs[i] == MPI_DISTRIBUTE_NONE ) {
-      total_blocks *= array_of_gsizes[i];
-    } else {
-
-      pcoord = rank % array_of_psizes[i];
-      rank /= array_of_psizes[i];
-      if ( array_of_dargs[i] == MPI_DISTRIBUTE_DFLT_DARG ) {
-        subblocks = array_of_gsizes[i]/array_of_psizes[i];
-        if ( subblocks*array_of_psizes[i]+pcoord < array_of_gsizes[i] )
-          subblocks++;
-      } else {
-        cycle = array_of_dargs[i]*array_of_psizes[i];
-        remain_cycle = array_of_gsizes[i] % cycle;
-
-        subblocks = remain_cycle - pcoord*array_of_dargs[i];
-        if (subblocks > array_of_dargs[i])
-          subblocks = array_of_dargs[i];
-        else if (subblocks < 0)
-          subblocks = 0;
-
-        subblocks += array_of_gsizes[i]/cycle * array_of_dargs[i];
-      }
-
-      if (subblocks == 0)
-        return 0;
-      total_blocks *= subblocks;
-
-    }
-  }
-
-  return total_blocks;
-}
-#endif
-
-
-/*----< ncmpii_dtype_decode() >-----------------------------------------------*/
-/*@
-  ncmpii_dtype_decode - Decode the MPI derived datatype to get the bottom
-  level primitive datatype information.
-
-  Input:
-. dtype - The MPI derived datatype to be decoded (can be predefined type).
-
-  Output:
-. ptype - The bottom level primitive datatype (only one allowed) in buftype
-. el_size - The size of the ptype
-. nelems - Number of elements/entries of such ptype in one buftype object
-. iscontig_of_ptypes - Whether dtype is a contiguous number of ptype
-@*/
-int ncmpii_dtype_decode(MPI_Datatype dtype,
-                        MPI_Datatype *ptype,
-                        int *el_size,
-                        MPI_Offset *nelems,
-                        int *isderived,
-                        int *iscontig_of_ptypes)
-{
-  int i;
-  MPI_Offset tmpnelems, total_blocks;
-  int tmpel_size;
-  MPI_Datatype tmpptype;
-  int num_ints, num_adds, num_dtypes, combiner;
-  int *array_of_ints;
-  MPI_Aint *array_of_adds;
-  MPI_Datatype *array_of_dtypes;
-  MPI_Offset count;
-  int ndims;
-  int status = NC_NOERR;
-
-  *isderived = 0;
-
-  if (dtype == MPI_DATATYPE_NULL) {
-    *nelems = 0;
-    *ptype = dtype;
-    *el_size = 0;
-    *iscontig_of_ptypes = 1;
-    return NC_NOERR;
-  }
-
-  MPI_Type_get_envelope(dtype, &num_ints, &num_adds, &num_dtypes, &combiner);
-
-  if (
-#ifdef HAVE_MPI_COMBINER_F90_INTEGER
-      combiner == MPI_COMBINER_F90_INTEGER ||
-#endif
-#ifdef HAVE_MPI_COMBINER_F90_REAL
-      combiner == MPI_COMBINER_F90_REAL ||
-#endif
-#ifdef HAVE_MPI_COMBINER_F90_COMPLEX
-      combiner == MPI_COMBINER_F90_COMPLEX ||
-#endif
-     0 )
-  {
-    fprintf(stderr,
-            "FIXME: F90_INTEGER, F90_REAL or F90_COMPLEX are not supported.\n");
-  }
-
-  if ( combiner == MPI_COMBINER_NAMED ) {
-    /* Predefined datatype */
-    *nelems = 1;
-    if ( (*ptype = ncmpii_type_filter(dtype)) == MPI_DATATYPE_NULL )
-      DEBUG_RETURN_ERROR(NC_EUNSPTETYPE)
-    MPI_Type_size(dtype, el_size);
-    *iscontig_of_ptypes = 1;
-    return NC_NOERR;
-  }
-
-  array_of_ints = (int *) NCI_Malloc((size_t)num_ints * SIZEOF_INT);
-  array_of_adds = (MPI_Aint *) NCI_Malloc((size_t)num_adds * SIZEOF_MPI_AINT);
-  array_of_dtypes = (MPI_Datatype *) NCI_Malloc((size_t)num_dtypes * sizeof(MPI_Datatype));
-
-  MPI_Type_get_contents(dtype, num_ints, num_adds, num_dtypes,
-                        array_of_ints, array_of_adds, array_of_dtypes);
-
-  switch (combiner) {
-
-    /* single etype */
-
-    case MPI_COMBINER_CONTIGUOUS:
-    case MPI_COMBINER_HVECTOR:
-    case MPI_COMBINER_VECTOR:
-    case MPI_COMBINER_HINDEXED:
-    case MPI_COMBINER_INDEXED:
-#ifdef HAVE_MPI_COMBINER_DUP
-    case MPI_COMBINER_DUP:
-#endif
-#ifdef HAVE_MPI_COMBINER_HVECTOR_INTEGER
-    case MPI_COMBINER_HVECTOR_INTEGER:
-#endif
-#ifdef HAVE_MPI_COMBINER_INDEXED_BLOCK
-    case MPI_COMBINER_INDEXED_BLOCK:
-#endif
-#ifdef HAVE_MPI_COMBINER_HINDEXED_INTEGER
-    case MPI_COMBINER_HINDEXED_INTEGER:
-#endif
-#ifdef HAVE_MPI_COMBINER_SUBARRAY
-    case MPI_COMBINER_SUBARRAY:
-#endif
-#ifdef HAVE_MPI_COMBINER_DARRAY
-    case MPI_COMBINER_DARRAY:
-#endif
-#ifdef HAVE_MPI_COMBINER_RESIZED
-    case MPI_COMBINER_RESIZED:
-#endif
-
-        status = ncmpii_dtype_decode(array_of_dtypes[0], ptype, el_size,
-                                     nelems, isderived, iscontig_of_ptypes);
-        if (*isderived)
-          MPI_Type_free(array_of_dtypes);
-
-        break;
-
-    /* multiple etypes */
-
-    case MPI_COMBINER_STRUCT:
-#ifdef HAVE_MPI_COMBINER_STRUCT_INTEGER
-    case MPI_COMBINER_STRUCT_INTEGER:
-#endif
-        count = array_of_ints[0];
-        *el_size = 0;
-        for (i=0; i<count && *el_size==0; i++) {
-          /* need to skip null/marker types */
-          status = ncmpii_dtype_decode(array_of_dtypes[i],
-                                       ptype,
-                                       el_size,
-                                       nelems,
-                                       isderived,
-                                       iscontig_of_ptypes);
-          if (status != NC_NOERR)
-            return status;
-          if (*isderived)
-            MPI_Type_free(array_of_dtypes+i);
-          if (*el_size > 0)
-            *nelems *= array_of_ints[1+i];
-        }
-        for ( ; i<count; i++) {
-          status = ncmpii_dtype_decode(array_of_dtypes[i],
-                                       &tmpptype,
-                                       &tmpel_size,
-                                       &tmpnelems,
-                                       isderived,
-                                       iscontig_of_ptypes);
-          if (status != NC_NOERR)
-            return status;
-          if (*isderived)
-            MPI_Type_free(array_of_dtypes+i);
-          if (tmpel_size > 0) {
-            if (tmpptype != *ptype)
-              DEBUG_RETURN_ERROR(NC_EMULTITYPES)
-            *nelems += tmpnelems*array_of_ints[1+i];
-          }
-        }
-
-        *iscontig_of_ptypes = 0;
-
-        break;
-
-    default:
-        break;
-  }
-
-  *isderived = 1;
-
-  switch (combiner) {
-
-    /* single etype */
-
-    case MPI_COMBINER_CONTIGUOUS:
-        total_blocks = array_of_ints[0];
-        break;
-
-    case MPI_COMBINER_HVECTOR:
-    case MPI_COMBINER_VECTOR:
-#ifdef HAVE_MPI_COMBINER_HVECTOR_INTEGER
-    case MPI_COMBINER_HVECTOR_INTEGER:
-#endif
-#ifdef HAVE_MPI_COMBINER_INDEXED_BLOCK
-    case MPI_COMBINER_INDEXED_BLOCK:
-#endif
-        *iscontig_of_ptypes = 0;
-        total_blocks = (MPI_Offset)array_of_ints[0]*array_of_ints[1];
-        break;
-
-    case MPI_COMBINER_HINDEXED:
-    case MPI_COMBINER_INDEXED:
-#ifdef HAVE_MPI_COMBINER_HINDEXED_INTEGER
-    case MPI_COMBINER_HINDEXED_INTEGER:
-#endif
-        *iscontig_of_ptypes = 0;
-        for (i=0, total_blocks=0; i<array_of_ints[0]; i++)
-          total_blocks += array_of_ints[1+i];
-        break;
-
-#ifdef HAVE_MPI_COMBINER_SUBARRAY
-    case MPI_COMBINER_SUBARRAY:
-        *iscontig_of_ptypes = 0;
-        ndims = array_of_ints[0];
-        for (i=0, total_blocks=1; i<ndims; i++)
-          total_blocks *= array_of_ints[1+ndims+i];
-        break;
-#endif
-
-#ifdef HAVE_MPI_COMBINER_DARRAY
-    case MPI_COMBINER_DARRAY:
-        *iscontig_of_ptypes = 0;
-        ndims = array_of_ints[2];
-
-        /* seldom reached, so put it in a separate function */
-        total_blocks = ncmpii_darray_get_totalblks(array_of_ints[1],
-                                                   ndims,
-                                                   array_of_ints+3,
-                                                   array_of_ints+3+ndims,
-                                                   array_of_ints+3+2*ndims,
-                                                   array_of_ints+3+3*ndims);
-        break;
-#endif
-
-#ifdef HAVE_MPI_COMBINER_RESIZED
-    case MPI_COMBINER_RESIZED:
-        *iscontig_of_ptypes = 0;
-        total_blocks = 1;
-        break;
-#endif
-
-    default: /* DUP etc. */
-        total_blocks = 1;
-        break;
-  }
-
-  *nelems *= total_blocks;
-
-  NCI_Free(array_of_ints);
-  NCI_Free(array_of_adds);
-  NCI_Free(array_of_dtypes);
-
-  return status;
-}
-
-/*@
-  ncmpii_data_repack - copy data between two buffers with different datatypes.
-
-  Input:
-. inbuf - input buffer where data is copied from
-. incount - number of input elements
-. intype - datatype of each element in input buffer
-. outbuf - output buffer where data is copied to
-. outcount - number of output elements
-. outtype - datatype of each element in output buffer
-@*/
-
-int ncmpii_data_repack(void *inbuf,
-                       MPI_Offset incount,
-                       MPI_Datatype intype,
-                       void *outbuf,
-                       MPI_Offset outcount,
-                       MPI_Datatype outtype)
-{
-  int intypesz, outtypesz;
-  int packsz;
-  void *packbuf;
-  int packpos;
-
-  MPI_Type_size(intype, &intypesz);
-  MPI_Type_size(outtype, &outtypesz);
-
-  if (incount*intypesz != outcount*outtypesz) {
-    /* input data amount does not match output data amount */
-    /* NOTE: we ignore it for user responsibility or add error handling ? */
-
-    /* for rescue, guarantee output data amount <= input data amount */
-    if (incount*intypesz < outcount*outtypesz)
-      outcount = incount*intypesz/outtypesz;
-  }
-
-  if (incount == 0)
-    return NC_NOERR;
-
-  /* local pack-n-unpack, using MPI_COMM_SELF */
-  if (incount  != (int)incount)  DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-  if (outcount != (int)outcount) DEBUG_RETURN_ERROR(NC_EINTOVERFLOW)
-
-  MPI_Pack_size((int)incount, intype, MPI_COMM_SELF, &packsz);
-  packbuf = (void *)NCI_Malloc((size_t)packsz);
-  packpos = 0;
-  MPI_Pack(inbuf, (int)incount, intype, packbuf, packsz, &packpos, MPI_COMM_SELF);
-  packpos = 0;
-  MPI_Unpack(packbuf, packsz, &packpos, outbuf, (int)outcount, outtype, MPI_COMM_SELF);
-  NCI_Free(packbuf);
-
-  return NC_NOERR;
-}
diff --git a/src/lib/ncmpidtype.h b/src/lib/ncmpidtype.h
deleted file mode 100644
index 5ed6a8f..0000000
--- a/src/lib/ncmpidtype.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: ncmpidtype.h 1468 2013-10-26 16:53:18Z wkliao $ */
-
-#ifndef NCMPI_DTYPE_H
-#define NCMPI_DTYPE_H
-
-int ncmpii_dtype_decode(MPI_Datatype dtype,
-			MPI_Datatype *ptype,
-			int *el_size,
-			MPI_Offset *nelems,
-			int *isderived,
-			int *iscontig_of_ptypes);
-
-int ncmpii_data_repack(void *inbuf,
-                       MPI_Offset incount,
-                       MPI_Datatype intype,
-                       void *outbuf,
-                       MPI_Offset outcount,
-                       MPI_Datatype outtype);
-
-#endif
diff --git a/src/lib/rnd.h b/src/lib/rnd.h
deleted file mode 100644
index 3a9c810..0000000
--- a/src/lib/rnd.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: rnd.h 2021 2015-04-09 20:29:40Z wkliao $ */
-#ifndef _RNDUP
-
-/* useful for aligning memory */
-#define	_RNDUP(x, unit)  ((((x) + (unit) - 1) / (unit)) * (unit))
-#define	_RNDDOWN(x, unit)  ((x) - ((x)%(unit)))
-
-/* #define M_RND_UNIT	(sizeof(double))
- * SIZEOF_DOUBLE is defined in ncconfig.h
- */
-#define M_RND_UNIT	SIZEOF_DOUBLE
-#define	M_RNDUP(x) _RNDUP(x, M_RND_UNIT)
-#define	M_RNDDOWN(x)  __RNDDOWN(x, M_RND_UNIT)
-
-#endif
diff --git a/src/lib/subfile.h b/src/lib/subfile.h
deleted file mode 100644
index 7e209ef..0000000
--- a/src/lib/subfile.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: subfile.h 2021 2015-04-09 20:29:40Z wkliao $ */
-#ifndef SUBFILE_H
-#define SUBFILE_H
-
-#include "pnetcdf.h"
-#include "nc.h"
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include "macro.h"
-
-/* structure for storing access info of this process's request
-   to the subfiles on all other processes, and vice-versa. used
-   as array of structures indexed by subfile index. */
-typedef struct {
-    MPI_Offset *start;
-    MPI_Offset *count;
-    MPI_Offset *start_org;
-} NC_subfile_access;
-
-#define CEIL(x) ( (x - (int)x)==0 ? (int)x : (int)x+1 )
-#define FLOOR(x) ( (x - (int)x)==0 ? (int)x : (int)x-1 )
-#define ROUND(x) ( x >= 0 ? (int)(x+0.5) : (int)(x-0.5) )
-#define ABS(a) (((a) < 0) ? -(a) : (a))
-
-#define TEST_HANDLE_ERR(status)                                        \
-    if ((status) != NC_NOERR) {                                        \
-        printf("Error at file %s line %d (%s)\n", __FILE__, __LINE__,  \
-               ncmpi_strerror((status)) );                             \
-        return status;                                                 \
-    }
-
-extern int ncmpii_subfile_create(NC *ncp, int *ncidp);
-
-extern int ncmpii_subfile_open(NC *ncp, int *ncidp);
-
-extern int ncmpii_subfile_close(NC *ncp);
-
-extern int ncmpii_subfile_partition(NC *ncp, int *ncidp);
-
-extern int ncmpii_subfile_getput_vars(NC *ncp, NC_var *varp, const MPI_Offset start[],
-                               const MPI_Offset count[], const MPI_Offset  stride[],
-                               void *buf, MPI_Offset bufcount,
-                               MPI_Datatype buftype, int rw_flag, int io_method);
-
-#endif /* end of SUBFILE_H */
diff --git a/src/lib/utf8proc.c b/src/lib/utf8proc.c
deleted file mode 100644
index 4632a91..0000000
--- a/src/lib/utf8proc.c
+++ /dev/null
@@ -1,624 +0,0 @@
-/*
- *  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: utf8proc.c 2475 2016-09-05 23:15:29Z wkliao $ */
-
-/*
- *  Copyright (c) 2006-2007 Jan Behrens, FlexiGuided GmbH, Berlin
- *
- *  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.
- */
-
-/*
- *  This library contains derived data from a modified version of the
- *  Unicode data files.
- *
- *  The original data files are available at
- *  http://www.unicode.org/Public/UNIDATA/
- *
- *  Please notice the copyright statement in the file "utf8proc_data.c".
- */
-
-
-/*
- *  File name:    utf8proc.c
- *  Version:      1.1.1
- *  Last changed: 2007-07-22
- *
- *  Description:
- *  Implementation of libutf8proc.
- */
-
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include "utf8proc.h"
-#include "utf8proc_data.h"
-
-static
-const int8_t utf8proc_utf8class[256] = {
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-  4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-#define UTF8PROC_HANGUL_SBASE 0xAC00
-#define UTF8PROC_HANGUL_LBASE 0x1100
-#define UTF8PROC_HANGUL_VBASE 0x1161
-#define UTF8PROC_HANGUL_TBASE 0x11A7
-#define UTF8PROC_HANGUL_LCOUNT 19
-#define UTF8PROC_HANGUL_VCOUNT 21
-#define UTF8PROC_HANGUL_TCOUNT 28
-#define UTF8PROC_HANGUL_NCOUNT 588
-#define UTF8PROC_HANGUL_SCOUNT 11172
-/*// END is exclusive*/
-#define UTF8PROC_HANGUL_L_START  0x1100
-#define UTF8PROC_HANGUL_L_END    0x115A
-#define UTF8PROC_HANGUL_L_FILLER 0x115F
-#define UTF8PROC_HANGUL_V_START  0x1160
-#define UTF8PROC_HANGUL_V_END    0x11A3
-#define UTF8PROC_HANGUL_T_START  0x11A8
-#define UTF8PROC_HANGUL_T_END    0x11FA
-#define UTF8PROC_HANGUL_S_START  0xAC00
-#define UTF8PROC_HANGUL_S_END    0xD7A4
-
-
-#define UTF8PROC_BOUNDCLASS_START    0
-#define UTF8PROC_BOUNDCLASS_OTHER    1
-#define UTF8PROC_BOUNDCLASS_CR       2
-#define UTF8PROC_BOUNDCLASS_LF       3
-#define UTF8PROC_BOUNDCLASS_CONTROL  4
-#define UTF8PROC_BOUNDCLASS_EXTEND   5
-#define UTF8PROC_BOUNDCLASS_L        6
-#define UTF8PROC_BOUNDCLASS_V        7
-#define UTF8PROC_BOUNDCLASS_T        8
-#define UTF8PROC_BOUNDCLASS_LV       9
-#define UTF8PROC_BOUNDCLASS_LVT     10
-
-
-#ifdef UNUSED_APIS
-static
-const char *utf8proc_errmsg(ssize_t errcode) {
-  switch (errcode) {
-    case UTF8PROC_ERROR_NOMEM:
-    return "Memory for processing UTF-8 data could not be allocated.";
-    case UTF8PROC_ERROR_OVERFLOW:
-    return "UTF-8 string is too long to be processed.";
-    case UTF8PROC_ERROR_INVALIDUTF8:
-    return "Invalid UTF-8 string";
-    case UTF8PROC_ERROR_NOTASSIGNED:
-    return "Unassigned Unicode code point found in UTF-8 string.";
-    case UTF8PROC_ERROR_INVALIDOPTS:
-    return "Invalid options for UTF-8 processing chosen.";
-    default:
-    return "An unknown error occurred while processing UTF-8 data.";
-  }
-}
-#endif
-
-static
-ssize_t utf8proc_iterate(
-  const uint8_t *str, ssize_t slen, int32_t *dst
-) {
-  int length;
-  int i;
-  int32_t uc = -1;
-  *dst = -1;
-  if (!slen) return 0;
-  length = utf8proc_utf8class[str[0]];
-  if (!length) return UTF8PROC_ERROR_INVALIDUTF8;
-  if (slen >= 0 && length > slen) return UTF8PROC_ERROR_INVALIDUTF8;
-  for (i=1; i<length; i++) {
-    if ((str[i] & 0xC0) != 0x80) return UTF8PROC_ERROR_INVALIDUTF8;
-  }
-  switch (length) {
-    case 1:
-    uc = str[0];
-    break;
-    case 2:
-    uc = ((str[0] & 0x1F) <<  6) + (str[1] & 0x3F);
-    if (uc < 0x80) uc = -1;
-    break;
-    case 3:
-    uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) <<  6)
-      + (str[2] & 0x3F);
-    if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000) ||
-      (uc >= 0xFDD0 && uc < 0xFDF0)) uc = -1;
-    break;
-    case 4:
-    uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12)
-      + ((str[2] & 0x3F) <<  6) + (str[3] & 0x3F);
-    if (uc < 0x10000 || uc >= 0x110000) uc = -1;
-    break;
-  }
-  if (uc < 0 || ((uc & 0xFFFF) >= 0xFFFE))
-    return UTF8PROC_ERROR_INVALIDUTF8;
-  *dst = uc;
-  return length;
-}
-
-#ifdef UNUSED_APIS
-static
-bool utf8proc_codepoint_valid(int32_t uc) {
-  if (uc < 0 || uc >= 0x110000 ||
-    ((uc & 0xFFFF) >= 0xFFFE) || (uc >= 0xD800 && uc < 0xE000) ||
-    (uc >= 0xFDD0 && uc < 0xFDF0)) return false;
-  else return true;
-}
-#endif
-
-static
-ssize_t utf8proc_encode_char(int32_t uc, uint8_t *dst) {
-  if (uc < 0x00) {
-    return 0;
-  } else if (uc < 0x80) {
-    dst[0] = (uint8_t)uc;
-    return 1;
-  } else if (uc < 0x800) {
-    dst[0] = (uint8_t)(0xC0 + (uc >> 6));
-    dst[1] = (uint8_t)(0x80 + (uc & 0x3F));
-    return 2;
-  } else if (uc == 0xFFFF) {
-    dst[0] = 0xFF;
-    return 1;
-  } else if (uc == 0xFFFE) {
-    dst[0] = 0xFE;
-    return 1;
-  } else if (uc < 0x10000) {
-    dst[0] = (uint8_t)(0xE0 + (uc >> 12));
-    dst[1] = (uint8_t)(0x80 + ((uc >> 6) & 0x3F));
-    dst[2] = (uint8_t)(0x80 + (uc & 0x3F));
-    return 3;
-  } else if (uc < 0x110000) {
-    dst[0] = (uint8_t)(0xF0 + (uc >> 18));
-    dst[1] = (uint8_t)(0x80 + ((uc >> 12) & 0x3F));
-    dst[2] = (uint8_t)(0x80 + ((uc >> 6) & 0x3F));
-    dst[3] = (uint8_t)(0x80 + (uc & 0x3F));
-    return 4;
-  } else return 0;
-}
-
-#define UTF8PROC_GET_PROPERTY(uc) (&utf8proc_properties[utf8proc_stage2table[utf8proc_stage1table[uc >> 8] + (uc & 0xFF)]])
-#if 0
-static
-const utf8proc_property_t *utf8proc_get_property(int32_t uc) {
-  /*  // ASSERT: uc >= 0 && uc < 0x110000*/
-  return utf8proc_properties + (
-    utf8proc_stage2table[
-      utf8proc_stage1table[uc >> 8] + (uc & 0xFF)
-    ]
-  );
-}
-#endif
-
-#define utf8proc_decompose_lump(replacement_uc) \
-  return utf8proc_decompose_char((replacement_uc), dst, bufsize, \
-  options & ~UTF8PROC_LUMP, last_boundclass)
-
-static
-ssize_t utf8proc_decompose_char(int32_t uc, int32_t *dst, ssize_t bufsize,
-    int options, int *last_boundclass) {
-  /*// ASSERT: uc >= 0 && uc < 0x110000*/
-  const utf8proc_property_t *property;
-  utf8proc_propval_t category;
-  int32_t hangul_sindex;
-  property = UTF8PROC_GET_PROPERTY(uc);
-  category = property->category;
-  hangul_sindex = uc - UTF8PROC_HANGUL_SBASE;
-  if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {
-    if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT) {
-      int32_t hangul_tindex;
-      if (bufsize >= 1) {
-        dst[0] = UTF8PROC_HANGUL_LBASE +
-          hangul_sindex / UTF8PROC_HANGUL_NCOUNT;
-        if (bufsize >= 2) dst[1] = UTF8PROC_HANGUL_VBASE +
-          (hangul_sindex % UTF8PROC_HANGUL_NCOUNT) / UTF8PROC_HANGUL_TCOUNT;
-      }
-      hangul_tindex = hangul_sindex % UTF8PROC_HANGUL_TCOUNT;
-      if (!hangul_tindex) return 2;
-      if (bufsize >= 3) dst[2] = UTF8PROC_HANGUL_TBASE + hangul_tindex;
-      return 3;
-    }
-  }
-  if (options & UTF8PROC_REJECTNA) {
-    if (!category) return UTF8PROC_ERROR_NOTASSIGNED;
-  }
-  if (options & UTF8PROC_IGNORE) {
-    if (property->ignorable) return 0;
-  }
-  if (options & UTF8PROC_LUMP) {
-    if (category == UTF8PROC_CATEGORY_ZS) utf8proc_decompose_lump(0x0020);
-    if (uc == 0x2018 || uc == 0x2019 || uc == 0x02BC || uc == 0x02C8)
-      utf8proc_decompose_lump(0x0027);
-    if (category == UTF8PROC_CATEGORY_PD || uc == 0x2212)
-      utf8proc_decompose_lump(0x002D);
-    if (uc == 0x2044 || uc == 0x2215) utf8proc_decompose_lump(0x002F);
-    if (uc == 0x2236) utf8proc_decompose_lump(0x003A);
-    if (uc == 0x2039 || uc == 0x2329 || uc == 0x3008)
-      utf8proc_decompose_lump(0x003C);
-    if (uc == 0x203A || uc == 0x232A || uc == 0x3009)
-      utf8proc_decompose_lump(0x003E);
-    if (uc == 0x2216) utf8proc_decompose_lump(0x005C);
-    if (uc == 0x02C4 || uc == 0x02C6 || uc == 0x2038 || uc == 0x2303)
-      utf8proc_decompose_lump(0x005E);
-    if (category == UTF8PROC_CATEGORY_PC || uc == 0x02CD)
-      utf8proc_decompose_lump(0x005F);
-    if (uc == 0x02CB) utf8proc_decompose_lump(0x0060);
-    if (uc == 0x2223) utf8proc_decompose_lump(0x007C);
-    if (uc == 0x223C) utf8proc_decompose_lump(0x007E);
-    if ((options & UTF8PROC_NLF2LS) && (options & UTF8PROC_NLF2PS)) {
-      if (category == UTF8PROC_CATEGORY_ZL ||
-          category == UTF8PROC_CATEGORY_ZP)
-        utf8proc_decompose_lump(0x000A);
-    }
-  }
-  if (options & UTF8PROC_STRIPMARK) {
-    if (category == UTF8PROC_CATEGORY_MN ||
-      category == UTF8PROC_CATEGORY_MC ||
-      category == UTF8PROC_CATEGORY_ME) return 0;
-  }
-  if (options & UTF8PROC_CASEFOLD) {
-    if (property->casefold_mapping) {
-      const int32_t *casefold_entry;
-      ssize_t written = 0;
-      for (casefold_entry = property->casefold_mapping;
-          *casefold_entry >= 0; casefold_entry++) {
-        written += utf8proc_decompose_char(*casefold_entry, dst+written,
-          (bufsize > written) ? (bufsize - written) : 0, options,
-          last_boundclass);
-        if (written < 0) return UTF8PROC_ERROR_OVERFLOW;
-      }
-      return written;
-    }
-  }
-  if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {
-    if (property->decomp_mapping &&
-        (!property->decomp_type || (options & UTF8PROC_COMPAT))) {
-      const int32_t *decomp_entry;
-      ssize_t written = 0;
-      for (decomp_entry = property->decomp_mapping;
-          *decomp_entry >= 0; decomp_entry++) {
-        written += utf8proc_decompose_char(*decomp_entry, dst+written,
-          (bufsize > written) ? (bufsize - written) : 0, options,
-        last_boundclass);
-        if (written < 0) return UTF8PROC_ERROR_OVERFLOW;
-      }
-      return written;
-    }
-  }
-  if (options & UTF8PROC_CHARBOUND) {
-    bool boundary;
-    int tbc, lbc;
-    tbc =
-      (uc == 0x000D) ? UTF8PROC_BOUNDCLASS_CR :
-      (uc == 0x000A) ? UTF8PROC_BOUNDCLASS_LF :
-      ((category == UTF8PROC_CATEGORY_ZL ||
-        category == UTF8PROC_CATEGORY_ZP ||
-        category == UTF8PROC_CATEGORY_CC ||
-        category == UTF8PROC_CATEGORY_CF) &&
-        !(uc == 0x200C || uc == 0x200D)) ? UTF8PROC_BOUNDCLASS_CONTROL :
-      property->extend ? UTF8PROC_BOUNDCLASS_EXTEND :
-      ((uc >= UTF8PROC_HANGUL_L_START && uc < UTF8PROC_HANGUL_L_END) ||
-        uc == UTF8PROC_HANGUL_L_FILLER) ? UTF8PROC_BOUNDCLASS_L :
-      (uc >= UTF8PROC_HANGUL_V_START && uc < UTF8PROC_HANGUL_V_END) ?
-        UTF8PROC_BOUNDCLASS_V :
-      (uc >= UTF8PROC_HANGUL_T_START && uc < UTF8PROC_HANGUL_T_END) ?
-        UTF8PROC_BOUNDCLASS_T :
-      (uc >= UTF8PROC_HANGUL_S_START && uc < UTF8PROC_HANGUL_S_END) ? (
-        ((uc-UTF8PROC_HANGUL_SBASE) % UTF8PROC_HANGUL_TCOUNT == 0) ?
-          UTF8PROC_BOUNDCLASS_LV : UTF8PROC_BOUNDCLASS_LVT
-      ) :
-      UTF8PROC_BOUNDCLASS_OTHER;
-    lbc = *last_boundclass;
-    boundary =
-      (tbc == UTF8PROC_BOUNDCLASS_EXTEND) ? false :
-      (lbc == UTF8PROC_BOUNDCLASS_START) ? true :
-      (lbc == UTF8PROC_BOUNDCLASS_CR &&
-       tbc == UTF8PROC_BOUNDCLASS_LF) ? false :
-      (lbc == UTF8PROC_BOUNDCLASS_CONTROL) ? true :
-      (tbc == UTF8PROC_BOUNDCLASS_CONTROL) ? true :
-      (lbc == UTF8PROC_BOUNDCLASS_L &&
-       (tbc == UTF8PROC_BOUNDCLASS_L ||
-        tbc == UTF8PROC_BOUNDCLASS_V ||
-        tbc == UTF8PROC_BOUNDCLASS_LV ||
-        tbc == UTF8PROC_BOUNDCLASS_LVT)) ? false :
-      ((lbc == UTF8PROC_BOUNDCLASS_LV ||
-        lbc == UTF8PROC_BOUNDCLASS_V) &&
-       (tbc == UTF8PROC_BOUNDCLASS_V ||
-        tbc == UTF8PROC_BOUNDCLASS_T)) ? false :
-      ((lbc == UTF8PROC_BOUNDCLASS_LVT ||
-        lbc == UTF8PROC_BOUNDCLASS_T) &&
-       tbc == UTF8PROC_BOUNDCLASS_T) ? false :
-       true;
-    *last_boundclass = tbc;
-    if (boundary) {
-      if (bufsize >= 1) dst[0] = 0xFFFF;
-      if (bufsize >= 2) dst[1] = uc;
-      return 2;
-    }
-  }
-  if (bufsize >= 1) *dst = uc;
-  return 1;
-}
-
-static
-ssize_t utf8proc_decompose(
-  const uint8_t *str, ssize_t slen,
-  int32_t *buffer, ssize_t bufsize, int options
-) {
-  /*// slen will be ignored, if UTF8PROC_NULLTERM is set in options*/
-  ssize_t wpos = 0;
-  if ((options & UTF8PROC_COMPOSE) && (options & UTF8PROC_DECOMPOSE))
-    return UTF8PROC_ERROR_INVALIDOPTS;
-  if ((options & UTF8PROC_STRIPMARK) &&
-      !(options & UTF8PROC_COMPOSE) && !(options & UTF8PROC_DECOMPOSE))
-    return UTF8PROC_ERROR_INVALIDOPTS;
-  {
-    int32_t uc;
-    ssize_t rpos = 0;
-    ssize_t decomp_result;
-    int boundclass = UTF8PROC_BOUNDCLASS_START;
-    while (1) {
-      if (options & UTF8PROC_NULLTERM) {
-        rpos += utf8proc_iterate(str + rpos, -1, &uc);
-        /* checking of return value is not necessary,
-	   as 'uc' is < 0 in case of error. */
-        if (uc < 0) return UTF8PROC_ERROR_INVALIDUTF8;
-        if (rpos < 0) return UTF8PROC_ERROR_OVERFLOW;
-        if (uc == 0) break;
-      } else {
-        if (rpos >= slen) break;
-        rpos += utf8proc_iterate(str + rpos, slen - rpos, &uc);
-        if (uc < 0) return UTF8PROC_ERROR_INVALIDUTF8;
-      }
-      decomp_result = utf8proc_decompose_char(
-        uc, buffer + wpos, (bufsize > wpos) ? (bufsize - wpos) : 0, options,
-        &boundclass
-      );
-      if (decomp_result < 0) return decomp_result;
-      wpos += decomp_result;
-      /*      // prohibiting integer overflows due to too long strings:*/
-      if (wpos < 0 || wpos > SSIZE_MAX/sizeof(int32_t)/2)
-        return UTF8PROC_ERROR_OVERFLOW;
-    }
-  }
-  if ((options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) && bufsize >= wpos) {
-    ssize_t pos = 0;
-    while (pos < wpos-1) {
-      int32_t uc1, uc2;
-      const utf8proc_property_t *property1, *property2;
-      uc1 = buffer[pos];
-      uc2 = buffer[pos+1];
-      property1 = UTF8PROC_GET_PROPERTY(uc1);
-      property2 = UTF8PROC_GET_PROPERTY(uc2);
-      if (property1->combining_class > property2->combining_class &&
-          property2->combining_class > 0) {
-        buffer[pos] = uc2;
-        buffer[pos+1] = uc1;
-        if (pos > 0) pos--; else pos++;
-      } else {
-        pos++;
-      }
-    }
-  }
-  return wpos;
-}
-
-static
-ssize_t utf8proc_reencode(int32_t *buffer, ssize_t length, int options) {
-  /* UTF8PROC_NULLTERM option will be ignored, 'length' is never ignored
-     ASSERT: 'buffer' has one spare byte of free space at the end! */
-  if (options & (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS | UTF8PROC_STRIPCC)) {
-    ssize_t rpos;
-    ssize_t wpos = 0;
-    int32_t uc;
-    for (rpos = 0; rpos < length; rpos++) {
-      uc = buffer[rpos];
-      if (uc == 0x000D && rpos < length-1 && buffer[rpos+1] == 0x000A) rpos++;
-      if (uc == 0x000A || uc == 0x000D || uc == 0x0085 ||
-          ((options & UTF8PROC_STRIPCC) && (uc == 0x000B || uc == 0x000C))) {
-        if (options & UTF8PROC_NLF2LS) {
-          if (options & UTF8PROC_NLF2PS) {
-            buffer[wpos++] = 0x000A;
-          } else {
-            buffer[wpos++] = 0x2028;
-          }
-        } else {
-          if (options & UTF8PROC_NLF2PS) {
-            buffer[wpos++] = 0x2029;
-          } else {
-            buffer[wpos++] = 0x0020;
-          }
-        }
-      } else if ((options & UTF8PROC_STRIPCC) &&
-          (uc < 0x0020 || (uc >= 0x007F && uc < 0x00A0))) {
-        if (uc == 0x0009) buffer[wpos++] = 0x0020;
-      } else {
-        buffer[wpos++] = uc;
-      }
-    }
-    length = wpos;
-  }
-  if (options & UTF8PROC_COMPOSE) {
-    int32_t *starter = NULL;
-    int32_t current_char;
-    const utf8proc_property_t *starter_property = NULL, *current_property;
-    utf8proc_propval_t max_combining_class = -1;
-    ssize_t rpos;
-    ssize_t wpos = 0;
-    int32_t composition;
-    for (rpos = 0; rpos < length; rpos++) {
-      current_char = buffer[rpos];
-      current_property = UTF8PROC_GET_PROPERTY(current_char);
-      if (starter && current_property->combining_class > max_combining_class) {
-	/*        // combination perhaps possible*/
-        int32_t hangul_lindex;
-        int32_t hangul_sindex;
-        hangul_lindex = *starter - UTF8PROC_HANGUL_LBASE;
-        if (hangul_lindex >= 0 && hangul_lindex < UTF8PROC_HANGUL_LCOUNT) {
-          int32_t hangul_vindex;
-          hangul_vindex = current_char - UTF8PROC_HANGUL_VBASE;
-          if (hangul_vindex >= 0 && hangul_vindex < UTF8PROC_HANGUL_VCOUNT) {
-            *starter = UTF8PROC_HANGUL_SBASE +
-              (hangul_lindex * UTF8PROC_HANGUL_VCOUNT + hangul_vindex) *
-              UTF8PROC_HANGUL_TCOUNT;
-            starter_property = NULL;
-            continue;
-          }
-        }
-        hangul_sindex = *starter - UTF8PROC_HANGUL_SBASE;
-        if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT &&
-            (hangul_sindex % UTF8PROC_HANGUL_TCOUNT) == 0) {
-          int32_t hangul_tindex;
-          hangul_tindex = current_char - UTF8PROC_HANGUL_TBASE;
-          if (hangul_tindex >= 0 && hangul_tindex < UTF8PROC_HANGUL_TCOUNT) {
-            *starter += hangul_tindex;
-            starter_property = NULL;
-            continue;
-          }
-        }
-        if (!starter_property) {
-          starter_property = UTF8PROC_GET_PROPERTY(*starter);
-        }
-        if (starter_property->comb1st_index >= 0 &&
-            current_property->comb2nd_index >= 0) {
-          composition = utf8proc_combinations[
-            starter_property->comb1st_index +
-            current_property->comb2nd_index
-          ];
-          if (composition >= 0 && (!(options & UTF8PROC_STABLE) ||
-              !(UTF8PROC_GET_PROPERTY(composition)->comp_exclusion))) {
-            *starter = composition;
-            starter_property = NULL;
-            continue;
-          }
-        }
-      }
-      buffer[wpos] = current_char;
-      if (current_property->combining_class) {
-        if (current_property->combining_class > max_combining_class) {
-          max_combining_class = current_property->combining_class;
-        }
-      } else {
-        starter = buffer + wpos;
-        starter_property = NULL;
-        max_combining_class = -1;
-      }
-      wpos++;
-    }
-    length = wpos;
-  }
-  {
-    ssize_t rpos, wpos = 0;
-    int32_t uc;
-    for (rpos = 0; rpos < length; rpos++) {
-      uc = buffer[rpos];
-      wpos += utf8proc_encode_char(uc, ((uint8_t *)buffer) + wpos);
-    }
-    ((uint8_t *)buffer)[wpos] = 0;
-    return wpos;
-  }
-}
-
-static
-ssize_t utf8proc_map(
-  const uint8_t *str, ssize_t slen, uint8_t **dstptr, int options
-) {
-  int32_t *buffer;
-  ssize_t result;
-  *dstptr = NULL;
-  result = utf8proc_decompose(str, slen, NULL, 0, options);
-  if (result < 0) return result;
-  buffer = (int32_t*)malloc(((size_t)result) * sizeof(int32_t) + 1);
-  if (!buffer) return UTF8PROC_ERROR_NOMEM;
-  result = utf8proc_decompose(str, slen, buffer, result, options);
-  if (result < 0) {
-    free(buffer);
-    return result;
-  }
-  result = utf8proc_reencode(buffer, result, options);
-  if (result < 0) {
-    free(buffer);
-    return result;
-  }
-  {
-    int32_t *newptr;
-    newptr = (int32_t*) realloc(buffer, (size_t)result+1);
-    if (newptr) buffer = newptr;
-  }
-  *dstptr = (uint8_t *)buffer;
-  return result;
-}
-
-#ifdef UNUSED_APIS
-static
-uint8_t *utf8proc_NFD(const uint8_t *str) {
-  uint8_t *retval;
-  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |
-    UTF8PROC_DECOMPOSE);
-  return retval;
-}
-#endif
-
-uint8_t* ncmpii_utf8proc_NFC(const uint8_t *str) {
-  uint8_t *retval;
-  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |
-    UTF8PROC_COMPOSE);
-  return retval;
-}
-
-#ifdef UNUSED_APIS
-static
-uint8_t *utf8proc_NFKD(const uint8_t *str) {
-  uint8_t *retval;
-  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |
-    UTF8PROC_DECOMPOSE | UTF8PROC_COMPAT);
-  return retval;
-}
-
-static
-uint8_t *utf8proc_NFKC(const uint8_t *str) {
-  uint8_t *retval;
-  utf8proc_map(str, 0, &retval, UTF8PROC_NULLTERM | UTF8PROC_STABLE |
-    UTF8PROC_COMPOSE | UTF8PROC_COMPAT);
-  return retval;
-}
-#endif
-
-ssize_t  ncmpii_utf8proc_check(const uint8_t *str) {
-  ssize_t result;
-  result = utf8proc_decompose(str, 0, NULL, 0,
-			      UTF8PROC_NULLTERM | UTF8PROC_STABLE);
-  return result;
-}
diff --git a/src/lib/utf8proc.h b/src/lib/utf8proc.h
deleted file mode 100644
index ded2aec..0000000
--- a/src/lib/utf8proc.h
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- *  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: utf8proc.h 2475 2016-09-05 23:15:29Z wkliao $ */
-
-/*
- *  Copyright (c) 2006-2007 Jan Behrens, FlexiGuided GmbH, Berlin
- *
- *  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.
- */
-
-/*
- *  File name:    utf8proc.h
- *  Version:      1.1.1
- *  Last changed: 2007-07-22
- *  Changed 2008-05-16 by rkr to add config.h and replacement for stdbool.h
- *                            for pre-C99 compilers that don't support bool.
- *  Changed 2008-06-05 by rkr to add utf8proc_check(str, options) function for
- *                            for just checking UTF-8 validity
- *  Description:
- *  Header files for libutf8proc, which is a mapping tool for UTF-8 strings
- *  with following features:
- *  - decomposing and composing of strings
- *  - replacing compatibility characters with their equivalents
- *  - stripping of "default ignorable characters"
- *    like SOFT-HYPHEN or ZERO-WIDTH-SPACE
- *  - folding of certain characters for string comparison
- *    (e.g. HYPHEN U+2010 and MINUS U+2212 to ASCII "-")
- *    (see "LUMP" option)
- *  - optional rejection of strings containing non-assigned code points
- *  - stripping of control characters
- *  - stripping of character marks (accents, etc.)
- *  - transformation of LF, CRLF, CR and NEL to line-feed (LF)
- *    or to the unicode characters for paragraph separation (PS)
- *    or line separation (LS).
- *  - unicode case folding (for case insensitive string comparisons)
- *  - rejection of illegal UTF-8 data
- *    (i.e. UTF-8 encoded UTF-16 surrogates)
- *  - support for korean hangul characters
- *  Unicode Version 5.0.0 is supported.
- */
-
-
-#ifndef UTF8PROC_H
-#define UTF8PROC_H
-
-/* Note this header file requires some constants defined in ncconfig.h. Please
- * make sure ncconfig.h is included in any C file before including this file.
- * We cannot include ncconfig.h here due to the compiler warning complaining
- * about constants being redefined (caused by including ncconfig.h twice.)
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
- */
-
-#include <stdlib.h>
-#ifdef HAVE_STDBOOL_H
-#include <stdbool.h>
-#else
-# if ! HAVE__BOOL
-#  ifdef __cplusplus
-typedef bool _Bool;
-#  else
-typedef unsigned char _Bool;
-#  endif
-# endif
-#ifndef _Bool
-# define bool _Bool
-#endif
-# define false 0
-# define true 1
-# define __bool_true_false_are_defined 1
-#endif
-#include <sys/types.h>
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#elif defined(_MSC_VER) && defined(HAVE_STDINT_H)
-#include <stdint.h>
-#else /* HAVE_INTTYPES_H */
-#include <pstdint.h>
-#endif /* HAVE_INTTYPES_H */
-#include <limits.h>
-
-#ifndef HAVE_SSIZE_T
-#define ssize_t int
-#endif
-
-#ifndef SSIZE_MAX
-#define SSIZE_MAX (SIZE_MAX/2)
-#endif
-
-#define UTF8PROC_NULLTERM  (1<<0)
-#define UTF8PROC_STABLE    (1<<1)
-#define UTF8PROC_COMPAT    (1<<2)
-#define UTF8PROC_COMPOSE   (1<<3)
-#define UTF8PROC_DECOMPOSE (1<<4)
-#define UTF8PROC_IGNORE    (1<<5)
-#define UTF8PROC_REJECTNA  (1<<6)
-#define UTF8PROC_NLF2LS    (1<<7)
-#define UTF8PROC_NLF2PS    (1<<8)
-#define UTF8PROC_NLF2LF    (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS)
-#define UTF8PROC_STRIPCC   (1<<9)
-#define UTF8PROC_CASEFOLD  (1<<10)
-#define UTF8PROC_CHARBOUND (1<<11)
-#define UTF8PROC_LUMP      (1<<12)
-#define UTF8PROC_STRIPMARK (1<<13)
-/*
- *  Flags being regarded by several functions in the library:
- *  NULLTERM:  The given UTF-8 input is NULL terminated.
- *  STABLE:    Unicode Versioning Stability has to be respected.
- *  COMPAT:    Compatibility decomposition
- *             (i.e. formatting information is lost)
- *  COMPOSE:   Return a result with composed characters.
- *  DECOMPOSE: Return a result with decomposed characters.
- *  IGNORE:    Strip "default ignorable characters"
- *  REJECTNA:  Return an error, if the input contains unassigned
- *             code points.
- *  NLF2LS:    Indicating that NLF-sequences (LF, CRLF, CR, NEL) are
- *             representing a line break, and should be converted to the
- *             unicode character for line separation (LS).
- *  NLF2PS:    Indicating that NLF-sequences are representing a paragraph
- *             break, and should be converted to the unicode character for
- *             paragraph separation (PS).
- *  NLF2LF:    Indicating that the meaning of NLF-sequences is unknown.
- *  STRIPCC:   Strips and/or convers control characters.
- *             NLF-sequences are transformed into space, except if one of
- *             the NLF2LS/PS/LF options is given.
- *             HorizontalTab (HT) and FormFeed (FF) are treated as a
- *             NLF-sequence in this case.
- *             All other control characters are simply removed.
- *  CASEFOLD:  Performs unicode case folding, to be able to do a
- *             case-insensitive string comparison.
- *  CHARBOUND: Inserts 0xFF bytes at the beginning of each sequence which
- *             is representing a single grapheme cluster (see UAX#29).
- *  LUMP:      Lumps certain characters together
- *             (e.g. HYPHEN U+2010 and MINUS U+2212 to ASCII "-").
- *             (See lump.txt for details.)
- *             If NLF2LF is set, this includes a transformation of
- *             paragraph and line separators to ASCII line-feed (LF).
- *  STRIPMARK: Strips all character markings
- *             (non-spacing, spacing and enclosing) (i.e. accents)
- *             NOTE: this option works only with COMPOSE or DECOMPOSE
- */
-
-#define UTF8PROC_ERROR_NOMEM -1
-#define UTF8PROC_ERROR_OVERFLOW -2
-#define UTF8PROC_ERROR_INVALIDUTF8 -3
-#define UTF8PROC_ERROR_NOTASSIGNED -4
-#define UTF8PROC_ERROR_INVALIDOPTS -5
-/*
- *  Error codes being returned by almost all functions:
- *  ERROR_NOMEM:       Memory could not be allocated.
- *  ERROR_OVERFLOW:    The given string is too long to be processed.
- *  ERROR_INVALIDUTF8: The given string is not a legal UTF-8 string.
- *  ERROR_NOTASSIGNED: The REJECTNA flag was set,
- *                     and an unassigned code point was found.
- *  ERROR_INVALIDOPTS: Invalid options have been used.
- */
-
-typedef int16_t utf8proc_propval_t;
-typedef struct utf8proc_property_struct {
-  utf8proc_propval_t category;
-  utf8proc_propval_t combining_class;
-  utf8proc_propval_t bidi_class;
-  utf8proc_propval_t decomp_type;
-  const int32_t *decomp_mapping;
-  unsigned bidi_mirrored:1;
-  int32_t uppercase_mapping;
-  int32_t lowercase_mapping;
-  int32_t titlecase_mapping;
-  int32_t comb1st_index;
-  int32_t comb2nd_index;
-  unsigned comp_exclusion:1;
-  unsigned ignorable:1;
-  unsigned control_boundary:1;
-  unsigned extend:1;
-  const int32_t *casefold_mapping;
-} utf8proc_property_t;
-
-#define UTF8PROC_CATEGORY_LU  1
-#define UTF8PROC_CATEGORY_LL  2
-#define UTF8PROC_CATEGORY_LT  3
-#define UTF8PROC_CATEGORY_LM  4
-#define UTF8PROC_CATEGORY_LO  5
-#define UTF8PROC_CATEGORY_MN  6
-#define UTF8PROC_CATEGORY_MC  7
-#define UTF8PROC_CATEGORY_ME  8
-#define UTF8PROC_CATEGORY_ND  9
-#define UTF8PROC_CATEGORY_NL 10
-#define UTF8PROC_CATEGORY_NO 11
-#define UTF8PROC_CATEGORY_PC 12
-#define UTF8PROC_CATEGORY_PD 13
-#define UTF8PROC_CATEGORY_PS 14
-#define UTF8PROC_CATEGORY_PE 15
-#define UTF8PROC_CATEGORY_PI 16
-#define UTF8PROC_CATEGORY_PF 17
-#define UTF8PROC_CATEGORY_PO 18
-#define UTF8PROC_CATEGORY_SM 19
-#define UTF8PROC_CATEGORY_SC 20
-#define UTF8PROC_CATEGORY_SK 21
-#define UTF8PROC_CATEGORY_SO 22
-#define UTF8PROC_CATEGORY_ZS 23
-#define UTF8PROC_CATEGORY_ZL 24
-#define UTF8PROC_CATEGORY_ZP 25
-#define UTF8PROC_CATEGORY_CC 26
-#define UTF8PROC_CATEGORY_CF 27
-#define UTF8PROC_CATEGORY_CS 28
-#define UTF8PROC_CATEGORY_CO 29
-#define UTF8PROC_CATEGORY_CN 30
-#define UTF8PROC_BIDI_CLASS_L    1
-#define UTF8PROC_BIDI_CLASS_LRE  2
-#define UTF8PROC_BIDI_CLASS_LRO  3
-#define UTF8PROC_BIDI_CLASS_R    4
-#define UTF8PROC_BIDI_CLASS_AL   5
-#define UTF8PROC_BIDI_CLASS_RLE  6
-#define UTF8PROC_BIDI_CLASS_RLO  7
-#define UTF8PROC_BIDI_CLASS_PDF  8
-#define UTF8PROC_BIDI_CLASS_EN   9
-#define UTF8PROC_BIDI_CLASS_ES  10
-#define UTF8PROC_BIDI_CLASS_ET  11
-#define UTF8PROC_BIDI_CLASS_AN  12
-#define UTF8PROC_BIDI_CLASS_CS  13
-#define UTF8PROC_BIDI_CLASS_NSM 14
-#define UTF8PROC_BIDI_CLASS_BN  15
-#define UTF8PROC_BIDI_CLASS_B   16
-#define UTF8PROC_BIDI_CLASS_S   17
-#define UTF8PROC_BIDI_CLASS_WS  18
-#define UTF8PROC_BIDI_CLASS_ON  19
-#define UTF8PROC_DECOMP_TYPE_FONT      1
-#define UTF8PROC_DECOMP_TYPE_NOBREAK   2
-#define UTF8PROC_DECOMP_TYPE_INITIAL   3
-#define UTF8PROC_DECOMP_TYPE_MEDIAL    4
-#define UTF8PROC_DECOMP_TYPE_FINAL     5
-#define UTF8PROC_DECOMP_TYPE_ISOLATED  6
-#define UTF8PROC_DECOMP_TYPE_CIRCLE    7
-#define UTF8PROC_DECOMP_TYPE_SUPER     8
-#define UTF8PROC_DECOMP_TYPE_SUB       9
-#define UTF8PROC_DECOMP_TYPE_VERTICAL 10
-#define UTF8PROC_DECOMP_TYPE_WIDE     11
-#define UTF8PROC_DECOMP_TYPE_NARROW   12
-#define UTF8PROC_DECOMP_TYPE_SMALL    13
-#define UTF8PROC_DECOMP_TYPE_SQUARE   14
-#define UTF8PROC_DECOMP_TYPE_FRACTION 15
-#define UTF8PROC_DECOMP_TYPE_COMPAT   16
-
-#if 0
-extern const int8_t utf8proc_utf8class[256];
-
-const char *utf8proc_errmsg(ssize_t errcode);
-/*
- *  Returns a static error string for the given error code.
- */
-
-ssize_t utf8proc_iterate(const uint8_t *str, ssize_t strlen, int32_t *dst);
-/*
- *  Reads a single char from the UTF-8 sequence being pointed to by 'str'.
- *  The maximum number of bytes read is 'strlen', unless 'strlen' is
- *  negative.
- *  If a valid unicode char could be read, it is stored in the variable
- *  being pointed to by 'dst', otherwise that variable will be set to -1.
- *  In case of success the number of bytes read is returned, otherwise a
- *  negative error code is returned.
- */
-
-bool utf8proc_codepoint_valid(int32_t uc);
-/*
- *  Returns 1, if the given unicode code-point is valid, otherwise 0.
- */
-
-ssize_t utf8proc_encode_char(int32_t uc, uint8_t *dst);
-/*
- *  Encodes the unicode char with the code point 'uc' as an UTF-8 string in
- *  the byte array being pointed to by 'dst'. This array has to be at least
- *  4 bytes long.
- *  In case of success the number of bytes written is returned,
- *  otherwise 0.
- *  This function does not check if 'uc' is a valid unicode code point.
- */
-
-const utf8proc_property_t *utf8proc_get_property(int32_t uc);
-/*
- *  Returns a pointer to a (constant) struct containing information about
- *  the unicode char with the given code point 'uc'.
- *  If the character is not existent a pointer to a special struct is
- *  returned, where 'category' is a NULL pointer.
- *  WARNING: The parameter 'uc' has to be in the range of 0x0000 to
- *           0x10FFFF, otherwise the program might crash!
- */
-
-ssize_t utf8proc_decompose_char(
-  int32_t uc, int32_t *dst, ssize_t bufsize,
-  int options, int *last_boundclass
-);
-/*
- *  Writes a decomposition of the unicode char 'uc' into the array being
- *  pointed to by 'dst'.
- *  Following flags in the 'options' field are regarded:
- *  REJECTNA:  an unassigned unicode code point leads to an error
- *  IGNORE:    "default ignorable" chars are stripped
- *  CASEFOLD:  unicode casefolding is applied
- *  COMPAT:    replace certain characters with their
- *             compatibility decomposition
- *  CHARBOUND: Inserts 0xFF bytes before each grapheme cluster
- *  LUMP:      lumps certain different characters together
- *  STRIPMARK: removes all character marks
- *  The pointer 'last_boundclass' has to point to an integer variable which
- *  is storing the last character boundary class, if the CHARBOUND option
- *  is used.
- *  In case of success the number of chars written is returned,
- *  in case of an error, a negative error code is returned.
- *  If the number of written chars would be bigger than 'bufsize',
- *  the buffer (up to 'bufsize') has unpredictable data, and the needed
- *  buffer size is returned.
- *  WARNING: The parameter 'uc' has to be in the range of 0x0000 to
- *           0x10FFFF, otherwise the program might crash!
- */
-
-ssize_t utf8proc_decompose(
-  const uint8_t *str, ssize_t strlen,
-  int32_t *buffer, ssize_t bufsize, int options
-);
-/*
- *  Does the same as 'utf8proc_decompose_char', but acts on a whole UTF-8
- *  string, and orders the decomposed sequences correctly.
- *  If the NULLTERM flag in 'options' is set, processing will be stopped,
- *  when a NULL byte is encounted, otherwise 'strlen' bytes are processed.
- *  The result in form of unicode code points is written into the buffer
- *  being pointed to by 'buffer', having the length of 'bufsize' entries.
- *  In case of success the number of chars written is returned,
- *  in case of an error, a negative error code is returned.
- *  If the number of written chars would be bigger than 'bufsize',
- *  the buffer (up to 'bufsize') has unpredictable data, and the needed
- *  buffer size is returned.
- */
-
-ssize_t utf8proc_reencode(int32_t *buffer, ssize_t length, int options);
-/*
- *  Reencodes the sequence of unicode characters given by the pointer
- *  'buffer' and 'length' as UTF-8.
- *  The result is stored in the same memory area where the data is read.
- *  Following flags in the 'options' field are regarded:
- *  NLF2LS:  converts LF, CRLF, CR and NEL into LS
- *  NLF2PS:  converts LF, CRLF, CR and NEL into PS
- *  NLF2LF:  converts LF, CRLF, CR and NEL into LF
- *  STRIPCC: strips or converts all non-affected control characters
- *  COMPOSE: tries to combine decomposed characters into composite
- *           characters
- *  STABLE:  prohibits combining characters which would violate
- *           the unicode versioning stability
- *  In case of success the length of the resulting UTF-8 string is
- *  returned, otherwise a negative error code is returned.
- *  WARNING: The amount of free space being pointed to by 'buffer', has to
- *           exceed the amount of the input data by one byte, and the
- *           entries of the array pointed to by 'str' have to be in the
- *           range of 0x0000 to 0x10FFFF, otherwise the program might
- *           crash!
- */
-
-ssize_t utf8proc_map(
-  const uint8_t *str, ssize_t strlen, uint8_t **dstptr, int options
-);
-/*
- *  Maps the given UTF-8 string being pointed to by 'str' to a new UTF-8
- *  string, which is allocated dynamically, and afterwards pointed to by
- *  the pointer being pointed to by 'dstptr'.
- *  If the NULLTERM flag in the 'options' field is set, the length is
- *  determined by a NULL terminator, otherwise the parameter 'strlen' is
- *  evaluated to determine the string length, but in any case the result
- *  will be NULL terminated (though it might contain NULL characters
- *  before). Other flags in the 'options' field are passed to the functions
- *  defined above, and regarded as described.
- *  In case of success the length of the new string is returned,
- *  otherwise a negative error code is returned.
- *  NOTICE: The memory of the new UTF-8 string will have been allocated with
- *          'malloc', and has therefore to be freed with 'free'.
- */
-
-uint8_t *utf8proc_NFD(const uint8_t *str);
-uint8_t *utf8proc_NFC(const uint8_t *str);
-uint8_t *utf8proc_NFKD(const uint8_t *str);
-uint8_t *utf8proc_NFKC(const uint8_t *str);
-/*
- *  Returns a pointer to newly allocated memory of a NFD, NFC, NFKD or NFKC
- *  normalized version of the null-terminated string 'str'.
- */
-#endif
-uint8_t* ncmpii_utf8proc_NFC(const uint8_t *str);
-
-ssize_t  ncmpii_utf8proc_check(const uint8_t *str);
-/*
- * Just checks UTF-8 string for validity, returns 0 if valid or one of
- * the negative UTF8PROC_ERROR_* codes if invalid or memory exhausted
- * checking.  Assumes null-terminated string str and UTF8PROC_STABLE
- * option.
- */
-
-#endif
-
diff --git a/src/lib/utf8proc_data.h b/src/lib/utf8proc_data.h
deleted file mode 100644
index 8263dcb..0000000
--- a/src/lib/utf8proc_data.h
+++ /dev/null
@@ -1,13393 +0,0 @@
-/*
- *  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: utf8proc_data.h 2359 2016-03-19 21:13:48Z wkliao $ */
-
-/*
- *  This file contains derived data from a modified version of the
- *  Unicode data files.
- *
- *  The original data files are available at
- *  http://www.unicode.org/Public/UNIDATA/
- *
- *
- *  COPYRIGHT AND PERMISSION NOTICE
- *
- *  Copyright (c) 1991-2007 Unicode, Inc. All rights reserved. Distributed
- *  under the Terms of Use in http://www.unicode.org/copyright.html.
- *
- *  Permission is hereby granted, free of charge, to any person obtaining a
- *  copy of the Unicode data files and any associated documentation (the "Data
- *  Files") or Unicode software and any associated documentation (the
- *  "Software") to deal in the Data Files or Software without restriction,
- *  including without limitation the rights to use, copy, modify, merge,
- *  publish, distribute, and/or sell copies of the Data Files or Software, and
- *  to permit persons to whom the Data Files or Software are furnished to do
- *  so, provided that (a) the above copyright notice(s) and this permission
- *  notice appear with all copies of the Data Files or Software, (b) both the
- *  above copyright notice(s) and this permission notice appear in associated
- *  documentation, and (c) there is clear notice in each modified Data File or
- *  in the Software as well as in the documentation associated with the Data
- *  File(s) or Software that the data or software has been modified.
- *
- *  THE DATA FILES AND SOFTWARE ARE 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 OF
- *  THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
- *  INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR
- *  CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
- *  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- *  TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- *  PERFORMANCE OF THE DATA FILES OR SOFTWARE.
- *
- *  Except as contained in this notice, the name of a copyright holder shall
- *  not be used in advertising or otherwise to promote the sale, use or other
- *  dealings in these Data Files or Software without prior written
- *  authorization of the copyright holder.
- */
-
-static
-const int32_t utf8proc_sequences[] = {
-  97, -1, 98, -1, 99, -1, 100, 
-  -1, 101, -1, 102, -1, 103, -1, 104, 
-  -1, 105, -1, 106, -1, 107, -1, 108, 
-  -1, 109, -1, 110, -1, 111, -1, 112, 
-  -1, 113, -1, 114, -1, 115, -1, 116, 
-  -1, 117, -1, 118, -1, 119, -1, 120, 
-  -1, 121, -1, 122, -1, 32, -1, 32, 
-  776, -1, 32, 772, -1, 50, -1, 51, 
-  -1, 32, 769, -1, 956, -1, 32, 807, 
-  -1, 49, -1, 49, 8260, 52, -1, 49, 
-  8260, 50, -1, 51, 8260, 52, -1, 65, 
-  768, -1, 224, -1, 65, 769, -1, 225, 
-  -1, 65, 770, -1, 226, -1, 65, 771, 
-  -1, 227, -1, 65, 776, -1, 228, -1, 
-  65, 778, -1, 229, -1, 230, -1, 67, 
-  807, -1, 231, -1, 69, 768, -1, 232, 
-  -1, 69, 769, -1, 233, -1, 69, 770, 
-  -1, 234, -1, 69, 776, -1, 235, -1, 
-  73, 768, -1, 236, -1, 73, 769, -1, 
-  237, -1, 73, 770, -1, 238, -1, 73, 
-  776, -1, 239, -1, 240, -1, 78, 771, 
-  -1, 241, -1, 79, 768, -1, 242, -1, 
-  79, 769, -1, 243, -1, 79, 770, -1, 
-  244, -1, 79, 771, -1, 245, -1, 79, 
-  776, -1, 246, -1, 248, -1, 85, 768, 
-  -1, 249, -1, 85, 769, -1, 250, -1, 
-  85, 770, -1, 251, -1, 85, 776, -1, 
-  252, -1, 89, 769, -1, 253, -1, 254, 
-  -1, 115, 115, -1, 97, 768, -1, 97, 
-  769, -1, 97, 770, -1, 97, 771, -1, 
-  97, 776, -1, 97, 778, -1, 99, 807, 
-  -1, 101, 768, -1, 101, 769, -1, 101, 
-  770, -1, 101, 776, -1, 105, 768, -1, 
-  105, 769, -1, 105, 770, -1, 105, 776, 
-  -1, 110, 771, -1, 111, 768, -1, 111, 
-  769, -1, 111, 770, -1, 111, 771, -1, 
-  111, 776, -1, 117, 768, -1, 117, 769, 
-  -1, 117, 770, -1, 117, 776, -1, 121, 
-  769, -1, 121, 776, -1, 65, 772, -1, 
-  257, -1, 97, 772, -1, 65, 774, -1, 
-  259, -1, 97, 774, -1, 65, 808, -1, 
-  261, -1, 97, 808, -1, 67, 769, -1, 
-  263, -1, 99, 769, -1, 67, 770, -1, 
-  265, -1, 99, 770, -1, 67, 775, -1, 
-  267, -1, 99, 775, -1, 67, 780, -1, 
-  269, -1, 99, 780, -1, 68, 780, -1, 
-  271, -1, 100, 780, -1, 273, -1, 69, 
-  772, -1, 275, -1, 101, 772, -1, 69, 
-  774, -1, 277, -1, 101, 774, -1, 69, 
-  775, -1, 279, -1, 101, 775, -1, 69, 
-  808, -1, 281, -1, 101, 808, -1, 69, 
-  780, -1, 283, -1, 101, 780, -1, 71, 
-  770, -1, 285, -1, 103, 770, -1, 71, 
-  774, -1, 287, -1, 103, 774, -1, 71, 
-  775, -1, 289, -1, 103, 775, -1, 71, 
-  807, -1, 291, -1, 103, 807, -1, 72, 
-  770, -1, 293, -1, 104, 770, -1, 295, 
-  -1, 73, 771, -1, 297, -1, 105, 771, 
-  -1, 73, 772, -1, 299, -1, 105, 772, 
-  -1, 73, 774, -1, 301, -1, 105, 774, 
-  -1, 73, 808, -1, 303, -1, 105, 808, 
-  -1, 73, 775, -1, 105, 775, -1, 73, 
-  74, -1, 307, -1, 105, 106, -1, 74, 
-  770, -1, 309, -1, 106, 770, -1, 75, 
-  807, -1, 311, -1, 107, 807, -1, 76, 
-  769, -1, 314, -1, 108, 769, -1, 76, 
-  807, -1, 316, -1, 108, 807, -1, 76, 
-  780, -1, 318, -1, 108, 780, -1, 76, 
-  183, -1, 320, -1, 108, 183, -1, 322, 
-  -1, 78, 769, -1, 324, -1, 110, 769, 
-  -1, 78, 807, -1, 326, -1, 110, 807, 
-  -1, 78, 780, -1, 328, -1, 110, 780, 
-  -1, 700, 110, -1, 331, -1, 79, 772, 
-  -1, 333, -1, 111, 772, -1, 79, 774, 
-  -1, 335, -1, 111, 774, -1, 79, 779, 
-  -1, 337, -1, 111, 779, -1, 339, -1, 
-  82, 769, -1, 341, -1, 114, 769, -1, 
-  82, 807, -1, 343, -1, 114, 807, -1, 
-  82, 780, -1, 345, -1, 114, 780, -1, 
-  83, 769, -1, 347, -1, 115, 769, -1, 
-  83, 770, -1, 349, -1, 115, 770, -1, 
-  83, 807, -1, 351, -1, 115, 807, -1, 
-  83, 780, -1, 353, -1, 115, 780, -1, 
-  84, 807, -1, 355, -1, 116, 807, -1, 
-  84, 780, -1, 357, -1, 116, 780, -1, 
-  359, -1, 85, 771, -1, 361, -1, 117, 
-  771, -1, 85, 772, -1, 363, -1, 117, 
-  772, -1, 85, 774, -1, 365, -1, 117, 
-  774, -1, 85, 778, -1, 367, -1, 117, 
-  778, -1, 85, 779, -1, 369, -1, 117, 
-  779, -1, 85, 808, -1, 371, -1, 117, 
-  808, -1, 87, 770, -1, 373, -1, 119, 
-  770, -1, 89, 770, -1, 375, -1, 121, 
-  770, -1, 89, 776, -1, 255, -1, 90, 
-  769, -1, 378, -1, 122, 769, -1, 90, 
-  775, -1, 380, -1, 122, 775, -1, 90, 
-  780, -1, 382, -1, 122, 780, -1, 595, 
-  -1, 387, -1, 389, -1, 596, -1, 392, 
-  -1, 598, -1, 599, -1, 396, -1, 477, 
-  -1, 601, -1, 603, -1, 402, -1, 608, 
-  -1, 611, -1, 617, -1, 616, -1, 409, 
-  -1, 623, -1, 626, -1, 629, -1, 79, 
-  795, -1, 417, -1, 111, 795, -1, 419, 
-  -1, 421, -1, 640, -1, 424, -1, 643, 
-  -1, 429, -1, 648, -1, 85, 795, -1, 
-  432, -1, 117, 795, -1, 650, -1, 651, 
-  -1, 436, -1, 438, -1, 658, -1, 441, 
-  -1, 445, -1, 68, 381, -1, 454, -1, 
-  68, 382, -1, 100, 382, -1, 76, 74, 
-  -1, 457, -1, 76, 106, -1, 108, 106, 
-  -1, 78, 74, -1, 460, -1, 78, 106, 
-  -1, 110, 106, -1, 65, 780, -1, 462, 
-  -1, 97, 780, -1, 73, 780, -1, 464, 
-  -1, 105, 780, -1, 79, 780, -1, 466, 
-  -1, 111, 780, -1, 85, 780, -1, 468, 
-  -1, 117, 780, -1, 220, 772, -1, 470, 
-  -1, 252, 772, -1, 220, 769, -1, 472, 
-  -1, 252, 769, -1, 220, 780, -1, 474, 
-  -1, 252, 780, -1, 220, 768, -1, 476, 
-  -1, 252, 768, -1, 196, 772, -1, 479, 
-  -1, 228, 772, -1, 550, 772, -1, 481, 
-  -1, 551, 772, -1, 198, 772, -1, 483, 
-  -1, 230, 772, -1, 485, -1, 71, 780, 
-  -1, 487, -1, 103, 780, -1, 75, 780, 
-  -1, 489, -1, 107, 780, -1, 79, 808, 
-  -1, 491, -1, 111, 808, -1, 490, 772, 
-  -1, 493, -1, 491, 772, -1, 439, 780, 
-  -1, 495, -1, 658, 780, -1, 106, 780, 
-  -1, 68, 90, -1, 499, -1, 68, 122, 
-  -1, 100, 122, -1, 71, 769, -1, 501, 
-  -1, 103, 769, -1, 405, -1, 447, -1, 
-  78, 768, -1, 505, -1, 110, 768, -1, 
-  197, 769, -1, 507, -1, 229, 769, -1, 
-  198, 769, -1, 509, -1, 230, 769, -1, 
-  216, 769, -1, 511, -1, 248, 769, -1, 
-  65, 783, -1, 513, -1, 97, 783, -1, 
-  65, 785, -1, 515, -1, 97, 785, -1, 
-  69, 783, -1, 517, -1, 101, 783, -1, 
-  69, 785, -1, 519, -1, 101, 785, -1, 
-  73, 783, -1, 521, -1, 105, 783, -1, 
-  73, 785, -1, 523, -1, 105, 785, -1, 
-  79, 783, -1, 525, -1, 111, 783, -1, 
-  79, 785, -1, 527, -1, 111, 785, -1, 
-  82, 783, -1, 529, -1, 114, 783, -1, 
-  82, 785, -1, 531, -1, 114, 785, -1, 
-  85, 783, -1, 533, -1, 117, 783, -1, 
-  85, 785, -1, 535, -1, 117, 785, -1, 
-  83, 806, -1, 537, -1, 115, 806, -1, 
-  84, 806, -1, 539, -1, 116, 806, -1, 
-  541, -1, 72, 780, -1, 543, -1, 104, 
-  780, -1, 414, -1, 547, -1, 549, -1, 
-  65, 775, -1, 551, -1, 97, 775, -1, 
-  69, 807, -1, 553, -1, 101, 807, -1, 
-  214, 772, -1, 555, -1, 246, 772, -1, 
-  213, 772, -1, 557, -1, 245, 772, -1, 
-  79, 775, -1, 559, -1, 111, 775, -1, 
-  558, 772, -1, 561, -1, 559, 772, -1, 
-  89, 772, -1, 563, -1, 121, 772, -1, 
-  11365, -1, 572, -1, 410, -1, 11366, -1, 
-  578, -1, 384, -1, 649, -1, 652, -1, 
-  583, -1, 585, -1, 587, -1, 589, -1, 
-  591, -1, 614, -1, 633, -1, 635, -1, 
-  641, -1, 32, 774, -1, 32, 775, -1, 
-  32, 778, -1, 32, 808, -1, 32, 771, 
-  -1, 32, 779, -1, 661, -1, 768, -1, 
-  769, -1, 787, -1, 776, 769, -1, 953, 
-  -1, 697, -1, 32, 837, -1, 59, -1, 
-  168, 769, -1, 913, 769, -1, 940, -1, 
-  183, -1, 917, 769, -1, 941, -1, 919, 
-  769, -1, 942, -1, 921, 769, -1, 943, 
-  -1, 927, 769, -1, 972, -1, 933, 769, 
-  -1, 973, -1, 937, 769, -1, 974, -1, 
-  970, 769, -1, 953, 776, 769, -1, 945, 
-  -1, 946, -1, 947, -1, 948, -1, 949, 
-  -1, 950, -1, 951, -1, 952, -1, 954, 
-  -1, 955, -1, 957, -1, 958, -1, 959, 
-  -1, 960, -1, 961, -1, 963, -1, 964, 
-  -1, 965, -1, 966, -1, 967, -1, 968, 
-  -1, 969, -1, 921, 776, -1, 970, -1, 
-  933, 776, -1, 971, -1, 945, 769, -1, 
-  949, 769, -1, 951, 769, -1, 953, 769, 
-  -1, 971, 769, -1, 965, 776, 769, -1, 
-  953, 776, -1, 965, 776, -1, 959, 769, 
-  -1, 965, 769, -1, 969, 769, -1, 933, 
-  -1, 978, 769, -1, 978, 776, -1, 985, 
-  -1, 987, -1, 989, -1, 991, -1, 993, 
-  -1, 995, -1, 997, -1, 999, -1, 1001, 
-  -1, 1003, -1, 1005, -1, 1007, -1, 962, 
-  -1, 920, -1, 1016, -1, 931, -1, 1010, 
-  -1, 1019, -1, 891, -1, 892, -1, 893, 
-  -1, 1045, 768, -1, 1104, -1, 1045, 776, 
-  -1, 1105, -1, 1106, -1, 1043, 769, -1, 
-  1107, -1, 1108, -1, 1109, -1, 1110, -1, 
-  1030, 776, -1, 1111, -1, 1112, -1, 1113, 
-  -1, 1114, -1, 1115, -1, 1050, 769, -1, 
-  1116, -1, 1048, 768, -1, 1117, -1, 1059, 
-  774, -1, 1118, -1, 1119, -1, 1072, -1, 
-  1073, -1, 1074, -1, 1075, -1, 1076, -1, 
-  1077, -1, 1078, -1, 1079, -1, 1080, -1, 
-  1048, 774, -1, 1081, -1, 1082, -1, 1083, 
-  -1, 1084, -1, 1085, -1, 1086, -1, 1087, 
-  -1, 1088, -1, 1089, -1, 1090, -1, 1091, 
-  -1, 1092, -1, 1093, -1, 1094, -1, 1095, 
-  -1, 1096, -1, 1097, -1, 1098, -1, 1099, 
-  -1, 1100, -1, 1101, -1, 1102, -1, 1103, 
-  -1, 1080, 774, -1, 1077, 768, -1, 1077, 
-  776, -1, 1075, 769, -1, 1110, 776, -1, 
-  1082, 769, -1, 1080, 768, -1, 1091, 774, 
-  -1, 1121, -1, 1123, -1, 1125, -1, 1127, 
-  -1, 1129, -1, 1131, -1, 1133, -1, 1135, 
-  -1, 1137, -1, 1139, -1, 1141, -1, 1140, 
-  783, -1, 1143, -1, 1141, 783, -1, 1145, 
-  -1, 1147, -1, 1149, -1, 1151, -1, 1153, 
-  -1, 1163, -1, 1165, -1, 1167, -1, 1169, 
-  -1, 1171, -1, 1173, -1, 1175, -1, 1177, 
-  -1, 1179, -1, 1181, -1, 1183, -1, 1185, 
-  -1, 1187, -1, 1189, -1, 1191, -1, 1193, 
-  -1, 1195, -1, 1197, -1, 1199, -1, 1201, 
-  -1, 1203, -1, 1205, -1, 1207, -1, 1209, 
-  -1, 1211, -1, 1213, -1, 1215, -1, 1231, 
-  -1, 1046, 774, -1, 1218, -1, 1078, 774, 
-  -1, 1220, -1, 1222, -1, 1224, -1, 1226, 
-  -1, 1228, -1, 1230, -1, 1040, 774, -1, 
-  1233, -1, 1072, 774, -1, 1040, 776, -1, 
-  1235, -1, 1072, 776, -1, 1237, -1, 1045, 
-  774, -1, 1239, -1, 1077, 774, -1, 1241, 
-  -1, 1240, 776, -1, 1243, -1, 1241, 776, 
-  -1, 1046, 776, -1, 1245, -1, 1078, 776, 
-  -1, 1047, 776, -1, 1247, -1, 1079, 776, 
-  -1, 1249, -1, 1048, 772, -1, 1251, -1, 
-  1080, 772, -1, 1048, 776, -1, 1253, -1, 
-  1080, 776, -1, 1054, 776, -1, 1255, -1, 
-  1086, 776, -1, 1257, -1, 1256, 776, -1, 
-  1259, -1, 1257, 776, -1, 1069, 776, -1, 
-  1261, -1, 1101, 776, -1, 1059, 772, -1, 
-  1263, -1, 1091, 772, -1, 1059, 776, -1, 
-  1265, -1, 1091, 776, -1, 1059, 779, -1, 
-  1267, -1, 1091, 779, -1, 1063, 776, -1, 
-  1269, -1, 1095, 776, -1, 1271, -1, 1067, 
-  776, -1, 1273, -1, 1099, 776, -1, 1275, 
-  -1, 1277, -1, 1279, -1, 1281, -1, 1283, 
-  -1, 1285, -1, 1287, -1, 1289, -1, 1291, 
-  -1, 1293, -1, 1295, -1, 1297, -1, 1299, 
-  -1, 1377, -1, 1378, -1, 1379, -1, 1380, 
-  -1, 1381, -1, 1382, -1, 1383, -1, 1384, 
-  -1, 1385, -1, 1386, -1, 1387, -1, 1388, 
-  -1, 1389, -1, 1390, -1, 1391, -1, 1392, 
-  -1, 1393, -1, 1394, -1, 1395, -1, 1396, 
-  -1, 1397, -1, 1398, -1, 1399, -1, 1400, 
-  -1, 1401, -1, 1402, -1, 1403, -1, 1404, 
-  -1, 1405, -1, 1406, -1, 1407, -1, 1408, 
-  -1, 1409, -1, 1410, -1, 1411, -1, 1412, 
-  -1, 1413, -1, 1414, -1, 1381, 1410, -1, 
-  1575, 1619, -1, 1575, 1620, -1, 1608, 1620, 
-  -1, 1575, 1621, -1, 1610, 1620, -1, 1575, 
-  1652, -1, 1608, 1652, -1, 1735, 1652, -1, 
-  1610, 1652, -1, 1749, 1620, -1, 1729, 1620, 
-  -1, 1746, 1620, -1, 2344, 2364, -1, 2352, 
-  2364, -1, 2355, 2364, -1, 2325, 2364, -1, 
-  2326, 2364, -1, 2327, 2364, -1, 2332, 2364, 
-  -1, 2337, 2364, -1, 2338, 2364, -1, 2347, 
-  2364, -1, 2351, 2364, -1, 2503, 2494, -1, 
-  2503, 2519, -1, 2465, 2492, -1, 2466, 2492, 
-  -1, 2479, 2492, -1, 2610, 2620, -1, 2616, 
-  2620, -1, 2582, 2620, -1, 2583, 2620, -1, 
-  2588, 2620, -1, 2603, 2620, -1, 2887, 2902, 
-  -1, 2887, 2878, -1, 2887, 2903, -1, 2849, 
-  2876, -1, 2850, 2876, -1, 2962, 3031, -1, 
-  3014, 3006, -1, 3015, 3006, -1, 3014, 3031, 
-  -1, 3142, 3158, -1, 3263, 3285, -1, 3270, 
-  3285, -1, 3270, 3286, -1, 3270, 3266, -1, 
-  3274, 3285, -1, 3398, 3390, -1, 3399, 3390, 
-  -1, 3398, 3415, -1, 3545, 3530, -1, 3545, 
-  3535, -1, 3548, 3530, -1, 3545, 3551, -1, 
-  3661, 3634, -1, 3789, 3762, -1, 3755, 3737, 
-  -1, 3755, 3745, -1, 3851, -1, 3906, 4023, 
-  -1, 3916, 4023, -1, 3921, 4023, -1, 3926, 
-  4023, -1, 3931, 4023, -1, 3904, 4021, -1, 
-  3953, 3954, -1, 3953, 3956, -1, 4018, 3968, 
-  -1, 4018, 3969, -1, 4019, 3968, -1, 4019, 
-  3969, -1, 3953, 3968, -1, 3986, 4023, -1, 
-  3996, 4023, -1, 4001, 4023, -1, 4006, 4023, 
-  -1, 4011, 4023, -1, 3984, 4021, -1, 4133, 
-  4142, -1, 11520, -1, 11521, -1, 11522, -1, 
-  11523, -1, 11524, -1, 11525, -1, 11526, -1, 
-  11527, -1, 11528, -1, 11529, -1, 11530, -1, 
-  11531, -1, 11532, -1, 11533, -1, 11534, -1, 
-  11535, -1, 11536, -1, 11537, -1, 11538, -1, 
-  11539, -1, 11540, -1, 11541, -1, 11542, -1, 
-  11543, -1, 11544, -1, 11545, -1, 11546, -1, 
-  11547, -1, 11548, -1, 11549, -1, 11550, -1, 
-  11551, -1, 11552, -1, 11553, -1, 11554, -1, 
-  11555, -1, 11556, -1, 11557, -1, 4316, -1, 
-  6917, 6965, -1, 6919, 6965, -1, 6921, 6965, 
-  -1, 6923, 6965, -1, 6925, 6965, -1, 6929, 
-  6965, -1, 6970, 6965, -1, 6972, 6965, -1, 
-  6974, 6965, -1, 6975, 6965, -1, 6978, 6965, 
-  -1, 65, -1, 198, -1, 66, -1, 68, 
-  -1, 69, -1, 398, -1, 71, -1, 72, 
-  -1, 73, -1, 74, -1, 75, -1, 76, 
-  -1, 77, -1, 78, -1, 79, -1, 546, 
-  -1, 80, -1, 82, -1, 84, -1, 85, 
-  -1, 87, -1, 592, -1, 593, -1, 7426, 
-  -1, 604, -1, 7446, -1, 7447, -1, 7453, 
-  -1, 7461, -1, 594, -1, 597, -1, 607, 
-  -1, 609, -1, 613, -1, 618, -1, 7547, 
-  -1, 669, -1, 621, -1, 7557, -1, 671, 
-  -1, 625, -1, 624, -1, 627, -1, 628, 
-  -1, 632, -1, 642, -1, 427, -1, 7452, 
-  -1, 656, -1, 657, -1, 65, 805, -1, 
-  7681, -1, 97, 805, -1, 66, 775, -1, 
-  7683, -1, 98, 775, -1, 66, 803, -1, 
-  7685, -1, 98, 803, -1, 66, 817, -1, 
-  7687, -1, 98, 817, -1, 199, 769, -1, 
-  7689, -1, 231, 769, -1, 68, 775, -1, 
-  7691, -1, 100, 775, -1, 68, 803, -1, 
-  7693, -1, 100, 803, -1, 68, 817, -1, 
-  7695, -1, 100, 817, -1, 68, 807, -1, 
-  7697, -1, 100, 807, -1, 68, 813, -1, 
-  7699, -1, 100, 813, -1, 274, 768, -1, 
-  7701, -1, 275, 768, -1, 274, 769, -1, 
-  7703, -1, 275, 769, -1, 69, 813, -1, 
-  7705, -1, 101, 813, -1, 69, 816, -1, 
-  7707, -1, 101, 816, -1, 552, 774, -1, 
-  7709, -1, 553, 774, -1, 70, 775, -1, 
-  7711, -1, 102, 775, -1, 71, 772, -1, 
-  7713, -1, 103, 772, -1, 72, 775, -1, 
-  7715, -1, 104, 775, -1, 72, 803, -1, 
-  7717, -1, 104, 803, -1, 72, 776, -1, 
-  7719, -1, 104, 776, -1, 72, 807, -1, 
-  7721, -1, 104, 807, -1, 72, 814, -1, 
-  7723, -1, 104, 814, -1, 73, 816, -1, 
-  7725, -1, 105, 816, -1, 207, 769, -1, 
-  7727, -1, 239, 769, -1, 75, 769, -1, 
-  7729, -1, 107, 769, -1, 75, 803, -1, 
-  7731, -1, 107, 803, -1, 75, 817, -1, 
-  7733, -1, 107, 817, -1, 76, 803, -1, 
-  7735, -1, 108, 803, -1, 7734, 772, -1, 
-  7737, -1, 7735, 772, -1, 76, 817, -1, 
-  7739, -1, 108, 817, -1, 76, 813, -1, 
-  7741, -1, 108, 813, -1, 77, 769, -1, 
-  7743, -1, 109, 769, -1, 77, 775, -1, 
-  7745, -1, 109, 775, -1, 77, 803, -1, 
-  7747, -1, 109, 803, -1, 78, 775, -1, 
-  7749, -1, 110, 775, -1, 78, 803, -1, 
-  7751, -1, 110, 803, -1, 78, 817, -1, 
-  7753, -1, 110, 817, -1, 78, 813, -1, 
-  7755, -1, 110, 813, -1, 213, 769, -1, 
-  7757, -1, 245, 769, -1, 213, 776, -1, 
-  7759, -1, 245, 776, -1, 332, 768, -1, 
-  7761, -1, 333, 768, -1, 332, 769, -1, 
-  7763, -1, 333, 769, -1, 80, 769, -1, 
-  7765, -1, 112, 769, -1, 80, 775, -1, 
-  7767, -1, 112, 775, -1, 82, 775, -1, 
-  7769, -1, 114, 775, -1, 82, 803, -1, 
-  7771, -1, 114, 803, -1, 7770, 772, -1, 
-  7773, -1, 7771, 772, -1, 82, 817, -1, 
-  7775, -1, 114, 817, -1, 83, 775, -1, 
-  7777, -1, 115, 775, -1, 83, 803, -1, 
-  7779, -1, 115, 803, -1, 346, 775, -1, 
-  7781, -1, 347, 775, -1, 352, 775, -1, 
-  7783, -1, 353, 775, -1, 7778, 775, -1, 
-  7785, -1, 7779, 775, -1, 84, 775, -1, 
-  7787, -1, 116, 775, -1, 84, 803, -1, 
-  7789, -1, 116, 803, -1, 84, 817, -1, 
-  7791, -1, 116, 817, -1, 84, 813, -1, 
-  7793, -1, 116, 813, -1, 85, 804, -1, 
-  7795, -1, 117, 804, -1, 85, 816, -1, 
-  7797, -1, 117, 816, -1, 85, 813, -1, 
-  7799, -1, 117, 813, -1, 360, 769, -1, 
-  7801, -1, 361, 769, -1, 362, 776, -1, 
-  7803, -1, 363, 776, -1, 86, 771, -1, 
-  7805, -1, 118, 771, -1, 86, 803, -1, 
-  7807, -1, 118, 803, -1, 87, 768, -1, 
-  7809, -1, 119, 768, -1, 87, 769, -1, 
-  7811, -1, 119, 769, -1, 87, 776, -1, 
-  7813, -1, 119, 776, -1, 87, 775, -1, 
-  7815, -1, 119, 775, -1, 87, 803, -1, 
-  7817, -1, 119, 803, -1, 88, 775, -1, 
-  7819, -1, 120, 775, -1, 88, 776, -1, 
-  7821, -1, 120, 776, -1, 89, 775, -1, 
-  7823, -1, 121, 775, -1, 90, 770, -1, 
-  7825, -1, 122, 770, -1, 90, 803, -1, 
-  7827, -1, 122, 803, -1, 90, 817, -1, 
-  7829, -1, 122, 817, -1, 104, 817, -1, 
-  116, 776, -1, 119, 778, -1, 121, 778, 
-  -1, 97, 702, -1, 383, 775, -1, 65, 
-  803, -1, 7841, -1, 97, 803, -1, 65, 
-  777, -1, 7843, -1, 97, 777, -1, 194, 
-  769, -1, 7845, -1, 226, 769, -1, 194, 
-  768, -1, 7847, -1, 226, 768, -1, 194, 
-  777, -1, 7849, -1, 226, 777, -1, 194, 
-  771, -1, 7851, -1, 226, 771, -1, 7840, 
-  770, -1, 7853, -1, 7841, 770, -1, 258, 
-  769, -1, 7855, -1, 259, 769, -1, 258, 
-  768, -1, 7857, -1, 259, 768, -1, 258, 
-  777, -1, 7859, -1, 259, 777, -1, 258, 
-  771, -1, 7861, -1, 259, 771, -1, 7840, 
-  774, -1, 7863, -1, 7841, 774, -1, 69, 
-  803, -1, 7865, -1, 101, 803, -1, 69, 
-  777, -1, 7867, -1, 101, 777, -1, 69, 
-  771, -1, 7869, -1, 101, 771, -1, 202, 
-  769, -1, 7871, -1, 234, 769, -1, 202, 
-  768, -1, 7873, -1, 234, 768, -1, 202, 
-  777, -1, 7875, -1, 234, 777, -1, 202, 
-  771, -1, 7877, -1, 234, 771, -1, 7864, 
-  770, -1, 7879, -1, 7865, 770, -1, 73, 
-  777, -1, 7881, -1, 105, 777, -1, 73, 
-  803, -1, 7883, -1, 105, 803, -1, 79, 
-  803, -1, 7885, -1, 111, 803, -1, 79, 
-  777, -1, 7887, -1, 111, 777, -1, 212, 
-  769, -1, 7889, -1, 244, 769, -1, 212, 
-  768, -1, 7891, -1, 244, 768, -1, 212, 
-  777, -1, 7893, -1, 244, 777, -1, 212, 
-  771, -1, 7895, -1, 244, 771, -1, 7884, 
-  770, -1, 7897, -1, 7885, 770, -1, 416, 
-  769, -1, 7899, -1, 417, 769, -1, 416, 
-  768, -1, 7901, -1, 417, 768, -1, 416, 
-  777, -1, 7903, -1, 417, 777, -1, 416, 
-  771, -1, 7905, -1, 417, 771, -1, 416, 
-  803, -1, 7907, -1, 417, 803, -1, 85, 
-  803, -1, 7909, -1, 117, 803, -1, 85, 
-  777, -1, 7911, -1, 117, 777, -1, 431, 
-  769, -1, 7913, -1, 432, 769, -1, 431, 
-  768, -1, 7915, -1, 432, 768, -1, 431, 
-  777, -1, 7917, -1, 432, 777, -1, 431, 
-  771, -1, 7919, -1, 432, 771, -1, 431, 
-  803, -1, 7921, -1, 432, 803, -1, 89, 
-  768, -1, 7923, -1, 121, 768, -1, 89, 
-  803, -1, 7925, -1, 121, 803, -1, 89, 
-  777, -1, 7927, -1, 121, 777, -1, 89, 
-  771, -1, 7929, -1, 121, 771, -1, 945, 
-  787, -1, 945, 788, -1, 7936, 768, -1, 
-  7937, 768, -1, 7936, 769, -1, 7937, 769, 
-  -1, 7936, 834, -1, 7937, 834, -1, 913, 
-  787, -1, 7936, -1, 913, 788, -1, 7937, 
-  -1, 7944, 768, -1, 7938, -1, 7945, 768, 
-  -1, 7939, -1, 7944, 769, -1, 7940, -1, 
-  7945, 769, -1, 7941, -1, 7944, 834, -1, 
-  7942, -1, 7945, 834, -1, 7943, -1, 949, 
-  787, -1, 949, 788, -1, 7952, 768, -1, 
-  7953, 768, -1, 7952, 769, -1, 7953, 769, 
-  -1, 917, 787, -1, 7952, -1, 917, 788, 
-  -1, 7953, -1, 7960, 768, -1, 7954, -1, 
-  7961, 768, -1, 7955, -1, 7960, 769, -1, 
-  7956, -1, 7961, 769, -1, 7957, -1, 951, 
-  787, -1, 951, 788, -1, 7968, 768, -1, 
-  7969, 768, -1, 7968, 769, -1, 7969, 769, 
-  -1, 7968, 834, -1, 7969, 834, -1, 919, 
-  787, -1, 7968, -1, 919, 788, -1, 7969, 
-  -1, 7976, 768, -1, 7970, -1, 7977, 768, 
-  -1, 7971, -1, 7976, 769, -1, 7972, -1, 
-  7977, 769, -1, 7973, -1, 7976, 834, -1, 
-  7974, -1, 7977, 834, -1, 7975, -1, 953, 
-  787, -1, 953, 788, -1, 7984, 768, -1, 
-  7985, 768, -1, 7984, 769, -1, 7985, 769, 
-  -1, 7984, 834, -1, 7985, 834, -1, 921, 
-  787, -1, 7984, -1, 921, 788, -1, 7985, 
-  -1, 7992, 768, -1, 7986, -1, 7993, 768, 
-  -1, 7987, -1, 7992, 769, -1, 7988, -1, 
-  7993, 769, -1, 7989, -1, 7992, 834, -1, 
-  7990, -1, 7993, 834, -1, 7991, -1, 959, 
-  787, -1, 959, 788, -1, 8000, 768, -1, 
-  8001, 768, -1, 8000, 769, -1, 8001, 769, 
-  -1, 927, 787, -1, 8000, -1, 927, 788, 
-  -1, 8001, -1, 8008, 768, -1, 8002, -1, 
-  8009, 768, -1, 8003, -1, 8008, 769, -1, 
-  8004, -1, 8009, 769, -1, 8005, -1, 965, 
-  787, -1, 965, 788, -1, 8016, 768, -1, 
-  965, 787, 768, -1, 8017, 768, -1, 8016, 
-  769, -1, 965, 787, 769, -1, 8017, 769, 
-  -1, 8016, 834, -1, 965, 787, 834, -1, 
-  8017, 834, -1, 933, 788, -1, 8017, -1, 
-  8025, 768, -1, 8019, -1, 8025, 769, -1, 
-  8021, -1, 8025, 834, -1, 8023, -1, 969, 
-  787, -1, 969, 788, -1, 8032, 768, -1, 
-  8033, 768, -1, 8032, 769, -1, 8033, 769, 
-  -1, 8032, 834, -1, 8033, 834, -1, 937, 
-  787, -1, 8032, -1, 937, 788, -1, 8033, 
-  -1, 8040, 768, -1, 8034, -1, 8041, 768, 
-  -1, 8035, -1, 8040, 769, -1, 8036, -1, 
-  8041, 769, -1, 8037, -1, 8040, 834, -1, 
-  8038, -1, 8041, 834, -1, 8039, -1, 945, 
-  768, -1, 949, 768, -1, 951, 768, -1, 
-  953, 768, -1, 959, 768, -1, 965, 768, 
-  -1, 969, 768, -1, 7936, 837, -1, 7936, 
-  953, -1, 7937, 837, -1, 7937, 953, -1, 
-  7938, 837, -1, 7938, 953, -1, 7939, 837, 
-  -1, 7939, 953, -1, 7940, 837, -1, 7940, 
-  953, -1, 7941, 837, -1, 7941, 953, -1, 
-  7942, 837, -1, 7942, 953, -1, 7943, 837, 
-  -1, 7943, 953, -1, 7944, 837, -1, 8064, 
-  -1, 7945, 837, -1, 8065, -1, 7946, 837, 
-  -1, 8066, -1, 7947, 837, -1, 8067, -1, 
-  7948, 837, -1, 8068, -1, 7949, 837, -1, 
-  8069, -1, 7950, 837, -1, 8070, -1, 7951, 
-  837, -1, 8071, -1, 7968, 837, -1, 7968, 
-  953, -1, 7969, 837, -1, 7969, 953, -1, 
-  7970, 837, -1, 7970, 953, -1, 7971, 837, 
-  -1, 7971, 953, -1, 7972, 837, -1, 7972, 
-  953, -1, 7973, 837, -1, 7973, 953, -1, 
-  7974, 837, -1, 7974, 953, -1, 7975, 837, 
-  -1, 7975, 953, -1, 7976, 837, -1, 8080, 
-  -1, 7977, 837, -1, 8081, -1, 7978, 837, 
-  -1, 8082, -1, 7979, 837, -1, 8083, -1, 
-  7980, 837, -1, 8084, -1, 7981, 837, -1, 
-  8085, -1, 7982, 837, -1, 8086, -1, 7983, 
-  837, -1, 8087, -1, 8032, 837, -1, 8032, 
-  953, -1, 8033, 837, -1, 8033, 953, -1, 
-  8034, 837, -1, 8034, 953, -1, 8035, 837, 
-  -1, 8035, 953, -1, 8036, 837, -1, 8036, 
-  953, -1, 8037, 837, -1, 8037, 953, -1, 
-  8038, 837, -1, 8038, 953, -1, 8039, 837, 
-  -1, 8039, 953, -1, 8040, 837, -1, 8096, 
-  -1, 8041, 837, -1, 8097, -1, 8042, 837, 
-  -1, 8098, -1, 8043, 837, -1, 8099, -1, 
-  8044, 837, -1, 8100, -1, 8045, 837, -1, 
-  8101, -1, 8046, 837, -1, 8102, -1, 8047, 
-  837, -1, 8103, -1, 945, 774, -1, 945, 
-  772, -1, 8048, 837, -1, 8048, 953, -1, 
-  945, 837, -1, 945, 953, -1, 940, 837, 
-  -1, 940, 953, -1, 945, 834, -1, 8118, 
-  837, -1, 945, 834, 953, -1, 913, 774, 
-  -1, 8112, -1, 913, 772, -1, 8113, -1, 
-  913, 768, -1, 8048, -1, 902, -1, 8049, 
-  -1, 913, 837, -1, 8115, -1, 32, 787, 
-  -1, 32, 834, -1, 168, 834, -1, 8052, 
-  837, -1, 8052, 953, -1, 951, 837, -1, 
-  951, 953, -1, 942, 837, -1, 942, 953, 
-  -1, 951, 834, -1, 8134, 837, -1, 951, 
-  834, 953, -1, 917, 768, -1, 8050, -1, 
-  904, -1, 8051, -1, 919, 768, -1, 8052, 
-  -1, 905, -1, 8053, -1, 919, 837, -1, 
-  8131, -1, 8127, 768, -1, 8127, 769, -1, 
-  8127, 834, -1, 953, 774, -1, 953, 772, 
-  -1, 970, 768, -1, 953, 776, 768, -1, 
-  912, -1, 953, 834, -1, 970, 834, -1, 
-  953, 776, 834, -1, 921, 774, -1, 8144, 
-  -1, 921, 772, -1, 8145, -1, 921, 768, 
-  -1, 8054, -1, 906, -1, 8055, -1, 8190, 
-  768, -1, 8190, 769, -1, 8190, 834, -1, 
-  965, 774, -1, 965, 772, -1, 971, 768, 
-  -1, 965, 776, 768, -1, 944, -1, 961, 
-  787, -1, 961, 788, -1, 965, 834, -1, 
-  971, 834, -1, 965, 776, 834, -1, 933, 
-  774, -1, 8160, -1, 933, 772, -1, 8161, 
-  -1, 933, 768, -1, 8058, -1, 910, -1, 
-  8059, -1, 929, 788, -1, 8165, -1, 168, 
-  768, -1, 901, -1, 96, -1, 8060, 837, 
-  -1, 8060, 953, -1, 969, 837, -1, 969, 
-  953, -1, 974, 837, -1, 974, 953, -1, 
-  969, 834, -1, 8182, 837, -1, 969, 834, 
-  953, -1, 927, 768, -1, 8056, -1, 908, 
-  -1, 8057, -1, 937, 768, -1, 8060, -1, 
-  911, -1, 8061, -1, 937, 837, -1, 8179, 
-  -1, 180, -1, 32, 788, -1, 8194, -1, 
-  8195, -1, 8208, -1, 32, 819, -1, 46, 
-  -1, 46, 46, -1, 46, 46, 46, -1, 
-  8242, 8242, -1, 8242, 8242, 8242, -1, 8245, 
-  8245, -1, 8245, 8245, 8245, -1, 33, 33, 
-  -1, 32, 773, -1, 63, 63, -1, 63, 
-  33, -1, 33, 63, -1, 8242, 8242, 8242, 
-  8242, -1, 48, -1, 52, -1, 53, -1, 
-  54, -1, 55, -1, 56, -1, 57, -1, 
-  43, -1, 8722, -1, 61, -1, 40, -1, 
-  41, -1, 82, 115, -1, 97, 47, 99, 
-  -1, 97, 47, 115, -1, 67, -1, 176, 
-  67, -1, 99, 47, 111, -1, 99, 47, 
-  117, -1, 400, -1, 176, 70, -1, 78, 
-  111, -1, 81, -1, 83, 77, -1, 84, 
-  69, 76, -1, 84, 77, -1, 90, -1, 
-  937, -1, 197, -1, 70, -1, 8526, -1, 
-  1488, -1, 1489, -1, 1490, -1, 1491, -1, 
-  70, 65, 88, -1, 915, -1, 928, -1, 
-  8721, -1, 49, 8260, 51, -1, 50, 8260, 
-  51, -1, 49, 8260, 53, -1, 50, 8260, 
-  53, -1, 51, 8260, 53, -1, 52, 8260, 
-  53, -1, 49, 8260, 54, -1, 53, 8260, 
-  54, -1, 49, 8260, 56, -1, 51, 8260, 
-  56, -1, 53, 8260, 56, -1, 55, 8260, 
-  56, -1, 49, 8260, -1, 8560, -1, 73, 
-  73, -1, 8561, -1, 73, 73, 73, -1, 
-  8562, -1, 73, 86, -1, 8563, -1, 86, 
-  -1, 8564, -1, 86, 73, -1, 8565, -1, 
-  86, 73, 73, -1, 8566, -1, 86, 73, 
-  73, 73, -1, 8567, -1, 73, 88, -1, 
-  8568, -1, 88, -1, 8569, -1, 88, 73, 
-  -1, 8570, -1, 88, 73, 73, -1, 8571, 
-  -1, 8572, -1, 8573, -1, 8574, -1, 8575, 
-  -1, 105, 105, -1, 105, 105, 105, -1, 
-  105, 118, -1, 118, 105, -1, 118, 105, 
-  105, -1, 118, 105, 105, 105, -1, 105, 
-  120, -1, 120, 105, -1, 120, 105, 105, 
-  -1, 8580, -1, 8592, 824, -1, 8594, 824, 
-  -1, 8596, 824, -1, 8656, 824, -1, 8660, 
-  824, -1, 8658, 824, -1, 8707, 824, -1, 
-  8712, 824, -1, 8715, 824, -1, 8739, 824, 
-  -1, 8741, 824, -1, 8747, 8747, -1, 8747, 
-  8747, 8747, -1, 8750, 8750, -1, 8750, 8750, 
-  8750, -1, 8764, 824, -1, 8771, 824, -1, 
-  8773, 824, -1, 8776, 824, -1, 61, 824, 
-  -1, 8801, 824, -1, 8781, 824, -1, 60, 
-  824, -1, 62, 824, -1, 8804, 824, -1, 
-  8805, 824, -1, 8818, 824, -1, 8819, 824, 
-  -1, 8822, 824, -1, 8823, 824, -1, 8826, 
-  824, -1, 8827, 824, -1, 8834, 824, -1, 
-  8835, 824, -1, 8838, 824, -1, 8839, 824, 
-  -1, 8866, 824, -1, 8872, 824, -1, 8873, 
-  824, -1, 8875, 824, -1, 8828, 824, -1, 
-  8829, 824, -1, 8849, 824, -1, 8850, 824, 
-  -1, 8882, 824, -1, 8883, 824, -1, 8884, 
-  824, -1, 8885, 824, -1, 12296, -1, 12297, 
-  -1, 49, 48, -1, 49, 49, -1, 49, 
-  50, -1, 49, 51, -1, 49, 52, -1, 
-  49, 53, -1, 49, 54, -1, 49, 55, 
-  -1, 49, 56, -1, 49, 57, -1, 50, 
-  48, -1, 40, 49, 41, -1, 40, 50, 
-  41, -1, 40, 51, 41, -1, 40, 52, 
-  41, -1, 40, 53, 41, -1, 40, 54, 
-  41, -1, 40, 55, 41, -1, 40, 56, 
-  41, -1, 40, 57, 41, -1, 40, 49, 
-  48, 41, -1, 40, 49, 49, 41, -1, 
-  40, 49, 50, 41, -1, 40, 49, 51, 
-  41, -1, 40, 49, 52, 41, -1, 40, 
-  49, 53, 41, -1, 40, 49, 54, 41, 
-  -1, 40, 49, 55, 41, -1, 40, 49, 
-  56, 41, -1, 40, 49, 57, 41, -1, 
-  40, 50, 48, 41, -1, 49, 46, -1, 
-  50, 46, -1, 51, 46, -1, 52, 46, 
-  -1, 53, 46, -1, 54, 46, -1, 55, 
-  46, -1, 56, 46, -1, 57, 46, -1, 
-  49, 48, 46, -1, 49, 49, 46, -1, 
-  49, 50, 46, -1, 49, 51, 46, -1, 
-  49, 52, 46, -1, 49, 53, 46, -1, 
-  49, 54, 46, -1, 49, 55, 46, -1, 
-  49, 56, 46, -1, 49, 57, 46, -1, 
-  50, 48, 46, -1, 40, 97, 41, -1, 
-  40, 98, 41, -1, 40, 99, 41, -1, 
-  40, 100, 41, -1, 40, 101, 41, -1, 
-  40, 102, 41, -1, 40, 103, 41, -1, 
-  40, 104, 41, -1, 40, 105, 41, -1, 
-  40, 106, 41, -1, 40, 107, 41, -1, 
-  40, 108, 41, -1, 40, 109, 41, -1, 
-  40, 110, 41, -1, 40, 111, 41, -1, 
-  40, 112, 41, -1, 40, 113, 41, -1, 
-  40, 114, 41, -1, 40, 115, 41, -1, 
-  40, 116, 41, -1, 40, 117, 41, -1, 
-  40, 118, 41, -1, 40, 119, 41, -1, 
-  40, 120, 41, -1, 40, 121, 41, -1, 
-  40, 122, 41, -1, 9424, -1, 9425, -1, 
-  9426, -1, 9427, -1, 9428, -1, 9429, -1, 
-  9430, -1, 9431, -1, 9432, -1, 9433, -1, 
-  9434, -1, 9435, -1, 9436, -1, 9437, -1, 
-  9438, -1, 9439, -1, 9440, -1, 9441, -1, 
-  83, -1, 9442, -1, 9443, -1, 9444, -1, 
-  9445, -1, 9446, -1, 9447, -1, 89, -1, 
-  9448, -1, 9449, -1, 8747, 8747, 8747, 8747, 
-  -1, 58, 58, 61, -1, 61, 61, -1, 
-  61, 61, 61, -1, 10973, 824, -1, 11312, 
-  -1, 11313, -1, 11314, -1, 11315, -1, 11316, 
-  -1, 11317, -1, 11318, -1, 11319, -1, 11320, 
-  -1, 11321, -1, 11322, -1, 11323, -1, 11324, 
-  -1, 11325, -1, 11326, -1, 11327, -1, 11328, 
-  -1, 11329, -1, 11330, -1, 11331, -1, 11332, 
-  -1, 11333, -1, 11334, -1, 11335, -1, 11336, 
-  -1, 11337, -1, 11338, -1, 11339, -1, 11340, 
-  -1, 11341, -1, 11342, -1, 11343, -1, 11344, 
-  -1, 11345, -1, 11346, -1, 11347, -1, 11348, 
-  -1, 11349, -1, 11350, -1, 11351, -1, 11352, 
-  -1, 11353, -1, 11354, -1, 11355, -1, 11356, 
-  -1, 11357, -1, 11358, -1, 11361, -1, 619, 
-  -1, 7549, -1, 637, -1, 11368, -1, 11370, 
-  -1, 11372, -1, 11382, -1, 11393, -1, 11395, 
-  -1, 11397, -1, 11399, -1, 11401, -1, 11403, 
-  -1, 11405, -1, 11407, -1, 11409, -1, 11411, 
-  -1, 11413, -1, 11415, -1, 11417, -1, 11419, 
-  -1, 11421, -1, 11423, -1, 11425, -1, 11427, 
-  -1, 11429, -1, 11431, -1, 11433, -1, 11435, 
-  -1, 11437, -1, 11439, -1, 11441, -1, 11443, 
-  -1, 11445, -1, 11447, -1, 11449, -1, 11451, 
-  -1, 11453, -1, 11455, -1, 11457, -1, 11459, 
-  -1, 11461, -1, 11463, -1, 11465, -1, 11467, 
-  -1, 11469, -1, 11471, -1, 11473, -1, 11475, 
-  -1, 11477, -1, 11479, -1, 11481, -1, 11483, 
-  -1, 11485, -1, 11487, -1, 11489, -1, 11491, 
-  -1, 11617, -1, 27597, -1, 40863, -1, 19968, 
-  -1, 20008, -1, 20022, -1, 20031, -1, 20057, 
-  -1, 20101, -1, 20108, -1, 20128, -1, 20154, 
-  -1, 20799, -1, 20837, -1, 20843, -1, 20866, 
-  -1, 20886, -1, 20907, -1, 20960, -1, 20981, 
-  -1, 20992, -1, 21147, -1, 21241, -1, 21269, 
-  -1, 21274, -1, 21304, -1, 21313, -1, 21340, 
-  -1, 21353, -1, 21378, -1, 21430, -1, 21448, 
-  -1, 21475, -1, 22231, -1, 22303, -1, 22763, 
-  -1, 22786, -1, 22794, -1, 22805, -1, 22823, 
-  -1, 22899, -1, 23376, -1, 23424, -1, 23544, 
-  -1, 23567, -1, 23586, -1, 23608, -1, 23662, 
-  -1, 23665, -1, 24027, -1, 24037, -1, 24049, 
-  -1, 24062, -1, 24178, -1, 24186, -1, 24191, 
-  -1, 24308, -1, 24318, -1, 24331, -1, 24339, 
-  -1, 24400, -1, 24417, -1, 24435, -1, 24515, 
-  -1, 25096, -1, 25142, -1, 25163, -1, 25903, 
-  -1, 25908, -1, 25991, -1, 26007, -1, 26020, 
-  -1, 26041, -1, 26080, -1, 26085, -1, 26352, 
-  -1, 26376, -1, 26408, -1, 27424, -1, 27490, 
-  -1, 27513, -1, 27571, -1, 27595, -1, 27604, 
-  -1, 27611, -1, 27663, -1, 27668, -1, 27700, 
-  -1, 28779, -1, 29226, -1, 29238, -1, 29243, 
-  -1, 29247, -1, 29255, -1, 29273, -1, 29275, 
-  -1, 29356, -1, 29572, -1, 29577, -1, 29916, 
-  -1, 29926, -1, 29976, -1, 29983, -1, 29992, 
-  -1, 30000, -1, 30091, -1, 30098, -1, 30326, 
-  -1, 30333, -1, 30382, -1, 30399, -1, 30446, 
-  -1, 30683, -1, 30690, -1, 30707, -1, 31034, 
-  -1, 31160, -1, 31166, -1, 31348, -1, 31435, 
-  -1, 31481, -1, 31859, -1, 31992, -1, 32566, 
-  -1, 32593, -1, 32650, -1, 32701, -1, 32769, 
-  -1, 32780, -1, 32786, -1, 32819, -1, 32895, 
-  -1, 32905, -1, 33251, -1, 33258, -1, 33267, 
-  -1, 33276, -1, 33292, -1, 33307, -1, 33311, 
-  -1, 33390, -1, 33394, -1, 33400, -1, 34381, 
-  -1, 34411, -1, 34880, -1, 34892, -1, 34915, 
-  -1, 35198, -1, 35211, -1, 35282, -1, 35328, 
-  -1, 35895, -1, 35910, -1, 35925, -1, 35960, 
-  -1, 35997, -1, 36196, -1, 36208, -1, 36275, 
-  -1, 36523, -1, 36554, -1, 36763, -1, 36784, 
-  -1, 36789, -1, 37009, -1, 37193, -1, 37318, 
-  -1, 37324, -1, 37329, -1, 38263, -1, 38272, 
-  -1, 38428, -1, 38582, -1, 38585, -1, 38632, 
-  -1, 38737, -1, 38750, -1, 38754, -1, 38761, 
-  -1, 38859, -1, 38893, -1, 38899, -1, 38913, 
-  -1, 39080, -1, 39131, -1, 39135, -1, 39318, 
-  -1, 39321, -1, 39340, -1, 39592, -1, 39640, 
-  -1, 39647, -1, 39717, -1, 39727, -1, 39730, 
-  -1, 39740, -1, 39770, -1, 40165, -1, 40565, 
-  -1, 40575, -1, 40613, -1, 40635, -1, 40643, 
-  -1, 40653, -1, 40657, -1, 40697, -1, 40701, 
-  -1, 40718, -1, 40723, -1, 40736, -1, 40763, 
-  -1, 40778, -1, 40786, -1, 40845, -1, 40860, 
-  -1, 40864, -1, 12306, -1, 21316, -1, 21317, 
-  -1, 12363, 12441, -1, 12365, 12441, -1, 12367, 
-  12441, -1, 12369, 12441, -1, 12371, 12441, -1, 
-  12373, 12441, -1, 12375, 12441, -1, 12377, 12441, 
-  -1, 12379, 12441, -1, 12381, 12441, -1, 12383, 
-  12441, -1, 12385, 12441, -1, 12388, 12441, -1, 
-  12390, 12441, -1, 12392, 12441, -1, 12399, 12441, 
-  -1, 12399, 12442, -1, 12402, 12441, -1, 12402, 
-  12442, -1, 12405, 12441, -1, 12405, 12442, -1, 
-  12408, 12441, -1, 12408, 12442, -1, 12411, 12441, 
-  -1, 12411, 12442, -1, 12358, 12441, -1, 32, 
-  12441, -1, 32, 12442, -1, 12445, 12441, -1, 
-  12424, 12426, -1, 12459, 12441, -1, 12461, 12441, 
-  -1, 12463, 12441, -1, 12465, 12441, -1, 12467, 
-  12441, -1, 12469, 12441, -1, 12471, 12441, -1, 
-  12473, 12441, -1, 12475, 12441, -1, 12477, 12441, 
-  -1, 12479, 12441, -1, 12481, 12441, -1, 12484, 
-  12441, -1, 12486, 12441, -1, 12488, 12441, -1, 
-  12495, 12441, -1, 12495, 12442, -1, 12498, 12441, 
-  -1, 12498, 12442, -1, 12501, 12441, -1, 12501, 
-  12442, -1, 12504, 12441, -1, 12504, 12442, -1, 
-  12507, 12441, -1, 12507, 12442, -1, 12454, 12441, 
-  -1, 12527, 12441, -1, 12528, 12441, -1, 12529, 
-  12441, -1, 12530, 12441, -1, 12541, 12441, -1, 
-  12467, 12488, -1, 4352, -1, 4353, -1, 4522, 
-  -1, 4354, -1, 4524, -1, 4525, -1, 4355, 
-  -1, 4356, -1, 4357, -1, 4528, -1, 4529, 
-  -1, 4530, -1, 4531, -1, 4532, -1, 4533, 
-  -1, 4378, -1, 4358, -1, 4359, -1, 4360, 
-  -1, 4385, -1, 4361, -1, 4362, -1, 4363, 
-  -1, 4364, -1, 4365, -1, 4366, -1, 4367, 
-  -1, 4368, -1, 4369, -1, 4370, -1, 4449, 
-  -1, 4450, -1, 4451, -1, 4452, -1, 4453, 
-  -1, 4454, -1, 4455, -1, 4456, -1, 4457, 
-  -1, 4458, -1, 4459, -1, 4460, -1, 4461, 
-  -1, 4462, -1, 4463, -1, 4464, -1, 4465, 
-  -1, 4466, -1, 4467, -1, 4468, -1, 4469, 
-  -1, 4448, -1, 4372, -1, 4373, -1, 4551, 
-  -1, 4552, -1, 4556, -1, 4558, -1, 4563, 
-  -1, 4567, -1, 4569, -1, 4380, -1, 4573, 
-  -1, 4575, -1, 4381, -1, 4382, -1, 4384, 
-  -1, 4386, -1, 4387, -1, 4391, -1, 4393, 
-  -1, 4395, -1, 4396, -1, 4397, -1, 4398, 
-  -1, 4399, -1, 4402, -1, 4406, -1, 4416, 
-  -1, 4423, -1, 4428, -1, 4593, -1, 4594, 
-  -1, 4439, -1, 4440, -1, 4441, -1, 4484, 
-  -1, 4485, -1, 4488, -1, 4497, -1, 4498, 
-  -1, 4500, -1, 4510, -1, 4513, -1, 19977, 
-  -1, 22235, -1, 19978, -1, 20013, -1, 19979, 
-  -1, 30002, -1, 19993, -1, 19969, -1, 22825, 
-  -1, 22320, -1, 40, 4352, 41, -1, 40, 
-  4354, 41, -1, 40, 4355, 41, -1, 40, 
-  4357, 41, -1, 40, 4358, 41, -1, 40, 
-  4359, 41, -1, 40, 4361, 41, -1, 40, 
-  4363, 41, -1, 40, 4364, 41, -1, 40, 
-  4366, 41, -1, 40, 4367, 41, -1, 40, 
-  4368, 41, -1, 40, 4369, 41, -1, 40, 
-  4370, 41, -1, 40, 4352, 4449, 41, -1, 
-  40, 4354, 4449, 41, -1, 40, 4355, 4449, 
-  41, -1, 40, 4357, 4449, 41, -1, 40, 
-  4358, 4449, 41, -1, 40, 4359, 4449, 41, 
-  -1, 40, 4361, 4449, 41, -1, 40, 4363, 
-  4449, 41, -1, 40, 4364, 4449, 41, -1, 
-  40, 4366, 4449, 41, -1, 40, 4367, 4449, 
-  41, -1, 40, 4368, 4449, 41, -1, 40, 
-  4369, 4449, 41, -1, 40, 4370, 4449, 41, 
-  -1, 40, 4364, 4462, 41, -1, 40, 4363, 
-  4457, 4364, 4453, 4523, 41, -1, 40, 4363, 
-  4457, 4370, 4462, 41, -1, 40, 19968, 41, 
-  -1, 40, 20108, 41, -1, 40, 19977, 41, 
-  -1, 40, 22235, 41, -1, 40, 20116, 41, 
-  -1, 40, 20845, 41, -1, 40, 19971, 41, 
-  -1, 40, 20843, 41, -1, 40, 20061, 41, 
-  -1, 40, 21313, 41, -1, 40, 26376, 41, 
-  -1, 40, 28779, 41, -1, 40, 27700, 41, 
-  -1, 40, 26408, 41, -1, 40, 37329, 41, 
-  -1, 40, 22303, 41, -1, 40, 26085, 41, 
-  -1, 40, 26666, 41, -1, 40, 26377, 41, 
-  -1, 40, 31038, 41, -1, 40, 21517, 41, 
-  -1, 40, 29305, 41, -1, 40, 36001, 41, 
-  -1, 40, 31069, 41, -1, 40, 21172, 41, 
-  -1, 40, 20195, 41, -1, 40, 21628, 41, 
-  -1, 40, 23398, 41, -1, 40, 30435, 41, 
-  -1, 40, 20225, 41, -1, 40, 36039, 41, 
-  -1, 40, 21332, 41, -1, 40, 31085, 41, 
-  -1, 40, 20241, 41, -1, 40, 33258, 41, 
-  -1, 40, 33267, 41, -1, 80, 84, 69, 
-  -1, 50, 49, -1, 50, 50, -1, 50, 
-  51, -1, 50, 52, -1, 50, 53, -1, 
-  50, 54, -1, 50, 55, -1, 50, 56, 
-  -1, 50, 57, -1, 51, 48, -1, 51, 
-  49, -1, 51, 50, -1, 51, 51, -1, 
-  51, 52, -1, 51, 53, -1, 4352, 4449, 
-  -1, 4354, 4449, -1, 4355, 4449, -1, 4357, 
-  4449, -1, 4358, 4449, -1, 4359, 4449, -1, 
-  4361, 4449, -1, 4363, 4449, -1, 4364, 4449, 
-  -1, 4366, 4449, -1, 4367, 4449, -1, 4368, 
-  4449, -1, 4369, 4449, -1, 4370, 4449, -1, 
-  4366, 4449, 4535, 4352, 4457, -1, 4364, 4462, 
-  4363, 4468, -1, 4363, 4462, -1, 20116, -1, 
-  20845, -1, 19971, -1, 20061, -1, 26666, -1, 
-  26377, -1, 31038, -1, 21517, -1, 29305, -1, 
-  36001, -1, 31069, -1, 21172, -1, 31192, -1, 
-  30007, -1, 36969, -1, 20778, -1, 21360, -1, 
-  27880, -1, 38917, -1, 20241, -1, 20889, -1, 
-  27491, -1, 24038, -1, 21491, -1, 21307, -1, 
-  23447, -1, 23398, -1, 30435, -1, 20225, -1, 
-  36039, -1, 21332, -1, 22812, -1, 51, 54, 
-  -1, 51, 55, -1, 51, 56, -1, 51, 
-  57, -1, 52, 48, -1, 52, 49, -1, 
-  52, 50, -1, 52, 51, -1, 52, 52, 
-  -1, 52, 53, -1, 52, 54, -1, 52, 
-  55, -1, 52, 56, -1, 52, 57, -1, 
-  53, 48, -1, 49, 26376, -1, 50, 26376, 
-  -1, 51, 26376, -1, 52, 26376, -1, 53, 
-  26376, -1, 54, 26376, -1, 55, 26376, -1, 
-  56, 26376, -1, 57, 26376, -1, 49, 48, 
-  26376, -1, 49, 49, 26376, -1, 49, 50, 
-  26376, -1, 72, 103, -1, 101, 114, 103, 
-  -1, 101, 86, -1, 76, 84, 68, -1, 
-  12450, -1, 12452, -1, 12454, -1, 12456, -1, 
-  12458, -1, 12459, -1, 12461, -1, 12463, -1, 
-  12465, -1, 12467, -1, 12469, -1, 12471, -1, 
-  12473, -1, 12475, -1, 12477, -1, 12479, -1, 
-  12481, -1, 12484, -1, 12486, -1, 12488, -1, 
-  12490, -1, 12491, -1, 12492, -1, 12493, -1, 
-  12494, -1, 12495, -1, 12498, -1, 12501, -1, 
-  12504, -1, 12507, -1, 12510, -1, 12511, -1, 
-  12512, -1, 12513, -1, 12514, -1, 12516, -1, 
-  12518, -1, 12520, -1, 12521, -1, 12522, -1, 
-  12523, -1, 12524, -1, 12525, -1, 12527, -1, 
-  12528, -1, 12529, -1, 12530, -1, 12450, 12497, 
-  12540, 12488, -1, 12450, 12523, 12501, 12449, -1, 
-  12450, 12531, 12506, 12450, -1, 12450, 12540, 12523, 
-  -1, 12452, 12491, 12531, 12464, -1, 12452, 12531, 
-  12481, -1, 12454, 12457, 12531, -1, 12456, 12473, 
-  12463, 12540, 12489, -1, 12456, 12540, 12459, 12540, 
-  -1, 12458, 12531, 12473, -1, 12458, 12540, 12512, 
-  -1, 12459, 12452, 12522, -1, 12459, 12521, 12483, 
-  12488, -1, 12459, 12525, 12522, 12540, -1, 12460, 
-  12525, 12531, -1, 12460, 12531, 12510, -1, 12462, 
-  12460, -1, 12462, 12491, 12540, -1, 12461, 12517, 
-  12522, 12540, -1, 12462, 12523, 12480, 12540, -1, 
-  12461, 12525, -1, 12461, 12525, 12464, 12521, 12512, 
-  -1, 12461, 12525, 12513, 12540, 12488, 12523, -1, 
-  12461, 12525, 12527, 12483, 12488, -1, 12464, 12521, 
-  12512, -1, 12464, 12521, 12512, 12488, 12531, -1, 
-  12463, 12523, 12476, 12452, 12525, -1, 12463, 12525, 
-  12540, 12493, -1, 12465, 12540, 12473, -1, 12467, 
-  12523, 12490, -1, 12467, 12540, 12509, -1, 12469, 
-  12452, 12463, 12523, -1, 12469, 12531, 12481, 12540, 
-  12512, -1, 12471, 12522, 12531, 12464, -1, 12475, 
-  12531, 12481, -1, 12475, 12531, 12488, -1, 12480, 
-  12540, 12473, -1, 12487, 12471, -1, 12489, 12523, 
-  -1, 12488, 12531, -1, 12490, 12494, -1, 12494, 
-  12483, 12488, -1, 12495, 12452, 12484, -1, 12497, 
-  12540, 12475, 12531, 12488, -1, 12497, 12540, 12484, 
-  -1, 12496, 12540, 12524, 12523, -1, 12500, 12450, 
-  12473, 12488, 12523, -1, 12500, 12463, 12523, -1, 
-  12500, 12467, -1, 12499, 12523, -1, 12501, 12449, 
-  12521, 12483, 12489, -1, 12501, 12451, 12540, 12488, 
-  -1, 12502, 12483, 12471, 12455, 12523, -1, 12501, 
-  12521, 12531, -1, 12504, 12463, 12479, 12540, 12523, 
-  -1, 12506, 12477, -1, 12506, 12491, 12498, -1, 
-  12504, 12523, 12484, -1, 12506, 12531, 12473, -1, 
-  12506, 12540, 12472, -1, 12505, 12540, 12479, -1, 
-  12509, 12452, 12531, 12488, -1, 12508, 12523, 12488, 
-  -1, 12507, 12531, -1, 12509, 12531, 12489, -1, 
-  12507, 12540, 12523, -1, 12507, 12540, 12531, -1, 
-  12510, 12452, 12463, 12525, -1, 12510, 12452, 12523, 
-  -1, 12510, 12483, 12495, -1, 12510, 12523, 12463, 
-  -1, 12510, 12531, 12471, 12519, 12531, -1, 12511, 
-  12463, 12525, 12531, -1, 12511, 12522, -1, 12511, 
-  12522, 12496, 12540, 12523, -1, 12513, 12460, -1, 
-  12513, 12460, 12488, 12531, -1, 12513, 12540, 12488, 
-  12523, -1, 12516, 12540, 12489, -1, 12516, 12540, 
-  12523, -1, 12518, 12450, 12531, -1, 12522, 12483, 
-  12488, 12523, -1, 12522, 12521, -1, 12523, 12500, 
-  12540, -1, 12523, 12540, 12502, 12523, -1, 12524, 
-  12512, -1, 12524, 12531, 12488, 12466, 12531, -1, 
-  12527, 12483, 12488, -1, 48, 28857, -1, 49, 
-  28857, -1, 50, 28857, -1, 51, 28857, -1, 
-  52, 28857, -1, 53, 28857, -1, 54, 28857, 
-  -1, 55, 28857, -1, 56, 28857, -1, 57, 
-  28857, -1, 49, 48, 28857, -1, 49, 49, 
-  28857, -1, 49, 50, 28857, -1, 49, 51, 
-  28857, -1, 49, 52, 28857, -1, 49, 53, 
-  28857, -1, 49, 54, 28857, -1, 49, 55, 
-  28857, -1, 49, 56, 28857, -1, 49, 57, 
-  28857, -1, 50, 48, 28857, -1, 50, 49, 
-  28857, -1, 50, 50, 28857, -1, 50, 51, 
-  28857, -1, 50, 52, 28857, -1, 104, 80, 
-  97, -1, 100, 97, -1, 65, 85, -1, 
-  98, 97, 114, -1, 111, 86, -1, 112, 
-  99, -1, 100, 109, -1, 100, 109, 178, 
-  -1, 100, 109, 179, -1, 73, 85, -1, 
-  24179, 25104, -1, 26157, 21644, -1, 22823, 27491, 
-  -1, 26126, 27835, -1, 26666, 24335, 20250, 31038, 
-  -1, 112, 65, -1, 110, 65, -1, 956, 
-  65, -1, 109, 65, -1, 107, 65, -1, 
-  75, 66, -1, 77, 66, -1, 71, 66, 
-  -1, 99, 97, 108, -1, 107, 99, 97, 
-  108, -1, 112, 70, -1, 110, 70, -1, 
-  956, 70, -1, 956, 103, -1, 109, 103, 
-  -1, 107, 103, -1, 72, 122, -1, 107, 
-  72, 122, -1, 77, 72, 122, -1, 71, 
-  72, 122, -1, 84, 72, 122, -1, 956, 
-  8467, -1, 109, 8467, -1, 100, 8467, -1, 
-  107, 8467, -1, 102, 109, -1, 110, 109, 
-  -1, 956, 109, -1, 109, 109, -1, 99, 
-  109, -1, 107, 109, -1, 109, 109, 178, 
-  -1, 99, 109, 178, -1, 109, 178, -1, 
-  107, 109, 178, -1, 109, 109, 179, -1, 
-  99, 109, 179, -1, 109, 179, -1, 107, 
-  109, 179, -1, 109, 8725, 115, -1, 109, 
-  8725, 115, 178, -1, 80, 97, -1, 107, 
-  80, 97, -1, 77, 80, 97, -1, 71, 
-  80, 97, -1, 114, 97, 100, -1, 114, 
-  97, 100, 8725, 115, -1, 114, 97, 100, 
-  8725, 115, 178, -1, 112, 115, -1, 110, 
-  115, -1, 956, 115, -1, 109, 115, -1, 
-  112, 86, -1, 110, 86, -1, 956, 86, 
-  -1, 109, 86, -1, 107, 86, -1, 77, 
-  86, -1, 112, 87, -1, 110, 87, -1, 
-  956, 87, -1, 109, 87, -1, 107, 87, 
-  -1, 77, 87, -1, 107, 937, -1, 77, 
-  937, -1, 97, 46, 109, 46, -1, 66, 
-  113, -1, 99, 99, -1, 99, 100, -1, 
-  67, 8725, 107, 103, -1, 67, 111, 46, 
-  -1, 100, 66, -1, 71, 121, -1, 104, 
-  97, -1, 72, 80, -1, 105, 110, -1, 
-  75, 75, -1, 75, 77, -1, 107, 116, 
-  -1, 108, 109, -1, 108, 110, -1, 108, 
-  111, 103, -1, 108, 120, -1, 109, 98, 
-  -1, 109, 105, 108, -1, 109, 111, 108, 
-  -1, 80, 72, -1, 112, 46, 109, 46, 
-  -1, 80, 80, 77, -1, 80, 82, -1, 
-  115, 114, -1, 83, 118, -1, 87, 98, 
-  -1, 86, 8725, 109, -1, 65, 8725, 109, 
-  -1, 49, 26085, -1, 50, 26085, -1, 51, 
-  26085, -1, 52, 26085, -1, 53, 26085, -1, 
-  54, 26085, -1, 55, 26085, -1, 56, 26085, 
-  -1, 57, 26085, -1, 49, 48, 26085, -1, 
-  49, 49, 26085, -1, 49, 50, 26085, -1, 
-  49, 51, 26085, -1, 49, 52, 26085, -1, 
-  49, 53, 26085, -1, 49, 54, 26085, -1, 
-  49, 55, 26085, -1, 49, 56, 26085, -1, 
-  49, 57, 26085, -1, 50, 48, 26085, -1, 
-  50, 49, 26085, -1, 50, 50, 26085, -1, 
-  50, 51, 26085, -1, 50, 52, 26085, -1, 
-  50, 53, 26085, -1, 50, 54, 26085, -1, 
-  50, 55, 26085, -1, 50, 56, 26085, -1, 
-  50, 57, 26085, -1, 51, 48, 26085, -1, 
-  51, 49, 26085, -1, 103, 97, 108, -1, 
-  35912, -1, 26356, -1, 36040, -1, 28369, -1, 
-  20018, -1, 21477, -1, 22865, -1, 21895, -1, 
-  22856, -1, 25078, -1, 30313, -1, 32645, -1, 
-  34367, -1, 34746, -1, 35064, -1, 37007, -1, 
-  27138, -1, 27931, -1, 28889, -1, 29662, -1, 
-  33853, -1, 37226, -1, 39409, -1, 20098, -1, 
-  21365, -1, 27396, -1, 29211, -1, 34349, -1, 
-  40478, -1, 23888, -1, 28651, -1, 34253, -1, 
-  35172, -1, 25289, -1, 33240, -1, 34847, -1, 
-  24266, -1, 26391, -1, 28010, -1, 29436, -1, 
-  37070, -1, 20358, -1, 20919, -1, 21214, -1, 
-  25796, -1, 27347, -1, 29200, -1, 30439, -1, 
-  34310, -1, 34396, -1, 36335, -1, 38706, -1, 
-  39791, -1, 40442, -1, 30860, -1, 31103, -1, 
-  32160, -1, 33737, -1, 37636, -1, 35542, -1, 
-  22751, -1, 24324, -1, 31840, -1, 32894, -1, 
-  29282, -1, 30922, -1, 36034, -1, 38647, -1, 
-  22744, -1, 23650, -1, 27155, -1, 28122, -1, 
-  28431, -1, 32047, -1, 32311, -1, 38475, -1, 
-  21202, -1, 32907, -1, 20956, -1, 20940, -1, 
-  31260, -1, 32190, -1, 33777, -1, 38517, -1, 
-  35712, -1, 25295, -1, 35582, -1, 20025, -1, 
-  23527, -1, 24594, -1, 29575, -1, 30064, -1, 
-  21271, -1, 30971, -1, 20415, -1, 24489, -1, 
-  19981, -1, 27852, -1, 25976, -1, 32034, -1, 
-  21443, -1, 22622, -1, 30465, -1, 33865, -1, 
-  35498, -1, 27578, -1, 27784, -1, 25342, -1, 
-  33509, -1, 25504, -1, 30053, -1, 20142, -1, 
-  20841, -1, 20937, -1, 26753, -1, 31975, -1, 
-  33391, -1, 35538, -1, 37327, -1, 21237, -1, 
-  21570, -1, 24300, -1, 26053, -1, 28670, -1, 
-  31018, -1, 38317, -1, 39530, -1, 40599, -1, 
-  40654, -1, 26310, -1, 27511, -1, 36706, -1, 
-  24180, -1, 24976, -1, 25088, -1, 25754, -1, 
-  28451, -1, 29001, -1, 29833, -1, 31178, -1, 
-  32244, -1, 32879, -1, 36646, -1, 34030, -1, 
-  36899, -1, 37706, -1, 21015, -1, 21155, -1, 
-  21693, -1, 28872, -1, 35010, -1, 24265, -1, 
-  24565, -1, 25467, -1, 27566, -1, 31806, -1, 
-  29557, -1, 20196, -1, 22265, -1, 23994, -1, 
-  24604, -1, 29618, -1, 29801, -1, 32666, -1, 
-  32838, -1, 37428, -1, 38646, -1, 38728, -1, 
-  38936, -1, 20363, -1, 31150, -1, 37300, -1, 
-  38584, -1, 24801, -1, 20102, -1, 20698, -1, 
-  23534, -1, 23615, -1, 26009, -1, 29134, -1, 
-  30274, -1, 34044, -1, 36988, -1, 26248, -1, 
-  38446, -1, 21129, -1, 26491, -1, 26611, -1, 
-  27969, -1, 28316, -1, 29705, -1, 30041, -1, 
-  30827, -1, 32016, -1, 39006, -1, 25134, -1, 
-  38520, -1, 20523, -1, 23833, -1, 28138, -1, 
-  36650, -1, 24459, -1, 24900, -1, 26647, -1, 
-  38534, -1, 21033, -1, 21519, -1, 23653, -1, 
-  26131, -1, 26446, -1, 26792, -1, 27877, -1, 
-  29702, -1, 30178, -1, 32633, -1, 35023, -1, 
-  35041, -1, 38626, -1, 21311, -1, 28346, -1, 
-  21533, -1, 29136, -1, 29848, -1, 34298, -1, 
-  38563, -1, 40023, -1, 40607, -1, 26519, -1, 
-  28107, -1, 33256, -1, 31520, -1, 31890, -1, 
-  29376, -1, 28825, -1, 35672, -1, 20160, -1, 
-  33590, -1, 21050, -1, 20999, -1, 24230, -1, 
-  25299, -1, 31958, -1, 23429, -1, 27934, -1, 
-  26292, -1, 36667, -1, 38477, -1, 24275, -1, 
-  20800, -1, 21952, -1, 22618, -1, 26228, -1, 
-  20958, -1, 29482, -1, 30410, -1, 31036, -1, 
-  31070, -1, 31077, -1, 31119, -1, 38742, -1, 
-  31934, -1, 34322, -1, 35576, -1, 36920, -1, 
-  37117, -1, 39151, -1, 39164, -1, 39208, -1, 
-  40372, -1, 20398, -1, 20711, -1, 20813, -1, 
-  21193, -1, 21220, -1, 21329, -1, 21917, -1, 
-  22022, -1, 22120, -1, 22592, -1, 22696, -1, 
-  23652, -1, 24724, -1, 24936, -1, 24974, -1, 
-  25074, -1, 25935, -1, 26082, -1, 26257, -1, 
-  26757, -1, 28023, -1, 28186, -1, 28450, -1, 
-  29038, -1, 29227, -1, 29730, -1, 30865, -1, 
-  31049, -1, 31048, -1, 31056, -1, 31062, -1, 
-  31117, -1, 31118, -1, 31296, -1, 31361, -1, 
-  31680, -1, 32265, -1, 32321, -1, 32626, -1, 
-  32773, -1, 33261, -1, 33401, -1, 33879, -1, 
-  35088, -1, 35222, -1, 35585, -1, 35641, -1, 
-  36051, -1, 36104, -1, 36790, -1, 38627, -1, 
-  38911, -1, 38971, -1, 20006, -1, 20917, -1, 
-  20840, -1, 20352, -1, 20805, -1, 20864, -1, 
-  21191, -1, 21242, -1, 21845, -1, 21913, -1, 
-  21986, -1, 22707, -1, 22852, -1, 22868, -1, 
-  23138, -1, 23336, -1, 24274, -1, 24281, -1, 
-  24425, -1, 24493, -1, 24792, -1, 24910, -1, 
-  24840, -1, 24928, -1, 25140, -1, 25540, -1, 
-  25628, -1, 25682, -1, 25942, -1, 26395, -1, 
-  26454, -1, 28379, -1, 28363, -1, 28702, -1, 
-  30631, -1, 29237, -1, 29359, -1, 29809, -1, 
-  29958, -1, 30011, -1, 30237, -1, 30239, -1, 
-  30427, -1, 30452, -1, 30538, -1, 30528, -1, 
-  30924, -1, 31409, -1, 31867, -1, 32091, -1, 
-  32574, -1, 33618, -1, 33775, -1, 34681, -1, 
-  35137, -1, 35206, -1, 35519, -1, 35531, -1, 
-  35565, -1, 35722, -1, 36664, -1, 36978, -1, 
-  37273, -1, 37494, -1, 38524, -1, 38875, -1, 
-  38923, -1, 39698, -1, 141386, -1, 141380, -1, 
-  144341, -1, 15261, -1, 16408, -1, 16441, -1, 
-  152137, -1, 154832, -1, 163539, -1, 40771, -1, 
-  40846, -1, 102, 102, -1, 102, 105, -1, 
-  102, 108, -1, 102, 102, 105, -1, 102, 
-  102, 108, -1, 383, 116, -1, 115, 116, 
-  -1, 1396, 1398, -1, 1396, 1381, -1, 1396, 
-  1387, -1, 1406, 1398, -1, 1396, 1389, -1, 
-  1497, 1460, -1, 1522, 1463, -1, 1506, -1, 
-  1492, -1, 1499, -1, 1500, -1, 1501, -1, 
-  1512, -1, 1514, -1, 1513, 1473, -1, 1513, 
-  1474, -1, 64329, 1473, -1, 64329, 1474, -1, 
-  1488, 1463, -1, 1488, 1464, -1, 1488, 1468, 
-  -1, 1489, 1468, -1, 1490, 1468, -1, 1491, 
-  1468, -1, 1492, 1468, -1, 1493, 1468, -1, 
-  1494, 1468, -1, 1496, 1468, -1, 1497, 1468, 
-  -1, 1498, 1468, -1, 1499, 1468, -1, 1500, 
-  1468, -1, 1502, 1468, -1, 1504, 1468, -1, 
-  1505, 1468, -1, 1507, 1468, -1, 1508, 1468, 
-  -1, 1510, 1468, -1, 1511, 1468, -1, 1512, 
-  1468, -1, 1513, 1468, -1, 1514, 1468, -1, 
-  1493, 1465, -1, 1489, 1471, -1, 1499, 1471, 
-  -1, 1508, 1471, -1, 1488, 1500, -1, 1649, 
-  -1, 1659, -1, 1662, -1, 1664, -1, 1658, 
-  -1, 1663, -1, 1657, -1, 1700, -1, 1702, 
-  -1, 1668, -1, 1667, -1, 1670, -1, 1671, 
-  -1, 1677, -1, 1676, -1, 1678, -1, 1672, 
-  -1, 1688, -1, 1681, -1, 1705, -1, 1711, 
-  -1, 1715, -1, 1713, -1, 1722, -1, 1723, 
-  -1, 1728, -1, 1729, -1, 1726, -1, 1746, 
-  -1, 1747, -1, 1709, -1, 1735, -1, 1734, 
-  -1, 1736, -1, 1655, -1, 1739, -1, 1733, 
-  -1, 1737, -1, 1744, -1, 1609, -1, 1574, 
-  1575, -1, 1574, 1749, -1, 1574, 1608, -1, 
-  1574, 1735, -1, 1574, 1734, -1, 1574, 1736, 
-  -1, 1574, 1744, -1, 1574, 1609, -1, 1740, 
-  -1, 1574, 1580, -1, 1574, 1581, -1, 1574, 
-  1605, -1, 1574, 1610, -1, 1576, 1580, -1, 
-  1576, 1581, -1, 1576, 1582, -1, 1576, 1605, 
-  -1, 1576, 1609, -1, 1576, 1610, -1, 1578, 
-  1580, -1, 1578, 1581, -1, 1578, 1582, -1, 
-  1578, 1605, -1, 1578, 1609, -1, 1578, 1610, 
-  -1, 1579, 1580, -1, 1579, 1605, -1, 1579, 
-  1609, -1, 1579, 1610, -1, 1580, 1581, -1, 
-  1580, 1605, -1, 1581, 1580, -1, 1581, 1605, 
-  -1, 1582, 1580, -1, 1582, 1581, -1, 1582, 
-  1605, -1, 1587, 1580, -1, 1587, 1581, -1, 
-  1587, 1582, -1, 1587, 1605, -1, 1589, 1581, 
-  -1, 1589, 1605, -1, 1590, 1580, -1, 1590, 
-  1581, -1, 1590, 1582, -1, 1590, 1605, -1, 
-  1591, 1581, -1, 1591, 1605, -1, 1592, 1605, 
-  -1, 1593, 1580, -1, 1593, 1605, -1, 1594, 
-  1580, -1, 1594, 1605, -1, 1601, 1580, -1, 
-  1601, 1581, -1, 1601, 1582, -1, 1601, 1605, 
-  -1, 1601, 1609, -1, 1601, 1610, -1, 1602, 
-  1581, -1, 1602, 1605, -1, 1602, 1609, -1, 
-  1602, 1610, -1, 1603, 1575, -1, 1603, 1580, 
-  -1, 1603, 1581, -1, 1603, 1582, -1, 1603, 
-  1604, -1, 1603, 1605, -1, 1603, 1609, -1, 
-  1603, 1610, -1, 1604, 1580, -1, 1604, 1581, 
-  -1, 1604, 1582, -1, 1604, 1605, -1, 1604, 
-  1609, -1, 1604, 1610, -1, 1605, 1580, -1, 
-  1605, 1581, -1, 1605, 1582, -1, 1605, 1605, 
-  -1, 1605, 1609, -1, 1605, 1610, -1, 1606, 
-  1580, -1, 1606, 1581, -1, 1606, 1582, -1, 
-  1606, 1605, -1, 1606, 1609, -1, 1606, 1610, 
-  -1, 1607, 1580, -1, 1607, 1605, -1, 1607, 
-  1609, -1, 1607, 1610, -1, 1610, 1580, -1, 
-  1610, 1581, -1, 1610, 1582, -1, 1610, 1605, 
-  -1, 1610, 1609, -1, 1610, 1610, -1, 1584, 
-  1648, -1, 1585, 1648, -1, 1609, 1648, -1, 
-  32, 1612, 1617, -1, 32, 1613, 1617, -1, 
-  32, 1614, 1617, -1, 32, 1615, 1617, -1, 
-  32, 1616, 1617, -1, 32, 1617, 1648, -1, 
-  1574, 1585, -1, 1574, 1586, -1, 1574, 1606, 
-  -1, 1576, 1585, -1, 1576, 1586, -1, 1576, 
-  1606, -1, 1578, 1585, -1, 1578, 1586, -1, 
-  1578, 1606, -1, 1579, 1585, -1, 1579, 1586, 
-  -1, 1579, 1606, -1, 1605, 1575, -1, 1606, 
-  1585, -1, 1606, 1586, -1, 1606, 1606, -1, 
-  1610, 1585, -1, 1610, 1586, -1, 1610, 1606, 
-  -1, 1574, 1582, -1, 1574, 1607, -1, 1576, 
-  1607, -1, 1578, 1607, -1, 1589, 1582, -1, 
-  1604, 1607, -1, 1606, 1607, -1, 1607, 1648, 
-  -1, 1610, 1607, -1, 1579, 1607, -1, 1587, 
-  1607, -1, 1588, 1605, -1, 1588, 1607, -1, 
-  1600, 1614, 1617, -1, 1600, 1615, 1617, -1, 
-  1600, 1616, 1617, -1, 1591, 1609, -1, 1591, 
-  1610, -1, 1593, 1609, -1, 1593, 1610, -1, 
-  1594, 1609, -1, 1594, 1610, -1, 1587, 1609, 
-  -1, 1587, 1610, -1, 1588, 1609, -1, 1588, 
-  1610, -1, 1581, 1609, -1, 1581, 1610, -1, 
-  1580, 1609, -1, 1580, 1610, -1, 1582, 1609, 
-  -1, 1582, 1610, -1, 1589, 1609, -1, 1589, 
-  1610, -1, 1590, 1609, -1, 1590, 1610, -1, 
-  1588, 1580, -1, 1588, 1581, -1, 1588, 1582, 
-  -1, 1588, 1585, -1, 1587, 1585, -1, 1589, 
-  1585, -1, 1590, 1585, -1, 1575, 1611, -1, 
-  1578, 1580, 1605, -1, 1578, 1581, 1580, -1, 
-  1578, 1581, 1605, -1, 1578, 1582, 1605, -1, 
-  1578, 1605, 1580, -1, 1578, 1605, 1581, -1, 
-  1578, 1605, 1582, -1, 1580, 1605, 1581, -1, 
-  1581, 1605, 1610, -1, 1581, 1605, 1609, -1, 
-  1587, 1581, 1580, -1, 1587, 1580, 1581, -1, 
-  1587, 1580, 1609, -1, 1587, 1605, 1581, -1, 
-  1587, 1605, 1580, -1, 1587, 1605, 1605, -1, 
-  1589, 1581, 1581, -1, 1589, 1605, 1605, -1, 
-  1588, 1581, 1605, -1, 1588, 1580, 1610, -1, 
-  1588, 1605, 1582, -1, 1588, 1605, 1605, -1, 
-  1590, 1581, 1609, -1, 1590, 1582, 1605, -1, 
-  1591, 1605, 1581, -1, 1591, 1605, 1605, -1, 
-  1591, 1605, 1610, -1, 1593, 1580, 1605, -1, 
-  1593, 1605, 1605, -1, 1593, 1605, 1609, -1, 
-  1594, 1605, 1605, -1, 1594, 1605, 1610, -1, 
-  1594, 1605, 1609, -1, 1601, 1582, 1605, -1, 
-  1602, 1605, 1581, -1, 1602, 1605, 1605, -1, 
-  1604, 1581, 1605, -1, 1604, 1581, 1610, -1, 
-  1604, 1581, 1609, -1, 1604, 1580, 1580, -1, 
-  1604, 1582, 1605, -1, 1604, 1605, 1581, -1, 
-  1605, 1581, 1580, -1, 1605, 1581, 1605, -1, 
-  1605, 1581, 1610, -1, 1605, 1580, 1581, -1, 
-  1605, 1580, 1605, -1, 1605, 1582, 1580, -1, 
-  1605, 1582, 1605, -1, 1605, 1580, 1582, -1, 
-  1607, 1605, 1580, -1, 1607, 1605, 1605, -1, 
-  1606, 1581, 1605, -1, 1606, 1581, 1609, -1, 
-  1606, 1580, 1605, -1, 1606, 1580, 1609, -1, 
-  1606, 1605, 1610, -1, 1606, 1605, 1609, -1, 
-  1610, 1605, 1605, -1, 1576, 1582, 1610, -1, 
-  1578, 1580, 1610, -1, 1578, 1580, 1609, -1, 
-  1578, 1582, 1610, -1, 1578, 1582, 1609, -1, 
-  1578, 1605, 1610, -1, 1578, 1605, 1609, -1, 
-  1580, 1605, 1610, -1, 1580, 1581, 1609, -1, 
-  1580, 1605, 1609, -1, 1587, 1582, 1609, -1, 
-  1589, 1581, 1610, -1, 1588, 1581, 1610, -1, 
-  1590, 1581, 1610, -1, 1604, 1580, 1610, -1, 
-  1604, 1605, 1610, -1, 1610, 1581, 1610, -1, 
-  1610, 1580, 1610, -1, 1610, 1605, 1610, -1, 
-  1605, 1605, 1610, -1, 1602, 1605, 1610, -1, 
-  1606, 1581, 1610, -1, 1593, 1605, 1610, -1, 
-  1603, 1605, 1610, -1, 1606, 1580, 1581, -1, 
-  1605, 1582, 1610, -1, 1604, 1580, 1605, -1, 
-  1603, 1605, 1605, -1, 1580, 1581, 1610, -1, 
-  1581, 1580, 1610, -1, 1605, 1580, 1610, -1, 
-  1601, 1605, 1610, -1, 1576, 1581, 1610, -1, 
-  1587, 1582, 1610, -1, 1606, 1580, 1610, -1, 
-  1589, 1604, 1746, -1, 1602, 1604, 1746, -1, 
-  1575, 1604, 1604, 1607, -1, 1575, 1603, 1576, 
-  1585, -1, 1605, 1581, 1605, 1583, -1, 1589, 
-  1604, 1593, 1605, -1, 1585, 1587, 1608, 1604, 
-  -1, 1593, 1604, 1610, 1607, -1, 1608, 1587, 
-  1604, 1605, -1, 1589, 1604, 1609, -1, 1589, 
-  1604, 1609, 32, 1575, 1604, 1604, 1607, 32, 
-  1593, 1604, 1610, 1607, 32, 1608, 1587, 1604, 
-  1605, -1, 1580, 1604, 32, 1580, 1604, 1575, 
-  1604, 1607, -1, 1585, 1740, 1575, 1604, -1, 
-  44, -1, 12289, -1, 12290, -1, 58, -1, 
-  33, -1, 63, -1, 12310, -1, 12311, -1, 
-  8230, -1, 8229, -1, 8212, -1, 8211, -1, 
-  95, -1, 123, -1, 125, -1, 12308, -1, 
-  12309, -1, 12304, -1, 12305, -1, 12298, -1, 
-  12299, -1, 12300, -1, 12301, -1, 12302, -1, 
-  12303, -1, 91, -1, 93, -1, 8254, -1, 
-  35, -1, 38, -1, 42, -1, 45, -1, 
-  60, -1, 62, -1, 92, -1, 36, -1, 
-  37, -1, 64, -1, 32, 1611, -1, 1600, 
-  1611, -1, 32, 1612, -1, 32, 1613, -1, 
-  32, 1614, -1, 1600, 1614, -1, 32, 1615, 
-  -1, 1600, 1615, -1, 32, 1616, -1, 1600, 
-  1616, -1, 32, 1617, -1, 1600, 1617, -1, 
-  32, 1618, -1, 1600, 1618, -1, 1569, -1, 
-  1570, -1, 1571, -1, 1572, -1, 1573, -1, 
-  1574, -1, 1575, -1, 1576, -1, 1577, -1, 
-  1578, -1, 1579, -1, 1580, -1, 1581, -1, 
-  1582, -1, 1583, -1, 1584, -1, 1585, -1, 
-  1586, -1, 1587, -1, 1588, -1, 1589, -1, 
-  1590, -1, 1591, -1, 1592, -1, 1593, -1, 
-  1594, -1, 1601, -1, 1602, -1, 1603, -1, 
-  1604, -1, 1605, -1, 1606, -1, 1607, -1, 
-  1608, -1, 1610, -1, 1604, 1570, -1, 1604, 
-  1571, -1, 1604, 1573, -1, 1604, 1575, -1, 
-  34, -1, 39, -1, 47, -1, 65345, -1, 
-  65346, -1, 65347, -1, 65348, -1, 65349, -1, 
-  65350, -1, 65351, -1, 65352, -1, 65353, -1, 
-  65354, -1, 65355, -1, 65356, -1, 65357, -1, 
-  65358, -1, 65359, -1, 65360, -1, 65361, -1, 
-  65362, -1, 65363, -1, 65364, -1, 65365, -1, 
-  65366, -1, 65367, -1, 65368, -1, 65369, -1, 
-  65370, -1, 94, -1, 124, -1, 126, -1, 
-  10629, -1, 10630, -1, 12539, -1, 12449, -1, 
-  12451, -1, 12453, -1, 12455, -1, 12457, -1, 
-  12515, -1, 12517, -1, 12519, -1, 12483, -1, 
-  12540, -1, 12531, -1, 12441, -1, 12442, -1, 
-  12644, -1, 12593, -1, 12594, -1, 12595, -1, 
-  12596, -1, 12597, -1, 12598, -1, 12599, -1, 
-  12600, -1, 12601, -1, 12602, -1, 12603, -1, 
-  12604, -1, 12605, -1, 12606, -1, 12607, -1, 
-  12608, -1, 12609, -1, 12610, -1, 12611, -1, 
-  12612, -1, 12613, -1, 12614, -1, 12615, -1, 
-  12616, -1, 12617, -1, 12618, -1, 12619, -1, 
-  12620, -1, 12621, -1, 12622, -1, 12623, -1, 
-  12624, -1, 12625, -1, 12626, -1, 12627, -1, 
-  12628, -1, 12629, -1, 12630, -1, 12631, -1, 
-  12632, -1, 12633, -1, 12634, -1, 12635, -1, 
-  12636, -1, 12637, -1, 12638, -1, 12639, -1, 
-  12640, -1, 12641, -1, 12642, -1, 12643, -1, 
-  162, -1, 163, -1, 172, -1, 175, -1, 
-  166, -1, 165, -1, 8361, -1, 9474, -1, 
-  8592, -1, 8593, -1, 8594, -1, 8595, -1, 
-  9632, -1, 9675, -1, 66600, -1, 66601, -1, 
-  66602, -1, 66603, -1, 66604, -1, 66605, -1, 
-  66606, -1, 66607, -1, 66608, -1, 66609, -1, 
-  66610, -1, 66611, -1, 66612, -1, 66613, -1, 
-  66614, -1, 66615, -1, 66616, -1, 66617, -1, 
-  66618, -1, 66619, -1, 66620, -1, 66621, -1, 
-  66622, -1, 66623, -1, 66624, -1, 66625, -1, 
-  66626, -1, 66627, -1, 66628, -1, 66629, -1, 
-  66630, -1, 66631, -1, 66632, -1, 66633, -1, 
-  66634, -1, 66635, -1, 66636, -1, 66637, -1, 
-  66638, -1, 66639, -1, 119127, 119141, -1, 119128, 
-  119141, -1, 119135, 119150, -1, 119135, 119151, -1, 
-  119135, 119152, -1, 119135, 119153, -1, 119135, 119154, 
-  -1, 119225, 119141, -1, 119226, 119141, -1, 119227, 
-  119150, -1, 119228, 119150, -1, 119227, 119151, -1, 
-  119228, 119151, -1, 305, -1, 567, -1, 913, 
-  -1, 914, -1, 916, -1, 917, -1, 918, 
-  -1, 919, -1, 921, -1, 922, -1, 923, 
-  -1, 924, -1, 925, -1, 926, -1, 927, 
-  -1, 929, -1, 1012, -1, 932, -1, 934, 
-  -1, 935, -1, 936, -1, 8711, -1, 8706, 
-  -1, 1013, -1, 977, -1, 1008, -1, 981, 
-  -1, 1009, -1, 982, -1, 988, -1, 20029, 
-  -1, 20024, -1, 20033, -1, 131362, -1, 20320, 
-  -1, 20411, -1, 20482, -1, 20602, -1, 20633, 
-  -1, 20687, -1, 13470, -1, 132666, -1, 20820, 
-  -1, 20836, -1, 20855, -1, 132380, -1, 13497, 
-  -1, 20839, -1, 20877, -1, 132427, -1, 20887, 
-  -1, 20900, -1, 20172, -1, 20908, -1, 168415, 
-  -1, 20995, -1, 13535, -1, 21051, -1, 21062, 
-  -1, 21106, -1, 21111, -1, 13589, -1, 21253, 
-  -1, 21254, -1, 21321, -1, 21338, -1, 21363, 
-  -1, 21373, -1, 21375, -1, 133676, -1, 28784, 
-  -1, 21450, -1, 21471, -1, 133987, -1, 21483, 
-  -1, 21489, -1, 21510, -1, 21662, -1, 21560, 
-  -1, 21576, -1, 21608, -1, 21666, -1, 21750, 
-  -1, 21776, -1, 21843, -1, 21859, -1, 21892, 
-  -1, 21931, -1, 21939, -1, 21954, -1, 22294, 
-  -1, 22295, -1, 22097, -1, 22132, -1, 22766, 
-  -1, 22478, -1, 22516, -1, 22541, -1, 22411, 
-  -1, 22578, -1, 22577, -1, 22700, -1, 136420, 
-  -1, 22770, -1, 22775, -1, 22790, -1, 22810, 
-  -1, 22818, -1, 22882, -1, 136872, -1, 136938, 
-  -1, 23020, -1, 23067, -1, 23079, -1, 23000, 
-  -1, 23142, -1, 14062, -1, 14076, -1, 23304, 
-  -1, 23358, -1, 137672, -1, 23491, -1, 23512, 
-  -1, 23539, -1, 138008, -1, 23551, -1, 23558, 
-  -1, 24403, -1, 14209, -1, 23648, -1, 23744, 
-  -1, 23693, -1, 138724, -1, 23875, -1, 138726, 
-  -1, 23918, -1, 23915, -1, 23932, -1, 24033, 
-  -1, 24034, -1, 14383, -1, 24061, -1, 24104, 
-  -1, 24125, -1, 24169, -1, 14434, -1, 139651, 
-  -1, 14460, -1, 24240, -1, 24243, -1, 24246, 
-  -1, 172946, -1, 140081, -1, 33281, -1, 24354, 
-  -1, 14535, -1, 144056, -1, 156122, -1, 24418, 
-  -1, 24427, -1, 14563, -1, 24474, -1, 24525, 
-  -1, 24535, -1, 24569, -1, 24705, -1, 14650, 
-  -1, 14620, -1, 141012, -1, 24775, -1, 24904, 
-  -1, 24908, -1, 24954, -1, 25010, -1, 24996, 
-  -1, 25007, -1, 25054, -1, 25104, -1, 25115, 
-  -1, 25181, -1, 25265, -1, 25300, -1, 25424, 
-  -1, 142092, -1, 25405, -1, 25340, -1, 25448, 
-  -1, 25475, -1, 25572, -1, 142321, -1, 25634, 
-  -1, 25541, -1, 25513, -1, 14894, -1, 25705, 
-  -1, 25726, -1, 25757, -1, 25719, -1, 14956, 
-  -1, 25964, -1, 143370, -1, 26083, -1, 26360, 
-  -1, 26185, -1, 15129, -1, 15112, -1, 15076, 
-  -1, 20882, -1, 20885, -1, 26368, -1, 26268, 
-  -1, 32941, -1, 17369, -1, 26401, -1, 26462, 
-  -1, 26451, -1, 144323, -1, 15177, -1, 26618, 
-  -1, 26501, -1, 26706, -1, 144493, -1, 26766, 
-  -1, 26655, -1, 26900, -1, 26946, -1, 27043, 
-  -1, 27114, -1, 27304, -1, 145059, -1, 27355, 
-  -1, 15384, -1, 27425, -1, 145575, -1, 27476, 
-  -1, 15438, -1, 27506, -1, 27551, -1, 27579, 
-  -1, 146061, -1, 138507, -1, 146170, -1, 27726, 
-  -1, 146620, -1, 27839, -1, 27853, -1, 27751, 
-  -1, 27926, -1, 27966, -1, 28009, -1, 28024, 
-  -1, 28037, -1, 146718, -1, 27956, -1, 28207, 
-  -1, 28270, -1, 15667, -1, 28359, -1, 147153, 
-  -1, 28153, -1, 28526, -1, 147294, -1, 147342, 
-  -1, 28614, -1, 28729, -1, 28699, -1, 15766, 
-  -1, 28746, -1, 28797, -1, 28791, -1, 28845, 
-  -1, 132389, -1, 28997, -1, 148067, -1, 29084, 
-  -1, 148395, -1, 29224, -1, 29264, -1, 149000, 
-  -1, 29312, -1, 29333, -1, 149301, -1, 149524, 
-  -1, 29562, -1, 29579, -1, 16044, -1, 29605, 
-  -1, 16056, -1, 29767, -1, 29788, -1, 29829, 
-  -1, 29898, -1, 16155, -1, 29988, -1, 150582, 
-  -1, 30014, -1, 150674, -1, 139679, -1, 30224, 
-  -1, 151457, -1, 151480, -1, 151620, -1, 16380, 
-  -1, 16392, -1, 151795, -1, 151794, -1, 151833, 
-  -1, 151859, -1, 30494, -1, 30495, -1, 30603, 
-  -1, 16454, -1, 16534, -1, 152605, -1, 30798, 
-  -1, 16611, -1, 153126, -1, 153242, -1, 153285, 
-  -1, 31211, -1, 16687, -1, 31306, -1, 31311, 
-  -1, 153980, -1, 154279, -1, 31470, -1, 16898, 
-  -1, 154539, -1, 31686, -1, 31689, -1, 16935, 
-  -1, 154752, -1, 31954, -1, 17056, -1, 31976, 
-  -1, 31971, -1, 32000, -1, 155526, -1, 32099, 
-  -1, 17153, -1, 32199, -1, 32258, -1, 32325, 
-  -1, 17204, -1, 156200, -1, 156231, -1, 17241, 
-  -1, 156377, -1, 32634, -1, 156478, -1, 32661, 
-  -1, 32762, -1, 156890, -1, 156963, -1, 32864, 
-  -1, 157096, -1, 32880, -1, 144223, -1, 17365, 
-  -1, 32946, -1, 33027, -1, 17419, -1, 33086, 
-  -1, 23221, -1, 157607, -1, 157621, -1, 144275, 
-  -1, 144284, -1, 33284, -1, 36766, -1, 17515, 
-  -1, 33425, -1, 33419, -1, 33437, -1, 21171, 
-  -1, 33457, -1, 33459, -1, 33469, -1, 33510, 
-  -1, 158524, -1, 33565, -1, 33635, -1, 33709, 
-  -1, 33571, -1, 33725, -1, 33767, -1, 33619, 
-  -1, 33738, -1, 33740, -1, 33756, -1, 158774, 
-  -1, 159083, -1, 158933, -1, 17707, -1, 34033, 
-  -1, 34035, -1, 34070, -1, 160714, -1, 34148, 
-  -1, 159532, -1, 17757, -1, 17761, -1, 159665, 
-  -1, 159954, -1, 17771, -1, 34384, -1, 34407, 
-  -1, 34409, -1, 34473, -1, 34440, -1, 34574, 
-  -1, 34530, -1, 34600, -1, 34667, -1, 34694, 
-  -1, 17879, -1, 34785, -1, 34817, -1, 17913, 
-  -1, 34912, -1, 161383, -1, 35031, -1, 35038, 
-  -1, 17973, -1, 35066, -1, 13499, -1, 161966, 
-  -1, 162150, -1, 18110, -1, 18119, -1, 35488, 
-  -1, 162984, -1, 36011, -1, 36033, -1, 36123, 
-  -1, 36215, -1, 163631, -1, 133124, -1, 36299, 
-  -1, 36284, -1, 36336, -1, 133342, -1, 36564, 
-  -1, 165330, -1, 165357, -1, 37012, -1, 37105, 
-  -1, 37137, -1, 165678, -1, 37147, -1, 37432, 
-  -1, 37591, -1, 37592, -1, 37500, -1, 37881, 
-  -1, 37909, -1, 166906, -1, 38283, -1, 18837, 
-  -1, 38327, -1, 167287, -1, 18918, -1, 38595, 
-  -1, 23986, -1, 38691, -1, 168261, -1, 168474, 
-  -1, 19054, -1, 19062, -1, 38880, -1, 168970, 
-  -1, 19122, -1, 169110, -1, 38953, -1, 169398, 
-  -1, 39138, -1, 19251, -1, 39209, -1, 39335, 
-  -1, 39362, -1, 39422, -1, 19406, -1, 170800, 
-  -1, 40000, -1, 40189, -1, 19662, -1, 19693, 
-  -1, 40295, -1, 172238, -1, 19704, -1, 172293, 
-  -1, 172558, -1, 172689, -1, 19798, -1, 40702, 
-  -1, 40709, -1, 40719, -1, 40726, -1, 173568, 
-  -1, };
-
-static
-const uint16_t utf8proc_stage1table[] = {
-  0, 256, 512, 768, 1024, 1280, 1536, 
-  1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 
-  3840, 4096, 4352, 4608, 4864, 5120, 5376, 5632, 
-  5888, 6144, 6400, 6656, 6912, 2048, 7168, 7424, 
-  7680, 7936, 8192, 8448, 8704, 8960, 9216, 9472, 
-  9728, 9984, 10240, 10496, 10752, 11008, 11264, 11520, 
-  11776, 12032, 12288, 12544, 12800, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 13056, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  13312, 13568, 5376, 5376, 5376, 13824, 2048, 2048, 
-  14080, 14336, 2048, 2048, 2048, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  14592, 14848, 14848, 14848, 14848, 14848, 14848, 14848, 
-  14848, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15360, 15616, 15872, 16128, 16384, 16640, 
-  16896, 17152, 17408, 2048, 17664, 17920, 2048, 2048, 
-  2048, 18176, 18432, 18688, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 5376, 5376, 5376, 18944, 19200, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 19456, 19712, 19968, 20224, 20480, 20736, 20992, 
-  21248, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 5376, 
-  5376, 5376, 5376, 5376, 5376, 5376, 5376, 21504, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 21760, 22016, 22272, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 22528, 22784, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 2048, 2048, 2048, 2048, 2048, 2048, 2048, 
-  2048, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  23040, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  15104, 15104, 15104, 15104, 15104, 15104, 15104, 15104, 
-  23040, };
-
-static
-const uint16_t utf8proc_stage2table[] = {
-  1, 1, 1, 1, 1, 1, 1, 
-  1, 1, 2, 3, 2, 4, 3, 1, 
-  1, 1, 1, 1, 1, 1, 1, 1, 
-  1, 1, 1, 1, 1, 5, 5, 5, 
-  6, 7, 8, 8, 9, 10, 9, 8, 
-  8, 11, 12, 8, 13, 14, 15, 14, 
-  14, 16, 16, 16, 16, 16, 16, 16, 
-  16, 16, 16, 14, 8, 17, 18, 19, 
-  8, 8, 20, 21, 22, 23, 24, 25, 
-  26, 27, 28, 29, 30, 31, 32, 33, 
-  34, 35, 36, 37, 38, 39, 40, 41, 
-  42, 43, 44, 45, 11, 8, 12, 46, 
-  47, 46, 48, 49, 50, 51, 52, 53, 
-  54, 55, 56, 57, 58, 59, 60, 61, 
-  62, 63, 64, 65, 66, 67, 68, 69, 
-  70, 71, 72, 73, 11, 74, 12, 74, 
-  1, 1, 1, 1, 1, 1, 3, 1, 
-  1, 1, 1, 1, 1, 1, 1, 1, 
-  1, 1, 1, 1, 1, 1, 1, 1, 
-  1, 1, 1, 1, 1, 1, 1, 1, 
-  1, 75, 8, 10, 10, 10, 10, 76, 
-  76, 77, 76, 78, 79, 74, 80, 76, 
-  81, 82, 83, 84, 85, 86, 87, 76, 
-  8, 88, 89, 90, 91, 92, 93, 94, 
-  8, 95, 96, 97, 98, 99, 100, 101, 
-  102, 103, 104, 105, 106, 107, 108, 109, 
-  110, 111, 112, 113, 114, 115, 116, 117, 
-  74, 118, 119, 120, 121, 122, 123, 124, 
-  125, 126, 127, 128, 129, 130, 131, 132, 
-  133, 134, 135, 136, 137, 138, 139, 140, 
-  141, 142, 143, 144, 145, 146, 147, 148, 
-  74, 149, 150, 151, 152, 153, 154, 155, 
-  156, 157, 158, 159, 160, 161, 162, 163, 
-  164, 165, 166, 167, 168, 169, 170, 171, 
-  172, 173, 174, 175, 176, 177, 178, 179, 
-  180, 181, 182, 183, 184, 185, 186, 187, 
-  188, 189, 190, 191, 192, 193, 194, 195, 
-  196, 197, 198, 199, 200, 201, 202, 203, 
-  204, 205, 206, 207, 208, 209, 210, 211, 
-  212, 213, 214, 215, 216, 217, 218, 219, 
-  220, 221, 222, 223, 224, 225, 226, 227, 
-  228, 229, 230, 231, 232, 233, 234, 235, 
-  236, 237, 238, 239, 240, 241, 242, 243, 
-  244, 245, 246, 247, 248, 249, 250, 251, 
-  252, 253, 254, 255, 256, 257, 258, 259, 
-  260, 261, 262, 263, 264, 265, 266, 267, 
-  268, 269, 270, 271, 272, 273, 274, 275, 
-  276, 277, 278, 279, 280, 281, 282, 283, 
-  284, 285, 286, 287, 288, 289, 290, 291, 
-  292, 293, 294, 295, 296, 297, 213, 298, 
-  299, 300, 301, 302, 303, 304, 305, 306, 
-  307, 308, 309, 310, 213, 311, 312, 313, 
-  314, 315, 316, 317, 318, 319, 320, 321, 
-  322, 323, 324, 213, 213, 325, 326, 327, 
-  328, 329, 330, 331, 332, 333, 334, 335, 
-  336, 337, 338, 213, 339, 340, 341, 213, 
-  342, 339, 339, 339, 339, 343, 344, 345, 
-  346, 347, 348, 349, 350, 351, 352, 353, 
-  354, 355, 356, 357, 358, 359, 360, 361, 
-  362, 363, 364, 365, 366, 367, 368, 369, 
-  370, 371, 372, 373, 374, 375, 376, 377, 
-  378, 379, 380, 381, 382, 383, 384, 385, 
-  386, 387, 388, 389, 390, 391, 392, 393, 
-  394, 395, 396, 397, 398, 399, 400, 401, 
-  402, 403, 404, 405, 406, 407, 408, 409, 
-  410, 411, 412, 413, 414, 415, 416, 417, 
-  418, 419, 420, 421, 422, 423, 424, 425, 
-  426, 427, 428, 429, 430, 431, 432, 433, 
-  434, 435, 213, 436, 437, 438, 439, 440, 
-  441, 442, 443, 444, 445, 446, 447, 448, 
-  449, 450, 451, 452, 453, 213, 213, 213, 
-  213, 213, 213, 454, 455, 456, 457, 458, 
-  213, 213, 459, 460, 461, 462, 463, 464, 
-  465, 466, 467, 468, 469, 470, 471, 472, 
-  473, 213, 213, 213, 474, 475, 213, 476, 
-  477, 213, 478, 213, 479, 213, 213, 213, 
-  213, 480, 213, 213, 481, 213, 213, 213, 
-  213, 482, 483, 213, 484, 213, 213, 213, 
-  485, 213, 213, 486, 213, 213, 487, 213, 
-  213, 213, 213, 213, 213, 213, 488, 213, 
-  213, 489, 213, 213, 490, 213, 213, 213, 
-  213, 491, 492, 493, 494, 495, 213, 213, 
-  213, 213, 213, 496, 213, 339, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 497, 498, 499, 500, 501, 502, 503, 
-  504, 505, 506, 506, 507, 507, 507, 507, 
-  507, 507, 507, 46, 46, 46, 46, 506, 
-  506, 506, 506, 506, 506, 506, 506, 506, 
-  506, 507, 507, 46, 46, 46, 46, 46, 
-  46, 508, 509, 510, 511, 512, 513, 46, 
-  46, 514, 515, 516, 517, 518, 46, 46, 
-  46, 46, 46, 46, 46, 46, 46, 507, 
-  46, 46, 46, 46, 46, 46, 46, 46, 
-  46, 46, 46, 46, 46, 46, 46, 46, 
-  46, 519, 520, 521, 522, 523, 524, 525, 
-  526, 527, 528, 529, 530, 531, 524, 524, 
-  532, 524, 533, 524, 534, 535, 536, 537, 
-  537, 537, 537, 536, 538, 537, 537, 537, 
-  537, 537, 539, 539, 540, 541, 542, 543, 
-  544, 545, 537, 537, 537, 537, 546, 547, 
-  537, 548, 549, 537, 537, 550, 550, 550, 
-  550, 551, 537, 537, 537, 537, 524, 524, 
-  524, 552, 553, 554, 555, 556, 557, 524, 
-  537, 537, 537, 524, 524, 524, 537, 537, 
-  558, 524, 524, 524, 537, 537, 537, 537, 
-  524, 536, 537, 537, 524, 559, 560, 560, 
-  559, 560, 560, 559, 524, 524, 524, 524, 
-  524, 524, 524, 524, 524, 524, 524, 524, 
-  524, 0, 0, 0, 0, 561, 46, 0, 
-  0, 0, 0, 562, 563, 564, 565, 566, 
-  0, 0, 0, 0, 0, 86, 567, 568, 
-  569, 570, 571, 572, 0, 573, 0, 574, 
-  575, 576, 577, 578, 579, 580, 581, 582, 
-  583, 584, 585, 586, 587, 588, 589, 590, 
-  591, 592, 593, 0, 594, 595, 596, 597, 
-  598, 599, 600, 601, 602, 603, 604, 605, 
-  606, 607, 608, 609, 610, 611, 612, 613, 
-  614, 615, 616, 617, 618, 619, 620, 621, 
-  622, 623, 624, 625, 626, 627, 628, 629, 
-  630, 631, 632, 633, 634, 635, 636, 637, 
-  0, 638, 639, 640, 641, 642, 643, 644, 
-  213, 645, 646, 647, 648, 649, 650, 651, 
-  652, 653, 654, 655, 656, 657, 658, 659, 
-  660, 661, 662, 663, 664, 665, 666, 667, 
-  668, 669, 670, 671, 213, 672, 673, 74, 
-  674, 675, 676, 677, 678, 213, 679, 680, 
-  681, 682, 683, 684, 685, 686, 687, 688, 
-  689, 690, 691, 692, 693, 694, 695, 696, 
-  697, 698, 699, 700, 701, 702, 703, 704, 
-  705, 706, 707, 708, 709, 710, 711, 712, 
-  713, 714, 715, 716, 717, 718, 719, 720, 
-  721, 722, 723, 724, 725, 726, 727, 728, 
-  729, 730, 731, 732, 733, 734, 735, 736, 
-  737, 738, 739, 740, 741, 742, 743, 744, 
-  745, 746, 747, 748, 749, 750, 751, 752, 
-  753, 754, 755, 756, 757, 758, 759, 760, 
-  761, 762, 763, 764, 765, 766, 767, 768, 
-  769, 770, 771, 772, 773, 774, 775, 776, 
-  777, 778, 779, 780, 781, 782, 783, 784, 
-  785, 786, 787, 788, 789, 790, 791, 792, 
-  793, 794, 795, 796, 797, 798, 799, 800, 
-  801, 802, 803, 804, 805, 806, 807, 808, 
-  809, 810, 811, 812, 524, 524, 524, 524, 
-  0, 813, 813, 814, 815, 816, 817, 818, 
-  819, 820, 821, 822, 823, 824, 825, 826, 
-  827, 828, 829, 830, 831, 832, 833, 834, 
-  835, 836, 837, 838, 839, 840, 841, 842, 
-  843, 844, 845, 846, 847, 848, 849, 850, 
-  851, 852, 853, 854, 855, 856, 857, 858, 
-  859, 860, 861, 862, 863, 864, 865, 866, 
-  867, 868, 869, 870, 871, 872, 873, 874, 
-  875, 876, 877, 878, 879, 880, 881, 882, 
-  883, 884, 885, 886, 887, 888, 889, 890, 
-  891, 892, 893, 894, 895, 896, 897, 898, 
-  899, 900, 901, 902, 903, 904, 905, 906, 
-  907, 908, 909, 910, 911, 912, 913, 914, 
-  915, 916, 917, 918, 919, 920, 921, 922, 
-  923, 924, 925, 926, 927, 928, 929, 930, 
-  931, 932, 933, 934, 935, 936, 937, 938, 
-  939, 940, 941, 942, 943, 944, 945, 946, 
-  947, 948, 949, 950, 951, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 952, 953, 954, 955, 956, 957, 
-  958, 959, 960, 961, 962, 963, 964, 965, 
-  966, 967, 968, 969, 970, 971, 972, 973, 
-  974, 975, 976, 977, 978, 979, 980, 981, 
-  982, 983, 984, 985, 986, 987, 988, 989, 
-  0, 0, 507, 990, 990, 990, 990, 990, 
-  990, 0, 991, 992, 993, 994, 995, 996, 
-  997, 998, 999, 1000, 1001, 1002, 1003, 1004, 
-  1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 
-  1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 
-  1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 
-  1029, 0, 990, 1030, 0, 0, 0, 0, 
-  0, 0, 537, 524, 524, 524, 524, 537, 
-  524, 524, 524, 1031, 537, 524, 524, 524, 
-  524, 524, 524, 537, 537, 537, 537, 537, 
-  537, 524, 524, 537, 524, 524, 1031, 1032, 
-  524, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 
-  1040, 1041, 1042, 1042, 1043, 1044, 1045, 1046, 
-  1047, 1046, 1048, 1049, 1046, 524, 537, 1046, 
-  1041, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 0, 0, 0, 0, 
-  0, 1050, 1050, 1050, 1046, 1046, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1051, 1051, 1051, 1051, 0, 0, 0, 
-  0, 0, 0, 0, 1052, 14, 1053, 76, 
-  76, 524, 524, 524, 524, 524, 524, 0, 
-  0, 0, 0, 0, 1053, 0, 0, 1053, 
-  1053, 0, 1054, 1055, 1056, 1057, 1058, 1059, 
-  1060, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 0, 0, 0, 0, 
-  0, 1061, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1062, 1054, 1063, 1064, 1065, 1066, 1067, 
-  1068, 1069, 1070, 1071, 1072, 1073, 1074, 537, 
-  524, 524, 524, 524, 524, 537, 524, 524, 
-  0, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 
-  1075, 1075, 1075, 9, 1076, 1076, 1053, 1054, 
-  1054, 1077, 1054, 1054, 1054, 1054, 1078, 1079, 
-  1080, 1081, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1082, 1083, 1084, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1085, 1086, 1053, 1087, 524, 
-  524, 524, 524, 524, 524, 524, 1051, 813, 
-  524, 524, 524, 524, 537, 524, 1061, 1061, 
-  524, 524, 76, 537, 524, 524, 537, 1054, 
-  1054, 16, 16, 16, 16, 16, 16, 16, 
-  16, 16, 16, 1054, 1054, 1054, 1088, 1088, 
-  1054, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 
-  1053, 1053, 1053, 1053, 1053, 1053, 1053, 0, 
-  80, 1054, 1089, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 524, 537, 524, 524, 537, 524, 524, 
-  537, 537, 537, 524, 537, 537, 524, 537, 
-  524, 524, 524, 537, 524, 537, 524, 537, 
-  524, 537, 524, 524, 0, 0, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 
-  1054, 1054, 1054, 1054, 1054, 1054, 1054, 1090, 
-  1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 
-  1090, 1090, 1054, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 
-  1091, 1091, 1091, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 524, 524, 524, 524, 
-  524, 524, 524, 537, 524, 1092, 1092, 76, 
-  8, 8, 8, 1092, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 1090, 1090, 1093, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 1094, 1095, 339, 339, 339, 339, 339, 
-  339, 1096, 1097, 339, 1098, 1099, 339, 339, 
-  339, 339, 339, 0, 0, 1100, 339, 1093, 
-  1093, 1093, 1090, 1090, 1090, 1090, 1090, 1090, 
-  1090, 1090, 1093, 1093, 1093, 1093, 1101, 0, 
-  0, 339, 524, 537, 524, 524, 0, 0, 
-  0, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 
-  1109, 339, 339, 1090, 1090, 990, 990, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 990, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 339, 339, 339, 339, 
-  339, 0, 1090, 1093, 1093, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 0, 
-  339, 339, 0, 0, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 0, 0, 0, 339, 
-  339, 339, 339, 0, 0, 1111, 339, 1112, 
-  1093, 1093, 1090, 1090, 1090, 1090, 0, 0, 
-  1113, 1093, 0, 0, 1114, 1115, 1101, 339, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  1116, 0, 0, 0, 0, 1117, 1118, 0, 
-  1119, 339, 339, 1090, 1090, 0, 0, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 339, 339, 10, 10, 1120, 1120, 1120, 
-  1120, 1120, 1120, 812, 0, 0, 0, 0, 
-  0, 0, 1090, 1090, 1093, 0, 339, 339, 
-  339, 339, 339, 339, 0, 0, 0, 0, 
-  339, 339, 0, 0, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 1121, 0, 339, 1122, 
-  0, 339, 339, 0, 0, 1111, 0, 1093, 
-  1093, 1093, 1090, 1090, 0, 0, 0, 0, 
-  1090, 1090, 0, 0, 1090, 1090, 1101, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 1123, 1124, 1125, 339, 0, 1126, 
-  0, 0, 0, 0, 0, 0, 0, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1090, 1090, 339, 339, 339, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 1090, 1090, 1093, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 0, 
-  339, 339, 339, 0, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 0, 339, 339, 
-  339, 339, 339, 0, 0, 1111, 339, 1093, 
-  1093, 1093, 1090, 1090, 1090, 1090, 1090, 0, 
-  1090, 1090, 1093, 0, 1093, 1093, 1101, 0, 
-  0, 339, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 1090, 1090, 0, 0, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 0, 10, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 1090, 1093, 1093, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 0, 
-  339, 339, 0, 0, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 0, 339, 339, 
-  339, 339, 339, 0, 0, 1111, 339, 1127, 
-  1090, 1093, 1090, 1090, 1090, 0, 0, 0, 
-  1128, 1129, 0, 0, 1130, 1131, 1101, 0, 
-  0, 0, 0, 0, 0, 0, 0, 1132, 
-  1133, 0, 0, 0, 0, 1134, 1135, 0, 
-  339, 339, 339, 0, 0, 0, 0, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 812, 339, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 1090, 339, 0, 339, 339, 
-  339, 339, 339, 339, 0, 0, 0, 339, 
-  339, 339, 0, 1136, 339, 1137, 339, 0, 
-  0, 0, 339, 339, 0, 339, 0, 339, 
-  339, 0, 0, 0, 339, 339, 0, 0, 
-  0, 339, 339, 339, 0, 0, 0, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 0, 0, 0, 0, 1138, 
-  1093, 1090, 1093, 1093, 0, 0, 0, 1139, 
-  1140, 1093, 0, 1141, 1142, 1143, 1101, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  1144, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1120, 1120, 1120, 76, 76, 76, 76, 
-  76, 76, 10, 76, 0, 0, 0, 0, 
-  0, 0, 1093, 1093, 1093, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 0, 339, 339, 
-  339, 339, 339, 0, 0, 0, 0, 1090, 
-  1090, 1090, 1093, 1093, 1093, 1093, 0, 1145, 
-  1090, 1146, 0, 1090, 1090, 1090, 1101, 0, 
-  0, 0, 0, 0, 0, 0, 1147, 1148, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 0, 0, 0, 0, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 1093, 1093, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 0, 339, 339, 
-  339, 339, 339, 0, 0, 1111, 339, 1093, 
-  1149, 1150, 1093, 1151, 1093, 1093, 0, 1152, 
-  1153, 1154, 0, 1155, 1156, 1090, 1101, 0, 
-  0, 0, 0, 0, 0, 0, 1157, 1158, 
-  0, 0, 0, 0, 0, 0, 0, 339, 
-  0, 339, 339, 1090, 1090, 0, 0, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 0, 76, 76, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 1093, 1093, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 0, 0, 0, 0, 1159, 
-  1093, 1093, 1090, 1090, 1090, 0, 0, 1160, 
-  1161, 1093, 0, 1162, 1163, 1164, 1101, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  1165, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 0, 0, 0, 0, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 1093, 1093, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  0, 0, 0, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 0, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 0, 339, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 0, 0, 1166, 0, 0, 0, 0, 
-  1167, 1093, 1093, 1090, 1090, 1090, 0, 1090, 
-  0, 1093, 1168, 1169, 1093, 1170, 1171, 1172, 
-  1173, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 1093, 1093, 990, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 1090, 339, 1174, 1090, 1090, 1090, 
-  1090, 1175, 1175, 1101, 0, 0, 0, 0, 
-  10, 339, 339, 339, 339, 339, 339, 507, 
-  1090, 1176, 1176, 1176, 1176, 1090, 1090, 1090, 
-  990, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 990, 990, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 339, 339, 0, 339, 0, 0, 
-  339, 339, 0, 339, 0, 0, 339, 0, 
-  0, 0, 0, 0, 0, 339, 339, 339, 
-  339, 0, 339, 339, 339, 339, 339, 339, 
-  339, 0, 339, 339, 339, 0, 339, 0, 
-  339, 0, 0, 339, 339, 0, 339, 339, 
-  339, 339, 1090, 339, 1177, 1090, 1090, 1090, 
-  1090, 1178, 1178, 0, 1090, 1090, 339, 0, 
-  0, 339, 339, 339, 339, 339, 0, 507, 
-  0, 1179, 1179, 1179, 1179, 1090, 1090, 0, 
-  0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 0, 0, 1180, 1181, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 812, 812, 812, 990, 990, 990, 
-  990, 990, 990, 990, 990, 1182, 990, 990, 
-  990, 990, 990, 990, 812, 812, 812, 812, 
-  812, 537, 537, 812, 812, 812, 812, 812, 
-  812, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 812, 537, 812, 
-  537, 812, 1183, 11, 12, 11, 12, 1093, 
-  1093, 339, 339, 339, 1184, 339, 339, 339, 
-  339, 0, 339, 339, 339, 339, 1185, 339, 
-  339, 339, 339, 1186, 339, 339, 339, 339, 
-  1187, 339, 339, 339, 339, 1188, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 1189, 339, 0, 0, 0, 0, 
-  0, 0, 1190, 1191, 1192, 1193, 1194, 1195, 
-  1196, 1197, 1198, 1191, 1191, 1191, 1191, 1090, 
-  1093, 1191, 1199, 524, 524, 1101, 990, 524, 
-  524, 339, 339, 339, 339, 0, 0, 0, 
-  0, 1090, 1090, 1090, 1200, 1090, 1090, 1090, 
-  1090, 0, 1090, 1090, 1090, 1090, 1201, 1090, 
-  1090, 1090, 1090, 1202, 1090, 1090, 1090, 1090, 
-  1203, 1090, 1090, 1090, 1090, 1204, 1090, 1090, 
-  1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 
-  1090, 1090, 1205, 1090, 1090, 1090, 0, 812, 
-  812, 812, 812, 812, 812, 812, 812, 537, 
-  812, 812, 812, 812, 812, 812, 0, 0, 
-  812, 990, 990, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 0, 339, 339, 1206, 1207, 
-  339, 0, 339, 339, 0, 1093, 1090, 1208, 
-  1090, 1090, 1093, 1090, 0, 0, 0, 1090, 
-  1111, 1093, 1101, 0, 0, 0, 0, 0, 
-  0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 990, 990, 990, 990, 990, 
-  990, 339, 339, 339, 339, 339, 339, 1093, 
-  1093, 1090, 1090, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 
-  1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 
-  1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 
-  1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 
-  1240, 1241, 1242, 1243, 1244, 1245, 1246, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 990, 1247, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 0, 0, 0, 0, 0, 
-  1248, 1248, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 0, 339, 339, 339, 339, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 0, 339, 339, 339, 339, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 0, 339, 339, 339, 339, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 0, 0, 0, 0, 
-  524, 812, 990, 990, 990, 990, 990, 990, 
-  990, 990, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 1120, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 990, 990, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 7, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 11, 12, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 990, 990, 990, 1249, 
-  1249, 1249, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 339, 
-  339, 339, 339, 1090, 1090, 1101, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 1090, 1090, 1101, 990, 990, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 1090, 1090, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 339, 
-  339, 339, 0, 1090, 1090, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 1250, 1250, 1093, 
-  1090, 1090, 1090, 1090, 1090, 1090, 1090, 1093, 
-  1093, 1093, 1093, 1093, 1093, 1093, 1093, 1090, 
-  1093, 1093, 1090, 1090, 1090, 1090, 1090, 1090, 
-  1090, 1090, 1090, 1101, 1090, 990, 990, 990, 
-  507, 990, 990, 990, 10, 339, 524, 0, 
-  0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 0, 0, 0, 0, 0, 
-  0, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 
-  1251, 1251, 1251, 0, 0, 0, 0, 0, 
-  0, 8, 8, 8, 8, 8, 8, 1030, 
-  8, 8, 8, 8, 558, 558, 558, 7, 
-  0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 507, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 1032, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 0, 
-  0, 1090, 1090, 1090, 1093, 1093, 1093, 1093, 
-  1090, 1090, 1252, 1252, 1252, 0, 0, 0, 
-  0, 1093, 1093, 1090, 1093, 1093, 1093, 1093, 
-  1093, 1093, 1031, 524, 537, 0, 0, 0, 
-  0, 76, 0, 0, 0, 8, 8, 1110, 
-  1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 0, 
-  0, 339, 339, 339, 339, 339, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 0, 0, 0, 0, 0, 
-  0, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 
-  1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 
-  1093, 1093, 339, 339, 339, 339, 339, 339, 
-  339, 1093, 1093, 0, 0, 0, 0, 0, 
-  0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 0, 0, 0, 0, 8, 
-  8, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  524, 537, 1093, 1093, 1093, 0, 0, 990, 
-  990, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1090, 1090, 1090, 1090, 1093, 1253, 1254, 
-  1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 
-  339, 339, 1263, 1264, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 1111, 1265, 1090, 
-  1090, 1090, 1090, 1266, 1267, 1268, 1269, 1270, 
-  1271, 1272, 1273, 1274, 1275, 1276, 339, 339, 
-  339, 339, 339, 339, 339, 0, 0, 0, 
-  0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 990, 990, 990, 990, 990, 
-  990, 990, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 524, 537, 524, 524, 
-  524, 524, 524, 524, 524, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 1277, 1278, 1279, 
-  507, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 
-  1287, 1288, 1289, 1290, 507, 1291, 1292, 1293, 
-  1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 
-  1302, 1303, 1304, 1305, 1306, 1307, 1308, 507, 
-  1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 
-  1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 
-  1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 
-  1333, 1334, 1335, 1336, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 1337, 213, 213, 213, 213, 1338, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 213, 213, 213, 213, 
-  213, 213, 213, 213, 1339, 1340, 1341, 1342, 
-  1307, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 
-  1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 
-  1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 
-  1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 
-  1374, 524, 524, 537, 524, 524, 524, 524, 
-  524, 524, 524, 537, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 524, 
-  537, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 
-  1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 
-  1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 
-  1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 
-  1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 
-  1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 
-  1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 
-  1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 
-  1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 
-  1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 
-  1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 
-  1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 
-  1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 
-  1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 
-  1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 
-  1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 
-  1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 
-  1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 
-  1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 
-  1526, 1527, 1528, 1529, 1530, 0, 0, 0, 
-  0, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 
-  1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 
-  1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 
-  1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 
-  1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 
-  1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 
-  1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 
-  1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 
-  1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 
-  1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 
-  1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 
-  1618, 1619, 1620, 0, 0, 0, 0, 0, 
-  0, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 
-  1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 
-  1636, 1637, 1638, 1639, 1640, 1641, 1642, 0, 
-  0, 1643, 1644, 1645, 1646, 1647, 1648, 0, 
-  0, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 
-  1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 
-  1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 
-  1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 
-  1680, 1681, 1682, 1683, 1684, 1685, 1686, 0, 
-  0, 1687, 1688, 1689, 1690, 1691, 1692, 0, 
-  0, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 
-  1700, 0, 1701, 0, 1702, 0, 1703, 0, 
-  1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 
-  1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 
-  1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 
-  1728, 1729, 1730, 1731, 1732, 1733, 1734, 0, 
-  0, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 
-  1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 
-  1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 
-  1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 
-  1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 
-  1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 
-  1782, 1783, 1784, 1785, 1786, 1787, 0, 1788, 
-  1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 
-  1797, 1798, 1799, 1800, 1801, 1802, 0, 1803, 
-  1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 
-  1812, 1813, 1814, 1815, 1816, 0, 0, 1817, 
-  1818, 1819, 1820, 1821, 1822, 0, 1823, 1824, 
-  1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 
-  1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 
-  1841, 0, 0, 1842, 1843, 1844, 0, 1845, 
-  1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 
-  0, 1854, 1855, 1856, 1856, 1856, 1856, 1856, 
-  1857, 1856, 1856, 1856, 80, 1858, 1858, 1250, 
-  1859, 1030, 1860, 1030, 1030, 1030, 1030, 8, 
-  1861, 79, 91, 11, 79, 79, 91, 11, 
-  79, 8, 8, 8, 8, 1862, 1863, 1864, 
-  8, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 
-  75, 9, 9, 9, 1872, 1873, 8, 1874, 
-  1875, 8, 79, 91, 8, 1876, 8, 1877, 
-  47, 47, 8, 8, 8, 1878, 11, 12, 
-  1879, 1880, 1881, 8, 8, 8, 8, 8, 
-  8, 8, 8, 74, 8, 47, 8, 8, 
-  1882, 8, 8, 8, 8, 8, 8, 8, 
-  1856, 80, 80, 80, 80, 0, 0, 0, 
-  0, 0, 0, 80, 80, 80, 80, 80, 
-  80, 1883, 1884, 0, 0, 1885, 1886, 1887, 
-  1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 
-  1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 
-  1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 
-  0, 1912, 1913, 1914, 1915, 1916, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 10, 10, 10, 10, 10, 10, 10, 
-  10, 1917, 10, 10, 10, 10, 10, 10, 
-  10, 10, 10, 10, 10, 10, 10, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 524, 524, 550, 550, 524, 524, 524, 
-  524, 550, 550, 550, 524, 524, 813, 813, 
-  813, 813, 524, 813, 813, 813, 550, 550, 
-  524, 537, 524, 550, 550, 537, 537, 537, 
-  537, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1918, 1919, 1920, 1921, 76, 1922, 1923, 
-  1924, 76, 1925, 1926, 1927, 1927, 1927, 1928, 
-  1929, 1930, 1930, 1931, 1932, 76, 1933, 1934, 
-  76, 76, 1935, 1936, 1937, 1937, 1937, 76, 
-  76, 1938, 1939, 1940, 76, 1941, 76, 1942, 
-  76, 1941, 76, 1943, 1944, 1945, 1920, 82, 
-  1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 
-  1954, 1955, 1956, 76, 1957, 1958, 1959, 1960, 
-  1961, 1962, 74, 74, 74, 74, 1963, 1964, 
-  1946, 1956, 1965, 76, 74, 76, 76, 1966, 
-  0, 0, 0, 0, 1967, 1968, 1969, 1970, 
-  1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 
-  1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 
-  1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 
-  1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 
-  2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 
-  2011, 1249, 1249, 1249, 2012, 2013, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 2014, 74, 2015, 74, 2016, 76, 76, 
-  76, 76, 76, 2017, 2018, 76, 76, 76, 
-  76, 74, 76, 76, 74, 76, 76, 74, 
-  76, 76, 76, 76, 76, 76, 76, 2019, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 2020, 2021, 
-  2022, 2023, 76, 2024, 76, 2025, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 2026, 2026, 2027, 2028, 74, 74, 
-  74, 2029, 2030, 2026, 2031, 2032, 2026, 74, 
-  74, 74, 2026, 13, 83, 74, 2026, 2026, 
-  74, 74, 74, 2026, 2026, 2026, 2026, 74, 
-  2026, 2026, 2026, 2026, 2033, 2034, 2035, 2036, 
-  74, 74, 74, 74, 2026, 2037, 2038, 2026, 
-  2039, 2040, 2026, 2026, 2026, 74, 74, 74, 
-  74, 74, 2026, 74, 2026, 2041, 2026, 2026, 
-  2026, 2026, 2042, 2026, 2043, 2044, 2045, 2026, 
-  2046, 2047, 2048, 2026, 2026, 2026, 2049, 74, 
-  74, 74, 74, 2026, 2026, 2026, 2026, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  2026, 2050, 2051, 2052, 74, 2053, 2054, 2026, 
-  2026, 2026, 2026, 2026, 2026, 74, 2055, 2056, 
-  2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 
-  2065, 2066, 2067, 2068, 2069, 2070, 2071, 2026, 
-  2026, 2072, 2073, 2074, 2075, 2076, 2077, 2078, 
-  2079, 2080, 2081, 2026, 2026, 2026, 74, 74, 
-  2026, 2026, 2082, 2083, 74, 74, 74, 74, 
-  74, 2026, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 2084, 2026, 74, 74, 2026, 
-  2026, 2085, 2086, 2026, 2087, 2088, 2089, 2090, 
-  2091, 2026, 2026, 2092, 2093, 2094, 2095, 2026, 
-  2026, 2026, 74, 74, 74, 74, 74, 2026, 
-  2026, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 2026, 2026, 2026, 2026, 2026, 74, 
-  74, 2026, 2026, 74, 74, 74, 74, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2096, 2097, 2098, 2099, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2100, 2101, 2102, 2103, 74, 
-  74, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 76, 76, 76, 76, 76, 76, 76, 
-  76, 2026, 2026, 2026, 2026, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 2026, 2026, 76, 76, 76, 76, 76, 
-  76, 76, 2104, 2105, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 76, 74, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 812, 76, 
-  76, 76, 76, 76, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 74, 74, 74, 
-  74, 74, 74, 76, 76, 76, 76, 76, 
-  76, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 2106, 2107, 2108, 2109, 2110, 2111, 2112, 
-  2113, 2114, 2115, 2116, 2117, 2118, 2119, 2120, 
-  2121, 2122, 2123, 2124, 2125, 2126, 2127, 2128, 
-  2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 
-  2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 
-  2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 
-  2153, 2154, 2155, 2156, 2157, 2158, 2159, 2160, 
-  2161, 2162, 2163, 2164, 2165, 2166, 2167, 2168, 
-  2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 
-  2177, 2178, 2179, 2180, 2181, 2182, 2183, 2184, 
-  2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 
-  2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 
-  2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 
-  2209, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 
-  2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 
-  2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 
-  2233, 2234, 2235, 2236, 2237, 2238, 2239, 2240, 
-  2241, 2242, 2243, 2244, 1251, 1251, 1251, 1251, 
-  1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 
-  1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 
-  1251, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  74, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 74, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 74, 74, 74, 74, 74, 74, 74, 
-  74, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  74, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 812, 76, 76, 
-  76, 76, 76, 76, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 76, 76, 76, 76, 0, 76, 
-  76, 76, 76, 0, 0, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 0, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 0, 76, 0, 
-  76, 76, 76, 76, 0, 0, 0, 76, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  0, 0, 76, 76, 76, 76, 76, 76, 
-  76, 11, 12, 11, 12, 11, 12, 11, 
-  12, 11, 12, 11, 12, 11, 12, 1251, 
-  1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 
-  1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 
-  1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 
-  1251, 1251, 1251, 1251, 1251, 76, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 0, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  0, 2026, 74, 74, 2026, 2026, 11, 12, 
-  74, 74, 74, 74, 0, 0, 0, 0, 
-  0, 74, 74, 74, 2026, 2026, 2026, 2026, 
-  74, 74, 74, 74, 74, 2026, 2026, 2026, 
-  74, 74, 74, 2026, 2026, 2026, 2026, 11, 
-  12, 11, 12, 11, 12, 0, 0, 0, 
-  0, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 11, 12, 11, 12, 
-  11, 12, 11, 12, 11, 12, 11, 12, 
-  11, 12, 11, 12, 11, 12, 11, 12, 
-  11, 12, 74, 74, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 74, 74, 74, 74, 74, 74, 74, 
-  74, 2026, 74, 74, 74, 74, 74, 74, 
-  74, 2026, 2026, 2026, 2026, 2026, 2026, 74, 
-  74, 74, 2026, 74, 74, 74, 74, 2026, 
-  2026, 2026, 2026, 2026, 74, 2026, 2026, 74, 
-  74, 11, 12, 11, 12, 2026, 74, 74, 
-  74, 74, 2026, 74, 2026, 2026, 2026, 74, 
-  74, 2026, 2026, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 2026, 2026, 2026, 
-  2026, 2026, 2026, 74, 74, 11, 12, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 2026, 2026, 2245, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 74, 2026, 
-  2026, 2026, 2026, 74, 74, 2026, 74, 2026, 
-  74, 74, 2026, 74, 2026, 2026, 2026, 2026, 
-  74, 74, 74, 74, 74, 2026, 2026, 74, 
-  74, 74, 74, 74, 74, 2026, 2026, 2026, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 74, 74, 74, 
-  2026, 2026, 74, 74, 74, 74, 74, 74, 
-  74, 74, 74, 74, 74, 2026, 2026, 74, 
-  74, 74, 74, 2026, 2026, 2026, 2026, 74, 
-  2026, 2026, 74, 74, 2026, 2246, 2247, 2248, 
-  74, 74, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 74, 74, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 74, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  2026, 2026, 2026, 2026, 2026, 2026, 2026, 2026, 
-  74, 74, 74, 74, 74, 2249, 2250, 2026, 
-  74, 74, 74, 2026, 2026, 2026, 2026, 2026, 
-  74, 74, 74, 74, 74, 2026, 2026, 2026, 
-  74, 74, 74, 74, 2026, 74, 74, 74, 
-  2026, 2026, 2026, 2026, 2026, 74, 2026, 74, 
-  74, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 2251, 2252, 2253, 2254, 2255, 2256, 2257, 
-  2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 
-  2266, 2267, 2268, 2269, 2270, 2271, 2272, 2273, 
-  2274, 2275, 2276, 2277, 2278, 2279, 2280, 2281, 
-  2282, 2283, 2284, 2285, 2286, 2287, 2288, 2289, 
-  2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 
-  0, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 
-  2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 
-  2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 
-  2321, 2322, 2323, 2324, 2325, 2326, 2327, 2328, 
-  2329, 2330, 2331, 2332, 2333, 2334, 2335, 2336, 
-  2337, 2338, 2339, 2340, 2341, 2342, 2343, 2344, 
-  0, 2345, 2346, 2347, 2348, 2349, 2350, 2351, 
-  2352, 2353, 2354, 2355, 2356, 2357, 0, 0, 
-  0, 0, 0, 0, 0, 213, 2358, 2359, 
-  213, 0, 0, 0, 0, 0, 0, 0, 
-  0, 2360, 2361, 2362, 2363, 2364, 2365, 2366, 
-  2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 
-  2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 
-  2383, 2384, 2385, 2386, 2387, 2388, 2389, 2390, 
-  2391, 2392, 2393, 2394, 2395, 2396, 2397, 2398, 
-  2399, 2400, 2401, 2402, 2403, 2404, 2405, 2406, 
-  2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 
-  2415, 2416, 2417, 2418, 2419, 2420, 2421, 2422, 
-  2423, 2424, 2425, 2426, 2427, 2428, 2429, 2430, 
-  2431, 2432, 2433, 2434, 2435, 2436, 2437, 2438, 
-  2439, 2440, 2441, 2442, 2443, 2444, 2445, 2446, 
-  2447, 2448, 2449, 2450, 2451, 2452, 2453, 2454, 
-  2455, 2456, 2457, 2458, 2459, 213, 76, 76, 
-  76, 76, 76, 76, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 8, 8, 8, 8, 1251, 8, 
-  8, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 
-  2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 
-  2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 
-  2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 
-  2491, 2492, 2493, 2494, 2495, 2496, 2497, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  2498, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 8, 8, 79, 91, 79, 91, 8, 
-  8, 8, 79, 91, 8, 79, 91, 8, 
-  8, 8, 8, 8, 8, 8, 8, 8, 
-  1030, 0, 0, 0, 0, 79, 91, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 0, 76, 76, 76, 76, 
-  2499, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 2500, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 
-  2508, 2509, 2510, 2511, 2512, 2513, 2514, 2515, 
-  2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 
-  2524, 2525, 2526, 2527, 2528, 2529, 2530, 2531, 
-  2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 
-  2540, 2541, 2542, 2543, 2544, 2545, 2546, 2547, 
-  2548, 2549, 2550, 2551, 2552, 2553, 2554, 2555, 
-  2556, 2557, 2558, 2559, 2560, 2561, 2562, 2563, 
-  2564, 2565, 2566, 2567, 2568, 2569, 2570, 2571, 
-  2572, 2573, 2574, 2575, 2576, 2577, 2578, 2579, 
-  2580, 2581, 2582, 2583, 2584, 2585, 2586, 2587, 
-  2588, 2589, 2590, 2591, 2592, 2593, 2594, 2595, 
-  2596, 2597, 2598, 2599, 2600, 2601, 2602, 2603, 
-  2604, 2605, 2606, 2607, 2608, 2609, 2610, 2611, 
-  2612, 2613, 2614, 2615, 2616, 2617, 2618, 2619, 
-  2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 
-  2628, 2629, 2630, 2631, 2632, 2633, 2634, 2635, 
-  2636, 2637, 2638, 2639, 2640, 2641, 2642, 2643, 
-  2644, 2645, 2646, 2647, 2648, 2649, 2650, 2651, 
-  2652, 2653, 2654, 2655, 2656, 2657, 2658, 2659, 
-  2660, 2661, 2662, 2663, 2664, 2665, 2666, 2667, 
-  2668, 2669, 2670, 2671, 2672, 2673, 2674, 2675, 
-  2676, 2677, 2678, 2679, 2680, 2681, 2682, 2683, 
-  2684, 2685, 2686, 2687, 2688, 2689, 2690, 2691, 
-  2692, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 
-  2700, 2701, 2702, 2703, 2704, 2705, 2706, 2707, 
-  2708, 2709, 2710, 2711, 2712, 2713, 2714, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 0, 0, 0, 
-  0, 2715, 8, 8, 8, 76, 507, 339, 
-  1249, 11, 12, 11, 12, 11, 12, 11, 
-  12, 11, 12, 76, 76, 11, 12, 11, 
-  12, 11, 12, 11, 12, 1030, 11, 12, 
-  12, 76, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 2716, 1032, 536, 1031, 2717, 
-  2717, 1030, 507, 507, 507, 507, 507, 2718, 
-  76, 2719, 2720, 2721, 507, 339, 8, 76, 
-  76, 0, 339, 339, 339, 339, 339, 2722, 
-  339, 339, 339, 339, 2723, 2724, 2725, 2726, 
-  2727, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 
-  2735, 2736, 2737, 2738, 2739, 2740, 2741, 2742, 
-  2743, 2744, 2745, 2746, 339, 2747, 2748, 2749, 
-  2750, 2751, 2752, 339, 339, 339, 339, 339, 
-  2753, 2754, 2755, 2756, 2757, 2758, 2759, 2760, 
-  2761, 2762, 2763, 2764, 2765, 2766, 2767, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 2768, 339, 339, 
-  0, 0, 2769, 2770, 2771, 2772, 2773, 2774, 
-  2775, 1030, 339, 339, 339, 339, 339, 2776, 
-  339, 339, 339, 339, 2777, 2778, 2779, 2780, 
-  2781, 2782, 2783, 2784, 2785, 2786, 2787, 2788, 
-  2789, 2790, 2791, 2792, 2793, 2794, 2795, 2796, 
-  2797, 2798, 2799, 2800, 339, 2801, 2802, 2803, 
-  2804, 2805, 2806, 339, 339, 339, 339, 339, 
-  2807, 2808, 2809, 2810, 2811, 2812, 2813, 2814, 
-  2815, 2816, 2817, 2818, 2819, 2820, 2821, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  2822, 2823, 2824, 2825, 339, 2826, 339, 339, 
-  2827, 2828, 2829, 2830, 8, 507, 2831, 2832, 
-  2833, 0, 0, 0, 0, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 0, 
-  0, 0, 2834, 2835, 2836, 2837, 2838, 2839, 
-  2840, 2841, 2842, 2843, 2844, 2845, 2846, 2847, 
-  2848, 2849, 2850, 2851, 2852, 2853, 2854, 2855, 
-  2856, 2857, 2858, 2859, 2860, 2861, 2862, 2863, 
-  2864, 2865, 2866, 2867, 2868, 2869, 2870, 2871, 
-  2872, 2873, 2874, 2875, 2876, 2877, 2878, 2879, 
-  2880, 2881, 2882, 2883, 2884, 2885, 2886, 2887, 
-  2888, 2889, 2890, 2891, 2892, 2893, 2894, 2895, 
-  2896, 2897, 2898, 2899, 2900, 2901, 2902, 2903, 
-  2904, 2905, 2906, 2907, 2908, 2909, 2910, 2911, 
-  2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 
-  2920, 2921, 2922, 2923, 2924, 2925, 2926, 2927, 
-  0, 812, 812, 2928, 2929, 2930, 2931, 2932, 
-  2933, 2934, 2935, 2936, 2937, 2938, 2939, 2940, 
-  2941, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 0, 0, 0, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 2942, 2943, 2944, 2945, 2946, 2947, 2948, 
-  2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 
-  2957, 2958, 2959, 2960, 2961, 2962, 2963, 2964, 
-  2965, 2966, 2967, 2968, 2969, 2970, 2971, 2972, 
-  0, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 
-  2980, 2981, 2982, 2983, 2984, 2985, 2986, 2987, 
-  2988, 2989, 2990, 2991, 2992, 2993, 2994, 2995, 
-  2996, 2997, 2998, 2999, 3000, 3001, 3002, 3003, 
-  3004, 3005, 3006, 3007, 3008, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 3009, 3010, 3011, 3012, 3013, 3014, 3015, 
-  3016, 3017, 3018, 3019, 3020, 3021, 3022, 3023, 
-  3024, 3025, 3026, 3027, 3028, 3029, 3030, 3031, 
-  3032, 3033, 3034, 3035, 3036, 3037, 3038, 3039, 
-  3040, 3041, 3042, 3043, 3044, 3045, 3046, 3047, 
-  3048, 3049, 3050, 3051, 3052, 3053, 3054, 3055, 
-  812, 3056, 3057, 3058, 3059, 3060, 3061, 3062, 
-  3063, 3064, 3065, 3066, 3067, 3068, 3069, 3070, 
-  3071, 3072, 3073, 3074, 3075, 3076, 3077, 3078, 
-  3079, 3080, 3081, 3082, 3083, 3084, 3085, 3086, 
-  3087, 3088, 3089, 3090, 3091, 3092, 3093, 3094, 
-  3095, 3096, 3097, 3098, 3099, 3100, 3101, 3102, 
-  3103, 3104, 3105, 3106, 3107, 3108, 3109, 3110, 
-  3111, 3112, 3113, 3114, 3115, 3116, 3117, 3118, 
-  3119, 3120, 3121, 3122, 3123, 3124, 3125, 3126, 
-  3127, 3128, 3129, 3130, 3131, 3132, 3133, 3134, 
-  3135, 3136, 3137, 3138, 3139, 3140, 3141, 3142, 
-  3143, 3144, 3145, 3146, 3147, 3148, 3149, 3150, 
-  3151, 3152, 3153, 3154, 3155, 3156, 3157, 3158, 
-  3159, 3160, 3161, 3162, 3163, 3164, 3165, 3166, 
-  3167, 3168, 3169, 3170, 3171, 3172, 3173, 3174, 
-  3175, 3176, 3177, 3178, 3179, 3180, 3181, 3182, 
-  0, 3183, 3184, 3185, 3186, 3187, 3188, 3189, 
-  3190, 3191, 3192, 3193, 3194, 3195, 3196, 3197, 
-  3198, 3199, 3200, 3201, 3202, 3203, 3204, 3205, 
-  3206, 3207, 3208, 3209, 3210, 3211, 3212, 3213, 
-  3214, 3215, 3216, 3217, 3218, 3219, 3220, 3221, 
-  3222, 3223, 3224, 3225, 3226, 3227, 3228, 3229, 
-  3230, 3231, 3232, 3233, 3234, 3235, 3236, 3237, 
-  3238, 3239, 3240, 3241, 3242, 3243, 3244, 3245, 
-  3246, 3247, 3248, 3249, 3250, 3251, 3252, 3253, 
-  3254, 3255, 3256, 3257, 3258, 3259, 3260, 3261, 
-  3262, 3263, 3264, 3265, 3266, 3267, 3268, 3269, 
-  3270, 3271, 3272, 3273, 3274, 3275, 3276, 3277, 
-  3278, 3279, 3280, 3281, 3282, 3283, 3284, 3285, 
-  3286, 3287, 3288, 3289, 3290, 3291, 3292, 3293, 
-  3294, 3295, 3296, 3297, 3298, 3299, 3300, 3301, 
-  3302, 3303, 3304, 3305, 3306, 3307, 3308, 3309, 
-  3310, 3311, 3312, 3313, 3314, 3315, 3316, 3317, 
-  3318, 3319, 3320, 3321, 3322, 3323, 3324, 3325, 
-  3326, 3327, 3328, 3329, 3330, 3331, 3332, 3333, 
-  3334, 3335, 3336, 3337, 3338, 3339, 3340, 3341, 
-  3342, 3343, 3344, 3345, 3346, 3347, 3348, 3349, 
-  3350, 3351, 3352, 3353, 3354, 3355, 3356, 3357, 
-  3358, 3359, 3360, 3361, 3362, 3363, 3364, 3365, 
-  3366, 3367, 3368, 3369, 3370, 3371, 3372, 3373, 
-  3374, 3375, 3376, 3377, 3378, 3379, 3380, 3381, 
-  3382, 3383, 3384, 3385, 3386, 3387, 3388, 3389, 
-  3390, 3391, 3392, 3393, 3394, 3395, 3396, 3397, 
-  3398, 3399, 3400, 3401, 3402, 3403, 3404, 3405, 
-  3406, 3407, 3408, 3409, 3410, 3411, 3412, 3413, 
-  3414, 3415, 3416, 3417, 3418, 3419, 3420, 3421, 
-  3422, 3423, 3424, 3425, 3426, 3427, 3428, 3429, 
-  3430, 3431, 3432, 3433, 3434, 3435, 3436, 3437, 
-  3438, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 507, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 46, 46, 46, 46, 46, 46, 46, 
-  46, 46, 46, 46, 46, 46, 46, 46, 
-  46, 46, 46, 46, 46, 46, 46, 46, 
-  506, 506, 506, 506, 0, 0, 0, 0, 
-  0, 46, 46, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 1252, 339, 339, 339, 1101, 
-  339, 339, 339, 339, 1090, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 1093, 1093, 1090, 1090, 
-  1093, 76, 76, 76, 76, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 8, 8, 8, 
-  8, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3439, 3439, 3439, 3439, 3439, 3439, 3439, 
-  3439, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3441, 3442, 3443, 3444, 3445, 3446, 3447, 
-  3448, 3448, 3449, 3450, 3451, 3452, 3453, 3454, 
-  3455, 3456, 3457, 3458, 3459, 3460, 3461, 3462, 
-  3463, 3464, 3465, 3466, 3467, 3468, 3469, 3470, 
-  3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 
-  3479, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 
-  3487, 3488, 3489, 3490, 3491, 3492, 3493, 3494, 
-  3495, 3496, 3497, 3498, 3499, 3500, 3501, 3502, 
-  3503, 3504, 3505, 3506, 3507, 3508, 3509, 3510, 
-  3511, 3512, 3513, 3514, 3515, 3516, 3517, 3518, 
-  3519, 3520, 3521, 3522, 3523, 3524, 3525, 3526, 
-  3527, 3528, 3529, 3530, 3531, 3460, 3532, 3533, 
-  3534, 3535, 3536, 3537, 3538, 3539, 3540, 3541, 
-  3542, 3543, 3544, 3545, 3546, 3547, 3548, 3549, 
-  3550, 3551, 3552, 3553, 3554, 3555, 3556, 3557, 
-  3558, 3559, 3560, 3561, 3562, 3563, 3564, 3565, 
-  3566, 3567, 3568, 3569, 3570, 3571, 3572, 3573, 
-  3574, 3575, 3576, 3577, 3578, 3579, 3580, 3581, 
-  3582, 3583, 3584, 3585, 3586, 3587, 3588, 3589, 
-  3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 
-  3598, 3599, 3550, 3600, 3601, 3602, 3603, 3604, 
-  3605, 3606, 3607, 3534, 3608, 3609, 3610, 3611, 
-  3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 
-  3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 
-  3460, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 
-  3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, 
-  3643, 3644, 3645, 3646, 3647, 3648, 3649, 3650, 
-  3651, 3652, 3653, 3654, 3536, 3655, 3656, 3657, 
-  3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 
-  3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 
-  3674, 3675, 3676, 3677, 3678, 3679, 3680, 3681, 
-  3682, 3683, 3684, 3685, 3686, 3687, 3688, 3689, 
-  3690, 3691, 3692, 3693, 3694, 3695, 3696, 3697, 
-  3698, 3699, 3700, 3701, 3702, 3703, 3704, 339, 
-  339, 3705, 339, 3706, 339, 339, 3707, 3708, 
-  3709, 3710, 3711, 3712, 3713, 3714, 3715, 3716, 
-  339, 3717, 339, 3718, 339, 339, 3719, 3720, 
-  339, 339, 339, 3721, 3722, 3723, 3724, 0, 
-  0, 3725, 3726, 3727, 3728, 3729, 3730, 3731, 
-  3732, 3733, 3734, 3735, 3736, 3737, 3738, 3739, 
-  3740, 3741, 3742, 3743, 3744, 3745, 3746, 3747, 
-  3748, 3749, 3750, 3751, 3752, 3753, 3754, 3755, 
-  3756, 3757, 3758, 3759, 3760, 3761, 3762, 3763, 
-  3589, 3764, 3765, 3766, 3767, 3768, 3769, 3769, 
-  3770, 3771, 3772, 3773, 3774, 3775, 3776, 3777, 
-  3719, 3778, 3779, 3780, 0, 0, 0, 0, 
-  0, 3781, 3782, 3783, 3784, 3785, 3786, 3787, 
-  3788, 3731, 3789, 3790, 3791, 3705, 3792, 3793, 
-  3794, 3795, 3796, 3797, 3798, 3799, 3800, 3801, 
-  3802, 3803, 3740, 3804, 3741, 3805, 3806, 3807, 
-  3808, 3809, 3706, 3481, 3810, 3811, 3812, 3551, 
-  3638, 3813, 3814, 3748, 3815, 3749, 3816, 3817, 
-  3818, 3708, 3819, 3820, 3821, 3822, 3823, 3709, 
-  3824, 3825, 3826, 3827, 3828, 3829, 3763, 3830, 
-  3831, 3589, 3832, 3767, 3833, 3834, 3835, 3836, 
-  3837, 3772, 3838, 3718, 3839, 3773, 3532, 3840, 
-  3774, 3841, 3776, 3842, 3843, 3844, 3845, 3846, 
-  3778, 3714, 3847, 3779, 3848, 3780, 3849, 3448, 
-  3850, 3851, 3852, 3853, 3854, 3855, 3856, 3857, 
-  3858, 3859, 3860, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 3861, 3862, 3863, 3864, 3865, 3866, 3867, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 3868, 3869, 3870, 3871, 
-  3872, 0, 0, 0, 0, 0, 3873, 3874, 
-  3875, 3876, 3877, 3878, 3879, 3880, 3881, 3882, 
-  3883, 3884, 3885, 3886, 3887, 3888, 3889, 3890, 
-  3891, 3892, 3893, 3894, 3895, 3896, 3897, 3898, 
-  0, 3899, 3900, 3901, 3902, 3903, 0, 3904, 
-  0, 3905, 3906, 0, 3907, 3908, 0, 3909, 
-  3910, 3911, 3912, 3913, 3914, 3915, 3916, 3917, 
-  3918, 3919, 3920, 3921, 3922, 3923, 3924, 3925, 
-  3926, 3927, 3928, 3929, 3930, 3931, 3932, 3933, 
-  3934, 3935, 3936, 3937, 3938, 3939, 3940, 3941, 
-  3942, 3943, 3944, 3945, 3946, 3947, 3948, 3949, 
-  3950, 3951, 3952, 3953, 3954, 3955, 3956, 3957, 
-  3958, 3959, 3960, 3961, 3962, 3963, 3964, 3965, 
-  3966, 3967, 3968, 3969, 3970, 3971, 3972, 3973, 
-  3974, 3975, 3976, 3977, 3978, 3979, 3980, 3981, 
-  3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 
-  3990, 3991, 3992, 3993, 3994, 3995, 3996, 3997, 
-  3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 
-  4006, 4007, 4008, 4009, 4010, 4011, 4012, 4013, 
-  4014, 4015, 4016, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 4017, 4018, 4019, 4020, 
-  4021, 4022, 4023, 4024, 4025, 4026, 4027, 4028, 
-  4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 
-  4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 
-  4045, 4046, 4047, 4048, 4049, 4050, 4051, 4052, 
-  4053, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 
-  4061, 4062, 4063, 4064, 4055, 4065, 4066, 4067, 
-  4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 
-  4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 
-  4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 
-  4092, 4093, 4094, 4095, 4096, 4097, 4098, 4099, 
-  4100, 4101, 4102, 4103, 4104, 4105, 4106, 4107, 
-  4108, 4109, 4110, 4111, 4112, 4113, 4114, 4115, 
-  4116, 4117, 4118, 4119, 4120, 4121, 4122, 4123, 
-  4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 
-  4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 
-  4140, 4141, 4142, 4143, 4144, 4145, 4146, 4147, 
-  4148, 4149, 4150, 4151, 4152, 4153, 4154, 4155, 
-  4156, 4157, 4158, 4159, 4160, 4161, 4162, 4163, 
-  4164, 4056, 4165, 4166, 4167, 4168, 4169, 4170, 
-  4171, 4172, 4173, 4174, 4175, 4176, 4177, 4178, 
-  4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186, 
-  4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 
-  4195, 4196, 4197, 4198, 4199, 4200, 4201, 4202, 
-  4203, 4204, 4205, 4206, 4207, 4208, 4209, 4210, 
-  4211, 4212, 4213, 4214, 4215, 4216, 4217, 4218, 
-  4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 
-  4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 
-  4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 
-  4243, 4244, 4245, 4246, 4247, 4248, 4249, 4250, 
-  4251, 4252, 4253, 4254, 4255, 4256, 4257, 4258, 
-  4259, 4260, 4261, 4262, 4263, 4264, 4265, 4266, 
-  4267, 4268, 4269, 4270, 4271, 4272, 4273, 4274, 
-  4275, 4276, 4277, 4278, 4279, 4280, 4281, 4282, 
-  4283, 4284, 4285, 4286, 4287, 4288, 4289, 4290, 
-  4291, 4292, 4293, 4294, 4295, 4296, 4297, 4298, 
-  4299, 4300, 4301, 4302, 4303, 4304, 4305, 4306, 
-  4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, 
-  4315, 4316, 4317, 4318, 4319, 4320, 4321, 4322, 
-  4323, 4324, 4325, 4326, 4327, 4328, 4329, 4330, 
-  4331, 4332, 4333, 4334, 4335, 4336, 4337, 4338, 
-  4339, 4340, 4341, 4342, 4343, 4344, 4345, 4346, 
-  4347, 4348, 4349, 4350, 4351, 4352, 4353, 4354, 
-  4355, 4356, 4357, 4358, 4359, 4360, 4361, 4362, 
-  4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 
-  4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 
-  4379, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 
-  4387, 4388, 4389, 4390, 4391, 4392, 4393, 4394, 
-  4395, 4396, 4397, 4398, 4399, 4400, 4401, 4402, 
-  4403, 4404, 4405, 4406, 4407, 4408, 4409, 4410, 
-  4411, 4412, 4413, 4414, 4415, 4416, 4417, 4418, 
-  4419, 4420, 4421, 4422, 4423, 4424, 4425, 4426, 
-  4427, 4428, 4429, 4430, 4431, 4432, 4433, 4434, 
-  4435, 4436, 4437, 4438, 4439, 4440, 4441, 4442, 
-  4443, 0, 0, 4444, 4445, 4446, 4447, 4448, 
-  4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 
-  4457, 4458, 4459, 4460, 4461, 4462, 4463, 4464, 
-  4465, 4466, 4467, 4468, 4469, 4470, 4471, 4472, 
-  4473, 4474, 4475, 4476, 4477, 4478, 4479, 4480, 
-  4481, 4482, 4483, 4484, 4485, 4486, 4487, 4488, 
-  4489, 4490, 4491, 4492, 4493, 4494, 4495, 4496, 
-  4497, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 4498, 4499, 4500, 4501, 4502, 4503, 4504, 
-  4505, 4506, 4507, 4508, 4509, 4510, 76, 0, 
-  0, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 4511, 4512, 4513, 4514, 4515, 4516, 4517, 
-  4518, 4519, 4520, 0, 0, 0, 0, 0, 
-  0, 524, 524, 524, 524, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 4521, 4522, 4523, 4524, 4524, 4525, 4526, 
-  4527, 4528, 4529, 4530, 4531, 4532, 4533, 4534, 
-  4535, 4536, 4537, 4538, 4539, 4540, 8, 8, 
-  4541, 4542, 4543, 4543, 4543, 4543, 4544, 4544, 
-  4544, 4545, 4546, 4547, 0, 4548, 4549, 4550, 
-  4551, 4552, 4553, 4554, 4555, 4556, 4557, 4558, 
-  4559, 4560, 4561, 4562, 4563, 4564, 4565, 4566, 
-  0, 4567, 4568, 4569, 4570, 0, 0, 0, 
-  0, 4571, 4572, 4573, 1054, 4574, 0, 4575, 
-  4576, 4577, 4578, 4579, 4580, 4581, 4582, 4583, 
-  4584, 4585, 4586, 4587, 4588, 4589, 4590, 4591, 
-  4592, 4593, 4594, 4595, 4596, 4597, 4598, 4599, 
-  4600, 4601, 4602, 4603, 4604, 4605, 4606, 4607, 
-  4608, 4609, 4610, 4611, 4612, 4613, 4614, 4615, 
-  4616, 4617, 4618, 4619, 4620, 4621, 4622, 4623, 
-  4624, 4625, 4626, 4627, 4628, 4629, 4630, 4631, 
-  4632, 4633, 4634, 4635, 4636, 4637, 4638, 4639, 
-  4640, 4641, 4642, 4643, 4644, 4645, 4646, 4647, 
-  4648, 4649, 4650, 4651, 4652, 4653, 4654, 4655, 
-  4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663, 
-  4664, 4665, 4666, 4667, 4668, 4669, 4670, 4671, 
-  4672, 4673, 4674, 4675, 4676, 4677, 4678, 4679, 
-  4680, 4681, 4682, 4683, 4684, 4685, 4686, 4687, 
-  4688, 4689, 4690, 4691, 4692, 4693, 4694, 4695, 
-  4696, 4697, 4698, 4699, 4700, 4701, 4702, 4703, 
-  4704, 4705, 4706, 4707, 4708, 4709, 0, 0, 
-  80, 0, 4710, 4711, 4712, 4713, 4714, 4715, 
-  4716, 4717, 4718, 4719, 4720, 4721, 4722, 4723, 
-  4724, 4725, 4726, 4727, 4728, 4729, 4730, 4731, 
-  4732, 4733, 4734, 4735, 4736, 4737, 4738, 4739, 
-  4740, 4741, 4742, 4743, 4744, 4745, 4746, 4747, 
-  4748, 4749, 4750, 4751, 4752, 4753, 4754, 4755, 
-  4756, 4757, 4758, 4759, 4760, 4761, 4762, 4763, 
-  4764, 4765, 4766, 4767, 4768, 4769, 4770, 4771, 
-  4772, 4773, 4774, 4775, 4776, 4777, 4778, 4779, 
-  4780, 4781, 4782, 4783, 4784, 4785, 4786, 4787, 
-  4788, 4789, 4790, 4791, 4792, 4793, 4794, 4795, 
-  4796, 4797, 4798, 4799, 4800, 4801, 4802, 4803, 
-  4804, 4805, 4806, 4807, 4808, 4809, 4810, 4811, 
-  4812, 4813, 4814, 4815, 4816, 4817, 4818, 4819, 
-  4820, 4821, 4822, 4823, 4824, 4825, 4826, 4827, 
-  4828, 4829, 4830, 4831, 4832, 4833, 4834, 4835, 
-  4836, 4837, 4838, 4839, 4840, 4841, 4842, 4843, 
-  4844, 4845, 4846, 4847, 4848, 4849, 4850, 4851, 
-  4852, 4853, 4854, 4855, 4856, 4857, 4858, 4859, 
-  4860, 4861, 4862, 4863, 4864, 4865, 4866, 4867, 
-  4868, 4869, 4870, 4871, 4872, 4873, 4874, 4875, 
-  4876, 4877, 4878, 4879, 4880, 4881, 4882, 4883, 
-  4884, 4885, 4886, 4887, 4888, 4889, 4890, 4891, 
-  4892, 4893, 4894, 4895, 4896, 4897, 4898, 4899, 
-  0, 0, 0, 4900, 4901, 4902, 4903, 4904, 
-  4905, 0, 0, 4906, 4907, 4908, 4909, 4910, 
-  4911, 0, 0, 4912, 4913, 4914, 4915, 4916, 
-  4917, 0, 0, 4918, 4919, 4920, 0, 0, 
-  0, 4921, 4922, 4923, 4924, 4925, 4926, 4927, 
-  0, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 4935, 4935, 4935, 76, 76, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 0, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 0, 339, 339, 0, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 0, 0, 0, 0, 
-  0, 990, 8, 812, 0, 0, 0, 0, 
-  1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 0, 0, 0, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 4936, 4936, 4936, 4936, 4936, 4936, 4936, 
-  4936, 4936, 4936, 4936, 4936, 4936, 4936, 4936, 
-  4936, 4936, 4936, 4936, 4936, 4936, 4936, 4936, 
-  4936, 4936, 4936, 4936, 4936, 4936, 4936, 4936, 
-  4936, 4936, 4936, 4936, 4936, 4936, 4936, 4936, 
-  4936, 4936, 4936, 4936, 4936, 4936, 4936, 4936, 
-  4936, 4936, 4936, 4936, 4936, 4936, 1251, 1251, 
-  1251, 1251, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 1251, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  0, 1120, 1120, 1120, 1120, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 1249, 339, 339, 339, 339, 339, 
-  339, 339, 339, 1249, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 0, 
-  990, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 990, 1249, 1249, 1249, 1249, 1249, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 
-  4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 
-  4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 
-  4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 
-  4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 
-  4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 
-  4984, 4985, 4986, 4987, 4988, 4989, 4990, 4991, 
-  4992, 4993, 4994, 4995, 4996, 4997, 4998, 4999, 
-  5000, 5001, 5002, 5003, 5004, 5005, 5006, 5007, 
-  5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 
-  5016, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 0, 
-  0, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 
-  1110, 1110, 1110, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1050, 1050, 1050, 1050, 1050, 1050, 0, 
-  0, 1050, 0, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 0, 
-  1050, 1050, 0, 0, 0, 1050, 0, 0, 
-  1050, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 5017, 
-  5017, 5017, 5017, 0, 0, 0, 0, 0, 
-  8, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1050, 1090, 1090, 1090, 0, 1090, 1090, 
-  0, 0, 0, 0, 0, 1090, 537, 1090, 
-  524, 1050, 1050, 1050, 1050, 0, 1050, 1050, 
-  1050, 0, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, 
-  1050, 1050, 1050, 1050, 1050, 0, 0, 0, 
-  0, 524, 550, 537, 0, 0, 0, 0, 
-  1101, 5017, 5017, 5017, 5017, 5017, 5017, 5017, 
-  5017, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1046, 1046, 1046, 1046, 1046, 1046, 1046, 
-  1046, 1046, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 1249, 1249, 1249, 1249, 
-  1249, 1249, 1249, 1249, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 990, 990, 990, 990, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  0, 0, 0, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  5018, 5019, 812, 812, 812, 812, 812, 5020, 
-  5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 
-  550, 550, 550, 812, 812, 812, 5029, 5030, 
-  5031, 5032, 5033, 5034, 80, 80, 80, 80, 
-  80, 80, 80, 80, 537, 537, 537, 537, 
-  537, 537, 537, 537, 812, 812, 524, 524, 
-  524, 524, 524, 537, 537, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 524, 524, 524, 524, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 5035, 5036, 5037, 5038, 5039, 5040, 
-  5041, 5042, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 812, 
-  812, 812, 812, 812, 812, 812, 812, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 524, 524, 524, 76, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  76, 76, 76, 76, 76, 76, 76, 76, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 
-  1120, 1120, 1120, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 5043, 1945, 1920, 1963, 1947, 1948, 5044, 
-  1927, 1930, 5045, 5046, 1931, 1950, 1933, 5047, 
-  1935, 1936, 1937, 5048, 5049, 5050, 5051, 5052, 
-  5053, 5054, 1941, 5055, 5056, 5057, 1964, 1946, 
-  5058, 1926, 1928, 1956, 1965, 5059, 1932, 5060, 
-  5061, 1951, 5062, 5063, 5064, 5065, 5066, 5067, 
-  5068, 5069, 5070, 5071, 5072, 5043, 1945, 1920, 
-  1963, 1947, 1948, 5044, 1927, 1930, 5045, 5046, 
-  1931, 1950, 1933, 5047, 1935, 1936, 1937, 5048, 
-  5049, 5050, 5051, 5052, 5053, 5054, 1941, 5055, 
-  5056, 5057, 1964, 1946, 5058, 1926, 0, 1956, 
-  1965, 5059, 1932, 5060, 5061, 1951, 5062, 5063, 
-  5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 
-  5072, 5043, 1945, 1920, 1963, 1947, 1948, 5044, 
-  1927, 1930, 5045, 5046, 1931, 1950, 1933, 5047, 
-  1935, 1936, 1937, 5048, 5049, 5050, 5051, 5052, 
-  5053, 5054, 1941, 5055, 5056, 5057, 1964, 1946, 
-  5058, 1926, 1928, 1956, 1965, 5059, 1932, 5060, 
-  5061, 1951, 5062, 5063, 5064, 5065, 5066, 5067, 
-  5068, 5069, 5070, 5071, 5072, 5043, 0, 1920, 
-  1963, 0, 0, 5044, 0, 0, 5045, 5046, 
-  0, 0, 1933, 5047, 1935, 1936, 0, 5048, 
-  5049, 5050, 5051, 5052, 5053, 5054, 1941, 5055, 
-  5056, 5057, 1964, 0, 5058, 0, 1928, 1956, 
-  1965, 5059, 1932, 5060, 5061, 0, 5062, 5063, 
-  5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 
-  5072, 5043, 1945, 1920, 1963, 1947, 1948, 5044, 
-  1927, 1930, 5045, 5046, 1931, 1950, 1933, 5047, 
-  1935, 1936, 1937, 5048, 5049, 5050, 5051, 5052, 
-  5053, 5054, 1941, 5055, 5056, 5057, 1964, 1946, 
-  5058, 1926, 1928, 1956, 1965, 5059, 1932, 5060, 
-  5061, 1951, 5062, 5063, 5064, 5065, 5066, 5067, 
-  5068, 5069, 5070, 5071, 5072, 5043, 1945, 0, 
-  1963, 1947, 1948, 5044, 0, 0, 5045, 5046, 
-  1931, 1950, 1933, 5047, 1935, 1936, 0, 5048, 
-  5049, 5050, 5051, 5052, 5053, 5054, 0, 5055, 
-  5056, 5057, 1964, 1946, 5058, 1926, 1928, 1956, 
-  1965, 5059, 1932, 5060, 5061, 1951, 5062, 5063, 
-  5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 
-  5072, 5043, 1945, 0, 1963, 1947, 1948, 5044, 
-  0, 1930, 5045, 5046, 1931, 1950, 0, 5047, 
-  0, 0, 0, 5048, 5049, 5050, 5051, 5052, 
-  5053, 5054, 0, 5055, 5056, 5057, 1964, 1946, 
-  5058, 1926, 1928, 1956, 1965, 5059, 1932, 5060, 
-  5061, 1951, 5062, 5063, 5064, 5065, 5066, 5067, 
-  5068, 5069, 5070, 5071, 5072, 5043, 1945, 1920, 
-  1963, 1947, 1948, 5044, 1927, 1930, 5045, 5046, 
-  1931, 1950, 1933, 5047, 1935, 1936, 1937, 5048, 
-  5049, 5050, 5051, 5052, 5053, 5054, 1941, 5055, 
-  5056, 5057, 1964, 1946, 5058, 1926, 1928, 1956, 
-  1965, 5059, 1932, 5060, 5061, 1951, 5062, 5063, 
-  5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 
-  5072, 5043, 1945, 1920, 1963, 1947, 1948, 5044, 
-  1927, 1930, 5045, 5046, 1931, 1950, 1933, 5047, 
-  1935, 1936, 1937, 5048, 5049, 5050, 5051, 5052, 
-  5053, 5054, 1941, 5055, 5056, 5057, 1964, 1946, 
-  5058, 1926, 1928, 1956, 1965, 5059, 1932, 5060, 
-  5061, 1951, 5062, 5063, 5064, 5065, 5066, 5067, 
-  5068, 5069, 5070, 5071, 5072, 5043, 1945, 1920, 
-  1963, 1947, 1948, 5044, 1927, 1930, 5045, 5046, 
-  1931, 1950, 1933, 5047, 1935, 1936, 1937, 5048, 
-  5049, 5050, 5051, 5052, 5053, 5054, 1941, 5055, 
-  5056, 5057, 1964, 1946, 5058, 1926, 1928, 1956, 
-  1965, 5059, 1932, 5060, 5061, 1951, 5062, 5063, 
-  5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 
-  5072, 5043, 1945, 1920, 1963, 1947, 1948, 5044, 
-  1927, 1930, 5045, 5046, 1931, 1950, 1933, 5047, 
-  1935, 1936, 1937, 5048, 5049, 5050, 5051, 5052, 
-  5053, 5054, 1941, 5055, 5056, 5057, 1964, 1946, 
-  5058, 1926, 1928, 1956, 1965, 5059, 1932, 5060, 
-  5061, 1951, 5062, 5063, 5064, 5065, 5066, 5067, 
-  5068, 5069, 5070, 5071, 5072, 5043, 1945, 1920, 
-  1963, 1947, 1948, 5044, 1927, 1930, 5045, 5046, 
-  1931, 1950, 1933, 5047, 1935, 1936, 1937, 5048, 
-  5049, 5050, 5051, 5052, 5053, 5054, 1941, 5055, 
-  5056, 5057, 1964, 1946, 5058, 1926, 1928, 1956, 
-  1965, 5059, 1932, 5060, 5061, 1951, 5062, 5063, 
-  5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 
-  5072, 5043, 1945, 1920, 1963, 1947, 1948, 5044, 
-  1927, 1930, 5045, 5046, 1931, 1950, 1933, 5047, 
-  1935, 1936, 1937, 5048, 5049, 5050, 5051, 5052, 
-  5053, 5054, 1941, 5055, 5056, 5057, 1964, 1946, 
-  5058, 1926, 1928, 1956, 1965, 5059, 1932, 5060, 
-  5061, 1951, 5062, 5063, 5064, 5065, 5066, 5067, 
-  5068, 5069, 5070, 5071, 5072, 5073, 5074, 0, 
-  0, 5075, 5076, 1960, 5077, 5078, 5079, 5080, 
-  5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 
-  1961, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 
-  5096, 5097, 5098, 5099, 5100, 1959, 5101, 5102, 
-  5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 
-  5111, 5112, 1958, 5113, 5114, 5115, 5116, 5117, 
-  5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 
-  5126, 5127, 5128, 5075, 5076, 1960, 5077, 5078, 
-  5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 
-  5087, 5088, 1961, 5089, 5090, 5091, 5092, 5093, 
-  5094, 5095, 5096, 5097, 5098, 5099, 5100, 1959, 
-  5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 
-  5109, 5110, 5111, 5112, 1958, 5113, 5114, 5115, 
-  5116, 5117, 5118, 5119, 5120, 5121, 5122, 5123, 
-  5124, 5125, 5126, 5127, 5128, 5075, 5076, 1960, 
-  5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 
-  5085, 5086, 5087, 5088, 1961, 5089, 5090, 5091, 
-  5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 
-  5100, 1959, 5101, 5102, 5103, 5104, 5105, 5106, 
-  5107, 5108, 5109, 5110, 5111, 5112, 1958, 5113, 
-  5114, 5115, 5116, 5117, 5118, 5119, 5120, 5121, 
-  5122, 5123, 5124, 5125, 5126, 5127, 5128, 5075, 
-  5076, 1960, 5077, 5078, 5079, 5080, 5081, 5082, 
-  5083, 5084, 5085, 5086, 5087, 5088, 1961, 5089, 
-  5090, 5091, 5092, 5093, 5094, 5095, 5096, 5097, 
-  5098, 5099, 5100, 1959, 5101, 5102, 5103, 5104, 
-  5105, 5106, 5107, 5108, 5109, 5110, 5111, 5112, 
-  1958, 5113, 5114, 5115, 5116, 5117, 5118, 5119, 
-  5120, 5121, 5122, 5123, 5124, 5125, 5126, 5127, 
-  5128, 5075, 5076, 1960, 5077, 5078, 5079, 5080, 
-  5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 
-  1961, 5089, 5090, 5091, 5092, 5093, 5094, 5095, 
-  5096, 5097, 5098, 5099, 5100, 1959, 5101, 5102, 
-  5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110, 
-  5111, 5112, 1958, 5113, 5114, 5115, 5116, 5117, 
-  5118, 5119, 5120, 5121, 5122, 5123, 5124, 5125, 
-  5126, 5127, 5128, 5129, 5130, 0, 0, 5131, 
-  5132, 5133, 5134, 5135, 5136, 5137, 5138, 5139, 
-  5140, 5131, 5132, 5133, 5134, 5135, 5136, 5137, 
-  5138, 5139, 5140, 5131, 5132, 5133, 5134, 5135, 
-  5136, 5137, 5138, 5139, 5140, 5131, 5132, 5133, 
-  5134, 5135, 5136, 5137, 5138, 5139, 5140, 5131, 
-  5132, 5133, 5134, 5135, 5136, 5137, 5138, 5139, 
-  5140, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  339, 339, 339, 339, 339, 339, 339, 339, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 5141, 5142, 5143, 5144, 5145, 3725, 5146, 
-  5147, 5148, 5149, 3726, 5150, 5151, 5152, 3727, 
-  5153, 5154, 5155, 5156, 5157, 5158, 5159, 5160, 
-  5161, 5162, 5163, 5164, 3782, 5165, 5166, 5167, 
-  5168, 5169, 5170, 5171, 5172, 5173, 3787, 3728, 
-  3729, 3788, 5174, 5175, 3538, 5176, 3730, 5177, 
-  5178, 5179, 5180, 5180, 5180, 5181, 5182, 5183, 
-  5184, 5185, 5186, 5187, 5188, 5189, 5190, 5191, 
-  5192, 5193, 5194, 5195, 5196, 5197, 5198, 5198, 
-  3790, 5199, 5200, 5201, 5202, 3732, 5203, 5204, 
-  5205, 3691, 5206, 5207, 5208, 5209, 5210, 5211, 
-  5212, 5213, 5214, 5215, 5216, 5217, 5218, 5219, 
-  5220, 5221, 5222, 5223, 5224, 5225, 5226, 5227, 
-  5228, 5229, 5230, 5231, 5231, 5232, 5233, 5234, 
-  3534, 5235, 5236, 5237, 5238, 5239, 5240, 5241, 
-  5242, 3737, 5243, 5244, 5245, 5246, 5247, 5248, 
-  5249, 5250, 5251, 5252, 5253, 5254, 5255, 5256, 
-  5257, 5258, 5259, 5260, 5261, 5262, 5263, 3480, 
-  5264, 5265, 5266, 5266, 5267, 5268, 5268, 5269, 
-  5270, 5271, 5272, 5273, 5274, 5275, 5276, 5277, 
-  5278, 5279, 5280, 5281, 3738, 5282, 5283, 5284, 
-  5285, 3802, 5285, 5286, 3740, 5287, 5288, 5289, 
-  5290, 3741, 3453, 5291, 5292, 5293, 5294, 5295, 
-  5296, 5297, 5298, 5299, 5300, 5301, 5302, 5303, 
-  5304, 5305, 5306, 5307, 5308, 5309, 5310, 5311, 
-  5312, 3742, 5313, 5314, 5315, 5316, 5317, 5318, 
-  3744, 5319, 5320, 5321, 5322, 5323, 5324, 5325, 
-  5326, 3481, 3810, 5327, 5328, 5329, 5330, 5331, 
-  5332, 5333, 5334, 3745, 5335, 5336, 5337, 5338, 
-  3853, 5339, 5340, 5341, 5342, 5343, 5344, 5345, 
-  5346, 5347, 5348, 5349, 5350, 5351, 3551, 5352, 
-  5353, 5354, 5355, 5356, 5357, 5358, 5359, 5360, 
-  5361, 5362, 3746, 3638, 5363, 5364, 5365, 5366, 
-  5367, 5368, 5369, 5370, 3814, 5371, 5372, 5373, 
-  5374, 5375, 5376, 5377, 5378, 3815, 5379, 5380, 
-  5381, 5382, 5383, 5384, 5385, 5386, 5387, 5388, 
-  5389, 5390, 3817, 5391, 5392, 5393, 5394, 5395, 
-  5396, 5397, 5398, 5399, 5400, 5401, 5401, 5402, 
-  5403, 3819, 5404, 5405, 5406, 5407, 5408, 5409, 
-  5410, 3537, 5411, 5412, 5413, 5414, 5415, 5416, 
-  5417, 3825, 5418, 5419, 5420, 5421, 5422, 5423, 
-  5423, 3826, 3855, 5424, 5425, 5426, 5427, 5428, 
-  3499, 3828, 5429, 5430, 3757, 5431, 5432, 3713, 
-  5433, 5434, 3761, 5435, 5436, 5437, 5438, 5438, 
-  5439, 5440, 5441, 5442, 5443, 5444, 5445, 5446, 
-  5447, 5448, 5449, 5450, 5451, 5452, 5453, 5454, 
-  5455, 5456, 5457, 5458, 5459, 5460, 5461, 5462, 
-  5463, 5464, 5465, 3767, 5466, 5467, 5468, 5469, 
-  5470, 5471, 5472, 5473, 5474, 5475, 5476, 5477, 
-  5478, 5479, 5480, 5481, 5267, 5482, 5483, 5484, 
-  5485, 5486, 5487, 5488, 5489, 5490, 5491, 5492, 
-  5493, 3555, 5494, 5495, 5496, 5497, 5498, 5499, 
-  3770, 5500, 5501, 5502, 5503, 5504, 5505, 5506, 
-  5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 
-  5515, 5516, 5517, 5518, 5519, 3494, 5520, 5521, 
-  5522, 5523, 5524, 5525, 3835, 5526, 5527, 5528, 
-  5529, 5530, 5531, 5532, 5533, 5534, 5535, 5536, 
-  5537, 5538, 5539, 5540, 5541, 5542, 5543, 5544, 
-  5545, 3840, 3841, 5546, 5547, 5548, 5549, 5550, 
-  5551, 5552, 5553, 5554, 5555, 5556, 5557, 5558, 
-  3842, 5559, 5560, 5561, 5562, 5563, 5564, 5565, 
-  5566, 5567, 5568, 5569, 5570, 5571, 5572, 5573, 
-  5574, 5575, 5576, 5577, 5578, 5579, 5580, 5581, 
-  5582, 5583, 5584, 5585, 5586, 5587, 5588, 3848, 
-  3848, 5589, 5590, 5591, 5592, 5593, 5594, 5595, 
-  5596, 5597, 5598, 3849, 5599, 5600, 5601, 5602, 
-  5603, 5604, 5605, 5606, 5607, 5608, 5609, 5610, 
-  5611, 5612, 5613, 5614, 5615, 5616, 5617, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 80, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 80, 80, 80, 80, 80, 80, 80, 
-  80, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 558, 558, 558, 558, 558, 558, 558, 
-  558, 0, 0, 0, 0, 0, 0, 0, 
-  0, 0, 0, 0, 0, 0, 0, 0, 
-  0, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 
-  3440, 3440, 3440, 3440, 3440, 3440, 3440, 0, 
-  0, };
-
-static
-const utf8proc_property_t utf8proc_properties[] = {
-  {0, 0, 0, 0, NULL, false, -1, -1, -1, -1, -1, false},
-  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_BN, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_S, 0, NULL, false, -1, -1, -1, -1, -1, false, false, true, false, NULL},
-  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, NULL, false, -1, -1, -1, -1, -1, false, false, true, false, NULL},
-  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_WS, 0, NULL, false, -1, -1, -1, -1, -1, false, false, true, false, NULL},
-  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_B, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_CC, 0, UTF8PROC_BIDI_CLASS_S, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17580, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 17400, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17640, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 97, -1, 0, -1, false, false, false, false, utf8proc_sequences + 0},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 98, -1, 8640, -1, false, false, false, false, utf8proc_sequences + 2},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 99, -1, 60, -1, false, false, false, false, utf8proc_sequences + 4},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 100, -1, 960, -1, false, false, false, false, utf8proc_sequences + 6},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 101, -1, 120, -1, false, false, false, false, utf8proc_sequences + 8},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 102, -1, 9120, -1, false, false, false, false, utf8proc_sequences + 10},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 103, -1, 1080, -1, false, false, false, false, utf8proc_sequences + 12},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 104, -1, 1200, -1, false, false, false, false, utf8proc_sequences + 14},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 105, -1, 180, -1, false, false, false, false, utf8proc_sequences + 16},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 106, -1, 1320, -1, false, false, false, false, utf8proc_sequences + 18},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 107, -1, 1440, -1, false, false, false, false, utf8proc_sequences + 20},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 108, -1, 1560, -1, false, false, false, false, utf8proc_sequences + 22},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 109, -1, 9480, -1, false, false, false, false, utf8proc_sequences + 24},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 110, -1, 240, -1, false, false, false, false, utf8proc_sequences + 26},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 111, -1, 300, -1, false, false, false, false, utf8proc_sequences + 28},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 112, -1, 9720, -1, false, false, false, false, utf8proc_sequences + 30},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 113, -1, -1, -1, false, false, false, false, utf8proc_sequences + 32},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 114, -1, 1680, -1, false, false, false, false, utf8proc_sequences + 34},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 115, -1, 1800, -1, false, false, false, false, utf8proc_sequences + 36},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 116, -1, 1920, -1, false, false, false, false, utf8proc_sequences + 38},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 117, -1, 360, -1, false, false, false, false, utf8proc_sequences + 40},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 118, -1, 10560, -1, false, false, false, false, utf8proc_sequences + 42},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 119, -1, 2040, -1, false, false, false, false, utf8proc_sequences + 44},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 120, -1, 10680, -1, false, false, false, false, utf8proc_sequences + 46},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 121, -1, 420, -1, false, false, false, false, utf8proc_sequences + 48},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 122, -1, 2160, -1, false, false, false, false, utf8proc_sequences + 50},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 65, -1, 65, 480, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66, -1, 66, 8700, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 67, -1, 67, 540, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 68, -1, 68, 1020, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 69, -1, 69, 600, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 70, -1, 70, 9180, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 71, -1, 71, 1140, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 72, -1, 72, 1260, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 73, -1, 73, 660, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 74, -1, 74, 1380, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 75, -1, 75, 1500, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 76, -1, 76, 1620, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 77, -1, 77, 9540, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 78, -1, 78, 720, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 79, -1, 79, 780, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 80, -1, 80, 9780, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 81, -1, 81, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 82, -1, 82, 1740, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 83, -1, 83, 1860, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 84, -1, 84, 1980, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 85, -1, 85, 840, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 86, -1, 86, 10620, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 87, -1, 87, 2100, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 88, -1, 88, 10740, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 89, -1, 89, 900, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 90, -1, 90, 2220, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_NOBREAK, utf8proc_sequences + 52, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 54, false, -1, -1, -1, 3600, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 0, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PI, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 57, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ET, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ET, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 60, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 62, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 64, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 67, false, 924, -1, 924, -1, -1, false, false, false, false, utf8proc_sequences + 67},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 69, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 72, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 28, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PF, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 74, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 78, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 82, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 86, false, -1, 224, -1, -1, -1, false, false, false, false, utf8proc_sequences + 89},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 91, false, -1, 225, -1, -1, -1, false, false, false, false, utf8proc_sequences + 94},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 96, false, -1, 226, -1, 10860, -1, false, false, false, false, utf8proc_sequences + 99},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 101, false, -1, 227, -1, -1, -1, false, false, false, false, utf8proc_sequences + 104},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 106, false, -1, 228, -1, 2400, -1, false, false, false, false, utf8proc_sequences + 109},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 111, false, -1, 229, -1, 3000, -1, false, false, false, false, utf8proc_sequences + 114},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 230, -1, 2640, -1, false, false, false, false, utf8proc_sequences + 116},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 118, false, -1, 231, -1, 8760, -1, false, false, false, false, utf8proc_sequences + 121},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 123, false, -1, 232, -1, -1, -1, false, false, false, false, utf8proc_sequences + 126},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 128, false, -1, 233, -1, -1, -1, false, false, false, false, utf8proc_sequences + 131},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 133, false, -1, 234, -1, 11220, -1, false, false, false, false, utf8proc_sequences + 136},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 138, false, -1, 235, -1, -1, -1, false, false, false, false, utf8proc_sequences + 141},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 143, false, -1, 236, -1, -1, -1, false, false, false, false, utf8proc_sequences + 146},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 148, false, -1, 237, -1, -1, -1, false, false, false, false, utf8proc_sequences + 151},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 153, false, -1, 238, -1, -1, -1, false, false, false, false, utf8proc_sequences + 156},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 158, false, -1, 239, -1, 9240, -1, false, false, false, false, utf8proc_sequences + 161},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 240, -1, -1, -1, false, false, false, false, utf8proc_sequences + 163},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 165, false, -1, 241, -1, -1, -1, false, false, false, false, utf8proc_sequences + 168},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 170, false, -1, 242, -1, -1, -1, false, false, false, false, utf8proc_sequences + 173},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 175, false, -1, 243, -1, -1, -1, false, false, false, false, utf8proc_sequences + 178},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 180, false, -1, 244, -1, 11460, -1, false, false, false, false, utf8proc_sequences + 183},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 185, false, -1, 245, -1, 3360, -1, false, false, false, false, utf8proc_sequences + 188},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 190, false, -1, 246, -1, 3240, -1, false, false, false, false, utf8proc_sequences + 193},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 248, -1, 3120, -1, false, false, false, false, utf8proc_sequences + 195},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 197, false, -1, 249, -1, -1, -1, false, false, false, false, utf8proc_sequences + 200},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 202, false, -1, 250, -1, -1, -1, false, false, false, false, utf8proc_sequences + 205},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 207, false, -1, 251, -1, -1, -1, false, false, false, false, utf8proc_sequences + 210},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 212, false, -1, 252, -1, 2280, -1, false, false, false, false, utf8proc_sequences + 215},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 217, false, -1, 253, -1, -1, -1, false, false, false, false, utf8proc_sequences + 220},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 254, -1, -1, -1, false, false, false, false, utf8proc_sequences + 222},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 224},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 227, false, 192, -1, 192, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 230, false, 193, -1, 193, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 233, false, 194, -1, 194, 10920, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 236, false, 195, -1, 195, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 239, false, 196, -1, 196, 2460, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 242, false, 197, -1, 197, 3060, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 198, -1, 198, 2700, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 245, false, 199, -1, 199, 8820, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 248, false, 200, -1, 200, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 251, false, 201, -1, 201, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 254, false, 202, -1, 202, 11280, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 257, false, 203, -1, 203, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 260, false, 204, -1, 204, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 263, false, 205, -1, 205, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 266, false, 206, -1, 206, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 269, false, 207, -1, 207, 9300, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 208, -1, 208, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 272, false, 209, -1, 209, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 275, false, 210, -1, 210, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 278, false, 211, -1, 211, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 281, false, 212, -1, 212, 11520, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 284, false, 213, -1, 213, 3420, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 287, false, 214, -1, 214, 3300, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 216, -1, 216, 3180, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 290, false, 217, -1, 217, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 293, false, 218, -1, 218, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 296, false, 219, -1, 219, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 299, false, 220, -1, 220, 2340, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 302, false, 221, -1, 221, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 222, -1, 222, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 305, false, 376, -1, 376, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 308, false, -1, 257, -1, -1, -1, false, false, false, false, utf8proc_sequences + 311},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 313, false, 256, -1, 256, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 316, false, -1, 259, -1, 11100, -1, false, false, false, false, utf8proc_sequences + 319},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 321, false, 258, -1, 258, 11160, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 324, false, -1, 261, -1, -1, -1, false, false, false, false, utf8proc_sequences + 327},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 329, false, 260, -1, 260, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 332, false, -1, 263, -1, -1, -1, false, false, false, false, utf8proc_sequences + 335},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 337, false, 262, -1, 262, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 340, false, -1, 265, -1, -1, -1, false, false, false, false, utf8proc_sequences + 343},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 345, false, 264, -1, 264, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 348, false, -1, 267, -1, -1, -1, false, false, false, false, utf8proc_sequences + 351},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 353, false, 266, -1, 266, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 356, false, -1, 269, -1, -1, -1, false, false, false, false, utf8proc_sequences + 359},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 361, false, 268, -1, 268, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 364, false, -1, 271, -1, -1, -1, false, false, false, false, utf8proc_sequences + 367},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 369, false, 270, -1, 270, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 273, -1, -1, -1, false, false, false, false, utf8proc_sequences + 372},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 272, -1, 272, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 374, false, -1, 275, -1, 8880, -1, false, false, false, false, utf8proc_sequences + 377},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 379, false, 274, -1, 274, 8940, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 382, false, -1, 277, -1, -1, -1, false, false, false, false, utf8proc_sequences + 385},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 387, false, 276, -1, 276, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 390, false, -1, 279, -1, -1, -1, false, false, false, false, utf8proc_sequences + 393},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 395, false, 278, -1, 278, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 398, false, -1, 281, -1, -1, -1, false, false, false, false, utf8proc_sequences + 401},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 403, false, 280, -1, 280, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 406, false, -1, 283, -1, -1, -1, false, false, false, false, utf8proc_sequences + 409},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 411, false, 282, -1, 282, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 414, false, -1, 285, -1, -1, -1, false, false, false, false, utf8proc_sequences + 417},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 419, false, 284, -1, 284, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 422, false, -1, 287, -1, -1, -1, false, false, false, false, utf8proc_sequences + 425},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 427, false, 286, -1, 286, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 430, false, -1, 289, -1, -1, -1, false, false, false, false, utf8proc_sequences + 433},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 435, false, 288, -1, 288, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 438, false, -1, 291, -1, -1, -1, false, false, false, false, utf8proc_sequences + 441},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 443, false, 290, -1, 290, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 446, false, -1, 293, -1, -1, -1, false, false, false, false, utf8proc_sequences + 449},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 451, false, 292, -1, 292, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 295, -1, -1, -1, false, false, false, false, utf8proc_sequences + 454},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 294, -1, 294, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 456, false, -1, 297, -1, -1, -1, false, false, false, false, utf8proc_sequences + 459},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 461, false, 296, -1, 296, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 464, false, -1, 299, -1, -1, -1, false, false, false, false, utf8proc_sequences + 467},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 469, false, 298, -1, 298, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 472, false, -1, 301, -1, -1, -1, false, false, false, false, utf8proc_sequences + 475},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 477, false, 300, -1, 300, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 480, false, -1, 303, -1, -1, -1, false, false, false, false, utf8proc_sequences + 483},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 485, false, 302, -1, 302, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 488, false, -1, 105, -1, -1, -1, false, false, false, false, utf8proc_sequences + 491},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 73, -1, 73, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 494, false, -1, 307, -1, -1, -1, false, false, false, false, utf8proc_sequences + 497},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 499, false, 306, -1, 306, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 502, false, -1, 309, -1, -1, -1, false, false, false, false, utf8proc_sequences + 505},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 507, false, 308, -1, 308, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 510, false, -1, 311, -1, -1, -1, false, false, false, false, utf8proc_sequences + 513},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 515, false, 310, -1, 310, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 518, false, -1, 314, -1, -1, -1, false, false, false, false, utf8proc_sequences + 521},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 523, false, 313, -1, 313, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 526, false, -1, 316, -1, -1, -1, false, false, false, false, utf8proc_sequences + 529},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 531, false, 315, -1, 315, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 534, false, -1, 318, -1, -1, -1, false, false, false, false, utf8proc_sequences + 537},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 539, false, 317, -1, 317, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 542, false, -1, 320, -1, -1, -1, false, false, false, false, utf8proc_sequences + 545},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 547, false, 319, -1, 319, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 322, -1, -1, -1, false, false, false, false, utf8proc_sequences + 550},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 321, -1, 321, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 552, false, -1, 324, -1, -1, -1, false, false, false, false, utf8proc_sequences + 555},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 557, false, 323, -1, 323, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 560, false, -1, 326, -1, -1, -1, false, false, false, false, utf8proc_sequences + 563},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 565, false, 325, -1, 325, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 568, false, -1, 328, -1, -1, -1, false, false, false, false, utf8proc_sequences + 571},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 573, false, 327, -1, 327, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 576, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 576},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 331, -1, -1, -1, false, false, false, false, utf8proc_sequences + 579},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 330, -1, 330, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 581, false, -1, 333, -1, 9600, -1, false, false, false, false, utf8proc_sequences + 584},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 586, false, 332, -1, 332, 9660, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 589, false, -1, 335, -1, -1, -1, false, false, false, false, utf8proc_sequences + 592},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 594, false, 334, -1, 334, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 597, false, -1, 337, -1, -1, -1, false, false, false, false, utf8proc_sequences + 600},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 602, false, 336, -1, 336, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 339, -1, -1, -1, false, false, false, false, utf8proc_sequences + 605},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 338, -1, 338, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 607, false, -1, 341, -1, -1, -1, false, false, false, false, utf8proc_sequences + 610},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 612, false, 340, -1, 340, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 615, false, -1, 343, -1, -1, -1, false, false, false, false, utf8proc_sequences + 618},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 620, false, 342, -1, 342, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 623, false, -1, 345, -1, -1, -1, false, false, false, false, utf8proc_sequences + 626},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 628, false, 344, -1, 344, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 631, false, -1, 347, -1, 9960, -1, false, false, false, false, utf8proc_sequences + 634},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 636, false, 346, -1, 346, 10020, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 639, false, -1, 349, -1, -1, -1, false, false, false, false, utf8proc_sequences + 642},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 644, false, 348, -1, 348, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 647, false, -1, 351, -1, -1, -1, false, false, false, false, utf8proc_sequences + 650},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 652, false, 350, -1, 350, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 655, false, -1, 353, -1, 10080, -1, false, false, false, false, utf8proc_sequences + 658},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 660, false, 352, -1, 352, 10140, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 663, false, -1, 355, -1, -1, -1, false, false, false, false, utf8proc_sequences + 666},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 668, false, 354, -1, 354, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 671, false, -1, 357, -1, -1, -1, false, false, false, false, utf8proc_sequences + 674},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 676, false, 356, -1, 356, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 359, -1, -1, -1, false, false, false, false, utf8proc_sequences + 679},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 358, -1, 358, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 681, false, -1, 361, -1, 10320, -1, false, false, false, false, utf8proc_sequences + 684},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 686, false, 360, -1, 360, 10380, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 689, false, -1, 363, -1, 10440, -1, false, false, false, false, utf8proc_sequences + 692},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 694, false, 362, -1, 362, 10500, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 697, false, -1, 365, -1, -1, -1, false, false, false, false, utf8proc_sequences + 700},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 702, false, 364, -1, 364, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 705, false, -1, 367, -1, -1, -1, false, false, false, false, utf8proc_sequences + 708},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 710, false, 366, -1, 366, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 713, false, -1, 369, -1, -1, -1, false, false, false, false, utf8proc_sequences + 716},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 718, false, 368, -1, 368, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 721, false, -1, 371, -1, -1, -1, false, false, false, false, utf8proc_sequences + 724},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 726, false, 370, -1, 370, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 729, false, -1, 373, -1, -1, -1, false, false, false, false, utf8proc_sequences + 732},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 734, false, 372, -1, 372, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 737, false, -1, 375, -1, -1, -1, false, false, false, false, utf8proc_sequences + 740},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 742, false, 374, -1, 374, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 745, false, -1, 255, -1, -1, -1, false, false, false, false, utf8proc_sequences + 748},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 750, false, -1, 378, -1, -1, -1, false, false, false, false, utf8proc_sequences + 753},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 755, false, 377, -1, 377, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 758, false, -1, 380, -1, -1, -1, false, false, false, false, utf8proc_sequences + 761},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 763, false, 379, -1, 379, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 766, false, -1, 382, -1, -1, -1, false, false, false, false, utf8proc_sequences + 769},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 771, false, 381, -1, 381, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 36, false, 83, -1, 83, 10800, -1, false, false, false, false, utf8proc_sequences + 36},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 579, -1, 579, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 595, -1, -1, -1, false, false, false, false, utf8proc_sequences + 774},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 387, -1, -1, -1, false, false, false, false, utf8proc_sequences + 776},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 386, -1, 386, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 389, -1, -1, -1, false, false, false, false, utf8proc_sequences + 778},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 388, -1, 388, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 596, -1, -1, -1, false, false, false, false, utf8proc_sequences + 780},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 392, -1, -1, -1, false, false, false, false, utf8proc_sequences + 782},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 391, -1, 391, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 598, -1, -1, -1, false, false, false, false, utf8proc_sequences + 784},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 599, -1, -1, -1, false, false, false, false, utf8proc_sequences + 786},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 396, -1, -1, -1, false, false, false, false, utf8proc_sequences + 788},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 395, -1, 395, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 477, -1, -1, -1, false, false, false, false, utf8proc_sequences + 790},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 601, -1, -1, -1, false, false, false, false, utf8proc_sequences + 792},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 603, -1, -1, -1, false, false, false, false, utf8proc_sequences + 794},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 402, -1, -1, -1, false, false, false, false, utf8proc_sequences + 796},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 401, -1, 401, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 608, -1, -1, -1, false, false, false, false, utf8proc_sequences + 798},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 611, -1, -1, -1, false, false, false, false, utf8proc_sequences + 800},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 502, -1, 502, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 617, -1, -1, -1, false, false, false, false, utf8proc_sequences + 802},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 616, -1, -1, -1, false, false, false, false, utf8proc_sequences + 804},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 409, -1, -1, -1, false, false, false, false, utf8proc_sequences + 806},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 408, -1, 408, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 573, -1, 573, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 623, -1, -1, -1, false, false, false, false, utf8proc_sequences + 808},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 626, -1, -1, -1, false, false, false, false, utf8proc_sequences + 810},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 544, -1, 544, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 629, -1, -1, -1, false, false, false, false, utf8proc_sequences + 812},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 814, false, -1, 417, -1, 11700, -1, false, false, false, false, utf8proc_sequences + 817},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 819, false, 416, -1, 416, 11760, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 419, -1, -1, -1, false, false, false, false, utf8proc_sequences + 822},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 418, -1, 418, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 421, -1, -1, -1, false, false, false, false, utf8proc_sequences + 824},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 420, -1, 420, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 640, -1, -1, -1, false, false, false, false, utf8proc_sequences + 826},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 424, -1, -1, -1, false, false, false, false, utf8proc_sequences + 828},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 423, -1, 423, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 643, -1, -1, -1, false, false, false, false, utf8proc_sequences + 830},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 429, -1, -1, -1, false, false, false, false, utf8proc_sequences + 832},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 428, -1, 428, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 648, -1, -1, -1, false, false, false, false, utf8proc_sequences + 834},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 836, false, -1, 432, -1, 11820, -1, false, false, false, false, utf8proc_sequences + 839},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 841, false, 431, -1, 431, 11880, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 650, -1, -1, -1, false, false, false, false, utf8proc_sequences + 844},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 651, -1, -1, -1, false, false, false, false, utf8proc_sequences + 846},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 436, -1, -1, -1, false, false, false, false, utf8proc_sequences + 848},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 435, -1, 435, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 438, -1, -1, -1, false, false, false, false, utf8proc_sequences + 850},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 437, -1, 437, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 658, -1, 2880, -1, false, false, false, false, utf8proc_sequences + 852},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 441, -1, -1, -1, false, false, false, false, utf8proc_sequences + 854},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 440, -1, 440, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 445, -1, -1, -1, false, false, false, false, utf8proc_sequences + 856},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 444, -1, 444, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 503, -1, 503, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 858, false, -1, 454, 453, -1, -1, false, false, false, false, utf8proc_sequences + 861},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 863, false, 452, 454, 453, -1, -1, false, false, false, false, utf8proc_sequences + 861},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 866, false, 452, -1, 453, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 869, false, -1, 457, 456, -1, -1, false, false, false, false, utf8proc_sequences + 872},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 874, false, 455, 457, 456, -1, -1, false, false, false, false, utf8proc_sequences + 872},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 877, false, 455, -1, 456, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 880, false, -1, 460, 459, -1, -1, false, false, false, false, utf8proc_sequences + 883},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 885, false, 458, 460, 459, -1, -1, false, false, false, false, utf8proc_sequences + 883},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 888, false, 458, -1, 459, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 891, false, -1, 462, -1, -1, -1, false, false, false, false, utf8proc_sequences + 894},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 896, false, 461, -1, 461, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 899, false, -1, 464, -1, -1, -1, false, false, false, false, utf8proc_sequences + 902},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 904, false, 463, -1, 463, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 907, false, -1, 466, -1, -1, -1, false, false, false, false, utf8proc_sequences + 910},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 912, false, 465, -1, 465, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 915, false, -1, 468, -1, -1, -1, false, false, false, false, utf8proc_sequences + 918},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 920, false, 467, -1, 467, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 923, false, -1, 470, -1, -1, -1, false, false, false, false, utf8proc_sequences + 926},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 928, false, 469, -1, 469, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 931, false, -1, 472, -1, -1, -1, false, false, false, false, utf8proc_sequences + 934},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 936, false, 471, -1, 471, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 939, false, -1, 474, -1, -1, -1, false, false, false, false, utf8proc_sequences + 942},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 944, false, 473, -1, 473, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 947, false, -1, 476, -1, -1, -1, false, false, false, false, utf8proc_sequences + 950},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 952, false, 475, -1, 475, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 398, -1, 398, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 955, false, -1, 479, -1, -1, -1, false, false, false, false, utf8proc_sequences + 958},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 960, false, 478, -1, 478, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 963, false, -1, 481, -1, -1, -1, false, false, false, false, utf8proc_sequences + 966},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 968, false, 480, -1, 480, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 971, false, -1, 483, -1, -1, -1, false, false, false, false, utf8proc_sequences + 974},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 976, false, 482, -1, 482, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 485, -1, -1, -1, false, false, false, false, utf8proc_sequences + 979},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 484, -1, 484, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 981, false, -1, 487, -1, -1, -1, false, false, false, false, utf8proc_sequences + 984},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 986, false, 486, -1, 486, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 989, false, -1, 489, -1, -1, -1, false, false, false, false, utf8proc_sequences + 992},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 994, false, 488, -1, 488, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 997, false, -1, 491, -1, 2760, -1, false, false, false, false, utf8proc_sequences + 1000},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1002, false, 490, -1, 490, 2820, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1005, false, -1, 493, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1008},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1010, false, 492, -1, 492, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1013, false, -1, 495, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1016},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1018, false, 494, -1, 494, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1021, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1021},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1024, false, -1, 499, 498, -1, -1, false, false, false, false, utf8proc_sequences + 1027},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1029, false, 497, 499, 498, -1, -1, false, false, false, false, utf8proc_sequences + 1027},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1032, false, 497, -1, 498, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1035, false, -1, 501, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1038},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1040, false, 500, -1, 500, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 405, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1043},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 447, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1045},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1047, false, -1, 505, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1050},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1052, false, 504, -1, 504, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1055, false, -1, 507, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1058},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1060, false, 506, -1, 506, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1063, false, -1, 509, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1066},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1068, false, 508, -1, 508, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1071, false, -1, 511, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1074},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1076, false, 510, -1, 510, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1079, false, -1, 513, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1082},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1084, false, 512, -1, 512, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1087, false, -1, 515, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1090},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1092, false, 514, -1, 514, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1095, false, -1, 517, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1098},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1100, false, 516, -1, 516, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1103, false, -1, 519, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1106},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1108, false, 518, -1, 518, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1111, false, -1, 521, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1114},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1116, false, 520, -1, 520, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1119, false, -1, 523, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1122},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1124, false, 522, -1, 522, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1127, false, -1, 525, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1130},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1132, false, 524, -1, 524, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1135, false, -1, 527, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1138},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1140, false, 526, -1, 526, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1143, false, -1, 529, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1146},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1148, false, 528, -1, 528, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1151, false, -1, 531, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1154},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1156, false, 530, -1, 530, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1159, false, -1, 533, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1162},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1164, false, 532, -1, 532, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1167, false, -1, 535, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1170},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1172, false, 534, -1, 534, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1175, false, -1, 537, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1178},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1180, false, 536, -1, 536, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1183, false, -1, 539, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1186},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1188, false, 538, -1, 538, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 541, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1191},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 540, -1, 540, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1193, false, -1, 543, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1196},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1198, false, 542, -1, 542, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 414, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1201},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 547, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1203},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 546, -1, 546, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 549, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1205},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 548, -1, 548, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1207, false, -1, 551, -1, 2520, -1, false, false, false, false, utf8proc_sequences + 1210},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1212, false, 550, -1, 550, 2580, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1215, false, -1, 553, -1, 9000, -1, false, false, false, false, utf8proc_sequences + 1218},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1220, false, 552, -1, 552, 9060, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1223, false, -1, 555, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1226},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1228, false, 554, -1, 554, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1231, false, -1, 557, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1234},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1236, false, 556, -1, 556, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1239, false, -1, 559, -1, 3480, -1, false, false, false, false, utf8proc_sequences + 1242},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1244, false, 558, -1, 558, 3540, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1247, false, -1, 561, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1250},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1252, false, 560, -1, 560, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1255, false, -1, 563, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1258},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1260, false, 562, -1, 562, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11365, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1263},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 572, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1265},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 571, -1, 571, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 410, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1267},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11366, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1269},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 578, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1271},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 577, -1, 577, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 384, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1273},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 649, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1275},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 652, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1277},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 583, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1279},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 582, -1, 582, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 585, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1281},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 584, -1, 584, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 587, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1283},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 586, -1, 586, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 589, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1285},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 588, -1, 588, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 591, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1287},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 590, -1, 590, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 385, -1, 385, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 390, -1, 390, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 393, -1, 393, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 394, -1, 394, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 399, -1, 399, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 400, -1, 400, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 403, -1, 403, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 404, -1, 404, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 407, -1, 407, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 406, -1, 406, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11362, -1, 11362, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 412, -1, 412, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 413, -1, 413, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 415, -1, 415, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11364, -1, 11364, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 422, -1, 422, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 425, -1, 425, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 430, -1, 430, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 580, -1, 580, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 433, -1, 433, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 434, -1, 434, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 581, -1, 581, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 439, -1, 439, 2940, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 14, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1289, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 18, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 34, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1291, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1293, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1295, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 44, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 48, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1297, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1300, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1303, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1306, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1309, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1312, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 800, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 22, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 36, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 46, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1315, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 0, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 2, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 3, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 7, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 8, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 10, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 4, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 46, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 5, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 12, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 11, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 14, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 15, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 47, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 48, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 232, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 216, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 13, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 40, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 45, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 39, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 16, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 6, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 202, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 9, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 42, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 44, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 43, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 41, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 1, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 51, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 1317, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 1319, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 49, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 1321, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 1323, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 240, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, 921, -1, 921, -1, 50, false, false, false, true, utf8proc_sequences + 1326},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, true, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 233, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 234, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 1328, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1330, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1021, -1, 1021, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1022, -1, 1022, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1023, -1, 1023, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 1333, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 1335, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1338, false, -1, 940, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1341},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 1343, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1345, false, -1, 941, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1348},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1350, false, -1, 942, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1353},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1355, false, -1, 943, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1358},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1360, false, -1, 972, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1363},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1365, false, -1, 973, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1368},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1370, false, -1, 974, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1373},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1375, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1378},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 945, -1, 3660, -1, false, false, false, false, utf8proc_sequences + 1382},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 946, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1384},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 947, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1386},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 948, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1388},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 949, -1, 3720, -1, false, false, false, false, utf8proc_sequences + 1390},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 950, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1392},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 951, -1, 3780, -1, false, false, false, false, utf8proc_sequences + 1394},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 952, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1396},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 953, -1, 3840, -1, false, false, false, false, utf8proc_sequences + 1326},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 954, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1398},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 955, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1400},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 956, -1, -1, -1, false, false, false, false, utf8proc_sequences + 67},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 957, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1402},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 958, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1404},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 959, -1, 3900, -1, false, false, false, false, utf8proc_sequences + 1406},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 960, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1408},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 961, -1, 16260, -1, false, false, false, false, utf8proc_sequences + 1410},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 963, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1412},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 964, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1414},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 965, -1, 3960, -1, false, false, false, false, utf8proc_sequences + 1416},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 966, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1418},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 967, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1420},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 968, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1422},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 969, -1, 4020, -1, false, false, false, false, utf8proc_sequences + 1424},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1426, false, -1, 970, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1429},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1431, false, -1, 971, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1434},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1436, false, 902, -1, 902, 15780, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1439, false, 904, -1, 904, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1442, false, 905, -1, 905, 15960, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1445, false, 906, -1, 906, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1448, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1451},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 913, -1, 913, 4140, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 914, -1, 914, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 915, -1, 915, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 916, -1, 916, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 917, -1, 917, 4200, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 918, -1, 918, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 919, -1, 919, 4260, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 920, -1, 920, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 921, -1, 921, 4320, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 922, -1, 922, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 923, -1, 923, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 924, -1, 924, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 925, -1, 925, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 926, -1, 926, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 927, -1, 927, 4500, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 928, -1, 928, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 929, -1, 929, 16200, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 931, -1, 931, -1, -1, false, false, false, false, utf8proc_sequences + 1412},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 931, -1, 931, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 932, -1, 932, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 933, -1, 933, 4440, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 934, -1, 934, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 935, -1, 935, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 936, -1, 936, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 937, -1, 937, 4560, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1455, false, 938, -1, 938, 4080, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1458, false, 939, -1, 939, 4380, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1461, false, 908, -1, 908, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1464, false, 910, -1, 910, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1467, false, 911, -1, 911, 16380, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1384, false, 914, -1, 914, -1, -1, false, false, false, false, utf8proc_sequences + 1384},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1396, false, 920, -1, 920, -1, -1, false, false, false, false, utf8proc_sequences + 1396},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1470, false, -1, -1, -1, 4620, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1472, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1475, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1418, false, 934, -1, 934, -1, -1, false, false, false, false, utf8proc_sequences + 1418},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1408, false, 928, -1, 928, -1, -1, false, false, false, false, utf8proc_sequences + 1408},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 985, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1478},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 984, -1, 984, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 987, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1480},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 986, -1, 986, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 989, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1482},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 988, -1, 988, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 991, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1484},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 990, -1, 990, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 993, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1486},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 992, -1, 992, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 995, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1488},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 994, -1, 994, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 997, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1490},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 996, -1, 996, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 999, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1492},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 998, -1, 998, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1001, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1494},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1000, -1, 1000, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1003, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1496},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1002, -1, 1002, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1005, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1498},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1004, -1, 1004, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1007, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1500},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1006, -1, 1006, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1398, false, 922, -1, 922, -1, -1, false, false, false, false, utf8proc_sequences + 1398},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1410, false, 929, -1, 929, -1, -1, false, false, false, false, utf8proc_sequences + 1410},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1502, false, 1017, -1, 1017, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1504, false, -1, 952, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1396},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1390, false, 917, -1, 917, -1, -1, false, false, false, false, utf8proc_sequences + 1390},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1016, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1506},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1015, -1, 1015, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 1508, false, -1, 1010, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1510},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1019, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1512},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1018, -1, 1018, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 891, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1514},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 892, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1516},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 893, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1518},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1520, false, -1, 1104, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1523},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1525, false, -1, 1105, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1528},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1106, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1530},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1532, false, -1, 1107, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1535},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1108, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1537},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1109, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1539},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1110, -1, 4800, -1, false, false, false, false, utf8proc_sequences + 1541},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1543, false, -1, 1111, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1546},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1112, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1548},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1113, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1550},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1114, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1552},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1115, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1554},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1556, false, -1, 1116, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1559},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1561, false, -1, 1117, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1564},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1566, false, -1, 1118, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1569},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1119, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1571},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1072, -1, 5640, -1, false, false, false, false, utf8proc_sequences + 1573},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1073, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1575},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1074, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1577},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1075, -1, 4740, -1, false, false, false, false, utf8proc_sequences + 1579},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1076, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1581},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1077, -1, 4680, -1, false, false, false, false, utf8proc_sequences + 1583},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1078, -1, 5520, -1, false, false, false, false, utf8proc_sequences + 1585},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1079, -1, 5880, -1, false, false, false, false, utf8proc_sequences + 1587},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1080, -1, 4920, -1, false, false, false, false, utf8proc_sequences + 1589},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1591, false, -1, 1081, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1594},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1082, -1, 4860, -1, false, false, false, false, utf8proc_sequences + 1596},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1083, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1598},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1084, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1600},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1085, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1602},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1086, -1, 6000, -1, false, false, false, false, utf8proc_sequences + 1604},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1087, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1606},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1088, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1608},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1089, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1610},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1090, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1612},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1091, -1, 4980, -1, false, false, false, false, utf8proc_sequences + 1614},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1092, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1616},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1093, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1618},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1094, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1620},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1095, -1, 6360, -1, false, false, false, false, utf8proc_sequences + 1622},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1096, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1624},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1097, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1626},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1098, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1628},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1099, -1, 6480, -1, false, false, false, false, utf8proc_sequences + 1630},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1100, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1632},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1101, -1, 6240, -1, false, false, false, false, utf8proc_sequences + 1634},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1102, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1636},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1103, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1638},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1040, -1, 1040, 5700, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1041, -1, 1041, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1042, -1, 1042, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1043, -1, 1043, 5160, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1044, -1, 1044, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1045, -1, 1045, 5100, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1046, -1, 1046, 5580, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1047, -1, 1047, 5940, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1048, -1, 1048, 5040, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1640, false, 1049, -1, 1049, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1050, -1, 1050, 5280, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1051, -1, 1051, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1052, -1, 1052, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1053, -1, 1053, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1054, -1, 1054, 6060, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1055, -1, 1055, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1056, -1, 1056, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1057, -1, 1057, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1058, -1, 1058, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1059, -1, 1059, 5340, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1060, -1, 1060, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1061, -1, 1061, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1062, -1, 1062, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1063, -1, 1063, 6420, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1064, -1, 1064, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1065, -1, 1065, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1066, -1, 1066, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1067, -1, 1067, 6540, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1068, -1, 1068, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1069, -1, 1069, 6300, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1070, -1, 1070, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1071, -1, 1071, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1643, false, 1024, -1, 1024, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1646, false, 1025, -1, 1025, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1026, -1, 1026, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1649, false, 1027, -1, 1027, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1028, -1, 1028, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1029, -1, 1029, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1030, -1, 1030, 5220, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1652, false, 1031, -1, 1031, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1032, -1, 1032, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1033, -1, 1033, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1034, -1, 1034, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1035, -1, 1035, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1655, false, 1036, -1, 1036, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1658, false, 1037, -1, 1037, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1661, false, 1038, -1, 1038, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1039, -1, 1039, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1121, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1664},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1120, -1, 1120, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1123, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1666},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1122, -1, 1122, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1125, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1668},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1124, -1, 1124, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1127, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1670},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1126, -1, 1126, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1129, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1672},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1128, -1, 1128, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1131, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1674},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1130, -1, 1130, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1133, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1676},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1132, -1, 1132, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1135, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1678},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1134, -1, 1134, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1137, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1680},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1136, -1, 1136, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1139, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1682},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1138, -1, 1138, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1141, -1, 5400, -1, false, false, false, false, utf8proc_sequences + 1684},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1140, -1, 1140, 5460, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1686, false, -1, 1143, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1689},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1691, false, 1142, -1, 1142, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1145, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1694},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1144, -1, 1144, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1147, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1696},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1146, -1, 1146, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1149, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1698},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1148, -1, 1148, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1151, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1700},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1150, -1, 1150, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1153, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1702},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1152, -1, 1152, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ME, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1163, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1704},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1162, -1, 1162, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1165, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1706},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1164, -1, 1164, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1167, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1708},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1166, -1, 1166, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1169, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1710},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1168, -1, 1168, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1171, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1712},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1170, -1, 1170, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1173, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1714},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1172, -1, 1172, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1175, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1716},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1174, -1, 1174, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1177, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1718},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1176, -1, 1176, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1179, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1720},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1178, -1, 1178, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1181, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1722},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1180, -1, 1180, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1183, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1724},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1182, -1, 1182, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1185, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1726},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1184, -1, 1184, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1187, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1728},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1186, -1, 1186, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1189, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1730},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1188, -1, 1188, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1191, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1732},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1190, -1, 1190, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1193, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1734},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1192, -1, 1192, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1195, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1736},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1194, -1, 1194, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1197, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1738},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1196, -1, 1196, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1199, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1740},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1198, -1, 1198, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1201, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1742},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1200, -1, 1200, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1203, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1744},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1202, -1, 1202, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1205, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1746},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1204, -1, 1204, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1207, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1748},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1206, -1, 1206, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1209, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1750},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1208, -1, 1208, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1211, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1752},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1210, -1, 1210, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1213, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1754},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1212, -1, 1212, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1215, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1756},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1214, -1, 1214, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1231, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1758},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1760, false, -1, 1218, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1763},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1765, false, 1217, -1, 1217, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1220, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1768},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1219, -1, 1219, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1222, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1770},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1221, -1, 1221, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1224, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1772},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1223, -1, 1223, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1226, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1774},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1225, -1, 1225, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1228, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1776},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1227, -1, 1227, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1230, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1778},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1229, -1, 1229, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1216, -1, 1216, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1780, false, -1, 1233, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1783},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1785, false, 1232, -1, 1232, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1788, false, -1, 1235, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1791},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1793, false, 1234, -1, 1234, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1237, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1796},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1236, -1, 1236, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1798, false, -1, 1239, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1801},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1803, false, 1238, -1, 1238, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1241, -1, 5760, -1, false, false, false, false, utf8proc_sequences + 1806},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1240, -1, 1240, 5820, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1808, false, -1, 1243, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1811},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1813, false, 1242, -1, 1242, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1816, false, -1, 1245, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1819},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1821, false, 1244, -1, 1244, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1824, false, -1, 1247, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1827},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1829, false, 1246, -1, 1246, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1249, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1832},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1248, -1, 1248, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1834, false, -1, 1251, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1837},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1839, false, 1250, -1, 1250, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1842, false, -1, 1253, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1845},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1847, false, 1252, -1, 1252, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1850, false, -1, 1255, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1853},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1855, false, 1254, -1, 1254, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1257, -1, 6120, -1, false, false, false, false, utf8proc_sequences + 1858},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1256, -1, 1256, 6180, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1860, false, -1, 1259, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1863},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1865, false, 1258, -1, 1258, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1868, false, -1, 1261, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1871},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1873, false, 1260, -1, 1260, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1876, false, -1, 1263, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1879},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1881, false, 1262, -1, 1262, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1884, false, -1, 1265, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1887},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1889, false, 1264, -1, 1264, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1892, false, -1, 1267, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1895},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1897, false, 1266, -1, 1266, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1900, false, -1, 1269, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1903},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1905, false, 1268, -1, 1268, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1271, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1908},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1270, -1, 1270, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1910, false, -1, 1273, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1913},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1915, false, 1272, -1, 1272, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1275, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1918},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1274, -1, 1274, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1277, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1920},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1276, -1, 1276, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1279, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1922},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1278, -1, 1278, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1281, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1924},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1280, -1, 1280, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1283, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1926},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1282, -1, 1282, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1285, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1928},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1284, -1, 1284, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1287, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1930},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1286, -1, 1286, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1289, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1932},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1288, -1, 1288, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1291, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1934},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1290, -1, 1290, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1293, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1936},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1292, -1, 1292, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1295, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1938},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1294, -1, 1294, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1297, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1940},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1296, -1, 1296, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1299, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1942},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1298, -1, 1298, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1377, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1944},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1378, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1946},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1379, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1948},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1380, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1950},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1381, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1952},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1382, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1954},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1383, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1956},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1384, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1958},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1385, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1960},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1386, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1962},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1387, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1964},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1388, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1966},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1389, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1968},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1390, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1970},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1391, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1972},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1392, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1974},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1393, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1976},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1394, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1978},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1395, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1980},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1396, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1982},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1397, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1984},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1398, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1986},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1399, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1988},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1400, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1990},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1401, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1992},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1402, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1994},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1403, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1996},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1404, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1998},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1405, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2000},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1406, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2002},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1407, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2004},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1408, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2006},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1409, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2008},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1410, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2010},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1411, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2012},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1412, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2014},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1413, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2016},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 1414, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2018},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1329, -1, 1329, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1330, -1, 1330, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1331, -1, 1331, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1332, -1, 1332, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1333, -1, 1333, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1334, -1, 1334, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1335, -1, 1335, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1336, -1, 1336, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1337, -1, 1337, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1338, -1, 1338, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1339, -1, 1339, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1340, -1, 1340, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1341, -1, 1341, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1342, -1, 1342, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1343, -1, 1343, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1344, -1, 1344, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1345, -1, 1345, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1346, -1, 1346, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1347, -1, 1347, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1348, -1, 1348, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1349, -1, 1349, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1350, -1, 1350, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1351, -1, 1351, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1352, -1, 1352, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1353, -1, 1353, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1354, -1, 1354, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1355, -1, 1355, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1356, -1, 1356, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1357, -1, 1357, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1358, -1, 1358, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1359, -1, 1359, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1360, -1, 1360, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1361, -1, 1361, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1362, -1, 1362, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1363, -1, 1363, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1364, -1, 1364, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1365, -1, 1365, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 1366, -1, 1366, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2020, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2020},
-  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 222, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 228, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 10, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 11, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 12, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 13, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 14, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 15, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 16, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 17, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 18, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 19, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 20, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 21, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 22, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_R, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 23, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 24, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 25, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, utf8proc_sequences + 2023, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, utf8proc_sequences + 2026, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, utf8proc_sequences + 2029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, utf8proc_sequences + 2032, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, utf8proc_sequences + 2035, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, 6600, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, 6660, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, 6720, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 27, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 28, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 29, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 30, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 31, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 32, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 33, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 34, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 17, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 230, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 18, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 220, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 19, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_AN, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_AN, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 35, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2038, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2041, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2044, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2047, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, utf8proc_sequences + 2050, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, 6840, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, utf8proc_sequences + 2053, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, 6900, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, utf8proc_sequences + 2056, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, 6780, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_AL, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 36, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_R, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_R, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 6960, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2059, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7020, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2062, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7080, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2065, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 20, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2068, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2071, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2074, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2077, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2080, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2083, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2086, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2089, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 7, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 21, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7140, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2092, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 22, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2098, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2101, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2104, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2107, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2110, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2113, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2116, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2119, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2122, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 24, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7200, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2128, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 23, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 25, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2134, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2137, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7260, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2140, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 27, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7320, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7380, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2143, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2146, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2149, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 26, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, 7440, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2152, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 84, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 91, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 28, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7500, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2155, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 31, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7560, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2158, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2161, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2164, false, -1, -1, -1, 7620, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2167, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 29, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 30, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 32, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7680, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7740, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2170, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2173, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2176, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 33, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 9, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 34, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 35, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7800, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2179, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2182, false, -1, -1, -1, 7860, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2185, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2188, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 36, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2191, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 103, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 107, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2194, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 118, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 122, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2197, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2200, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NOBREAK, utf8proc_sequences + 2203, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 216, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2205, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2208, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2211, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2214, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2217, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2220, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 129, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 130, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2223, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 132, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2226, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2229, false, -1, -1, -1, -1, -1, true, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2232, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2235, false, -1, -1, -1, -1, -1, true, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2238, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2241, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2244, false, -1, -1, -1, -1, -1, true, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2247, false, -1, -1, -1, -1, -1, true, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2250, false, -1, -1, -1, -1, -1, true, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2253, false, -1, -1, -1, -1, -1, true, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2256, false, -1, -1, -1, -1, -1, true, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, utf8proc_sequences + 2259, false, -1, -1, -1, -1, -1, true, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7920, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2262, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 37, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11520, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2265},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11521, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2267},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11522, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2269},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11523, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2271},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11524, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2273},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11525, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2275},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11526, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2277},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11527, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2279},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11528, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2281},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11529, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2283},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11530, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2285},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11531, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2287},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11532, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2289},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11533, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2291},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11534, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2293},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11535, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2295},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11536, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2297},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11537, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2299},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11538, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2301},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11539, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2303},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11540, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2305},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11541, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2307},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11542, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2309},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11543, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2311},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11544, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2313},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11545, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2315},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11546, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2317},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11547, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2319},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11548, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2321},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11549, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2323},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11550, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2325},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11551, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2327},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11552, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2329},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11553, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2331},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11554, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2333},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11555, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2335},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11556, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2337},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11557, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2339},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2341, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, true, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 7980, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2343, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 8040, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2346, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 8100, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2349, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 8160, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2352, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 8220, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2355, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 8280, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2358, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 38, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, 8340, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2361, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, 8400, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2364, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 8460, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 8520, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2367, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2370, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 0, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, 8580, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2373, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 9, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2376, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2378, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2380, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2382, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2384, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2386, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2388, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2390, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2392, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2394, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2396, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2398, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2400, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2402, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2404, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2406, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2408, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2410, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2412, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2414, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2416, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 0, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2418, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2420, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2422, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 8, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 792, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 794, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2424, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 12, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 20, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 24, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 579, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 28, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 780, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2426, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2428, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 30, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 38, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 40, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2430, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 808, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 42, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2432, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1384, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1386, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1388, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1418, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1420, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 16, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 34, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 40, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 42, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 1384, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 1386, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 1410, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 1418, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 1420, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1602, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11363, -1, 11363, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2434, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2436, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 163, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 10, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2438, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2440, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2442, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 804, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 802, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2444, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2446, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2448, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2450, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2452, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2454, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2456, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2458, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 810, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2460, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2462, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 812, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2464, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2466, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 830, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2468, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1275, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 844, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2470, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 846, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1277, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 50, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2472, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 2474, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 852, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 1396, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2476, false, -1, 7681, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2479},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2481, false, 7680, -1, 7680, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2484, false, -1, 7683, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2487},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2489, false, 7682, -1, 7682, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2492, false, -1, 7685, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2495},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2497, false, 7684, -1, 7684, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2500, false, -1, 7687, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2503},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2505, false, 7686, -1, 7686, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2508, false, -1, 7689, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2511},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2513, false, 7688, -1, 7688, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2516, false, -1, 7691, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2519},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2521, false, 7690, -1, 7690, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2524, false, -1, 7693, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2527},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2529, false, 7692, -1, 7692, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2532, false, -1, 7695, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2535},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2537, false, 7694, -1, 7694, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2540, false, -1, 7697, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2543},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2545, false, 7696, -1, 7696, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2548, false, -1, 7699, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2551},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2553, false, 7698, -1, 7698, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2556, false, -1, 7701, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2559},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2561, false, 7700, -1, 7700, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2564, false, -1, 7703, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2567},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2569, false, 7702, -1, 7702, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2572, false, -1, 7705, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2575},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2577, false, 7704, -1, 7704, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2580, false, -1, 7707, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2583},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2585, false, 7706, -1, 7706, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2588, false, -1, 7709, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2591},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2593, false, 7708, -1, 7708, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2596, false, -1, 7711, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2599},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2601, false, 7710, -1, 7710, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2604, false, -1, 7713, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2607},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2609, false, 7712, -1, 7712, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2612, false, -1, 7715, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2615},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2617, false, 7714, -1, 7714, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2620, false, -1, 7717, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2623},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2625, false, 7716, -1, 7716, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2628, false, -1, 7719, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2631},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2633, false, 7718, -1, 7718, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2636, false, -1, 7721, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2639},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2641, false, 7720, -1, 7720, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2644, false, -1, 7723, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2647},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2649, false, 7722, -1, 7722, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2652, false, -1, 7725, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2655},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2657, false, 7724, -1, 7724, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2660, false, -1, 7727, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2663},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2665, false, 7726, -1, 7726, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2668, false, -1, 7729, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2671},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2673, false, 7728, -1, 7728, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2676, false, -1, 7731, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2679},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2681, false, 7730, -1, 7730, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2684, false, -1, 7733, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2687},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2689, false, 7732, -1, 7732, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2692, false, -1, 7735, -1, 9360, -1, false, false, false, false, utf8proc_sequences + 2695},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2697, false, 7734, -1, 7734, 9420, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2700, false, -1, 7737, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2703},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2705, false, 7736, -1, 7736, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2708, false, -1, 7739, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2711},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2713, false, 7738, -1, 7738, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2716, false, -1, 7741, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2719},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2721, false, 7740, -1, 7740, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2724, false, -1, 7743, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2727},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2729, false, 7742, -1, 7742, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2732, false, -1, 7745, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2735},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2737, false, 7744, -1, 7744, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2740, false, -1, 7747, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2743},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2745, false, 7746, -1, 7746, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2748, false, -1, 7749, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2751},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2753, false, 7748, -1, 7748, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2756, false, -1, 7751, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2759},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2761, false, 7750, -1, 7750, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2764, false, -1, 7753, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2767},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2769, false, 7752, -1, 7752, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2772, false, -1, 7755, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2775},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2777, false, 7754, -1, 7754, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2780, false, -1, 7757, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2783},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2785, false, 7756, -1, 7756, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2788, false, -1, 7759, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2791},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2793, false, 7758, -1, 7758, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2796, false, -1, 7761, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2799},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2801, false, 7760, -1, 7760, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2804, false, -1, 7763, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2807},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2809, false, 7762, -1, 7762, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2812, false, -1, 7765, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2815},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2817, false, 7764, -1, 7764, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2820, false, -1, 7767, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2823},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2825, false, 7766, -1, 7766, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2828, false, -1, 7769, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2831},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2833, false, 7768, -1, 7768, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2836, false, -1, 7771, -1, 9840, -1, false, false, false, false, utf8proc_sequences + 2839},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2841, false, 7770, -1, 7770, 9900, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2844, false, -1, 7773, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2847},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2849, false, 7772, -1, 7772, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2852, false, -1, 7775, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2855},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2857, false, 7774, -1, 7774, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2860, false, -1, 7777, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2863},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2865, false, 7776, -1, 7776, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2868, false, -1, 7779, -1, 10200, -1, false, false, false, false, utf8proc_sequences + 2871},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2873, false, 7778, -1, 7778, 10260, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2876, false, -1, 7781, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2879},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2881, false, 7780, -1, 7780, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2884, false, -1, 7783, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2887},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2889, false, 7782, -1, 7782, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2892, false, -1, 7785, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2895},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2897, false, 7784, -1, 7784, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2900, false, -1, 7787, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2903},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2905, false, 7786, -1, 7786, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2908, false, -1, 7789, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2911},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2913, false, 7788, -1, 7788, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2916, false, -1, 7791, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2919},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2921, false, 7790, -1, 7790, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2924, false, -1, 7793, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2927},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2929, false, 7792, -1, 7792, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2932, false, -1, 7795, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2935},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2937, false, 7794, -1, 7794, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2940, false, -1, 7797, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2943},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2945, false, 7796, -1, 7796, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2948, false, -1, 7799, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2951},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2953, false, 7798, -1, 7798, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2956, false, -1, 7801, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2959},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2961, false, 7800, -1, 7800, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2964, false, -1, 7803, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2967},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2969, false, 7802, -1, 7802, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2972, false, -1, 7805, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2975},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2977, false, 7804, -1, 7804, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2980, false, -1, 7807, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2983},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2985, false, 7806, -1, 7806, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2988, false, -1, 7809, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2991},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2993, false, 7808, -1, 7808, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2996, false, -1, 7811, -1, -1, -1, false, false, false, false, utf8proc_sequences + 2999},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3001, false, 7810, -1, 7810, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3004, false, -1, 7813, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3007},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3009, false, 7812, -1, 7812, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3012, false, -1, 7815, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3015},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3017, false, 7814, -1, 7814, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3020, false, -1, 7817, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3023},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3025, false, 7816, -1, 7816, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3028, false, -1, 7819, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3031},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3033, false, 7818, -1, 7818, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3036, false, -1, 7821, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3039},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3041, false, 7820, -1, 7820, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3044, false, -1, 7823, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3047},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3049, false, 7822, -1, 7822, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3052, false, -1, 7825, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3055},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3057, false, 7824, -1, 7824, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3060, false, -1, 7827, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3063},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3065, false, 7826, -1, 7826, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3068, false, -1, 7829, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3071},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3073, false, 7828, -1, 7828, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3076, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3076},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3079, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3079},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3082, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3082},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3085, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3085},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 3088, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3088},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3091, false, 7776, -1, 7776, -1, -1, false, false, false, false, utf8proc_sequences + 2863},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3094, false, -1, 7841, -1, 10980, -1, false, false, false, false, utf8proc_sequences + 3097},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3099, false, 7840, -1, 7840, 11040, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3102, false, -1, 7843, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3105},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3107, false, 7842, -1, 7842, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3110, false, -1, 7845, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3113},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3115, false, 7844, -1, 7844, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3118, false, -1, 7847, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3121},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3123, false, 7846, -1, 7846, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3126, false, -1, 7849, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3129},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3131, false, 7848, -1, 7848, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3134, false, -1, 7851, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3137},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3139, false, 7850, -1, 7850, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3142, false, -1, 7853, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3145},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3147, false, 7852, -1, 7852, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3150, false, -1, 7855, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3153},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3155, false, 7854, -1, 7854, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3158, false, -1, 7857, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3161},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3163, false, 7856, -1, 7856, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3166, false, -1, 7859, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3169},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3171, false, 7858, -1, 7858, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3174, false, -1, 7861, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3177},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3179, false, 7860, -1, 7860, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3182, false, -1, 7863, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3185},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3187, false, 7862, -1, 7862, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3190, false, -1, 7865, -1, 11340, -1, false, false, false, false, utf8proc_sequences + 3193},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3195, false, 7864, -1, 7864, 11400, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3198, false, -1, 7867, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3201},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3203, false, 7866, -1, 7866, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3206, false, -1, 7869, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3209},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3211, false, 7868, -1, 7868, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3214, false, -1, 7871, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3217},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3219, false, 7870, -1, 7870, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3222, false, -1, 7873, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3225},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3227, false, 7872, -1, 7872, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3230, false, -1, 7875, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3233},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3235, false, 7874, -1, 7874, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3238, false, -1, 7877, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3241},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3243, false, 7876, -1, 7876, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3246, false, -1, 7879, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3249},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3251, false, 7878, -1, 7878, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3254, false, -1, 7881, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3257},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3259, false, 7880, -1, 7880, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3262, false, -1, 7883, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3265},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3267, false, 7882, -1, 7882, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3270, false, -1, 7885, -1, 11580, -1, false, false, false, false, utf8proc_sequences + 3273},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3275, false, 7884, -1, 7884, 11640, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3278, false, -1, 7887, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3281},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3283, false, 7886, -1, 7886, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3286, false, -1, 7889, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3289},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3291, false, 7888, -1, 7888, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3294, false, -1, 7891, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3297},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3299, false, 7890, -1, 7890, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3302, false, -1, 7893, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3305},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3307, false, 7892, -1, 7892, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3310, false, -1, 7895, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3313},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3315, false, 7894, -1, 7894, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3318, false, -1, 7897, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3321},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3323, false, 7896, -1, 7896, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3326, false, -1, 7899, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3329},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3331, false, 7898, -1, 7898, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3334, false, -1, 7901, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3337},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3339, false, 7900, -1, 7900, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3342, false, -1, 7903, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3345},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3347, false, 7902, -1, 7902, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3350, false, -1, 7905, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3353},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3355, false, 7904, -1, 7904, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3358, false, -1, 7907, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3361},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3363, false, 7906, -1, 7906, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3366, false, -1, 7909, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3369},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3371, false, 7908, -1, 7908, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3374, false, -1, 7911, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3377},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3379, false, 7910, -1, 7910, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3382, false, -1, 7913, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3385},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3387, false, 7912, -1, 7912, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3390, false, -1, 7915, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3393},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3395, false, 7914, -1, 7914, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3398, false, -1, 7917, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3401},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3403, false, 7916, -1, 7916, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3406, false, -1, 7919, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3409},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3411, false, 7918, -1, 7918, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3414, false, -1, 7921, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3417},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3419, false, 7920, -1, 7920, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3422, false, -1, 7923, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3425},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3427, false, 7922, -1, 7922, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3430, false, -1, 7925, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3433},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3435, false, 7924, -1, 7924, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3438, false, -1, 7927, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3441},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3443, false, 7926, -1, 7926, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3446, false, -1, 7929, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3449},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3451, false, 7928, -1, 7928, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3454, false, 7944, -1, 7944, 11940, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3457, false, 7945, -1, 7945, 12000, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3460, false, 7946, -1, 7946, 13560, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3463, false, 7947, -1, 7947, 13620, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3466, false, 7948, -1, 7948, 13680, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3469, false, 7949, -1, 7949, 13740, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3472, false, 7950, -1, 7950, 13800, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3475, false, 7951, -1, 7951, 13860, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3478, false, -1, 7936, -1, 12060, -1, false, false, false, false, utf8proc_sequences + 3481},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3483, false, -1, 7937, -1, 12120, -1, false, false, false, false, utf8proc_sequences + 3486},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3488, false, -1, 7938, -1, 13920, -1, false, false, false, false, utf8proc_sequences + 3491},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3493, false, -1, 7939, -1, 13980, -1, false, false, false, false, utf8proc_sequences + 3496},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3498, false, -1, 7940, -1, 14040, -1, false, false, false, false, utf8proc_sequences + 3501},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3503, false, -1, 7941, -1, 14100, -1, false, false, false, false, utf8proc_sequences + 3506},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3508, false, -1, 7942, -1, 14160, -1, false, false, false, false, utf8proc_sequences + 3511},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3513, false, -1, 7943, -1, 14220, -1, false, false, false, false, utf8proc_sequences + 3516},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3518, false, 7960, -1, 7960, 12180, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3521, false, 7961, -1, 7961, 12240, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3524, false, 7962, -1, 7962, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3527, false, 7963, -1, 7963, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3530, false, 7964, -1, 7964, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3533, false, 7965, -1, 7965, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3536, false, -1, 7952, -1, 12300, -1, false, false, false, false, utf8proc_sequences + 3539},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3541, false, -1, 7953, -1, 12360, -1, false, false, false, false, utf8proc_sequences + 3544},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3546, false, -1, 7954, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3549},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3551, false, -1, 7955, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3554},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3556, false, -1, 7956, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3559},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3561, false, -1, 7957, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3564},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3566, false, 7976, -1, 7976, 12420, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3569, false, 7977, -1, 7977, 12480, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3572, false, 7978, -1, 7978, 14280, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3575, false, 7979, -1, 7979, 14340, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3578, false, 7980, -1, 7980, 14400, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3581, false, 7981, -1, 7981, 14460, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3584, false, 7982, -1, 7982, 14520, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3587, false, 7983, -1, 7983, 14580, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3590, false, -1, 7968, -1, 12540, -1, false, false, false, false, utf8proc_sequences + 3593},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3595, false, -1, 7969, -1, 12600, -1, false, false, false, false, utf8proc_sequences + 3598},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3600, false, -1, 7970, -1, 14640, -1, false, false, false, false, utf8proc_sequences + 3603},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3605, false, -1, 7971, -1, 14700, -1, false, false, false, false, utf8proc_sequences + 3608},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3610, false, -1, 7972, -1, 14760, -1, false, false, false, false, utf8proc_sequences + 3613},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3615, false, -1, 7973, -1, 14820, -1, false, false, false, false, utf8proc_sequences + 3618},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3620, false, -1, 7974, -1, 14880, -1, false, false, false, false, utf8proc_sequences + 3623},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3625, false, -1, 7975, -1, 14940, -1, false, false, false, false, utf8proc_sequences + 3628},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3630, false, 7992, -1, 7992, 12660, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3633, false, 7993, -1, 7993, 12720, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3636, false, 7994, -1, 7994, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3639, false, 7995, -1, 7995, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3642, false, 7996, -1, 7996, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3645, false, 7997, -1, 7997, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3648, false, 7998, -1, 7998, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3651, false, 7999, -1, 7999, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3654, false, -1, 7984, -1, 12780, -1, false, false, false, false, utf8proc_sequences + 3657},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3659, false, -1, 7985, -1, 12840, -1, false, false, false, false, utf8proc_sequences + 3662},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3664, false, -1, 7986, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3667},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3669, false, -1, 7987, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3672},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3674, false, -1, 7988, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3677},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3679, false, -1, 7989, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3682},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3684, false, -1, 7990, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3687},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3689, false, -1, 7991, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3692},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3694, false, 8008, -1, 8008, 12900, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3697, false, 8009, -1, 8009, 12960, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3700, false, 8010, -1, 8010, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3703, false, 8011, -1, 8011, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3706, false, 8012, -1, 8012, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3709, false, 8013, -1, 8013, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3712, false, -1, 8000, -1, 13020, -1, false, false, false, false, utf8proc_sequences + 3715},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3717, false, -1, 8001, -1, 13080, -1, false, false, false, false, utf8proc_sequences + 3720},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3722, false, -1, 8002, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3725},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3727, false, -1, 8003, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3730},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3732, false, -1, 8004, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3735},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3737, false, -1, 8005, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3740},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3742, false, -1, -1, -1, 13140, -1, false, false, false, false, utf8proc_sequences + 3742},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3745, false, 8025, -1, 8025, 13200, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3748, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3751},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3755, false, 8027, -1, 8027, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3758, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3761},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3765, false, 8029, -1, 8029, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3768, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3771},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3775, false, 8031, -1, 8031, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3778, false, -1, 8017, -1, 13260, -1, false, false, false, false, utf8proc_sequences + 3781},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3783, false, -1, 8019, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3786},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3788, false, -1, 8021, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3791},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3793, false, -1, 8023, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3796},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3798, false, 8040, -1, 8040, 13320, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3801, false, 8041, -1, 8041, 13380, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3804, false, 8042, -1, 8042, 15000, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3807, false, 8043, -1, 8043, 15060, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3810, false, 8044, -1, 8044, 15120, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3813, false, 8045, -1, 8045, 15180, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3816, false, 8046, -1, 8046, 15240, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3819, false, 8047, -1, 8047, 15300, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3822, false, -1, 8032, -1, 13440, -1, false, false, false, false, utf8proc_sequences + 3825},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3827, false, -1, 8033, -1, 13500, -1, false, false, false, false, utf8proc_sequences + 3830},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3832, false, -1, 8034, -1, 15360, -1, false, false, false, false, utf8proc_sequences + 3835},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3837, false, -1, 8035, -1, 15420, -1, false, false, false, false, utf8proc_sequences + 3840},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3842, false, -1, 8036, -1, 15480, -1, false, false, false, false, utf8proc_sequences + 3845},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3847, false, -1, 8037, -1, 15540, -1, false, false, false, false, utf8proc_sequences + 3850},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3852, false, -1, 8038, -1, 15600, -1, false, false, false, false, utf8proc_sequences + 3855},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3857, false, -1, 8039, -1, 15660, -1, false, false, false, false, utf8proc_sequences + 3860},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3862, false, 8122, -1, 8122, 15720, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1341, false, 8123, -1, 8123, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3865, false, 8136, -1, 8136, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1348, false, 8137, -1, 8137, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3868, false, 8138, -1, 8138, 15900, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1353, false, 8139, -1, 8139, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3871, false, 8154, -1, 8154, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1358, false, 8155, -1, 8155, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3874, false, 8184, -1, 8184, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1363, false, 8185, -1, 8185, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3877, false, 8170, -1, 8170, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1368, false, 8171, -1, 8171, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3880, false, 8186, -1, 8186, 16320, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1373, false, 8187, -1, 8187, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3883, false, 8072, -1, 8072, -1, -1, false, false, false, false, utf8proc_sequences + 3886},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3889, false, 8073, -1, 8073, -1, -1, false, false, false, false, utf8proc_sequences + 3892},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3895, false, 8074, -1, 8074, -1, -1, false, false, false, false, utf8proc_sequences + 3898},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3901, false, 8075, -1, 8075, -1, -1, false, false, false, false, utf8proc_sequences + 3904},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3907, false, 8076, -1, 8076, -1, -1, false, false, false, false, utf8proc_sequences + 3910},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3913, false, 8077, -1, 8077, -1, -1, false, false, false, false, utf8proc_sequences + 3916},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3919, false, 8078, -1, 8078, -1, -1, false, false, false, false, utf8proc_sequences + 3922},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3925, false, 8079, -1, 8079, -1, -1, false, false, false, false, utf8proc_sequences + 3928},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3931, false, -1, 8064, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3934},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3936, false, -1, 8065, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3939},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3941, false, -1, 8066, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3944},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3946, false, -1, 8067, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3949},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3951, false, -1, 8068, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3954},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3956, false, -1, 8069, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3959},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3961, false, -1, 8070, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3964},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3966, false, -1, 8071, -1, -1, -1, false, false, false, false, utf8proc_sequences + 3969},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3971, false, 8088, -1, 8088, -1, -1, false, false, false, false, utf8proc_sequences + 3974},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3977, false, 8089, -1, 8089, -1, -1, false, false, false, false, utf8proc_sequences + 3980},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3983, false, 8090, -1, 8090, -1, -1, false, false, false, false, utf8proc_sequences + 3986},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3989, false, 8091, -1, 8091, -1, -1, false, false, false, false, utf8proc_sequences + 3992},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 3995, false, 8092, -1, 8092, -1, -1, false, false, false, false, utf8proc_sequences + 3998},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4001, false, 8093, -1, 8093, -1, -1, false, false, false, false, utf8proc_sequences + 4004},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4007, false, 8094, -1, 8094, -1, -1, false, false, false, false, utf8proc_sequences + 4010},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4013, false, 8095, -1, 8095, -1, -1, false, false, false, false, utf8proc_sequences + 4016},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4019, false, -1, 8080, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4022},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4024, false, -1, 8081, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4027},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4029, false, -1, 8082, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4032},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4034, false, -1, 8083, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4037},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4039, false, -1, 8084, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4042},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4044, false, -1, 8085, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4047},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4049, false, -1, 8086, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4052},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4054, false, -1, 8087, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4057},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4059, false, 8104, -1, 8104, -1, -1, false, false, false, false, utf8proc_sequences + 4062},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4065, false, 8105, -1, 8105, -1, -1, false, false, false, false, utf8proc_sequences + 4068},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4071, false, 8106, -1, 8106, -1, -1, false, false, false, false, utf8proc_sequences + 4074},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4077, false, 8107, -1, 8107, -1, -1, false, false, false, false, utf8proc_sequences + 4080},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4083, false, 8108, -1, 8108, -1, -1, false, false, false, false, utf8proc_sequences + 4086},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4089, false, 8109, -1, 8109, -1, -1, false, false, false, false, utf8proc_sequences + 4092},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4095, false, 8110, -1, 8110, -1, -1, false, false, false, false, utf8proc_sequences + 4098},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4101, false, 8111, -1, 8111, -1, -1, false, false, false, false, utf8proc_sequences + 4104},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4107, false, -1, 8096, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4110},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4112, false, -1, 8097, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4115},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4117, false, -1, 8098, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4120},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4122, false, -1, 8099, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4125},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4127, false, -1, 8100, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4130},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4132, false, -1, 8101, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4135},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4137, false, -1, 8102, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4140},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4142, false, -1, 8103, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4145},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4147, false, 8120, -1, 8120, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4150, false, 8121, -1, 8121, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4153, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4156},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4159, false, 8124, -1, 8124, -1, -1, false, false, false, false, utf8proc_sequences + 4162},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4165, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4168},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4171, false, -1, -1, -1, 15840, -1, false, false, false, false, utf8proc_sequences + 4171},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4174, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4177},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4181, false, -1, 8112, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4184},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4186, false, -1, 8113, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4189},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4191, false, -1, 8048, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4194},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4196, false, -1, 8049, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4198},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4200, false, -1, 8115, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4203},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4205, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 1326, false, 921, -1, 921, -1, -1, false, false, false, false, utf8proc_sequences + 1326},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4205, false, -1, -1, -1, 16080, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4208, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4211, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4214, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4217},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4220, false, 8140, -1, 8140, -1, -1, false, false, false, false, utf8proc_sequences + 4223},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4226, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4229},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4232, false, -1, -1, -1, 16020, -1, false, false, false, false, utf8proc_sequences + 4232},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4235, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4238},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4242, false, -1, 8050, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4245},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4247, false, -1, 8051, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4249},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4251, false, -1, 8052, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4254},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4256, false, -1, 8053, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4258},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4260, false, -1, 8131, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4263},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4265, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4268, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4271, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4274, false, 8152, -1, 8152, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4277, false, 8153, -1, 8153, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4280, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4283},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4287, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1378},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4289, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4289},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4292, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4295},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4299, false, -1, 8144, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4302},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4304, false, -1, 8145, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4307},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4309, false, -1, 8054, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4312},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4314, false, -1, 8055, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4316},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4318, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4321, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4324, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4327, false, 8168, -1, 8168, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4330, false, 8169, -1, 8169, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4333, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4336},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4340, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1451},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4342, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4342},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4345, false, 8172, -1, 8172, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4348, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4348},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4351, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4354},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4358, false, -1, 8160, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4361},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4363, false, -1, 8161, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4366},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4368, false, -1, 8058, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4371},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4373, false, -1, 8059, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4375},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4377, false, -1, 8165, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4380},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4382, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4385, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4387, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4389, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4392},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4395, false, 8188, -1, 8188, -1, -1, false, false, false, false, utf8proc_sequences + 4398},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4401, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4404},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4407, false, -1, -1, -1, 16440, -1, false, false, false, false, utf8proc_sequences + 4407},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4410, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4413},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4417, false, -1, 8056, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4420},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4422, false, -1, 8057, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4424},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4426, false, -1, 8060, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4429},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4431, false, -1, 8061, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4433},
-  {UTF8PROC_CATEGORY_LT, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4435, false, -1, 8179, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4438},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4440, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4442, false, -1, -1, -1, 16140, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, utf8proc_sequences + 4445, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, 0, utf8proc_sequences + 4447, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 52, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_NOBREAK, utf8proc_sequences + 52, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_BN, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, true, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_R, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NOBREAK, utf8proc_sequences + 4449, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4451, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4454, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4456, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4459, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ZL, 0, UTF8PROC_BIDI_CLASS_WS, 0, NULL, false, -1, -1, -1, -1, -1, false, false, true, false, NULL},
-  {UTF8PROC_CATEGORY_ZP, 0, UTF8PROC_BIDI_CLASS_B, 0, NULL, false, -1, -1, -1, -1, -1, false, false, true, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRE, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLE, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_PDF, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_LRO, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_RLO, 0, NULL, false, -1, -1, -1, -1, -1, false, true, true, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4463, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4466, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4470, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4473, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4477, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4480, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_CS, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4483, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4486, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4489, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4492, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4497, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 16, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4499, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4501, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4503, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4505, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4507, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4509, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4511, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4513, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4515, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4517, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4519, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 26, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4497, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 72, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 60, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 62, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4499, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4501, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4503, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4505, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4507, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4509, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4511, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4513, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4515, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4517, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 4519, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 0, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 8, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 28, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 46, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUB, utf8proc_sequences + 792, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4521, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4524, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4528, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4532, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4534, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4537, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4541, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4545, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4547, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 12, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2390, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 14, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 454, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2392, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2398, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 22, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2402, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4550, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2408, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4553, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2410, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4555, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4558, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 4562, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4565, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4567, false, -1, 969, -1, -1, -1, false, false, false, false, utf8proc_sequences + 1424},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 2396, false, -1, 107, -1, -1, -1, false, false, false, false, utf8proc_sequences + 20},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 4569, false, -1, 229, -1, -1, -1, false, false, false, false, utf8proc_sequences + 114},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2380, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 8, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2384, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4571, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 8526, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4573},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2400, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 28, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4575, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4577, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4579, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4581, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 16, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4583, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1408, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1386, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4587, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4589, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4591, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2382, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 6, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 18, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 8498, -1, 8498, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4593, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4597, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4601, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4605, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4609, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4613, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4617, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4621, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4625, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4629, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4633, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4637, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_FRACTION, utf8proc_sequences + 4641, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2392, false, -1, 8560, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4644},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4646, false, -1, 8561, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4649},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4651, false, -1, 8562, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4655},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4657, false, -1, 8563, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4660},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4662, false, -1, 8564, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4664},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4666, false, -1, 8565, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4669},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4671, false, -1, 8566, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4675},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4677, false, -1, 8567, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4682},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4684, false, -1, 8568, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4687},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4689, false, -1, 8569, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4691},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4693, false, -1, 8570, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4696},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4698, false, -1, 8571, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4702},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2398, false, -1, 8572, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4704},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4532, false, -1, 8573, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4706},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2382, false, -1, 8574, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4708},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 2400, false, -1, 8575, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4710},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 16, false, 8544, -1, 8544, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4712, false, 8545, -1, 8545, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4715, false, 8546, -1, 8546, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4719, false, 8547, -1, 8547, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 42, false, 8548, -1, 8548, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4722, false, 8549, -1, 8549, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4725, false, 8550, -1, 8550, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4729, false, 8551, -1, 8551, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4734, false, 8552, -1, 8552, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 46, false, 8553, -1, 8553, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4737, false, 8554, -1, 8554, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4740, false, 8555, -1, 8555, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 22, false, 8556, -1, 8556, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4, false, 8557, -1, 8557, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6, false, 8558, -1, 8558, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 24, false, 8559, -1, 8559, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 8580, -1, -1, -1, false, false, false, false, utf8proc_sequences + 4744},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 8579, -1, 8579, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 16500, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 16560, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 16620, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4746, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4749, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4752, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4755, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4758, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4761, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 16680, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 16800, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 16740, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 16860, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4764, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 16920, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4767, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 16980, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4770, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 17040, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4773, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 17100, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4776, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4779, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4782, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4786, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4789, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17160, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4793, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17220, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4796, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17280, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4799, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17340, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4802, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 17520, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4805, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 17460, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4808, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17700, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17760, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4811, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4814, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4817, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4820, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4823, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17820, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17880, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4826, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4829, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 17940, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18000, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4832, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4835, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18060, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18120, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18660, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18720, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4838, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4841, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18180, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18240, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4844, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4847, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18300, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18360, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4850, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4853, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18780, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18840, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18420, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18480, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18540, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18600, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4856, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4859, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4862, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4865, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18900, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 18960, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 19020, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, true, -1, -1, -1, 19080, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4868, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4871, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4874, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4877, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4880, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4883, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4886, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4889, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4892, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 4894, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 72, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 60, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 62, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4499, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4501, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4503, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4505, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4507, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4509, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4896, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4899, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4902, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4905, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4908, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4911, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4914, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4917, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4920, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4923, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4926, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4929, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4933, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4937, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4941, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4945, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4949, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4953, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4957, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4961, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4965, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4970, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4975, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4980, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4985, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4990, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 4995, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5000, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5005, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5010, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5015, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5020, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5023, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5026, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5032, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5035, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5038, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5041, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5044, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5047, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5051, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5055, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5059, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5063, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5067, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5071, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5075, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5079, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5083, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5087, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5091, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5099, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5103, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5107, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5111, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5115, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5119, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5123, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5127, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5135, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5139, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5143, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5147, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5151, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5155, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5159, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5163, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5167, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5171, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5175, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5179, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5183, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5187, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5191, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2376, false, -1, 9424, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5195},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2380, false, -1, 9425, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5197},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4532, false, -1, 9426, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5199},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2382, false, -1, 9427, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5201},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2384, false, -1, 9428, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5203},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4571, false, -1, 9429, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5205},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2388, false, -1, 9430, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5207},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2390, false, -1, 9431, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5209},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2392, false, -1, 9432, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5211},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2394, false, -1, 9433, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5213},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2396, false, -1, 9434, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5215},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2398, false, -1, 9435, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5217},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2400, false, -1, 9436, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5219},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2402, false, -1, 9437, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5221},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2404, false, -1, 9438, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5223},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2408, false, -1, 9439, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5225},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4553, false, -1, 9440, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5227},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2410, false, -1, 9441, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5229},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5231, false, -1, 9442, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5233},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2412, false, -1, 9443, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5235},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2414, false, -1, 9444, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5237},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4662, false, -1, 9445, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5239},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2416, false, -1, 9446, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5241},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4689, false, -1, 9447, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5243},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5245, false, -1, 9448, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5247},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4565, false, -1, 9449, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5249},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 0, false, 9398, -1, 9398, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 2, false, 9399, -1, 9399, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4, false, 9400, -1, 9400, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6, false, 9401, -1, 9401, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 8, false, 9402, -1, 9402, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 10, false, 9403, -1, 9403, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 12, false, 9404, -1, 9404, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 14, false, 9405, -1, 9405, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 16, false, 9406, -1, 9406, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 18, false, 9407, -1, 9407, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 20, false, 9408, -1, 9408, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 22, false, 9409, -1, 9409, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 24, false, 9410, -1, 9410, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 26, false, 9411, -1, 9411, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 28, false, 9412, -1, 9412, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 30, false, 9413, -1, 9413, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 32, false, 9414, -1, 9414, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 34, false, 9415, -1, 9415, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 36, false, 9416, -1, 9416, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 38, false, 9417, -1, 9417, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 40, false, 9418, -1, 9418, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 42, false, 9419, -1, 9419, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 44, false, 9420, -1, 9420, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 46, false, 9421, -1, 9421, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 48, false, 9422, -1, 9422, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 50, false, 9423, -1, 9423, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 4497, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5251, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5256, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5260, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5263, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, utf8proc_sequences + 5267, true, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, 19140, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11312, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5270},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11313, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5272},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11314, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5274},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11315, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5276},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11316, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5278},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11317, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5280},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11318, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5282},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11319, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5284},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11320, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5286},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11321, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5288},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11322, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5290},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11323, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5292},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11324, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5294},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11325, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5296},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11326, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5298},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11327, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5300},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11328, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5302},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11329, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5304},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11330, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5306},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11331, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5308},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11332, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5310},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11333, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5312},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11334, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5314},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11335, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5316},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11336, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5318},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11337, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5320},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11338, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5322},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11339, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5324},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11340, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5326},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11341, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5328},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11342, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5330},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11343, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5332},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11344, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5334},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11345, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5336},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11346, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5338},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11347, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5340},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11348, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5342},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11349, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5344},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11350, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5346},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11351, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5348},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11352, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5350},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11353, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5352},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11354, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5354},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11355, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5356},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11356, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5358},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11357, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5360},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11358, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5362},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11264, -1, 11264, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11265, -1, 11265, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11266, -1, 11266, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11267, -1, 11267, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11268, -1, 11268, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11269, -1, 11269, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11270, -1, 11270, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11271, -1, 11271, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11272, -1, 11272, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11273, -1, 11273, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11274, -1, 11274, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11275, -1, 11275, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11276, -1, 11276, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11277, -1, 11277, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11278, -1, 11278, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11279, -1, 11279, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11280, -1, 11280, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11281, -1, 11281, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11282, -1, 11282, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11283, -1, 11283, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11284, -1, 11284, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11285, -1, 11285, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11286, -1, 11286, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11287, -1, 11287, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11288, -1, 11288, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11289, -1, 11289, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11290, -1, 11290, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11291, -1, 11291, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11292, -1, 11292, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11293, -1, 11293, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11294, -1, 11294, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11295, -1, 11295, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11296, -1, 11296, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11297, -1, 11297, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11298, -1, 11298, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11299, -1, 11299, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11300, -1, 11300, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11301, -1, 11301, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11302, -1, 11302, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11303, -1, 11303, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11304, -1, 11304, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11305, -1, 11305, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11306, -1, 11306, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11307, -1, 11307, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11308, -1, 11308, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11309, -1, 11309, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11310, -1, 11310, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11361, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5364},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11360, -1, 11360, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 619, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5366},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 7549, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5368},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 637, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5370},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 570, -1, 570, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 574, -1, 574, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11368, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5372},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11367, -1, 11367, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11370, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5374},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11369, -1, 11369, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11372, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5376},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11371, -1, 11371, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11382, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5378},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11381, -1, 11381, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11393, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5380},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11392, -1, 11392, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11395, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5382},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11394, -1, 11394, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11397, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5384},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11396, -1, 11396, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11399, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5386},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11398, -1, 11398, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11401, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5388},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11400, -1, 11400, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11403, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5390},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11402, -1, 11402, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11405, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5392},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11404, -1, 11404, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11407, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5394},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11406, -1, 11406, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11409, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5396},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11408, -1, 11408, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11411, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5398},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11410, -1, 11410, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11413, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5400},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11412, -1, 11412, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11415, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5402},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11414, -1, 11414, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11417, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5404},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11416, -1, 11416, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11419, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5406},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11418, -1, 11418, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11421, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5408},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11420, -1, 11420, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11423, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5410},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11422, -1, 11422, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11425, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5412},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11424, -1, 11424, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11427, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5414},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11426, -1, 11426, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11429, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5416},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11428, -1, 11428, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11431, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5418},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11430, -1, 11430, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11433, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5420},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11432, -1, 11432, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11435, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5422},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11434, -1, 11434, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11437, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5424},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11436, -1, 11436, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11439, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5426},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11438, -1, 11438, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11441, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5428},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11440, -1, 11440, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11443, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5430},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11442, -1, 11442, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11445, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5432},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11444, -1, 11444, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11447, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5434},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11446, -1, 11446, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11449, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5436},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11448, -1, 11448, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11451, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5438},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11450, -1, 11450, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11453, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5440},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11452, -1, 11452, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11455, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5442},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11454, -1, 11454, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11457, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5444},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11456, -1, 11456, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11459, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5446},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11458, -1, 11458, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11461, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5448},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11460, -1, 11460, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11463, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5450},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11462, -1, 11462, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11465, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5452},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11464, -1, 11464, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11467, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5454},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11466, -1, 11466, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11469, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5456},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11468, -1, 11468, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11471, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5458},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11470, -1, 11470, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11473, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5460},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11472, -1, 11472, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11475, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5462},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11474, -1, 11474, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11477, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5464},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11476, -1, 11476, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11479, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5466},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11478, -1, 11478, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11481, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5468},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11480, -1, 11480, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11483, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5470},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11482, -1, 11482, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11485, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5472},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11484, -1, 11484, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11487, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5474},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11486, -1, 11486, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11489, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5476},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11488, -1, 11488, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 11491, -1, -1, -1, false, false, false, false, utf8proc_sequences + 5478},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 11490, -1, 11490, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4256, -1, 4256, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4257, -1, 4257, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4258, -1, 4258, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4259, -1, 4259, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4260, -1, 4260, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4261, -1, 4261, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4262, -1, 4262, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4263, -1, 4263, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4264, -1, 4264, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4265, -1, 4265, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4266, -1, 4266, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4267, -1, 4267, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4268, -1, 4268, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4269, -1, 4269, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4270, -1, 4270, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4271, -1, 4271, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4272, -1, 4272, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4273, -1, 4273, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4274, -1, 4274, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4275, -1, 4275, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4276, -1, 4276, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4277, -1, 4277, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4278, -1, 4278, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4279, -1, 4279, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4280, -1, 4280, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4281, -1, 4281, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4282, -1, 4282, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4283, -1, 4283, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4284, -1, 4284, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4285, -1, 4285, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4286, -1, 4286, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4287, -1, 4287, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4288, -1, 4288, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4289, -1, 4289, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4290, -1, 4290, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4291, -1, 4291, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4292, -1, 4292, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 4293, -1, 4293, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 5480, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5482, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5484, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5486, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5488, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5490, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5492, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5494, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5496, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5498, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5500, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5502, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5504, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5506, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5508, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5510, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5512, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5514, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5516, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5518, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5520, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5522, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5524, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5526, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5528, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5530, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5532, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5534, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5536, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5538, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5540, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5542, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5544, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5546, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5548, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5550, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5552, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5554, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5556, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5558, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5560, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5562, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5564, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5566, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5568, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5570, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5572, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5574, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5576, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5578, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5580, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5582, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5584, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5586, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5588, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5590, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5592, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5594, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5596, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5598, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5600, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5602, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5604, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5606, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5608, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5610, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5612, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5614, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5616, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5618, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5620, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5622, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5624, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5626, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5628, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5630, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5632, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5634, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5636, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5638, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5640, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5642, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5644, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5646, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5648, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5650, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5652, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5654, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5656, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5658, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5660, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5662, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5664, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5666, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5668, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5670, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5672, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5674, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5676, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5678, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5680, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5682, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5684, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5686, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5688, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5690, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5692, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5694, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5696, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5698, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5700, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5702, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5704, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5706, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5708, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5710, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5712, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5714, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5716, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5718, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5720, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5722, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5724, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5726, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5728, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5730, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5732, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5734, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5736, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5738, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5740, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5742, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5744, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5746, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5748, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5750, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5752, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5754, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5756, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5758, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5760, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5762, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5764, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5766, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5768, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5770, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5772, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5774, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5776, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5778, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5780, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5782, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5784, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5786, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5788, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5790, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5792, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5794, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5796, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5798, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5800, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5802, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5804, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5806, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5808, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5810, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5812, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5814, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5816, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5818, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5820, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5822, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5824, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5826, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5828, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5830, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5832, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5834, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5836, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5838, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5840, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5842, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5844, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5846, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5848, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5850, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5852, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5854, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5856, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5858, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5860, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5862, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5864, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5866, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5868, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5870, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5872, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5874, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5876, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5878, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5880, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5882, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5884, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5886, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5888, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5890, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5892, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5894, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5896, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5898, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5900, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5902, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5904, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5906, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5908, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5910, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5912, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ZS, 0, UTF8PROC_BIDI_CLASS_WS, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 52, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 218, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 224, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5914, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5532, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5916, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5918, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20400, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19200, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5920, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19260, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5923, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19320, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5926, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19380, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5929, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19440, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5932, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19500, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5935, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19560, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5938, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19620, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5941, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19680, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5944, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19740, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5947, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19800, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5950, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19860, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5953, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19920, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5956, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 19980, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5959, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20040, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5962, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20100, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5965, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5968, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20160, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5971, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5974, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20220, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5977, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5980, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20280, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5983, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5986, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20340, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5989, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5992, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5995, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 8, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 52, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MN, 8, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, 53, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 5998, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6001, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20460, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6004, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 6007, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21720, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20520, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6010, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20580, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6013, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20640, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6016, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20700, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6019, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20760, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6022, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20820, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6025, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20880, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6028, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 20940, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6031, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21000, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6034, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21060, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6037, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21120, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6040, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21180, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6043, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21240, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6046, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21300, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6049, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21360, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6052, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21420, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6055, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6058, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21480, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6061, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6064, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21540, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6067, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6070, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21600, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6073, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6076, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21660, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6079, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6082, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21780, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21840, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21900, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 21960, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6085, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6088, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6091, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6094, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6097, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 22020, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6100, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 6103, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6106, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6108, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6110, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6112, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6114, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6116, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6118, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6120, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6122, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6124, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6126, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6128, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6130, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6132, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6134, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6136, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6138, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6140, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6142, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6144, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6146, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6148, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6150, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6152, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6154, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6156, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6158, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6160, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6162, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6164, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6166, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6168, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6170, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6172, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6174, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6176, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6178, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6180, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6182, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6184, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6186, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6188, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6190, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6192, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6194, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6196, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6198, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6200, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6202, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6204, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6206, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6208, false, -1, -1, -1, -1, -1, false, true, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6210, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6212, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6214, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6216, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6218, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6220, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6222, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6224, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6226, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6228, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6230, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6232, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6234, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6236, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6238, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6240, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6242, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6244, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6246, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6248, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6250, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6252, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6254, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6256, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6258, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6260, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6262, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6264, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6266, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6268, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6270, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6272, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6274, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6276, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6278, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6280, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6282, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6284, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6286, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6288, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6290, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6292, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 5486, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 5498, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6294, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6296, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6298, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6300, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6302, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6304, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 5494, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6306, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6308, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6310, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 6312, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SUPER, utf8proc_sequences + 5502, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6314, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6318, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6322, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6326, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6330, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6334, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6338, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6342, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6346, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6350, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6354, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6358, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6362, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6366, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6370, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6375, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6380, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6385, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6390, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6395, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6400, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6405, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6410, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6415, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6420, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6425, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6430, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6435, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6440, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6445, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6453, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6460, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6464, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6468, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6472, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6476, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6480, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6484, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6488, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6492, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6496, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6500, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6504, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6508, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6512, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6516, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6520, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6524, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6528, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6532, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6536, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6540, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6544, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6548, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6552, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6556, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6560, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6564, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6568, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6572, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6576, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6580, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6584, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6588, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6592, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6596, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6600, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6604, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6608, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6611, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6614, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6617, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6620, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6623, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6626, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6629, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6632, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6635, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6638, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6641, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6644, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6647, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6650, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6106, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6112, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6118, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6122, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6138, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6140, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6146, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6150, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6152, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6156, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6158, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6160, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6162, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6164, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6653, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6656, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6659, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6662, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6665, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6668, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6671, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6674, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6677, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6680, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6683, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6686, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6689, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6692, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6695, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6701, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6706, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5486, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5498, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6294, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6296, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6709, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6711, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6713, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5508, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6715, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5532, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5632, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5656, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5654, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5634, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5818, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5548, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5628, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6717, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6719, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6721, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6723, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6725, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6727, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6729, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6731, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6733, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6735, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 5560, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6737, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6739, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6741, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6743, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6745, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6747, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6749, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6751, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6298, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6300, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6302, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6753, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6755, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6757, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6759, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6761, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6763, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6765, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6767, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6769, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6771, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6773, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6776, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6779, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6782, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6785, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6788, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6791, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6794, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6797, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6800, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6803, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6806, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6809, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6812, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6815, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6818, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6821, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6824, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6827, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6830, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6833, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6836, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6839, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6842, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6845, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6849, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 6853, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6857, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6860, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6864, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6867, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6871, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6873, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6875, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6877, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6879, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6881, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6883, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6885, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6887, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6889, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6891, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6893, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6895, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6897, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6899, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6901, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6903, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6905, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6907, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6909, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6911, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6913, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6915, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6917, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6919, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6921, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6923, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6925, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6927, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6929, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6931, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6933, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6935, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6937, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6939, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6941, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6943, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6945, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6947, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6949, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6951, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6953, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6955, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6957, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6959, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6961, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_CIRCLE, utf8proc_sequences + 6963, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6965, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6970, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6975, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6980, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6984, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6989, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6993, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 6997, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7003, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7008, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7012, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7016, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7020, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7025, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7030, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7034, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7038, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7041, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7045, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7050, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7055, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7058, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7064, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7071, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7077, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7081, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7087, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7093, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7098, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7102, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7106, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7110, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7115, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7121, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7126, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7130, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7134, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7138, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7141, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7144, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7147, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7150, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7154, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7158, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7164, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7168, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7173, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7179, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7183, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7186, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7189, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7195, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7200, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7206, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7210, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7216, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7219, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7223, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7227, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7231, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7235, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7239, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7244, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7248, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7251, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7255, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7259, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7263, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7268, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7272, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7276, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7280, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7286, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7291, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7294, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7300, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7303, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7308, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7313, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7317, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7321, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7325, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7330, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7333, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7337, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7342, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7345, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7351, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7355, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7358, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7361, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7364, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7367, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7370, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7373, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7376, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7379, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7382, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7385, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7389, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7393, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7397, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7401, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7405, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7409, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7413, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7417, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7421, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7425, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7429, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7433, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7437, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7441, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7445, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7449, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7452, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7455, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7459, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7462, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7465, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7468, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7472, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7476, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7479, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7482, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7485, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7488, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7491, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7496, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7499, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7502, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7505, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7508, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7511, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7514, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7517, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7520, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7524, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7529, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7532, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7535, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7538, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7541, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7544, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7547, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7550, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7554, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7558, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7562, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7566, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7569, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7572, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7575, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7578, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7581, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7584, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7587, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7590, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7593, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7596, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7600, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7604, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7607, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7611, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7615, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7619, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7622, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7626, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7630, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7635, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7638, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7642, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7646, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7650, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7654, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7660, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7667, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7670, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7673, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7676, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7679, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7682, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7685, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7688, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7691, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7694, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7697, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7700, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7703, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7706, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7709, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7712, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7715, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7718, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7721, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7726, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7729, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7732, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7735, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7740, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7744, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7747, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7750, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7753, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7756, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7759, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7762, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7765, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7768, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7771, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7774, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7778, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7781, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7784, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7788, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7792, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7795, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7800, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7804, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7807, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7810, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7813, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7816, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7820, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7824, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7827, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7830, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7833, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7836, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7839, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7842, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7845, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7848, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7851, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7855, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7859, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7863, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7867, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7871, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7875, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7879, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7883, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7887, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7891, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7895, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7899, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7903, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7907, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7911, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7915, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7919, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7923, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7927, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7931, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 7935, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SQUARE, utf8proc_sequences + 7939, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_CS, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, true, false, false, NULL},
-  {UTF8PROC_CATEGORY_CO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7943, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7945, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5802, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7947, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7949, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7951, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7953, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5910, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7955, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5818, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7957, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7959, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7961, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7963, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7965, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7967, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7969, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7971, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7973, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7975, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7977, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7979, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7981, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7983, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7985, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7987, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7989, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7991, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7993, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7995, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7997, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 7999, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8001, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8003, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8005, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8007, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8009, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8011, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8013, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8015, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8017, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8019, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8021, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8023, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8025, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8027, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8031, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8033, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8035, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8037, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5734, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8039, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8041, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8043, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8045, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8047, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8049, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8051, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8053, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8055, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8057, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8059, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5880, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8061, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8063, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8065, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8067, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8069, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8071, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8073, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8075, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8077, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8079, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8081, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8083, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8085, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8087, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8089, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8091, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8093, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8097, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8099, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8101, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8103, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8105, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8107, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8109, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8111, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8113, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8115, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8117, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8119, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8121, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8123, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8127, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8129, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8133, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8135, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8137, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8139, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8141, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8143, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8145, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8147, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8149, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8151, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8153, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5806, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8155, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8157, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8159, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8161, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8163, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8165, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8167, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8169, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8171, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8173, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8175, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8177, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8179, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8181, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8183, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5560, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8185, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8187, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8189, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8191, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8193, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8195, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8197, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8199, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5522, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8201, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8203, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8205, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8207, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8209, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8211, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8213, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8215, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8217, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8219, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8221, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8223, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8225, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8227, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8229, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8231, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8233, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8235, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8237, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8239, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8241, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8243, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8245, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8247, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8249, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8251, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8253, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8255, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8257, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8259, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8261, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8263, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8265, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8267, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8269, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8271, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8273, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8275, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8277, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8279, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8281, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8283, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8285, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8287, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8289, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8291, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8293, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8295, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8297, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8299, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8301, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8303, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8305, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8307, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5908, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8309, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8311, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8313, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8315, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8317, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8319, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8321, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8323, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8325, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8327, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8329, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8331, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6711, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8333, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8335, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8337, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8339, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8341, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8343, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8345, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8347, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8349, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8351, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8353, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8355, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8357, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8359, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8361, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8363, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8365, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8367, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8369, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8371, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8373, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8375, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5816, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8377, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8379, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8381, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8383, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8385, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8387, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8389, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8391, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8393, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8395, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8397, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8399, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8401, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5718, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8403, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8405, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8407, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8409, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8411, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8413, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8415, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8417, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8419, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8421, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8423, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8425, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8427, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8429, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8431, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8433, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5772, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8435, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5778, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8437, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8439, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8441, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8443, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8445, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8447, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8449, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8451, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8453, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8455, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8457, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8459, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8461, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8463, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5732, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8465, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8467, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8469, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8471, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8473, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8475, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8477, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8479, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8481, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8483, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8485, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8487, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8489, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8491, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8493, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8495, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8497, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8499, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8501, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8503, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5574, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8505, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8507, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8509, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8511, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8513, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8515, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8517, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8519, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8521, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8523, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8525, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8527, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8529, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8531, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8533, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6721, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8535, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8537, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8539, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8541, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 6729, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8543, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8545, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8547, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8549, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8551, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8553, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8555, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8557, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8559, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8561, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8563, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8565, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8567, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8569, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8571, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8573, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8575, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8577, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8579, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8581, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8583, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8585, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8587, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8589, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8591, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8593, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8595, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8597, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8599, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8601, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8603, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8605, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8607, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8609, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8611, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8613, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8615, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8617, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8619, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8621, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8623, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8625, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8627, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8629, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8631, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8633, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8635, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8637, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8639, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8641, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8643, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8645, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8647, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5640, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8649, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8651, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8653, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8655, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8657, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8659, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8661, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8663, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8665, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8667, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8669, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8671, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8673, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8675, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8677, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8679, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8681, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8683, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8685, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8687, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8689, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8691, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8693, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8695, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8697, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8699, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8701, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8703, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8705, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8707, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8709, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8711, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8713, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8715, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8717, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8719, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8721, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8723, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8725, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8727, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8729, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8731, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8733, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8735, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8737, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8739, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8741, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 8743, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8745, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8745},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8748, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8748},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8751, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8751},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8754, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8754},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8758, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8758},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8762, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8765},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8765, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8765},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8768, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8768},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8771, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8771},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8774, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8774},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8777, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8777},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8780, false, -1, -1, -1, -1, -1, false, false, false, false, utf8proc_sequences + 8780},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8783, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MN, 26, UTF8PROC_BIDI_CLASS_NSM, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8786, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 8789, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4575, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4581, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 8791, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 8793, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 8795, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 8797, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 8799, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 8801, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4511, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8803, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8806, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8809, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8812, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8815, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8818, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8821, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8824, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8827, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8830, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8833, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8836, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8839, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8842, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8845, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8848, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8851, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8854, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8857, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8860, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8863, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8866, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8869, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8872, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8875, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8878, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8881, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8884, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8887, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8890, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8893, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, 0, utf8proc_sequences + 8896, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_R, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 8899, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8902, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8902, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8904, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8904, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8904, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8904, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8906, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8906, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8906, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8906, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8908, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8908, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8908, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8908, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8910, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8910, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8910, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8910, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8912, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8912, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8912, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8912, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8914, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8914, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8914, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8914, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8916, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8916, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8916, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8916, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8918, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8918, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8918, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8918, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8920, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8920, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8920, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8920, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8922, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8922, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8922, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8922, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8924, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8924, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8924, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8924, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8926, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8926, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8926, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8926, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8928, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8928, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8930, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8930, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8932, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8932, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8934, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8934, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8936, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8936, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8938, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8938, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8940, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8940, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8940, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8940, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8942, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8942, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8942, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8942, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8944, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8944, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8944, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8944, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8946, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8946, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8946, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8946, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8948, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8948, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8950, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8950, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8950, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8950, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8952, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8952, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8954, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8954, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8954, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8954, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8956, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8956, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8956, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8956, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8958, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8958, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8960, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8960, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8962, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8962, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8962, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8962, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8964, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8964, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8966, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8966, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8968, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8968, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8970, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8972, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8972, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8974, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8974, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8976, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8976, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8978, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8978, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8978, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8978, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 8980, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 8980, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8982, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8982, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8985, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8985, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8988, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8988, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8991, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8991, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8994, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8994, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8997, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8997, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9000, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9000, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9000, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9003, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9003, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9003, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9006, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9006, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9006, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9006, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9008, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9011, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9014, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9017, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9020, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9023, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9026, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9032, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9035, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9038, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9041, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9044, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9047, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9050, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9053, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9056, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9059, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9062, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9065, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9068, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9071, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9074, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9077, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9080, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9083, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9086, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9089, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9092, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9098, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9101, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9104, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9107, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9110, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9113, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9116, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9119, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9122, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9128, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9134, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9137, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9140, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9143, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9146, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9149, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9152, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9155, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9158, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9161, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9164, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9167, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9170, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9173, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9176, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9179, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9182, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9185, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9188, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9191, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9194, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9197, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9200, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9203, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9206, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9209, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9212, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9215, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9218, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9221, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9224, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9227, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9230, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9233, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9236, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9239, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9242, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9245, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9248, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9251, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9254, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9257, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9260, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9263, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9266, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9269, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9272, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9275, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9278, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9281, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9284, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9287, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9291, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9295, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9299, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9303, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9307, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9311, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9314, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9014, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9317, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9017, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9320, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9323, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9326, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9032, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9035, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9329, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9332, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9047, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9335, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9050, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9053, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9338, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9341, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9059, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9344, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9062, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9065, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9152, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9155, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9164, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9167, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9170, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9182, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9185, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9188, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9191, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9203, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9206, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9209, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9347, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9221, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9350, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9353, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9239, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9356, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9242, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9245, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9284, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9359, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9362, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9269, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9365, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9272, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9275, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9008, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9011, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9368, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9014, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9371, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9020, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9023, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9026, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9374, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9038, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9041, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9044, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9047, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9377, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9059, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9068, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9071, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9074, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9077, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9080, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9086, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9089, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9092, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9098, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9101, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9380, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9104, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9107, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9110, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9113, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9116, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9119, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9128, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9134, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9137, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9140, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9143, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9146, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9149, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9158, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9161, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9173, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9176, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9179, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9182, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9185, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9194, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9197, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9200, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9203, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9383, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9212, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9215, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9218, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9221, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9230, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9233, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9236, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9239, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9386, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9248, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9251, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9389, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9260, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9263, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9266, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9269, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9392, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9014, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9371, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9374, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9047, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9377, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9059, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9395, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9098, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9398, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9401, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9404, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9182, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9185, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9203, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9239, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9386, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9269, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9392, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9407, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9411, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9415, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9419, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9422, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9425, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9428, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9431, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9434, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9437, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9440, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9443, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9446, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9449, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9452, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9455, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9458, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9461, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9464, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9467, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9470, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9473, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9476, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9479, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9482, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9485, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9401, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9488, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9491, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9494, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9497, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9419, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9422, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9425, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9428, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9431, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9434, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9437, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9440, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9443, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9446, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9449, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9452, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9455, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9458, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9461, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9464, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9467, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9470, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9473, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9476, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9479, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9482, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9485, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9401, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9488, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9491, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9494, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9497, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9479, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9482, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9485, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9401, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9398, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9404, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9122, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9089, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9092, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9479, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9482, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9485, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9122, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 9125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9500, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9500, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9503, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9507, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9507, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9511, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9515, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9519, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9523, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9527, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9531, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9531, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9535, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9539, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9543, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9547, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9551, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9555, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9555, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9559, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9563, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9563, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9567, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9567, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9571, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9575, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9575, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9579, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9583, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9583, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9587, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9587, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9591, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9595, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9595, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9599, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9599, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9603, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9607, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9611, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9615, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9615, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9619, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9623, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9627, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9631, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9635, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9635, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9639, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9643, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9647, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9651, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9655, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9659, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9659, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9663, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9663, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9667, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9667, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9671, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9675, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9679, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9683, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9687, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9691, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9695, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9699, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9703, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9707, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9711, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9715, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9719, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9719, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9723, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9727, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9731, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9735, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9735, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9739, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9743, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9747, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9751, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9755, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9759, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9763, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9767, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9771, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9775, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9779, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9783, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9787, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9791, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9795, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9799, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9803, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9807, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9811, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9815, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9819, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9823, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9639, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9647, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9827, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9831, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9835, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9839, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9843, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9847, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9843, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9835, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9851, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9855, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9859, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9863, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9867, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9847, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9611, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 9571, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9871, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 9875, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9879, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9883, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9887, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9892, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9897, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9902, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9907, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9912, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9917, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9922, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9926, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9945, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 9954, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9959, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9961, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9963, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9965, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 1333, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9967, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9969, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9971, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9973, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9975, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9977, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9979, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9981, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9983, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 4517, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 4519, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9985, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9987, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9989, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9991, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9993, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9995, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9997, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 9999, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 4892, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 4894, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 10001, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 10003, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 10005, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 10007, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 10009, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_VERTICAL, utf8proc_sequences + 10011, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 10013, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_COMPAT, utf8proc_sequences + 9983, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9959, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9961, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 4454, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 1333, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9965, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9969, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9967, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9979, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 4517, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 4519, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9985, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9987, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9989, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 9991, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10015, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10017, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10019, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 4511, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10021, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10023, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10025, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 4515, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10027, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10031, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_SMALL, utf8proc_sequences + 10033, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10035, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10038, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10041, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10044, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10047, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10050, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10053, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10056, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10059, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10062, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10065, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10068, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10071, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10074, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10077, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10079, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10079, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10081, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10081, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10083, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10083, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10085, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10085, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10087, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10087, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10087, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10087, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10089, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10089, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10091, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10091, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10091, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10091, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10093, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10093, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10095, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10097, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10097, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10097, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10097, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10099, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10099, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10099, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10099, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10101, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10101, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10101, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10101, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10103, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10103, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10103, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10103, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10105, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10105, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10107, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10107, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10109, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10109, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10111, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10111, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10113, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10113, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10113, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10113, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10115, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10115, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10115, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10115, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10117, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10117, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10117, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10117, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10119, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10119, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10119, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10119, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10121, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10121, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10121, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10121, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10123, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10123, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10123, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10123, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10125, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10127, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10127, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10127, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10127, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10129, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10129, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10129, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10129, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10131, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10133, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10133, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10133, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10133, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10135, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10135, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10135, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10135, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10137, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10137, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10137, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10137, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10139, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10139, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10139, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10139, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10141, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10141, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10141, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10141, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10143, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10143, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 8980, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 8980, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10145, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10145, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_INITIAL, utf8proc_sequences + 10145, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_MEDIAL, utf8proc_sequences + 10145, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10147, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10147, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10150, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10150, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10153, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10153, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_ISOLATED, utf8proc_sequences + 10156, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_AL, UTF8PROC_DECOMP_TYPE_FINAL, utf8proc_sequences + 10156, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 9967, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10159, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10015, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10029, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10031, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10017, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10161, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4517, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4519, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10019, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4511, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 9959, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PD, 0, UTF8PROC_BIDI_CLASS_ES, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10021, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4454, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10163, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4497, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 72, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 60, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 62, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4499, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4501, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4503, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4505, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4507, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4509, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_CS, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 9965, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 1333, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10023, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4515, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10025, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 9969, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10033, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2376, false, -1, 65345, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10165},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2380, false, -1, 65346, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10167},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4532, false, -1, 65347, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10169},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2382, false, -1, 65348, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10171},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2384, false, -1, 65349, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10173},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4571, false, -1, 65350, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10175},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2388, false, -1, 65351, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10177},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2390, false, -1, 65352, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10179},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2392, false, -1, 65353, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10181},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2394, false, -1, 65354, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10183},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2396, false, -1, 65355, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10185},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2398, false, -1, 65356, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10187},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2400, false, -1, 65357, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10189},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2402, false, -1, 65358, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10191},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2404, false, -1, 65359, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10193},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2408, false, -1, 65360, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10195},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4553, false, -1, 65361, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10197},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2410, false, -1, 65362, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10199},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 5231, false, -1, 65363, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10201},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2412, false, -1, 65364, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10203},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2414, false, -1, 65365, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10205},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4662, false, -1, 65366, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10207},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2416, false, -1, 65367, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10209},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4689, false, -1, 65368, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10211},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 5245, false, -1, 65369, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10213},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4565, false, -1, 65370, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10215},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10009, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10027, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10011, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10217, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PC, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 9983, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4387, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 0, false, 65313, -1, 65313, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 2, false, 65314, -1, 65314, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 4, false, 65315, -1, 65315, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 6, false, 65316, -1, 65316, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 8, false, 65317, -1, 65317, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10, false, 65318, -1, 65318, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 12, false, 65319, -1, 65319, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 14, false, 65320, -1, 65320, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 16, false, 65321, -1, 65321, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 18, false, 65322, -1, 65322, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 20, false, 65323, -1, 65323, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 22, false, 65324, -1, 65324, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 24, false, 65325, -1, 65325, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 26, false, 65326, -1, 65326, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 28, false, 65327, -1, 65327, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 30, false, 65328, -1, 65328, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 32, false, 65329, -1, 65329, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 34, false, 65330, -1, 65330, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 36, false, 65331, -1, 65331, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 38, false, 65332, -1, 65332, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 40, false, 65333, -1, 65333, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 42, false, 65334, -1, 65334, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 44, false, 65335, -1, 65335, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 46, false, 65336, -1, 65336, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 48, false, 65337, -1, 65337, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 50, false, 65338, -1, 65338, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 9985, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10219, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 9987, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10221, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10223, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10225, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 9963, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PS, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10001, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PE, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10003, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 9961, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_PO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10227, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6963, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10229, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10231, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10233, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10235, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10237, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10239, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10241, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10243, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10245, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10247, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6871, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6873, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6875, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6877, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6879, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6881, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6883, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6885, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6887, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6889, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6891, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6893, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6895, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6897, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6899, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6901, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6903, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6905, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6907, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6909, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6911, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6913, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6915, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6917, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6919, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6921, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6923, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6925, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6927, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6929, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6931, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6933, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6935, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6937, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6939, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6941, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6943, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6945, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6947, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6949, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6951, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6953, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6955, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 6957, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10249, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10251, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10253, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10255, false, -1, -1, -1, -1, -1, false, true, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10257, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10259, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10261, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10263, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10265, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10267, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10269, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10271, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10273, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10275, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10277, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10279, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10281, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10283, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10285, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10287, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10289, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10291, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10293, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10295, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10297, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10299, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10301, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10303, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10305, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10307, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10309, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10311, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10313, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10315, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10317, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10319, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10321, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10323, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10325, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10327, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10329, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10331, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10333, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10335, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10337, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10339, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10341, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10343, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10345, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10347, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10349, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10351, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10353, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10355, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10357, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10359, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10361, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10363, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SK, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10365, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10367, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10369, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SC, 0, UTF8PROC_BIDI_CLASS_ET, UTF8PROC_DECOMP_TYPE_WIDE, utf8proc_sequences + 10371, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10373, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10375, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10377, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10379, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10381, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10383, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_ON, UTF8PROC_DECOMP_TYPE_NARROW, utf8proc_sequences + 10385, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_CF, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, true, false, NULL},
-  {UTF8PROC_CATEGORY_NL, 0, UTF8PROC_BIDI_CLASS_ON, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66600, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10387},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66601, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10389},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66602, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10391},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66603, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10393},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66604, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10395},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66605, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10397},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66606, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10399},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66607, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10401},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66608, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10403},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66609, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10405},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66610, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10407},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66611, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10409},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66612, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10411},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66613, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10413},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66614, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10415},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66615, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10417},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66616, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10419},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66617, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10421},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66618, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10423},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66619, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10425},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66620, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10427},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66621, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10429},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66622, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10431},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66623, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10433},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66624, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10435},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66625, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10437},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66626, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10439},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66627, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10441},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66628, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10443},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66629, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10445},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66630, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10447},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66631, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10449},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66632, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10451},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66633, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10453},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66634, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10455},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66635, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10457},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66636, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10459},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66637, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10461},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66638, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10463},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, 66639, -1, -1, -1, false, false, false, false, utf8proc_sequences + 10465},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66560, -1, 66560, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66561, -1, 66561, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66562, -1, 66562, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66563, -1, 66563, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66564, -1, 66564, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66565, -1, 66565, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66566, -1, 66566, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66567, -1, 66567, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66568, -1, 66568, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66569, -1, 66569, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66570, -1, 66570, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66571, -1, 66571, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66572, -1, 66572, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66573, -1, 66573, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66574, -1, 66574, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66575, -1, 66575, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66576, -1, 66576, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66577, -1, 66577, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66578, -1, 66578, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66579, -1, 66579, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66580, -1, 66580, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66581, -1, 66581, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66582, -1, 66582, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66583, -1, 66583, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66584, -1, 66584, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66585, -1, 66585, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66586, -1, 66586, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66587, -1, 66587, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66588, -1, 66588, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66589, -1, 66589, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66590, -1, 66590, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66591, -1, 66591, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66592, -1, 66592, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66593, -1, 66593, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66594, -1, 66594, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66595, -1, 66595, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66596, -1, 66596, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66597, -1, 66597, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66598, -1, 66598, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, 66599, -1, 66599, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_NO, 0, UTF8PROC_BIDI_CLASS_R, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 22080, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 22140, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10467, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10470, false, -1, -1, -1, 22200, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10473, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10476, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10479, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10482, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10485, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 54, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 226, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 55, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 56, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 57, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 58, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_MC, 216, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, -1, 59, false, false, false, true, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 22260, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, NULL, false, -1, -1, -1, 22320, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10488, false, -1, -1, -1, 22380, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10491, false, -1, -1, -1, 22440, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10494, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10497, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10500, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10503, false, -1, -1, -1, -1, -1, true, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2376, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2388, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2394, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2396, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2404, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 5231, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2412, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2414, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4662, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2416, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4689, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 5245, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 0, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 2, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 20, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 24, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 26, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 30, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 32, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 34, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 36, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 38, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 40, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 42, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 44, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 46, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 48, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 50, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10506, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10508, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10510, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10512, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10514, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10516, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10518, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10520, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1504, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10522, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10524, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10526, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10528, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10530, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10532, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10534, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10536, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10538, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1508, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10540, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1470, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10542, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10544, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10546, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4567, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10548, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1382, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1384, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1388, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1390, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1392, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1394, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1396, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1326, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1398, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1400, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 67, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1402, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1404, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1406, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1410, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1502, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1412, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1414, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1416, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1418, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1420, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1422, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1424, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_SM, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10550, true, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10552, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10554, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10556, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10558, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10560, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10562, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LU, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 10564, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LL, 0, UTF8PROC_BIDI_CLASS_L, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 1482, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4497, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 72, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 60, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 62, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4499, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4501, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4503, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4505, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4507, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_ND, 0, UTF8PROC_BIDI_CLASS_EN, UTF8PROC_DECOMP_TYPE_FONT, utf8proc_sequences + 4509, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10566, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10568, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10570, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10572, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10574, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10576, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10578, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10580, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10582, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10584, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10586, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10588, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10590, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10592, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10594, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10596, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10598, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10600, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10602, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10604, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10606, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10608, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10610, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10612, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10614, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5518, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10616, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10618, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10620, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10622, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10624, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10626, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10628, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10630, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10632, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10634, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10636, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10638, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10640, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10642, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10644, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10646, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10648, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10650, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10652, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10654, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10656, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10658, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10660, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10662, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10664, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10666, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10668, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10670, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10672, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10674, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10676, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10678, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10680, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10682, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10684, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10686, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10688, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10690, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10692, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10694, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10696, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10698, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10700, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10702, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10704, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10706, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10708, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10710, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10712, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10714, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10716, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10718, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10720, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10722, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10724, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10726, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10728, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10730, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10732, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10734, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10736, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10738, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10740, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10742, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10744, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10746, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10748, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10750, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10752, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10754, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10756, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10758, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10760, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5570, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10762, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10764, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10766, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10768, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10770, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10772, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10774, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10776, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10778, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10780, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10782, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10784, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10786, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10788, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10790, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10792, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10794, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10796, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10798, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10800, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10802, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10804, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10806, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10808, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5594, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10810, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10812, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10814, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10816, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10818, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10820, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10822, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10824, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10826, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10828, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10830, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10832, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10834, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10836, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10838, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10840, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10842, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10844, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10846, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10848, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10850, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10852, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10854, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10856, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10858, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10860, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10862, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10864, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10866, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10868, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10870, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10872, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10874, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10876, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10878, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10880, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10882, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10884, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10886, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10888, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10890, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10892, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10894, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10896, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10898, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10900, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10902, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10904, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10906, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10908, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10910, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10912, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10914, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10916, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10918, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10920, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10922, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10924, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10926, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10928, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10930, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10932, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10934, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10936, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10938, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10940, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10942, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10944, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10946, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10948, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10950, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10952, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10954, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10956, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10958, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10960, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10962, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10964, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10966, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10968, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10970, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10972, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10974, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10976, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10978, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10980, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10982, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10984, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10986, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10988, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10990, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10992, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10994, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10996, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 10998, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11000, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11002, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11004, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11006, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11008, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11010, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11012, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11014, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11016, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11018, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11020, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11022, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11024, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11026, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11028, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11030, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11032, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11034, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11036, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11038, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11040, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11042, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11044, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11046, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11048, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11050, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11052, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11054, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11056, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11058, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11060, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11062, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11064, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11066, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11068, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11070, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11072, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11074, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11076, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11078, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11080, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11082, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11084, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11086, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11088, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11090, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11092, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11094, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11096, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11098, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11100, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11102, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11104, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11106, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11108, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11110, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11112, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11114, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11116, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11118, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11120, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11122, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11124, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11126, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11128, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11130, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11132, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11134, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11136, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11138, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11140, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11142, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11144, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11146, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11148, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11150, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11152, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11154, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11156, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11158, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11160, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11162, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11164, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11166, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11168, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11170, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11172, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11174, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11176, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11178, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11180, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11182, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11184, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11186, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11188, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11190, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11192, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11194, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11196, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11198, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11200, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11202, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11204, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11206, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11208, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11210, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11212, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11214, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11216, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11218, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11220, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11222, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11224, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11226, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11228, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11230, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11232, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11234, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11236, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11238, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11240, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11242, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11244, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11246, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11248, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11250, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11252, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11254, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11256, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11258, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11260, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11262, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11264, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11266, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11268, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11270, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11272, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11274, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11276, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11278, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11280, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11282, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11284, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11286, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11288, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11290, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11292, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11294, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11296, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11298, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11300, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11302, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11304, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11306, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11308, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11310, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11312, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11314, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11316, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11318, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11320, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11322, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11324, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11326, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11328, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11330, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11332, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11334, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11336, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11338, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11340, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11342, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11344, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5774, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11346, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11348, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11350, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11352, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11354, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11356, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11358, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11360, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11362, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11364, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11366, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5788, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11368, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11370, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11372, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11374, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11376, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11378, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11380, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11382, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11384, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11386, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11388, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11390, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11392, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11394, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11396, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11398, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11400, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11402, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11404, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11406, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11408, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11410, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11412, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11414, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11416, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11418, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11420, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11422, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11424, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11426, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11428, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11430, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11432, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11434, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11436, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11438, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11440, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11442, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11444, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11446, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11448, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11450, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11452, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11454, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11456, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11458, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11460, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11462, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11464, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11466, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11468, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11470, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11472, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11474, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11476, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11478, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11480, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11482, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11484, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11486, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11488, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11490, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5884, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11492, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5892, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11494, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11496, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11498, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11500, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 5902, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-  {UTF8PROC_CATEGORY_LO, 0, UTF8PROC_BIDI_CLASS_L, 0, utf8proc_sequences + 11502, false, -1, -1, -1, -1, -1, false, false, false, false, NULL},
-};
-
-static
-const int32_t utf8proc_combinations[] = {
-  192, 193, 194, 195, 196, 197, -1, 
-  256, 258, 260, 550, 461, -1, -1, 512, 
-  514, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7680, 7840, -1, -1, -1, -1, -1, 7842, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 262, 264, 
-  -1, -1, -1, 199, -1, -1, -1, 266, 
-  268, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 200, 201, 202, 7868, 203, -1, 552, 
-  274, 276, 280, 278, 282, -1, -1, 516, 
-  518, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7864, -1, 7704, 7706, -1, -1, 7866, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 204, 205, 206, 
-  296, 207, -1, -1, 298, 300, 302, 304, 
-  463, -1, -1, 520, 522, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7882, -1, -1, 
-  7724, -1, -1, 7880, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 504, 323, -1, 209, -1, -1, 325, 
-  -1, -1, -1, 7748, 327, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7750, 7752, 7754, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 210, 211, 212, 
-  213, 214, -1, -1, 332, 334, 490, 558, 
-  465, 336, 416, 524, 526, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7884, -1, -1, 
-  -1, -1, -1, 7886, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 217, 218, 219, 360, 220, 366, -1, 
-  362, 364, 370, -1, 467, 368, 431, 532, 
-  534, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7908, -1, 7798, 7796, -1, 7794, 7910, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7922, 221, 374, 
-  7928, 376, -1, -1, 562, -1, -1, 7822, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7924, -1, -1, 
-  -1, -1, -1, 7926, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 224, 225, 226, 227, 228, 229, -1, 
-  257, 259, 261, 551, 462, -1, -1, 513, 
-  515, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7681, 7841, -1, -1, -1, -1, -1, 7843, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 263, 265, 
-  -1, -1, -1, 231, -1, -1, -1, 267, 
-  269, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 232, 233, 234, 7869, 235, -1, 553, 
-  275, 277, 281, 279, 283, -1, -1, 517, 
-  519, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7865, -1, 7705, 7707, -1, -1, 7867, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 236, 237, 238, 
-  297, 239, -1, -1, 299, 301, 303, -1, 
-  464, -1, -1, 521, 523, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7883, -1, -1, 
-  7725, -1, -1, 7881, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 505, 324, -1, 241, -1, -1, 326, 
-  -1, -1, -1, 7749, 328, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7751, 7753, 7755, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 242, 243, 244, 
-  245, 246, -1, -1, 333, 335, 491, 559, 
-  466, 337, 417, 525, 527, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7885, -1, -1, 
-  -1, -1, -1, 7887, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 249, 250, 251, 361, 252, 367, -1, 
-  363, 365, 371, -1, 468, 369, 432, 533, 
-  535, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7909, -1, 7799, 7797, -1, 7795, 7911, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7923, 253, 375, 
-  7929, 255, 7833, -1, 563, -1, -1, 7823, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7925, -1, -1, 
-  -1, -1, -1, 7927, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7696, 
-  -1, -1, -1, 7690, 270, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7692, 7694, 7698, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7697, -1, -1, -1, 7691, 
-  271, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7693, 7695, 7699, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 500, 284, -1, -1, -1, 290, 
-  7712, 286, -1, 288, 486, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 501, 285, 
-  -1, -1, -1, 291, 7713, 287, -1, 289, 
-  487, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 292, -1, 7718, -1, 7720, 
-  -1, -1, -1, 7714, 542, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7716, -1, -1, -1, 7722, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 293, 
-  -1, 7719, -1, 7721, -1, -1, -1, 7715, 
-  543, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7717, 7830, -1, 
-  -1, 7723, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 308, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 309, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  496, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7728, -1, -1, -1, -1, 310, 
-  -1, -1, -1, -1, 488, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7730, 7732, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7729, -1, 
-  -1, -1, -1, 311, -1, -1, -1, -1, 
-  489, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7731, 7733, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 313, -1, -1, -1, -1, 315, 
-  -1, -1, -1, -1, 317, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7734, 7738, 7740, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 314, -1, 
-  -1, -1, -1, 316, -1, -1, -1, -1, 
-  318, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7735, 7739, 7741, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 340, -1, -1, -1, -1, 342, 
-  -1, -1, -1, 7768, 344, -1, -1, 528, 
-  530, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7770, 7774, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 341, -1, 
-  -1, -1, -1, 343, -1, -1, -1, 7769, 
-  345, -1, -1, 529, 531, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7771, 7775, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 346, 348, -1, -1, -1, 350, 
-  -1, -1, -1, 7776, 352, -1, -1, -1, 
-  -1, 536, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7778, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 347, 349, 
-  -1, -1, -1, 351, -1, -1, -1, 7777, 
-  353, -1, -1, -1, -1, 537, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7779, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 354, 
-  -1, -1, -1, 7786, 356, -1, -1, -1, 
-  -1, 538, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7788, 7790, 7792, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7831, -1, 355, -1, -1, -1, 7787, 
-  357, -1, -1, -1, -1, 539, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7789, 7791, 7793, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7808, 7810, 372, -1, 7812, -1, -1, 
-  -1, -1, -1, 7814, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7816, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7809, 7811, 373, 
-  -1, 7813, 7832, -1, -1, -1, -1, 7815, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7817, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 377, 7824, -1, -1, -1, -1, 
-  -1, -1, -1, 379, 381, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7826, 7828, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 378, 7825, 
-  -1, -1, -1, -1, -1, -1, -1, 380, 
-  382, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7827, 7829, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 475, 471, -1, -1, -1, -1, -1, 
-  469, -1, -1, -1, 473, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 476, 472, -1, 
-  -1, -1, -1, -1, 470, -1, -1, -1, 
-  474, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  478, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 479, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  480, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 481, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 508, -1, -1, -1, -1, -1, 
-  482, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 509, -1, 
-  -1, -1, -1, -1, 483, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  492, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 493, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 494, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  495, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 506, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 507, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 510, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 511, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  554, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 555, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7756, -1, -1, 7758, -1, -1, 
-  556, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7757, -1, 
-  -1, 7759, -1, -1, 557, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  560, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 561, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8173, 901, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 8129, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8122, 902, -1, 
-  -1, -1, -1, -1, 8121, 8120, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7944, 7945, -1, 8124, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8136, 904, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7960, 7961, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8138, 905, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7976, 7977, -1, 8140, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8154, 906, -1, -1, 938, -1, -1, 
-  8153, 8152, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7992, 7993, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8184, 908, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8008, 8009, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8170, 910, -1, -1, 939, -1, -1, 
-  8169, 8168, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8025, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8186, 911, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8040, 8041, -1, 8188, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8146, 912, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 8151, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8048, 940, -1, 
-  -1, -1, -1, -1, 8113, 8112, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7936, 7937, 8118, 8115, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8050, 941, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7952, 7953, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8052, 942, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7968, 7969, 8134, 8131, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8054, 943, -1, -1, 970, -1, -1, 
-  8145, 8144, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7984, 7985, 8150, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8162, 944, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 8167, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8058, 973, -1, -1, 971, -1, -1, 
-  8161, 8160, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8016, 8017, 8166, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8056, 972, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8000, 8001, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8060, 974, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8032, 8033, 8182, 8179, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 979, -1, 
-  -1, 980, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1024, -1, -1, -1, 1025, -1, -1, 
-  -1, 1238, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 1027, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1031, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 1036, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1037, -1, -1, -1, 1252, -1, -1, 
-  1250, 1049, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1264, -1, -1, 1262, 1038, -1, -1, 
-  -1, 1266, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1117, -1, -1, -1, 1253, -1, -1, 
-  1251, 1081, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1104, -1, -1, 
-  -1, 1105, -1, -1, -1, 1239, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 1107, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1111, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 1116, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1265, -1, -1, 1263, 1118, -1, -1, 
-  -1, 1267, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 1142, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 1143, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1244, -1, -1, 
-  -1, 1217, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1245, -1, -1, -1, 1218, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1234, -1, -1, 
-  -1, 1232, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1235, -1, -1, -1, 1233, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1242, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1243, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1246, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1247, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1254, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1255, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1258, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1259, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1260, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1261, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1268, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1269, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 1272, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 1273, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 1570, 1571, 1573, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 1572, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 1574, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 1728, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 1730, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 1747, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 2345, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 2353, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 2356, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 2507, 2508, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  2888, 2891, 2892, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 2964, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 3020, 3018, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  3019, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 3144, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 3264, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 3271, 3272, 
-  3274, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 3275, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 3402, 3404, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 3403, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 3546, 3548, 3550, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 3549, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 4134, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 6918, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 6920, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 6922, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 6924, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 6926, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 6930, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 6971, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 6973, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 6976, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 6977, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 6979, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7682, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7684, 7686, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7683, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7685, 7687, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7688, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7689, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7700, 7702, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7701, 7703, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7708, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7709, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7710, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7711, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7726, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7727, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7736, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7737, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7742, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7744, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7746, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7743, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7745, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7747, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7760, 7762, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7761, 7763, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7764, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7766, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7765, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7767, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7772, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7773, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7780, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7781, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7782, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7783, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7784, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7785, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7800, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7801, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7802, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7803, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 7804, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7806, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  7805, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7807, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7820, -1, -1, 
-  -1, -1, -1, 7818, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7821, -1, -1, -1, -1, -1, 7819, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7835, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7846, 7844, -1, 
-  7850, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7848, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7847, 7845, -1, 7851, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7849, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7852, 
-  -1, -1, -1, -1, -1, 7862, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7853, -1, -1, -1, -1, 
-  -1, 7863, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7856, 7854, -1, 
-  7860, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7858, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7857, 7855, -1, 7861, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7859, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7872, 7870, -1, 
-  7876, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7874, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7873, 7871, -1, 7877, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7875, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7878, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7879, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7890, 7888, -1, 
-  7894, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7892, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7891, 7889, -1, 7895, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7893, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 7896, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 7897, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7900, 7898, -1, 
-  7904, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7906, -1, -1, 
-  -1, -1, -1, 7902, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7901, 7899, -1, 7905, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7907, -1, -1, -1, -1, -1, 7903, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7914, 7912, -1, 
-  7918, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7920, -1, -1, 
-  -1, -1, -1, 7916, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7915, 7913, -1, 7919, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7921, -1, -1, -1, -1, -1, 7917, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7938, 7940, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7942, 8064, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7939, 7941, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7943, 8065, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7946, 7948, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7950, 8072, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7947, 7949, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7951, 8073, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7954, 7956, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7955, 7957, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7962, 7964, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7963, 7965, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7970, 7972, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7974, 8080, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7971, 7973, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7975, 8081, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7978, 7980, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7982, 8088, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7979, 7981, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7983, 8089, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7986, 7988, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7990, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7987, 7989, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7991, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 7994, 7996, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 7998, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 7995, 7997, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 7999, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8002, 8004, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8003, 8005, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8010, 8012, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8011, 8013, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8018, 8020, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 8022, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8019, 8021, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 8023, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8027, 8029, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 8031, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8034, 8036, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 8038, 8096, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8035, 8037, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 8039, 8097, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8042, 8044, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 8046, 8104, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8043, 8045, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 8047, 8105, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8066, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8067, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8068, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8069, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8070, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8071, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8074, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8075, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8076, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8077, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8078, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8079, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8082, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8083, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8084, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8085, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8086, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8087, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8090, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8091, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8092, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8093, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8094, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8095, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8098, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8099, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8100, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8101, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8102, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8103, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8106, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8107, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8108, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8109, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8110, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8111, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8114, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8116, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8119, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8130, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8132, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8135, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 8141, 8142, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, 8143, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8157, 8158, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, 8159, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8164, 8165, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 8172, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8178, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 8180, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 8183, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8602, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8603, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8622, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8653, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8654, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8655, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8708, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8713, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8716, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8740, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8742, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8769, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8772, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8775, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8777, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8800, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8802, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8813, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8814, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8815, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8816, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8817, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8820, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8821, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8824, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8825, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8832, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8833, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8836, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8837, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8840, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8841, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8876, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8877, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8878, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8879, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8928, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8929, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8930, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8931, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8938, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8939, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  8940, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 8941, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  10972, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12364, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12366, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12368, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12370, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12372, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12374, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12376, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12378, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12380, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12382, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12384, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12386, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12389, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12391, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12393, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12400, 12401, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12403, 12404, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12406, 12407, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12409, 12410, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12412, 12413, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12436, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12446, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12460, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12462, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12464, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12466, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12468, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12470, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12472, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12474, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12476, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12478, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12480, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12482, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12485, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12487, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12489, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12496, 12497, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12499, 12500, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12502, 12503, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12505, 12506, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12508, 12509, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12532, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12535, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12536, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12537, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, 12538, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, 12542, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 119134, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 119135, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  119136, 119137, 119138, 119139, 119140, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, 119227, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, 119228, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, 119229, 119231, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  -1, -1, -1, -1, -1, -1, -1, -1, 
-  119230, 119232, -1, -1, -1, };
-
diff --git a/src/lib/util.c b/src/lib/util.c
deleted file mode 100644
index cb087a5..0000000
--- a/src/lib/util.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: util.c 2686 2016-12-07 20:02:41Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <mpi.h>
-#include "nc.h"
-#include "macro.h"
-#include "ncmpidtype.h"
-#include "ncx.h"
-
-/*----< ncmpii_sanity_check() >----------------------------------------------*/
-/* check the following errors and in that precedence.
- * NC_EBADID, NC_EPERM, NC_EINDEFINE, NC_EINDEP/NC_ENOTINDEP, NC_ENOTVAR,
- * NC_ECHAR, NC_EINVALCOORDS, NC_EEDGE, NC_ESTRIDE, NC_EINVAL.
- */
-int ncmpii_sanity_check(int               ncid,
-                        int               varid,
-                        const MPI_Offset *start,
-                        const MPI_Offset *count,
-                        const MPI_Offset *stride,
-                        const MPI_Offset  bufcount,
-                        MPI_Datatype      buftype,  /* internal datatype */
-                        enum API_KIND     api,
-                        int               isFlexibleAPI,
-                        int               mustInDataMode,
-                        int               rw_flag,
-                        int               io_method,
-                        NC              **ncp,   /* OUT */
-                        NC_var          **varp)  /* OUT */
-{
-    /* all errors detected here are fatal, must return immediately */
-    int i, firstDim, err;
-
-    /* check if ncid is valid (check NC_EBADID) */
-    err = ncmpii_NC_check_id(ncid, ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-    /* For invalid ncid, we must return error now, as there is no way to
-     * continue with invalid ncp. However, collective APIs might hang if this
-     * error occurs only on a subset of processes
-     */
-
-    /* check file write permission if this is write request */
-    if (rw_flag == WRITE_REQ && NC_readonly(*ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto fn_exit;
-    }
-
-    /* if this call must be made in data mode, check if currently is in define
-     * mode */
-    if (mustInDataMode && NC_indef(*ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINDEFINE)
-        goto fn_exit;
-    }
-
-    if (io_method != NONBLOCKING_IO) { /* for blocking APIs */
-        /* check if in the right collective or independent mode and initialize
-         * MPI file handlers */
-        err = ncmpii_check_mpifh(*ncp, io_method);
-        if (err != NC_NOERR) goto fn_exit;
-    }
-
-    /* check if varid is valid (check NC_ENOTVAR) */
-    err = ncmpii_NC_lookupvar(*ncp, varid, varp);
-    if (err != NC_NOERR) goto fn_exit;
-
-    /* check NC_ECHAR */
-    if (isFlexibleAPI) {
-        /* when buftype == MPI_DATATYPE_NULL, bufcount is ignored and this API
-         * assumes argument buf's data type matches the data type of variable
-         * defined in the file - no data conversion will be done.
-         */
-        if (buftype != MPI_DATATYPE_NULL) {
-            int isderived, el_size, buftype_is_contig;
-            MPI_Datatype ptype;
-            MPI_Offset   bnelems=0;
-
-            err = ncmpii_dtype_decode(buftype, &ptype, &el_size, &bnelems,
-                                      &isderived, &buftype_is_contig);
-            if (err != NC_NOERR) goto fn_exit;
-
-            err = NCMPII_ECHAR((*varp)->type, ptype);
-            if (err != NC_NOERR) goto fn_exit;
-        }
-        /* else case types are matched */
-    }
-    else {
-        err = NCMPII_ECHAR((*varp)->type, buftype);
-        if (err != NC_NOERR) goto fn_exit;
-    }
-
-    /* for flexible APIs, bufcount cannot be negative */
-    if (bufcount < 0) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINVAL)
-        goto fn_exit;
-    }
-
-    if ((*varp)->ndims == 0) { /* scalar variable: ignore start/count/stride */
-        err = NC_NOERR;
-        goto fn_exit;
-    }
-
-    if (api <= API_VAR) { /* var/varn/vard APIs, start/count/stride are NULL */
-        err = NC_NOERR;
-        goto fn_exit;
-    }
-
-    /* Now only check var1, vara, vars, and varm APIs */
-
-    /* Check NC_EINVALCOORDS
-     * for API var1/vara/vars/varm, start cannot be NULL, except for scalars */
-    if (start == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-        goto fn_exit;
-    }
-
-    firstDim = 0;
-    if (IS_RECVAR(*varp)) {
-        if (start[0] < 0) { /* no negative value */
-            DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-            goto fn_exit;
-        }
-
-        if ((*ncp)->format < 5 &&    /* not CDF-5 */
-            start[0] > X_UINT_MAX) { /* sanity check */
-            DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-            goto fn_exit;
-        }
-
-        /* for record variable, [0] is the NC_UNLIMITED dimension */
-        if (rw_flag == READ_REQ) {
-            /* read cannot go beyond current numrecs */
-#ifdef RELAX_COORD_BOUND
-            if (start[0] >  (*ncp)->numrecs) {
-                DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-                goto fn_exit;
-            }
-            if (start[0] == (*ncp)->numrecs) {
-                if (api == API_VAR1) {
-                    /* for var1 APIs, count[0] is considered of 1 */
-                    DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-                    goto fn_exit;
-                }
-                else if (count != NULL && count[0] > 0) {
-                    DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-                    goto fn_exit;
-                }
-            }
-#else
-            if (start[0] >= (*ncp)->numrecs) {
-                DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-                goto fn_exit;
-            }
-#endif          
-        }
-        firstDim = 1; /* skip checking the record dimension */
-    }
-
-    for (i=firstDim; i<(*varp)->ndims; i++) {
-#ifdef RELAX_COORD_BOUND
-        if (start[i] < 0 || start[i] > (*varp)->shape[i]) {
-            DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-            goto fn_exit;
-        }
-        if (start[i] == (*ncp)->numrecs) {
-            if (api == API_VAR1) {
-                /* for var1 APIs, count[0] is considered of 1 */
-                DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-                goto fn_exit;
-            }
-            else if (count != NULL && count[i] > 0) {
-                DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-                goto fn_exit;
-            }
-        }
-#else
-        if (start[i] < 0 || start[i] >= (*varp)->shape[i]) {
-            DEBUG_ASSIGN_ERROR(err, NC_EINVALCOORDS)
-            goto fn_exit;
-        }
-#endif
-    }
-
-    if (api <= API_VAR1) {
-        /* var1/var APIs have no count argument */
-        err = NC_NOERR;
-        goto fn_exit;
-    }
-
-    /* Check NC_EEDGE
-     * for API vara/vars/varm, count cannot be NULL, except for scalars */
-    if (count == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_EEDGE)
-        goto fn_exit;
-    }
-    firstDim = 0;
-    if (IS_RECVAR(*varp)) {
-        if (count[0] < 0) { /* no negative count[] */
-            DEBUG_ASSIGN_ERROR(err, NC_ENEGATIVECNT)
-            goto fn_exit;
-        }
-        /* for record variable, [0] is the NC_UNLIMITED dimension */
-        if (rw_flag == READ_REQ) { /* read cannot go beyond current numrecs */
-            if (stride == NULL) {  /* for vara APIs */
-                if (start[0] + count[0] > (*ncp)->numrecs) {
-                    DEBUG_ASSIGN_ERROR(err, NC_EEDGE)
-                    goto fn_exit;
-                }
-            }
-            else { /* for vars/varm APIs */
-                if (count[0] > 0 &&
-                    start[0] + (count[0]-1) * stride[0] >= (*ncp)->numrecs) {
-                    DEBUG_ASSIGN_ERROR(err, NC_EEDGE)
-                    goto fn_exit;
-                }
-            }
-        }
-        firstDim = 1; /* skip checking the record dimension */
-    }
-
-    for (i=firstDim; i<(*varp)->ndims; i++) {
-        if ((*varp)->shape[i] < 0) {
-            DEBUG_ASSIGN_ERROR(err, NC_EEDGE)
-            goto fn_exit;
-        }
-        if (count[i] < 0) { /* no negative count[] */
-            DEBUG_ASSIGN_ERROR(err, NC_ENEGATIVECNT)
-            goto fn_exit;
-        }
-
-        if (stride == NULL) { /* for vara APIs */
-            if (count[i] > (*varp)->shape[i] ||
-                start[i] + count[i] > (*varp)->shape[i]) {
-                DEBUG_ASSIGN_ERROR(err, NC_EEDGE)
-                goto fn_exit;
-            }
-        }
-        else { /* for vars APIs */
-            if (count[i] > 0 &&
-                start[i] + (count[i]-1) * stride[i] >= (*varp)->shape[i]) {
-                DEBUG_ASSIGN_ERROR(err, NC_EEDGE)
-                goto fn_exit;
-            }
-        }
-    }
-
-    if (api <= API_VARA) {
-        /* vara APIs have no stride argument */
-        err = NC_NOERR;
-        goto fn_exit;
-    }
-
-    /* Check NC_ESTRIDE */
-    for (i=0; i<(*varp)->ndims; i++) {
-        if (stride != NULL && stride[i] == 0) {
-            DEBUG_ASSIGN_ERROR(err, NC_ESTRIDE)
-            goto fn_exit;
-        }
-    }
-
-fn_exit:
-    if ((*ncp)->safe_mode == 1 && io_method == COLL_IO) {
-        int min_st, mpireturn;
-        TRACE_COMM(MPI_Allreduce)(&err, &min_st, 1, MPI_INT, MPI_MIN, (*ncp)->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR) err = min_st;
-    }
-    return err;
-}
-
diff --git a/src/lib/var.c b/src/lib/var.c
deleted file mode 100644
index baadeca..0000000
--- a/src/lib/var.c
+++ /dev/null
@@ -1,1233 +0,0 @@
-/*
- *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: var.c 2683 2016-12-07 06:42:58Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <stdio.h>
-#include <string.h> /* memset() */
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "rnd.h"
-#include "macro.h"
-#include "utf8proc.h"
-
-/*----< ncmpii_free_NC_var() >------------------------------------------------*/
-/*
- * Free var
- * Formerly
-NC_free_var(var)
- */
-inline void
-ncmpii_free_NC_var(NC_var *varp)
-{
-    if (varp == NULL) return;
-    ncmpii_free_NC_attrarray(&varp->attrs);
-    ncmpii_free_NC_string(varp->name);
-#ifdef ENABLE_SUBFILING
-    if (varp->num_subfiles > 1) /* deallocate it */
-        NCI_Free(varp->dimids_org);
-#endif
-    NCI_Free(varp);
-}
-
-
-/*----< ncmpii_new_x_NC_var() >-----------------------------------------------*/
-/*
- * Used by ncmpii_new_NC_var() and ncx_get_NC_var()
- */
-NC_var *
-ncmpii_new_x_NC_var(NC_string *strp,
-                    int        ndims)
-{
-    NC_var *varp;
-    int shape_space   = M_RNDUP(ndims * SIZEOF_MPI_OFFSET);
-    int dsizes_space  = M_RNDUP(ndims * SIZEOF_MPI_OFFSET);
-    int dimids_space  = M_RNDUP(ndims * SIZEOF_INT);
-    size_t sizeof_NC_var = M_RNDUP(sizeof(NC_var));
-    size_t sz = sizeof_NC_var + (size_t)(shape_space + dsizes_space + dimids_space);
-
-    /* this function allocates a contiguous memory space to put all
-     * members of NC_var structure together:
-     * dimid_space is for dimids[],
-     * shape_space is for shape[],
-     * dsizes_space is for dsizes[]
-     * (I don't know why M_RNDUP is needed here and why they should be kept
-     * in a contiguous memory space.)
-     */
-    varp = (NC_var *) NCI_Malloc(sz);
-    if (varp == NULL ) return NULL;
-
-    memset(varp, 0, sz);
-
-    varp->name = strp;
-    varp->ndims = ndims;
-
-    if (ndims != 0) {
-        /*
-         * NOTE: lint may complain about the next 3 lines:
-         * "pointer cast may result in improper alignment".
-         * We use the M_RNDUP() macro to get the proper alignment.
-         * roundup to a double
-         */
-        varp->shape  = (MPI_Offset *)((char *)varp + sizeof_NC_var);
-        varp->dsizes = (MPI_Offset *)((char *)varp->shape  + shape_space);
-        varp->dimids = (int *)       ((char *)varp->dsizes + dsizes_space);
-    }
-
-    varp->xsz = 0;
-    varp->len = 0;
-    varp->begin = 0;
-
-    return varp;
-}
-
-/*----< ncmpii_new_NC_var() >------------------------------------------------*/
-/*
- * Formerly, NC_new_var()
- */
-static int
-ncmpii_new_NC_var(NC_vararray  *vcap,
-                  const char   *name,  /* normalized variable name (NULL terminated) */
-                  nc_type       type,
-                  int           ndims,
-                  const int    *dimids,
-                  NC_var      **varp)
-{
-    NC_string *strp;
-
-    strp = ncmpii_new_NC_string(strlen(name), name);
-    if (strp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    *varp = ncmpii_new_x_NC_var(strp, ndims);
-    if (*varp == NULL ) {
-        ncmpii_free_NC_string(strp);
-        DEBUG_RETURN_ERROR(NC_ENOMEM)
-    }
-
-    (*varp)->type = type;
-
-    if (ndims != 0 && dimids != NULL)
-        memcpy((*varp)->dimids, dimids, (size_t)ndims * SIZEOF_INT);
-
-#ifndef SEARCH_NAME_LINEARLY
-    if (vcap != NULL) { /* insert new var to hash table */
-        int key;
-        NC_nametable *nameT = vcap->nameT; /* var name lookup table */
-
-        /* hash the var name into a key for name lookup */
-        key = HASH_FUNC(name);
-
-        /* allocate or expand the space for nameT[key].list */
-        if (nameT[key].num % NC_NAME_TABLE_CHUNK == 0)
-            nameT[key].list = (int*) NCI_Realloc(nameT[key].list,
-                              (size_t)(nameT[key].num+NC_NAME_TABLE_CHUNK) * sizeof(int));
-
-        /* add the new variable ID to the name lookup table
-         * the new varid will be vcap->ndefined
-         */
-        nameT[key].list[nameT[key].num] = vcap->ndefined;
-        nameT[key].num++;
-    }
-    /* else case is for variable duplication called from dup_NC_var() */
-#endif
-
-    return NC_NOERR;
-}
-
-/*----< ncmpii_update_name_lookup_table() >----------------------------------*/
-/* remove the entry in lookup table for oldname and add a new entry for
- * newname
- */
-int
-ncmpii_update_name_lookup_table(NC_nametable *nameT,
-                                const int     id,
-                                const char   *oldname,  /*    normalized */
-                                const char   *unewname) /* un-normalized */
-{
-    int i, key;
-    char *name; /* normalized name string */
-
-    /* remove the old name from the lookup table
-     * hash the var name into a key for name lookup
-     */
-    key = HASH_FUNC(oldname);
-    for (i=0; i<nameT[key].num; i++) {
-        if (nameT[key].list[i] == id) break;
-    }
-    assert(i!=nameT[key].num);
-
-    /* coalesce the id array */
-    for (; i<nameT[key].num-1; i++)
-        nameT[key].list[i] = nameT[key].list[i+1]; 
-
-    /* decrease the number of IDs and free space if necessary */
-    nameT[key].num--;
-    if (nameT[key].num == 0) {
-        NCI_Free(nameT[key].list);
-        nameT[key].list = NULL;
-    }
-
-    /* normalized version of uname */
-    name = (char *)ncmpii_utf8proc_NFC((const unsigned char *)unewname);
-    if (name == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    /* hash the var name into a key for name lookup */
-    key = HASH_FUNC(name);
-    free(name);
-
-    /* add the new name to the lookup table
-     * Note unewname must have already been checked for existence
-     */
-    if (nameT[key].num % NC_NAME_TABLE_CHUNK == 0)
-        nameT[key].list = (int*) NCI_Realloc(nameT[key].list,
-                          (size_t)(nameT[key].num+NC_NAME_TABLE_CHUNK) * sizeof(int));
-    nameT[key].list[nameT[key].num] = id;
-    nameT[key].num++;
-
-    return NC_NOERR;
-}
-
-
-/*----< dup_NC_var() >--------------------------------------------------------*/
-NC_var *
-dup_NC_var(const NC_var *rvarp)
-{
-    int err;
-    NC_var *varp;
-
-    /* note that name in rvarp->name->cp is already normalized */
-    err = ncmpii_new_NC_var(NULL, rvarp->name->cp, rvarp->type, rvarp->ndims,
-                            rvarp->dimids, &varp);
-    if (err != NC_NOERR) return NULL;
-
-    if (ncmpii_dup_NC_attrarray(&varp->attrs, &rvarp->attrs) != NC_NOERR) {
-        ncmpii_free_NC_var(varp);
-        return NULL;
-    }
-
-    /* copy the contents of shape may not be necessary, as one must call
-     * ncmpii_NC_computeshapes() to recompute it after a new variable is
-     * created */
-    memcpy(varp->shape,  rvarp->shape,  (size_t)rvarp->ndims * SIZEOF_MPI_OFFSET);
-    memcpy(varp->dsizes, rvarp->dsizes, (size_t)rvarp->ndims * SIZEOF_MPI_OFFSET);
-    varp->xsz = rvarp->xsz;
-    varp->len = rvarp->len;
-    varp->begin = rvarp->begin;
-
-    return varp;
-}
-
-/* vararray */
-
-/*----< ncmpii_free_NC_vararray() >-------------------------------------------*/
-/*
- * Free NC_vararray values.
- * formerly
-NC_free_array()
- */
-inline void
-ncmpii_free_NC_vararray(NC_vararray *ncap)
-{
-    int i;
-
-    assert(ncap != NULL);
-    if (ncap->nalloc == 0) return;
-
-    assert(ncap->value != NULL);
-    for (i=0; i<ncap->ndefined; i++) {
-        if (ncap->value[i] != NULL)
-            ncmpii_free_NC_var(ncap->value[i]);
-    }
-
-    NCI_Free(ncap->value);
-    ncap->value    = NULL;
-    ncap->nalloc   = 0;
-    ncap->ndefined = 0;
-
-    /* free space allocated for var name lookup table */
-    for (i=0; i<HASH_TABLE_SIZE; i++) {
-        if (ncap->nameT[i].num > 0)
-            NCI_Free(ncap->nameT[i].list);
-        ncap->nameT[i].num = 0;
-    }
-}
-
-
-/*----< ncmpii_dup_NC_vararray() >--------------------------------------------*/
-int
-ncmpii_dup_NC_vararray(NC_vararray       *ncap,
-                       const NC_vararray *ref)
-{
-    int i, status=NC_NOERR;
-
-    assert(ref != NULL);
-    assert(ncap != NULL);
-
-    if (ref->nalloc == 0) {
-        ncap->nalloc = 0;
-        ncap->ndefined = 0;
-        ncap->value = NULL;
-        return NC_NOERR;
-    }
-
-    if (ref->nalloc > 0) {
-        ncap->value = (NC_var **) NCI_Calloc((size_t)ref->nalloc, sizeof(NC_var*));
-        if (ncap->value == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-        ncap->nalloc = ref->nalloc;
-    }
-
-    ncap->ndefined = 0;
-    for (i=0; i<ref->ndefined; i++) {
-        ncap->value[i] = dup_NC_var(ref->value[i]);
-        if (ncap->value[i] == NULL) {
-            DEBUG_ASSIGN_ERROR(status, NC_ENOMEM)
-            break;
-        }
-    }
-
-    if (status != NC_NOERR) {
-        ncmpii_free_NC_vararray(ncap);
-        return status;
-    }
-
-    ncap->ndefined = ref->ndefined;
-
-    /* duplicate var name lookup table */
-    for (i=0; i<HASH_TABLE_SIZE; i++) {
-        ncap->nameT[i].num = ref->nameT[i].num;
-        ncap->nameT[i].list = NULL;
-        if (ncap->nameT[i].num > 0) {
-            ncap->nameT[i].list = NCI_Malloc((size_t)ncap->nameT[i].num * sizeof(int));
-            memcpy(ncap->nameT[i].list, ref->nameT[i].list,
-                   (size_t)ncap->nameT[i].num * sizeof(int));
-        }
-    }
-
-    return NC_NOERR;
-}
-
-
-/*
- * Add a new handle on the end of an array of handles
- * Formerly
-NC_incr_array(array, tail)
- */
-int
-incr_NC_vararray(NC_vararray *ncap,
-                 NC_var      *newvarp)
-{
-    NC_var **vp;
-
-    assert(ncap != NULL);
-    assert(newvarp != NULL);
-
-    if (ncap->nalloc == 0) { /* no variable has been allocated yet */
-        assert(ncap->ndefined == 0);
-        vp = (NC_var **) NCI_Malloc(NC_ARRAY_GROWBY * sizeof(NC_var *));
-        if (vp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-        ncap->value = vp;
-        ncap->nalloc = NC_ARRAY_GROWBY;
-    }
-    else if (ncap->ndefined + 1 > ncap->nalloc) {
-        vp = (NC_var **) NCI_Realloc(ncap->value,
-                         (size_t)(ncap->nalloc + NC_ARRAY_GROWBY) * sizeof(NC_var *));
-        if (vp == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-        ncap->value = vp;
-        ncap->nalloc += NC_ARRAY_GROWBY;
-    }
-
-    if (newvarp != NULL) {
-        ncap->value[ncap->ndefined] = newvarp;
-        ncap->ndefined++;
-    }
-
-    return NC_NOERR;
-}
-
-
-inline static NC_var *
-elem_NC_vararray(const NC_vararray *ncap,
-                 int                varid)
-{
-    assert(ncap != NULL);
-    /* cast needed for braindead systems with signed MPI_Offset */
-    if ((varid < 0) ||  ncap->ndefined == 0 || varid >= ncap->ndefined)
-        return NULL;
-
-    assert(ncap->value != NULL);
-
-    return ncap->value[varid];
-}
-
-
-/* End vararray per se */
-
-
-#ifdef SEARCH_NAME_LINEARLY
-/*
- * Step thru NC_VARIABLE array, seeking match on name.
- * If found, set the variable ID pointed by vardip, otherwise return NC_ENOTVAR
- * Formerly (sort of)
-NC_hvarid
- */
-static int
-ncmpii_NC_findvar(const NC_vararray *ncap,
-                  const char        *name,  /* normalized name */
-                  int               *varidp)
-{
-    int varid;
-    size_t nchars;
-    NC_var **loc;
-
-    assert (ncap != NULL);
-
-    if (ncap->ndefined == 0) return NC_ENOTVAR;
-
-    loc = (NC_var **) ncap->value;
-
-    nchars = strlen(name);
-
-    for (varid=0; varid<ncap->ndefined; varid++, loc++) {
-        if ((*loc)->name->nchars == nchars &&
-            strncmp((*loc)->name->cp, name, nchars) == 0) {
-            if (varidp != NULL) *varidp = varid;
-            return NC_NOERR; /* found it */
-        }
-    }
-
-    return NC_ENOTVAR; /* not found */
-}
-#else
-/*----< ncmpii_NC_findvar() >------------------------------------------------*/
-/* Check if the name has been used.
- * If yes, set the variable ID pointed by vardip, otherwise return NC_ENOTVAR
- */
-static int
-ncmpii_NC_findvar(const NC_vararray  *ncap,
-                  const char         *name,  /* normalized name */
-                  int                *varidp)
-{
-    int i, key, varid;
-
-    assert (ncap != NULL);
-
-    if (ncap->ndefined == 0) return NC_ENOTVAR;
-
-    /* hash the var name into a key for name lookup */
-    key = HASH_FUNC(name);
-
-    /* check the list using linear search */
-    for (i=0; i<ncap->nameT[key].num; i++) {
-        varid = ncap->nameT[key].list[i];
-        if (strcmp(name, ncap->value[varid]->name->cp) == 0) {
-            if (varidp != NULL) *varidp = varid;
-            return NC_NOERR; /* the name already exists */
-        }
-    }
-
-    return NC_ENOTVAR; /* the name has never been used */
-}
-#endif
-
-/*
- * For a netcdf type
- *  return the size of one element in the external representation.
- * Note that arrays get rounded up to X_ALIGN boundaries.
- * Formerly
-NC_xtypelen
- * See also ncx_len()
- */
-static int
-ncx_szof(nc_type type)
-{
-    switch(type){
-        case NC_BYTE:
-        case NC_CHAR:   return (1);
-        case NC_SHORT:  return (2);
-        case NC_INT:    return X_SIZEOF_INT;
-        case NC_FLOAT:  return X_SIZEOF_FLOAT;
-        case NC_DOUBLE: return X_SIZEOF_DOUBLE;
-        case NC_UBYTE:  return (1);
-        case NC_USHORT: return (2);
-        case NC_UINT:   return X_SIZEOF_UINT;
-        case NC_INT64:  return X_SIZEOF_INT64;
-        case NC_UINT64: return X_SIZEOF_UINT64;
-        default:
-             fprintf(stderr,"ncx_szof invalid type %d\n", type);
-             assert(0);
-    }
-    /* default */
-    return 0;
-}
-
-/*----< ncmpii_NC_var_shape64() >--------------------------------------------*/
-/*
- * set varp->xsz, varp->shape and varp->len of a variable
- */
-int
-ncmpii_NC_var_shape64(NC_var            *varp,
-                      const NC_dimarray *dims)
-{
-    int i;
-    MPI_Offset product = 1;
-
-    /* set the size of 1 element */
-    varp->xsz = ncx_szof(varp->type);
-
-    if (varp->ndims == 0) goto out;
-
-    /*
-     * use the user supplied dimension indices to determine the shape
-     */
-    for (i=0; i<varp->ndims; i++) {
-        const NC_dim *dimp;
-
-        if (varp->dimids[i] < 0)
-            DEBUG_RETURN_ERROR(NC_EBADDIM)
-
-        if (varp->dimids[i] >= ((dims != NULL) ? dims->ndefined : 1))
-            DEBUG_RETURN_ERROR(NC_EBADDIM)
-
-        /* get the pointer to the dim object */
-        dimp = ncmpii_elem_NC_dimarray(dims, varp->dimids[i]);
-        varp->shape[i] = dimp->size;
-
-        /* check for record variable, only the highest dimension can
-         * be unlimited */
-        if (varp->shape[i] == NC_UNLIMITED && i != 0)
-            DEBUG_RETURN_ERROR(NC_EUNLIMPOS)
-    }
-
-    /*
-     * compute the dsizes, the right to left product of shape
-     */
-    product = 1;
-    if (varp->ndims == 1) {
-        if (varp->shape[0] == NC_UNLIMITED)
-            varp->dsizes[0] = 1;
-        else {
-            varp->dsizes[0] = varp->shape[0];
-            product = varp->shape[0];
-        }
-    }
-    else { /* varp->ndims > 1 */
-        varp->dsizes[varp->ndims-1] = varp->shape[varp->ndims-1];
-        product = varp->shape[varp->ndims-1];
-        for (i=varp->ndims-2; i>=0; i--) {
-            if (varp->shape[i] != NC_UNLIMITED)
-                product *= varp->shape[i];
-            varp->dsizes[i] = product;
-        }
-    }
-
-out :
-    /*
-     * For CDF-1 and CDF-2 formats, the total number of array elements
-     * cannot exceed 2^32, unless this variable is the last fixed-size
-     * variable, there is no record variable, and the file starting
-     * offset of this variable is less than 2GiB.
-     * We will check this in ncmpi_enddef() which calls ncmpii_NC_enddef()
-     * which calls ncmpii_NC_check_vlens()
-     *
-    if (ncp->format < 5 && product >= X_UINT_MAX)
-        DEBUG_RETURN_ERROR(NC_EVARSIZE)
-     */
-
-    /*
-     * align variable size to 4 byte boundary, required by all netcdf
-     * file formats
-     */
-    varp->len = product * varp->xsz;
-    if (varp->len % 4 > 0)
-        varp->len += 4 - varp->len % 4; /* round up */
-
-    return NC_NOERR;
-}
-
-/*
- * Check whether variable size is less than or equal to vlen_max,
- * without overflowing in arithmetic calculations.  If OK, return 1,
- * else, return 0.  For CDF1 format or for CDF2 format on non-LFS
- * platforms, vlen_max should be 2^31 - 4, but for CDF2 format on
- * systems with LFS it should be 2^32 - 4.
- */
-inline int
-ncmpii_NC_check_vlen(NC_var     *varp,
-                     MPI_Offset  vlen_max)
-{
-    int ii;
-    MPI_Offset prod=varp->xsz;     /* product of xsz and dimensions so far */
-
-    for (ii = IS_RECVAR(varp) ? 1 : 0; ii < varp->ndims; ii++) {
-        if (varp->shape[ii] > vlen_max / prod) {
-            return 0;           /* size in bytes won't fit in a 32-bit int */
-        }
-        prod *= varp->shape[ii];
-    }
-    return 1;                  /* OK */
-}
-
-/*----< ncmpii_NC_lookupvar() >----------------------------------------------*/
-/*
- * Given valid ncp and varid, return var
- *  else NULL on error
- * Formerly
-NC_hlookupvar()
- */
-int
-ncmpii_NC_lookupvar(NC      *ncp,
-                    int      varid,
-                    NC_var **varp)
-{
-    if (varid == NC_GLOBAL) /* Global is error in this context */
-        DEBUG_RETURN_ERROR(NC_EGLOBAL)
-
-    *varp = elem_NC_vararray(&ncp->vars, varid);
-    if (*varp == NULL) /* could not find variable with varid */
-        DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    return NC_NOERR;
-}
-
-
-/* Public */
-
-/*----< ncmpi_def_var() >----------------------------------------------------*/
-int
-ncmpi_def_var(int         ncid,
-              const char *name,
-              nc_type     type,
-              int         ndims,
-              const int  *dimids,
-              int        *varidp)
-{
-    int err;
-    char *nname=NULL; /* normalized name */
-    NC *ncp=NULL;
-    NC_var *varp=NULL;
-
-    /* check if ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check if called in define mode */
-    if (!NC_indef(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-        goto err_check;
-    }
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* check if the name string is legal for netcdf format */
-    err = ncmpii_NC_check_name(name, ncp->format);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    /* check if type is a valid netcdf type */
-    err = ncmpii_cktype(ncp->format, type);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    /* TODO: make ndims of type MPI_Offset so ndims can be > 2^31-1 in CDF-5
-    if ((ndims < 0) || ndims > X_INT_MAX) DEBUG_RETURN_ERROR(NC_EINVAL)
-    */
-    if (ndims < 0) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINVAL)
-        goto err_check;
-    }
-
-    /* there is an upperbound for the number of variables defined in a file */
-    if (ncp->vars.ndefined >= NC_MAX_VARS) {
-        DEBUG_ASSIGN_ERROR(err, NC_EMAXVARS)
-        goto err_check;
-    }
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    /* check whether new name is already in use, for this API (def_var) the
-     * name should NOT already exist */
-    err = ncmpii_NC_findvar(&ncp->vars, nname, NULL);
-    if (err != NC_ENOTVAR) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
-        goto err_check;
-    }
-    else
-        err = NC_NOERR;
-
-err_check:
-    if (ncp->safe_mode) {
-        int root_ndims, status, mpireturn;
-        char root_name[NC_MAX_NAME];
-
-        /* check if name is consistent among all processes */
-        if (name == NULL || *name == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, name, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && strcmp(root_name, name))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_NAME)
-
-        /* check if type is consistent among all processes */
-        nc_type root_type=type;
-        TRACE_COMM(MPI_Bcast)(&root_type, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && root_type != type)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_TYPE)
-
-        /* check if ndims is consistent among all processes */
-        root_ndims=ndims;
-        TRACE_COMM(MPI_Bcast)(&root_ndims, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        }
-        if (err == NC_NOERR && root_ndims != ndims)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_NDIMS)
-
-        /* check if dimids is consistent among all processes */
-        if (root_ndims > 0) {
-            int root_dimids[NC_MAX_DIMS];
-            if (dimids != NULL)
-                memcpy(root_dimids, dimids, (size_t)root_ndims*sizeof(int));
-            else
-                memset(root_dimids, 0, (size_t)root_ndims*sizeof(int));
-            TRACE_COMM(MPI_Bcast)(root_dimids, root_ndims, MPI_INT, 0, ncp->nciop->comm);
-            if (mpireturn != MPI_SUCCESS) {
-                if (nname != NULL) free(nname);
-                return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-            }
-            if (err == NC_NOERR && dimids != NULL &&
-                memcmp(root_dimids, dimids, (size_t)root_ndims*sizeof(int)))
-                DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_DIMIDS)
-        }
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS) {
-            if (nname != NULL) free(nname);
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        }
-        if (err == NC_NOERR) err = status;
-    }
-
-    if (err != NC_NOERR) {
-        if (nname != NULL) free(nname);
-        return err;
-    }
-
-    assert(nname != NULL);
-
-    /* create a new variable */
-    err = ncmpii_new_NC_var(&ncp->vars, nname, type, ndims, dimids, &varp);
-    free(nname);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* set up array dimensional structures */
-    err = ncmpii_NC_var_shape64(varp, &ncp->dims);
-    if (err != NC_NOERR) {
-        ncmpii_free_NC_var(varp);
-        DEBUG_RETURN_ERROR(err)
-    }
-
-    /* Add a new handle to the end of an array of handles */
-    err = incr_NC_vararray(&ncp->vars, varp);
-    if (err != NC_NOERR) {
-        ncmpii_free_NC_var(varp);
-        DEBUG_RETURN_ERROR(err)
-    }
-
-    if (varidp != NULL)
-        *varidp = (int)ncp->vars.ndefined - 1; /* varid */
-        /* ncp->vars.ndefined has been increased in incr_NC_vararray() */
-
-    assert(varp != NULL);
-
-    /* default is NOFILL */
-    varp->no_fill = 1;
-
-    /* change to FILL only if the entire dataset fill mode is FILL */
-    if (NC_dofill(ncp)) varp->no_fill = 0;
-
-    return NC_NOERR;
-}
-
-
-/*----< ncmpi_inq_varid() >--------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_varid(int         ncid,
-                const char *name,
-                int        *varid)
-{
-    int err;
-    char *nname=NULL; /* normalized name */
-    NC *ncp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (name == NULL || *name == 0 || strlen(name) > NC_MAX_NAME)
-        DEBUG_RETURN_ERROR(NC_EBADNAME)
-
-    /* create a normalized character string */
-    nname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)name);
-    if (nname == NULL) DEBUG_RETURN_ERROR(NC_ENOMEM)
-
-    err = ncmpii_NC_findvar(&ncp->vars, nname, varid);
-    free(nname);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_var() >----------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_var(int      ncid,
-              int      varid,
-              char    *name,
-              nc_type *typep,
-              int     *ndimsp,
-              int     *dimids,
-              int     *nattsp)
-{
-    int err;
-    NC *ncp=NULL;
-    NC_var *varp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* using NC_GLOBAL in varid is illegal for this API. See
-     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
-     */
-    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
-
-    varp = elem_NC_vararray(&ncp->vars, varid);
-    if (varp == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (name != NULL)
-        /* in PnetCDF, name->cp is always NULL character terminated */
-        strcpy(name, varp->name->cp);
-
-    if (typep != 0)
-        *typep = varp->type;
-
-    if (ndimsp != 0) {
-#ifdef ENABLE_SUBFILING
-        /* varp->num_subfiles is already set during open or enddef */
-        if (varp->num_subfiles > 1)
-            *ndimsp = varp->ndims_org;
-        else
-#endif
-            *ndimsp = varp->ndims;
-    }
-    if (dimids != 0) {
-#ifdef ENABLE_SUBFILING
-        /* varp->dimids_org is already set during open or enddef */
-        if (varp->num_subfiles > 1)
-            memcpy(dimids, varp->dimids_org, (size_t)varp->ndims_org * SIZEOF_INT);
-        else
-#endif
-            memcpy(dimids, varp->dimids, (size_t)varp->ndims * SIZEOF_INT);
-    }
-    if (nattsp != 0)
-        *nattsp = (int) varp->attrs.ndefined;
-
-    return NC_NOERR;
-}
-
-
-/*----< ncmpi_inq_varname() >------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_varname(int   ncid,
-                  int   varid,
-                  char *name)
-{
-    int err;
-    NC *ncp=NULL;
-    NC_var *varp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* using NC_GLOBAL in varid is illegal for this API. See
-     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
-     */
-    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
-
-    varp = elem_NC_vararray(&ncp->vars, varid);
-    if (varp == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (name != NULL)
-        /* in PnetCDF, name->cp is always NULL character terminated */
-        strcpy(name, varp->name->cp);
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_vartype() >------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_vartype(int      ncid,
-                  int      varid,
-                  nc_type *typep)
-{
-    int err;
-    NC *ncp=NULL;
-    NC_var *varp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* using NC_GLOBAL in varid is illegal for this API. See
-     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
-     */
-    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
-
-    varp = elem_NC_vararray(&ncp->vars, varid);
-    if (varp == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (typep != NULL) *typep = varp->type;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_varndims() >-----------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_varndims(int ncid, int varid, int *ndimsp)
-{
-    int err;
-    NC *ncp=NULL;
-    NC_var *varp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* using NC_GLOBAL in varid is illegal for this API. See
-     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
-     */
-    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
-
-    varp = elem_NC_vararray(&ncp->vars, varid);
-    if (varp == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (ndimsp != 0) {
-#ifdef ENABLE_SUBFILNIG
-        if (varp->num_subfiles > 1)
-            *ndimsp = varp->ndims_org;
-        else
-#endif
-            *ndimsp = varp->ndims;
-    }
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_inq_vardimid() >-----------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_vardimid(int ncid, int varid, int *dimids)
-{
-    int err;
-    NC *ncp=NULL;
-    NC_var *varp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* using NC_GLOBAL in varid is illegal for this API. See
-     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
-     */
-    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
-
-    varp = elem_NC_vararray(&ncp->vars, varid);
-    if (varp == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (dimids != 0) {
-#ifdef ENABLE_SUBFILING
-        if (varp->num_subfiles > 1)
-            memcpy(dimids, varp->dimids_org, (size_t)varp->ndims_org * SIZEOF_INT);
-        else
-#endif
-            memcpy(dimids, varp->dimids, (size_t)varp->ndims * SIZEOF_INT);
-    }
-
-    return NC_NOERR;
-}
-
-
-/*----< ncmpi_inq_varnatts() >------------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_varnatts(int  ncid,
-                   int  varid,
-                   int *nattsp)
-{
-    int err;
-    NC *ncp=NULL;
-    NC_var *varp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (varid == NC_GLOBAL) {
-        if (nattsp != NULL)
-            *nattsp = (int) ncp->attrs.ndefined;
-        return NC_NOERR;
-    }
-
-    varp = elem_NC_vararray(&ncp->vars, varid);
-    if (varp == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (nattsp != NULL)
-        *nattsp = (int) varp->attrs.ndefined;
-
-    return NC_NOERR;
-}
-
-/*----< ncmpi_rename_var() >--------------------------------------------------*/
-/* This API is collective.
- * If the new name is longer than the old name, the netCDF file must be in
- * define mode. Otherwise, it can be called in either define or data mode.
- */
-int
-ncmpi_rename_var(int         ncid,
-                 int         varid,
-                 const char *newname)
-{
-    int err;
-    char *nnewname=NULL; /* normalized name */
-    NC *ncp=NULL;
-    NC_var *varp=NULL;
-    NC_string *newStr=NULL;
-
-    /* check whether ncid is valid */
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* check whether file's write permission */
-    if (NC_readonly(ncp)) {
-        DEBUG_ASSIGN_ERROR(err, NC_EPERM)
-        goto err_check;
-    }
-
-    /* check whether variable ID is valid */
-    err = ncmpii_NC_lookupvar(ncp, varid, &varp);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    if (newname == NULL || *newname == 0 || strlen(newname) > NC_MAX_NAME) {
-        DEBUG_ASSIGN_ERROR(err, NC_EBADNAME)
-        goto err_check;
-    }
-
-    /* check whether new name is legal */
-    err = ncmpii_NC_check_name(newname, ncp->format);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-
-    /* create a normalized character string */ 
-    nnewname = (char *)ncmpii_utf8proc_NFC((const unsigned char *)newname);
-    if (nnewname == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-    /* check whether new name is already in use, for this API (rename) the
-     * name should NOT already exist */
-    err = ncmpii_NC_findvar(&ncp->vars, nnewname, NULL);
-    if (err != NC_ENOTVAR) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENAMEINUSE)
-        goto err_check;
-    }
-
-    if (! NC_indef(ncp) && /* when file is in data mode */
-        varp->name->nchars < (MPI_Offset)strlen(nnewname)) {
-        /* must in define mode when newname is longer */
-        DEBUG_ASSIGN_ERROR(err, NC_ENOTINDEFINE)
-        goto err_check;
-    }
-
-    newStr = ncmpii_new_NC_string(strlen(nnewname), nnewname);
-    if (newStr == NULL) {
-        DEBUG_ASSIGN_ERROR(err, NC_ENOMEM)
-        goto err_check;
-    }
-
-#ifndef SEARCH_NAME_LINEARLY
-    /* update var name lookup table */
-    err = ncmpii_update_name_lookup_table(ncp->vars.nameT, varid,
-          ncp->vars.value[varid]->name->cp, nnewname);
-    if (err != NC_NOERR) {
-        DEBUG_TRACE_ERROR
-        goto err_check;
-    }
-#endif
-
-err_check:
-    if (nnewname != NULL) free(nnewname);
-    if (ncp->safe_mode) {
-        int root_varid, status, mpireturn;
-        char root_name[NC_MAX_NAME];
-
-        /* check if newname is consistent among all processes */
-        if (newname == NULL || *newname == 0)
-            root_name[0] = 0;
-        else
-            strncpy(root_name, newname, NC_MAX_NAME);
-        TRACE_COMM(MPI_Bcast)(root_name, NC_MAX_NAME, MPI_CHAR, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && strcmp(root_name, newname))
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_VAR_NAME)
-
-        /* check if varid is consistent across all processes */
-        root_varid = varid;
-        TRACE_COMM(MPI_Bcast)(&root_varid, 1, MPI_INT, 0, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Bcast");
-        if (err == NC_NOERR && root_varid != varid)
-            DEBUG_ASSIGN_ERROR(err, NC_EMULTIDEFINE_FNC_ARGS)
-
-        /* find min error code across processes */
-        TRACE_COMM(MPI_Allreduce)(&err, &status, 1, MPI_INT, MPI_MIN, ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce");
-        if (err == NC_NOERR) err = status;
-    }
-
-    if (err != NC_NOERR) {
-        if (newStr != NULL) ncmpii_free_NC_string(newStr);
-        return err;
-    }
-
-    assert(varp != NULL);
-
-    /* replace the old name with new name */
-    ncmpii_free_NC_string(varp->name);
-    varp->name = newStr;
-
-    if (! NC_indef(ncp)) { /* when file is in data mode */
-        /* Let root write the entire header to the file. Note that we cannot
-         * just update the variable name in its space occupied in the file
-         * header, because if the file space occupied by the name shrinks, all
-         * the metadata following it must be moved ahead.
-         */
-        err = ncmpii_write_header(ncp);
-        if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-    }
-
-    return err;
-}
-
-/* some utility functions for debugging purpose */
-
-/*----< ncmpi_inq_varoffset() >-----------------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_inq_varoffset(int         ncid,
-                    int         varid,
-                    MPI_Offset *offset)
-{
-    int     err;
-    NC     *ncp=NULL;
-    NC_var *varp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    /* using NC_GLOBAL in varid is illegal for this API. See
-     * http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2015/msg00196.html
-     */
-    if (varid == NC_GLOBAL) DEBUG_RETURN_ERROR(NC_EGLOBAL)
-
-    varp = elem_NC_vararray(&ncp->vars, varid);
-    if (varp == NULL) DEBUG_RETURN_ERROR(NC_ENOTVAR)
-
-    if (offset != NULL)
-        *offset = varp->begin;
-
-    return NC_NOERR;
-}
-
-#ifdef __DEBUG
-
-/*----< ncmpi_print_all_var_offsets() >---------------------------------------*/
-/* This is an independent subroutine */
-int
-ncmpi_print_all_var_offsets(int ncid) {
-    int i, err;
-    NC_var **vpp=NULL;
-    NC *ncp=NULL;
-
-    err = ncmpii_NC_check_id(ncid, &ncp);
-    if (err != NC_NOERR) DEBUG_RETURN_ERROR(err)
-
-    if (ncp->begin_var%1048576)
-        printf("%s header size (ncp->begin_var)=%lld MB + %lld\n",
-        ncp->nciop->path, ncp->begin_var/1048575, ncp->begin_var%1048576);
-    else
-        printf("%s header size (ncp->begin_var)=%lld MB\n",
-        ncp->nciop->path, ncp->begin_var/1048575);
-
-    vpp = ncp->vars.value;
-    for (i=0; i<ncp->vars.ndefined; i++, vpp++) {
-        char str[1024];
-        MPI_Offset off = (*vpp)->begin;
-        MPI_Offset rem = off % 1048576;;
-
-        if (IS_RECVAR(*vpp))
-            sprintf(str,"    Record variable \"%20s\": ",(*vpp)->name->cp);
-        else
-            sprintf(str,"non-record variable \"%20s\": ",(*vpp)->name->cp);
-
-        if (rem)
-            printf("%s offset=%12lld MB + %7lld len=%lld\n", str, off/1048576, rem,(*vpp)->len);
-        else
-            printf("%s offset=%12lld MB len=%lld\n", str, off/1048576,(*vpp)->len);
-    }
-    return NC_NOERR;
-}
-
-#endif
diff --git a/src/lib/vard.c b/src/lib/vard.c
deleted file mode 100644
index 95a3934..0000000
--- a/src/lib/vard.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: vard.c 2695 2016-12-10 17:02:11Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h> /* memcpy() */
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "ncmpidtype.h"
-#include "macro.h"
-#ifdef ENABLE_SUBFILING
-#include "subfile.h"
-#endif
-
-/* for write case, buf needs to swapped back if swapped previously */
-#define FINAL_CLEAN_UP {                                                       \
-    if (is_buf_swapped) /* byte-swap back to buf's original contents */        \
-        ncmpii_in_swapn(buf, bnelems, ncmpix_len_nctype(varp->type));          \
-                                                                               \
-    if (cbuf != NULL && cbuf != buf) NCI_Free(cbuf);                           \
-}
-
-/*----< ncmpii_getput_vard() >------------------------------------------------*/
-static int
-ncmpii_getput_vard(NC               *ncp,
-                   NC_var           *varp,
-                   MPI_Datatype      filetype,  /* data type of the variable */
-                   void             *buf,
-                   MPI_Offset        bufcount,
-                   MPI_Datatype      buftype,  /* data type of the bufer */
-                   int               rw_flag,
-                   int               io_method)
-{
-    void *cbuf=NULL;
-    int i, isderived, el_size, mpireturn, status=NC_NOERR, err=NC_NOERR;
-    int buftype_is_contig=0, filetype_is_contig=1, need_swap=0, is_buf_swapped=0;
-    int filetype_size=0, buftype_size=0;
-    MPI_Offset btnelems=0, bnelems=0, offset=0, orig_bufcount=bufcount;
-    MPI_Status mpistatus;
-    MPI_Datatype ptype, orig_buftype=buftype;
-    MPI_File fh=MPI_FILE_NULL;
-    MPI_Aint lb, extent=0, true_lb, true_extent;
-
-    if (filetype == MPI_DATATYPE_NULL) { /* this process does zero-length I/O */
-        if (io_method == INDEP_IO) return NC_NOERR;
-        bufcount = 0;
-        goto err_check;
-    }
-
-    if (bufcount == 0 && buftype != MPI_DATATYPE_NULL) {
-        /* if this process has nothing to read/write */
-        if (io_method == INDEP_IO) return NC_NOERR;
-        goto err_check;
-    }
-
-#ifdef ENABLE_SUBFILING
-    /* call a separate routine if variable is stored in subfiles */
-    if (varp->num_subfiles > 1) {
-        printf("This feature for subfiling is yet to implement\n");
-        DEBUG_RETURN_ERROR(NC_ENOTSUPPORT)
-    }
-#endif
-
-    /* PROBLEM: argument filetype_size is a 4-byte integer, cannot be used
-     * for largefiletypes */
-    mpireturn = MPI_Type_size(filetype, &filetype_size);
-    if (mpireturn != MPI_SUCCESS) {
-        err = ncmpii_handle_error(mpireturn, "MPI_Type_size");
-        goto err_check;
-    }
-
-    if (filetype_size == 0) { /* zero-length request */
-        if (io_method == INDEP_IO) return NC_NOERR;
-        bufcount = 0;
-        goto err_check;
-    }
-
-    MPI_Type_get_true_extent(filetype, &true_lb, &true_extent);
-    MPI_Type_get_extent(filetype, &lb, &extent);
-
-    if (!IS_RECVAR(varp)) {
-        /* for fixed-size variable, extent should not be larger than the
-         * variabe size */
-        MPI_Offset var_size = varp->xsz;
-        for (i=0; i<varp->ndims; i++)
-            var_size *= varp->shape[i];
-
-        if (extent > var_size) {
-            DEBUG_ASSIGN_ERROR(err, NC_ETYPESIZE)
-            goto err_check;
-        }
-    }
-
-    cbuf = (void*) buf;
-
-    /* find the element type of filetype */
-    err = ncmpii_dtype_decode(filetype, &ptype, &el_size, &btnelems,
-                              &isderived, &filetype_is_contig);
-    if (err != NC_NOERR) goto err_check;
-
-    /* element type of filetype must be the same as variable's type */
-    if (ptype != ncmpii_nc2mpitype(varp->type)) {
-        DEBUG_ASSIGN_ERROR(err, NC_ETYPE_MISMATCH)
-        goto err_check;
-    }
-
-    if (bufcount != (int)bufcount) {
-        DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
-        goto err_check;
-    }
-
-    if (buftype == MPI_DATATYPE_NULL) {
-        /* In this case, bufcount is ignored and will be set to the size of
-         * filetype. Note buf's data type must match the data type of variable
-         * defined in the file - no data conversion will be done.
-         */
-        /* set buftype to the variable's data type */
-        buftype = ncmpii_nc2mpitype(varp->type);
-        MPI_Type_size(buftype, &buftype_size);
-        bufcount = filetype_size / buftype_size;
-        buftype_is_contig = 1;
-        bnelems = bufcount;
-    }
-    else {
-        MPI_Offset outsize;
-
-        /* find whether buftype is contiguous */
-        err = ncmpii_dtype_decode(buftype, &ptype, &el_size, &btnelems,
-                                  &isderived, &buftype_is_contig);
-        if (err != NC_NOERR) goto err_check;
-
-        err = NCMPII_ECHAR(varp->type, ptype);
-        if (err != NC_NOERR) goto err_check;
-
-        if (btnelems != (int)btnelems) {
-            DEBUG_ASSIGN_ERROR(err, NC_EINTOVERFLOW)
-            goto err_check;
-        }
-
-        bnelems      = bufcount * btnelems;
-        buftype_size = el_size  * (int)btnelems;
-        outsize      = bufcount * buftype_size;
-
-        if (outsize != filetype_size) {
-            DEBUG_ASSIGN_ERROR(err, NC_ETYPESIZE_MISMATCH)
-            goto err_check;
-        }
-
-        /* if buf is not contiguous, we need to pack it to one, cbuf */
-        if (!buftype_is_contig && bnelems > 0) {
-            cbuf = NCI_Malloc((size_t)outsize);
-
-            if (rw_flag == WRITE_REQ) {
-                /* pack buf into cbuf, a contiguous buffer */
-                int position = 0;
-                MPI_Pack(buf, (int)bufcount, buftype, cbuf, (int)outsize, &position,
-                         MPI_COMM_SELF);
-            }
-            buftype = ptype;
-            bufcount *= bnelems;
-            buftype_size = el_size;
-        }
-    }
-
-    /* Check if we need byte swap cbuf in-place or (into cbuf) */
-    need_swap = ncmpii_need_swap(varp->type, ptype);
-    if (need_swap) {
-        if (rw_flag == WRITE_REQ) {
-#ifdef DISABLE_IN_PLACE_SWAP
-            if (cbuf == buf) {
-#else
-            if (cbuf == buf && filetype_size <= NC_BYTE_SWAP_BUFFER_SIZE) {
-#endif
-                /* allocate cbuf and copy buf to cbuf, cbuf is to be freed */
-                cbuf = NCI_Malloc((size_t)filetype_size);
-                memcpy(cbuf, buf, (size_t)filetype_size);
-            }
-            /* perform array in-place byte swap on cbuf */
-            ncmpii_in_swapn(cbuf, bnelems, ncmpix_len_nctype(varp->type));
-            is_buf_swapped = (cbuf == buf) ? 1 : 0;
-            /* is_buf_swapped indicates if the contents of the original user
-             * buffer, buf, have been changed, i.e. byte swapped. */
-        }
-    }
-    /* no type conversion */
-
-    /* set fileview's displacement to the variable's starting file offset */
-    offset = varp->begin;
-
-err_check:
-    /* check API error from any proc before going into a collective call.
-     * optimization: to avoid MPI_Allreduce to check parameters at
-     * every call, we assume caller does the right thing most of the
-     * time.  If caller passed in bad parameters, we'll still conduct a
-     * zero-byte operation (everyone has to participate in the
-     * collective I/O call) but return error */
-    if (err != NC_NOERR || bufcount == 0 || filetype_size == 0) {
-        if (io_method == INDEP_IO) {
-            FINAL_CLEAN_UP  /* swap back put buffer and free temp buffers */
-            return err;
-        }
-        /* else for COLL_IO, must participate successive collective calls */
-        offset = 0;
-        bufcount = 0;
-    }
-    status = err;
-
-    if (io_method == COLL_IO)
-        fh = ncp->nciop->collective_fh;
-    else
-        fh = ncp->nciop->independent_fh;
-
-    /* set the file view */
-    err = ncmpii_file_set_view(ncp, fh, &offset, filetype);
-    if (err != NC_NOERR) {
-        bufcount = 0; /* skip this request */
-        if (status == NC_NOERR) status = err;
-    }
-
-    if (rw_flag == WRITE_REQ) {
-        if (io_method == COLL_IO) {
-            TRACE_IO(MPI_File_write_at_all)(fh, offset, cbuf, (int)bufcount, buftype, &mpistatus);
-            if (mpireturn != MPI_SUCCESS)
-                return ncmpii_handle_error(mpireturn, "MPI_File_write_at_all");
-            else
-                ncp->nciop->put_size += bufcount * buftype_size;
-        }
-        else { /* io_method == INDEP_IO */
-            TRACE_IO(MPI_File_write_at)(fh, offset, cbuf, (int)bufcount, buftype, &mpistatus);
-            if (mpireturn != MPI_SUCCESS)
-                return ncmpii_handle_error(mpireturn, "MPI_File_write_at");
-            else
-                ncp->nciop->put_size += bufcount * buftype_size;
-        }
-    }
-    else {  /* rw_flag == READ_REQ */
-        if (io_method == COLL_IO) {
-            TRACE_IO(MPI_File_read_at_all)(fh, offset, cbuf, (int)bufcount, buftype, &mpistatus);
-            if (mpireturn != MPI_SUCCESS)
-                return ncmpii_handle_error(mpireturn, "MPI_File_read_at_all");
-            else
-                ncp->nciop->get_size += bufcount * buftype_size;
-        }
-        else { /* io_method == INDEP_IO */
-            TRACE_IO(MPI_File_read_at)(fh, offset, cbuf, (int)bufcount, buftype, &mpistatus);
-            if (mpireturn != MPI_SUCCESS)
-                return ncmpii_handle_error(mpireturn, "MPI_File_read_at");
-            else
-                ncp->nciop->get_size += bufcount * buftype_size;
-        }
-    }
-
-    /* No longer need to reset the file view, as the root's fileview includes
-     * the whole file header.
-     TRACE_IO(MPI_File_set_view)(fh, 0, MPI_BYTE, MPI_BYTE, "native", MPI_INFO_NULL);
-     */
-
-    if (rw_flag == READ_REQ) {
-        if (need_swap)
-            /* perform array in-place byte swap on cbuf */
-            ncmpii_in_swapn(cbuf, bnelems, ncmpix_len_nctype(varp->type));
-
-        if (!buftype_is_contig && bnelems > 0) {
-            /* unpack cbuf, a contiguous buffer, to buf using buftype */
-            int position = 0;
-            MPI_Offset insize = bnelems * el_size;
-            if (insize != (int)insize) {
-                if (status == NC_NOERR) DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
-            }
-            else
-                MPI_Unpack(cbuf, (int)insize, &position, buf, (int)orig_bufcount,
-                           orig_buftype, MPI_COMM_SELF);
-        }
-    }
-    else { /* WRITE_REQ */
-        if (IS_RECVAR(varp)) {
-            /* update header's number of records in memory */
-            MPI_Offset new_numrecs;
-
-            /* since filetype's LB is required to be == varp->begin for vard
-             * API, we can simply use extent to calculate new_numrecs */
-            new_numrecs = extent / ncp->recsize;
-            if (extent % ncp->recsize) new_numrecs++;
-
-            if (io_method == INDEP_IO) {
-                /* For independent put, we delay the sync for numrecs until
-                 * the next collective call, such as end_indep(), sync(),
-                 * enddef(), or close(). This is because if we update numrecs
-                 * to file now, race condition can happen. Note numrecs in
-                 * memory may be inconsistent and obsolete till then.
-                 */
-                if (ncp->numrecs < new_numrecs) {
-                    ncp->numrecs = new_numrecs;
-                    set_NC_ndirty(ncp);
-                }
-            }
-            else { /* COLL_IO: sync numrecs in memory and file */
-                err = ncmpii_sync_numrecs(ncp, new_numrecs);
-                if (err != NC_NOERR && status == NC_NOERR) status = err;
-            }
-        }
-
-        if (NC_doFsync(ncp)) { /* NC_SHARE is set */
-            TRACE_IO(MPI_File_sync)(fh);
-            if (io_method == COLL_IO)
-                TRACE_COMM(MPI_Barrier)(ncp->nciop->comm);
-        }
-    }
-
-    FINAL_CLEAN_UP  /* swap back the put buffer and free temp buffers */
-
-    return status;
-}
-
-/*----< ncmpi_get_vard() >---------------------------------------------------*/
-int
-ncmpi_get_vard(int           ncid,
-               int           varid,
-               MPI_Datatype  filetype,  /* access layout to the variable in file */
-               void         *buf,
-               MPI_Offset    bufcount,
-               MPI_Datatype  buftype)   /* data type of the buffer */
-{
-    int     status;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    status = ncmpii_sanity_check(ncid, varid, NULL, NULL, NULL, bufcount,
-                                 buftype, API_VARD, 1, 1, READ_REQ, INDEP_IO,
-                                 &ncp, &varp);
-    if (status != NC_NOERR) return status;
-
-    return ncmpii_getput_vard(ncp, varp, filetype, buf, bufcount, buftype,
-                              READ_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_get_vard_all() >-----------------------------------------------*/
-int
-ncmpi_get_vard_all(int           ncid,
-                   int           varid,
-                   MPI_Datatype  filetype,  /* access layout to the variable in file */
-                   void         *buf,
-                   MPI_Offset    bufcount,
-                   MPI_Datatype  buftype)   /* data type of the buffer */
-{
-    int     err, status;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    status = ncmpii_sanity_check(ncid, varid, NULL, NULL, NULL, bufcount,
-                                 buftype, API_VARD, 1, 1, READ_REQ, COLL_IO,
-                                 &ncp, &varp);
-    if (status != NC_NOERR) {
-        if (status == NC_EBADID    || status == NC_EPERM ||
-            status == NC_EINDEFINE || status == NC_EINDEP)
-            return status; /* fatal error, cannot continue */
-
-        /* for collective API, participate the collective I/O with zero-length
-         * request for this process */
-        err = ncmpii_getput_zero_req(ncp, READ_REQ);
-        assert(err == NC_NOERR);
-
-        /* return the error code from sanity check */
-        return status;
-    }
-
-    return ncmpii_getput_vard(ncp, varp, filetype, buf, bufcount, buftype,
-                              READ_REQ, COLL_IO);
-}
-
-/*----< ncmpi_put_vard() >---------------------------------------------------*/
-int
-ncmpi_put_vard(int           ncid,
-               int           varid,
-               MPI_Datatype  filetype,  /* access layout to the variable in file */
-               const void   *buf,
-               MPI_Offset    bufcount,
-               MPI_Datatype  buftype)   /* data type of the buffer */
-{
-    int     status;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    status = ncmpii_sanity_check(ncid, varid, NULL, NULL, NULL, bufcount,
-                                 buftype, API_VARD, 1, 1, WRITE_REQ, INDEP_IO,
-                                 &ncp, &varp);
-    if (status != NC_NOERR) return status;
-
-    return ncmpii_getput_vard(ncp, varp, filetype, (void*)buf, bufcount,
-                              buftype, WRITE_REQ, INDEP_IO);
-}
-
-/*----< ncmpi_put_vard_all() >-----------------------------------------------*/
-int
-ncmpi_put_vard_all(int           ncid,
-                   int           varid,
-                   MPI_Datatype  filetype,  /* access layout to the variable in file */
-                   const void   *buf,
-                   MPI_Offset    bufcount,
-                   MPI_Datatype  buftype)   /* data type of the buffer */
-{
-    int     err, status;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    status = ncmpii_sanity_check(ncid, varid, NULL, NULL, NULL, bufcount,
-                                 buftype, API_VARD, 1, 1, WRITE_REQ, COLL_IO,
-                                 &ncp, &varp);
-    if (status != NC_NOERR) {
-        if (status == NC_EBADID    || status == NC_EPERM ||
-            status == NC_EINDEFINE || status == NC_EINDEP)
-            return status; /* fatal error, cannot continue */
-
-        /* for collective API, participate the collective I/O with zero-length
-         * request for this process */
-        err = ncmpii_getput_zero_req(ncp, WRITE_REQ);
-        assert(err == NC_NOERR);
-
-        /* return the error code from sanity check */
-        return status;
-    }
-
-    return ncmpii_getput_vard(ncp, varp, filetype, (void*)buf, bufcount,
-                              buftype, WRITE_REQ, COLL_IO);
-}
diff --git a/src/lib/varn.m4 b/src/lib/varn.m4
deleted file mode 100644
index d4664f7..0000000
--- a/src/lib/varn.m4
+++ /dev/null
@@ -1,368 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-/* Do not edit this file. It is produced from the corresponding .m4 source */
-dnl
-/*
- *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
- *  See COPYRIGHT notice in top-level directory.
- */
-/* $Id: varn.m4 2695 2016-12-10 17:02:11Z wkliao $ */
-
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
-#endif
-
-#include <stdio.h>
-#include <unistd.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <assert.h>
-
-#include <mpi.h>
-
-#include "nc.h"
-#include "ncx.h"
-#include "ncmpidtype.h"
-#include "macro.h"
-
-include(`foreach.m4')
-include(`utils.m4')
-
-/* ncmpi_get/put_varn_<type>_<mode> API:
- *    type:   data type of I/O buffer, buf
- *    mode:   independent (<nond>) or collective (_all)
- *
- * arguments:
- *    num:    number of start and count pairs
- *    starts: an 2D array of size [num][ndims]. Each starts[i][*] indicates
- *            the starting array indices for a subarray request. ndims is
- *            the number of dimensions of the defined netCDF variable.
- *    counts: an 2D array of size [num][ndims]. Each counts[i][*] indicates
- *            the number of array elements to be accessed. This argument
- *            can be NULL, equivalent to counts with all 1s.
- *    bufcount and buftype: these 2 arguments are only available for flexible
- *            APIs, indicating the I/O buffer memory layout. When buftype is
- *            MPI_DATATYPE_NULL, bufcount is ignored and the data type of buf
- *            is considered matched the variable data type defined in the file.
- */
-
-static int
-ncmpii_getput_varn(NC                *ncp,
-                   NC_var            *varp,
-                   int                num,
-                   MPI_Offset* const *starts,  /* [num][varp->ndims] */
-                   MPI_Offset* const *counts,  /* [num][varp->ndims] */
-                   void              *buf,
-                   MPI_Offset         bufcount,
-                   MPI_Datatype       buftype,   /* data type of the buffer */
-                   int                rw_flag,
-                   int                io_method);
-
-define(`BufConst',  `ifelse(`$1', `put', `const')')dnl
-
-dnl
-dnl VARN_FLEXIBLE(ncid, varid, num starts, counts, buf, bufcount, buftype)
-dnl
-define(`VARN_FLEXIBLE',dnl
-`dnl
-/*----< ncmpi_$1_varn$2() >---------------------------------------------------*/
-int
-ncmpi_$1_varn$2(int                ncid,
-                int                varid,
-                int                num,
-                MPI_Offset* const *starts,
-                MPI_Offset* const *counts,
-                BufConst($1) void *buf,
-                MPI_Offset         bufcount,
-                MPI_Datatype       buftype)
-{
-    int     err, status;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    status = ncmpii_sanity_check(ncid, varid, NULL, NULL, NULL, bufcount,
-                                 buftype, API_VARN, 1, 1, ReadWrite($1),
-                                 CollIndep($2), &ncp, &varp);
-    if (status != NC_NOERR) {
-        if (CollIndep($2) == INDEP_IO ||
-            status == NC_EBADID ||
-            status == NC_EPERM ||
-            status == NC_EINDEFINE ||
-            status == NC_EINDEP ||
-            status == NC_ENOTINDEP)
-            return status;  /* fatal error, cannot continue */
-
-        /* for collective API, participate the collective I/O with zero-length
-         * request for this process */
-        err = ncmpii_getput_zero_req(ncp, ReadWrite($1));
-        assert(err == NC_NOERR);
-
-        /* return the error code from sanity check */
-        return status;
-    }
-
-    return ncmpii_getput_varn(ncp, varp, num, starts, counts, (void*)buf,
-                              bufcount, buftype, ReadWrite($1), CollIndep($2));
-}
-')dnl
-
-dnl PnetCDF flexible APIs
-VARN_FLEXIBLE(put)
-VARN_FLEXIBLE(put, _all)
-VARN_FLEXIBLE(get)
-VARN_FLEXIBLE(get, _all)
-
-dnl
-dnl VARN(ncid, varid, starts, counts, buf)
-dnl
-define(`VARN',dnl
-`dnl
-/*----< ncmpi_$1_varn_$3$2() >------------------------------------------------*/
-int
-ncmpi_$1_varn_$3$2(int                ncid,
-                   int                varid,
-                   int                num,
-                   MPI_Offset* const *starts,
-                   MPI_Offset* const *counts,
-                   BufConst($1) $4   *buf)
-{
-    int     err, status;
-    NC     *ncp;
-    NC_var *varp=NULL;
-
-    status = ncmpii_sanity_check(ncid, varid, NULL, NULL, NULL, 0,
-                                 ITYPE2MPI($3), API_VARN, 0, 1, ReadWrite($1),
-                                 CollIndep($2), &ncp, &varp);
-    if (status != NC_NOERR) {
-        if (CollIndep($2) == INDEP_IO ||
-            status == NC_EBADID ||
-            status == NC_EPERM ||
-            status == NC_EINDEFINE ||
-            status == NC_EINDEP ||
-            status == NC_ENOTINDEP)
-            return status;  /* fatal error, cannot continue */
-
-        /* for collective API, participate the collective I/O with zero-length
-         * request for this process */
-        err = ncmpii_getput_zero_req(ncp, ReadWrite($1));
-        assert(err == NC_NOERR);
-
-        /* return the error code from sanity check */
-        return status;
-    }
-
-    /* set bufcount to -1 indicating non-flexible API */
-    return ncmpii_getput_varn(ncp, varp, num, starts, counts, (void*)buf,
-                              -1, $5, ReadWrite($1), CollIndep($2));
-}
-')dnl
-dnl
-foreach(`putget', (put, get),
-        `foreach(`collindep', (, _all),
-                 `foreach(`itype', (ITYPE_LIST),
-                          `VARN(putget,collindep,itype,FUNC2ITYPE(itype),ITYPE2MPI(itype))
-')')')
-
-/*----< ncmpii_getput_varn() >------------------------------------------------*/
-static int
-ncmpii_getput_varn(NC                *ncp,
-                   NC_var            *varp,
-                   int                num,
-                   MPI_Offset* const *starts,  /* [num][varp->ndims] */
-                   MPI_Offset* const *counts,  /* [num][varp->ndims] */
-                   void              *buf,
-                   MPI_Offset         bufcount,
-                   MPI_Datatype       buftype,   /* data type of the buffer */
-                   int                rw_flag,   /* WRITE_REQ or READ_REQ */
-                   int                io_method) /* COLL_IO or INDEP_IO */
-{
-    int i, j, el_size, status=NC_NOERR, min_st, err, free_cbuf=0;
-    int req_id=NC_REQ_NULL, st, isSameGroup, position;
-    void *cbuf=NULL;
-    char *bufp;
-    MPI_Offset packsize=0, **_counts=NULL;
-    MPI_Datatype ptype;
-
-    /* check for zero-size request */
-    if (num == 0 || bufcount == 0) goto err_check;
-
-    /* it is illegal for starts to be NULL */
-    if (starts == NULL) {
-        DEBUG_ASSIGN_ERROR(status, NC_ENULLSTART)
-        goto err_check;
-    }
-    else { /* it is illegal for any starts[i] to be NULL */
-        for (i=0; i<num; i++) {
-            if (starts[i] == NULL) {
-                DEBUG_ASSIGN_ERROR(status, NC_ENULLSTART)
-                goto err_check;
-            }
-        }
-    }
-
-    if (buftype == MPI_DATATYPE_NULL) {
-        /* In this case, bufcount is ignored and will be recalculated to match
-         * counts[]. Note buf's data type must match the data type of
-         * variable defined in the file - no data conversion will be done.
-         */
-        if (counts == NULL)
-            bufcount = 1;
-        else {
-            bufcount = 0;
-            for (j=0; j<num; j++) {
-                MPI_Offset bufcount_j = 1;
-                if (counts[i] == NULL) {
-                    DEBUG_ASSIGN_ERROR(status, NC_ENULLCOUNT)
-                    goto err_check;
-                }
-                for (i=0; i<varp->ndims; i++) {
-                    if (counts[j][i] < 0) { /* no negative counts[][] */
-                        DEBUG_ASSIGN_ERROR(status, NC_ENEGATIVECNT)
-                        goto err_check;
-                    }
-                    bufcount_j *= counts[j][i];
-                }
-                bufcount += bufcount_j;
-            }
-        }
-        /* assign buftype match with the variable's data type */
-        buftype = ncmpii_nc2mpitype(varp->type);
-    }
-
-    cbuf = buf;
-    if (bufcount > 0) { /* flexible API is used */
-        /* pack buf into cbuf, a contiguous buffer */
-        int isderived, iscontig_of_ptypes;
-        MPI_Offset bnelems=0;
-
-        /* ptype (primitive MPI data type) from buftype
-         * el_size is the element size of ptype
-         * bnelems is the total number of ptype elements in buftype
-         */
-        status = ncmpii_dtype_decode(buftype, &ptype, &el_size, &bnelems,
-                                     &isderived, &iscontig_of_ptypes);
-
-        if (status != NC_NOERR) goto err_check;
-
-        if (bufcount != (int)bufcount) {
-            DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
-            goto err_check;
-        }
-
-        /* check if buftype is contiguous, if not, pack to one, cbuf */
-        if (! iscontig_of_ptypes && bnelems > 0) {
-            position = 0;
-            packsize  = bnelems*el_size;
-            if (packsize != (int)packsize) {
-                DEBUG_ASSIGN_ERROR(status, NC_EINTOVERFLOW)
-                goto err_check;
-            }
-            cbuf = NCI_Malloc((size_t)packsize);
-            free_cbuf = 1;
-            if (rw_flag == WRITE_REQ)
-                MPI_Pack(buf, (int)bufcount, buftype, cbuf, (int)packsize,
-                         &position, MPI_COMM_SELF);
-        }
-    }
-    else {
-        /* this subroutine is called from a high-level API */
-        status = NCMPII_ECHAR(varp->type, buftype);
-        if (status != NC_NOERR) goto err_check;
-
-        ptype = buftype;
-        el_size = ncmpix_len_nctype(varp->type);
-    }
-
-    /* We allow counts == NULL and treat this the same as all 1s */
-    if (counts == NULL) {
-        _counts    = (MPI_Offset**) NCI_Malloc((size_t)num * sizeof(MPI_Offset*));
-        _counts[0] = (MPI_Offset*)  NCI_Malloc((size_t)(num * varp->ndims *
-                                                        SIZEOF_MPI_OFFSET));
-        for (i=1; i<num; i++)
-            _counts[i] = _counts[i-1] + varp->ndims;
-        for (i=0; i<num; i++)
-            for (j=0; j<varp->ndims; j++)
-                _counts[i][j] = 1;
-    }
-    else
-        _counts = (MPI_Offset**) counts;
-
-    /* break buf into num pieces */
-    isSameGroup=0;
-    bufp = (char*)cbuf;
-    for (i=0; i<num; i++) {
-        MPI_Offset buflen;
-        for (buflen=1, j=0; j<varp->ndims; j++) {
-            if (_counts[i][j] < 0) { /* any negative counts[][] is illegal */
-                DEBUG_ASSIGN_ERROR(status, NC_ENEGATIVECNT)
-                goto err_check;
-            }
-            buflen *= _counts[i][j];
-        }
-        if (buflen == 0) continue;
-        status = ncmpii_igetput_varm(ncp, varp, starts[i], _counts[i], NULL,
-                                     NULL, bufp, buflen, ptype, &req_id,
-                                     rw_flag, 0, isSameGroup);
-        if (status != NC_NOERR) goto err_check;
-
-        /* use isSamegroup so we end up with one nonblocking request (only the
-         * first request gets a request ID back, the rest reuse the same ID.
-         * This single ID represents num nonblocking requests */
-        isSameGroup=1;
-        bufp += buflen * el_size;
-    }
-
-err_check:
-    if (_counts != NULL && _counts != counts) {
-        NCI_Free(_counts[0]);
-        NCI_Free(_counts);
-    }
-
-    if (ncp->safe_mode == 1 && io_method == COLL_IO) {
-        int mpireturn;
-        TRACE_COMM(MPI_Allreduce)(&status, &min_st, 1, MPI_INT, MPI_MIN,
-                                  ncp->nciop->comm);
-        if (mpireturn != MPI_SUCCESS)
-            return ncmpii_handle_error(mpireturn, "MPI_Allreduce"); 
-
-        if (min_st != NC_NOERR) {
-            if (req_id != NC_REQ_NULL) /* cancel pending nonblocking request */
-                ncmpii_cancel(ncp, 1, &req_id, &st);
-            if (free_cbuf) NCI_Free(cbuf);
-            return status;
-        }
-    }
-
-    if (io_method == INDEP_IO && status != NC_NOERR) {
-        if (req_id != NC_REQ_NULL) /* cancel pending nonblocking request */
-            ncmpii_cancel(ncp, 1, &req_id, &st);
-        if (free_cbuf) NCI_Free(cbuf);
-        return status;
-    }
-
-    num = 1;
-    if (status != NC_NOERR)
-        /* This can only be reached for COLL_IO and safe_mode == 0.
-           Set num=0 just so this process can participate the collective
-           calls in wait_all */
-        num = 0;
-
-    err = ncmpii_wait(ncp, io_method, num, &req_id, &st);
-
-    /* unpack to user buf, if buftype is noncontiguous */
-    if (status == NC_NOERR && rw_flag == READ_REQ && free_cbuf) {
-        position = 0;
-        MPI_Unpack(cbuf, (int)packsize, &position, buf, (int)bufcount, buftype,
-                   MPI_COMM_SELF);
-    }
-
-    /* return the first error, if there is one */
-    if (status == NC_NOERR) status = err;
-    if (status == NC_NOERR) status = st;
-
-    if (free_cbuf) NCI_Free(cbuf);
-
-    return status;
-}
diff --git a/src/libcxx/Makefile.in b/src/libcxx/Makefile.in
deleted file mode 100755
index e5b428e..0000000
--- a/src/libcxx/Makefile.in
+++ /dev/null
@@ -1,89 +0,0 @@
-#
-# Copyright (C) 2014, Northwestern University and Argonne National Laboratory
-# See COPYRIGHT notice in top-level directory.
-#
-# $Id: Makefile.in 2659 2016-11-27 22:15:33Z wkliao $
-#
-# @configure_input@
-
-srcdir = @srcdir@
-VPATH  = @srcdir@
-
-# generated by configure, so it's in the build dir, not srcdirr
-include ../../macros.make
-
-# For VPATH build:
-# Add ../lib into search path because ../lib/pnetcdf.h is created at the
-# configure time and included by all C++ source files.
-INCLUDES = -I../lib
-
-CXX_HEADER = pnetcdf
-
-LIBRARY = ../lib/libpnetcdf.a
-
-# Note the file order is important
-LIBS_HEADERS = ncmpi_notyet.h \
-               ncmpiCheck.h \
-               ncmpiType.h \
-               ncmpiAtt.h \
-               ncmpiEnumType.h \
-               ncmpiGroupAtt.h \
-               ncmpiGroup.h \
-               ncmpiByte.h \
-               ncmpiChar.h \
-               ncmpiCompoundType.h \
-               ncmpiDouble.h \
-               ncmpiFloat.h \
-               ncmpiInt.h \
-               ncmpiInt64.h \
-               ncmpiOpaqueType.h \
-               ncmpiShort.h \
-               ncmpiUbyte.h \
-               ncmpiUint.h \
-               ncmpiUint64.h \
-               ncmpiUshort.h \
-               ncmpiException.h \
-               ncmpiDim.h \
-               ncmpiFile.h \
-               ncmpiVarAtt.h \
-               ncmpiVar.h \
-               ncmpiVlenType.h
-
-LIB_SRCS   = $(LIBS_HEADERS:.h=.cpp)
-
-LIB_OBJS   = $(LIBS_HEADERS:.h=.o)
-
-PACKING_LIST = $(LIBS_HEADERS) $(LIB_SRCS) pnetcdf.in \
-               Makefile.in depend
-
-GARBAGE      = $(LIB_OBJS) $(CXX_HEADER)
-DIST_GARBAGE =
-
-all: $(CXX_HEADER) $(LIBRARY)
-
-objs: $(CXX_HEADER) $(LIB_OBJS)
-
-library:
-	$(AR) $(ARFLAGS) $(LIBRARY) $(LIB_OBJS)
-	$(RANLIB) $(LIBRARY)
-
-$(LIBRARY): $(LIB_OBJS)
-	$(AR) $(ARFLAGS) $(LIBRARY) $(LIB_OBJS)
-	$(RANLIB) $(LIBRARY)
-
-$(CXX_HEADER): $(LIBS_HEADERS)
-	cp -f $(srcdir)/pnetcdf.in $(CXX_HEADER)
-	set -e; for i in $(LIBS_HEADERS); do ( \
-	sed -e '/#ifndef/d' -e '/#define/d' -e '/#endif/d' -e '/#include/d' $(srcdir)/$$i >> $(CXX_HEADER); \
-	) ; done
-
-install:
-	$(INSTALL) -d -m 755 $(INCDIR)
-	$(INSTALL_DATA) $(CXX_HEADER) $(INCDIR)
-
-uninstall:
-	$(RM) -f $(INCDIR)/$(CXX_HEADER)
-
-include $(srcdir)/depend
-include $(srcdir)/../../rules.make
-
diff --git a/src/libcxx/depend b/src/libcxx/depend
deleted file mode 100644
index d2e244f..0000000
--- a/src/libcxx/depend
+++ /dev/null
@@ -1,67 +0,0 @@
-ncmpi_notyet.o: ncmpi_notyet.cpp ../lib/pnetcdf.h ncmpi_notyet.h
-ncmpiCheck.o: ncmpiCheck.cpp ../lib/pnetcdf.h ncmpiException.h
-ncmpiType.o: ncmpiType.cpp ncmpiType.h ../lib/pnetcdf.h \
-  ncmpiGroup.h ncmpiEnumType.h ncmpiCheck.h ncmpi_notyet.h \
-  ncmpiGroupAtt.h ncmpiAtt.h ncmpiException.h
-ncmpiAtt.o: ncmpiAtt.cpp ncmpiAtt.h ncmpiType.h ../lib/pnetcdf.h \
-  ncmpiException.h ncmpiGroup.h ncmpiEnumType.h ncmpiCheck.h \
-  ncmpi_notyet.h ncmpiGroupAtt.h
-ncmpiEnumType.o: ncmpiEnumType.cpp ncmpiEnumType.h ncmpiType.h \
-  ../lib/pnetcdf.h ncmpiCheck.h ncmpi_notyet.h \
-  ncmpiGroup.h ncmpiGroupAtt.h ncmpiAtt.h ncmpiException.h ncmpiByte.h \
-  ncmpiUbyte.h ncmpiChar.h ncmpiShort.h ncmpiUshort.h ncmpiInt.h \
-  ncmpiUint.h ncmpiInt64.h ncmpiUint64.h ncmpiFloat.h ncmpiDouble.h
-ncmpiGroupAtt.o: ncmpiGroupAtt.cpp ncmpiGroupAtt.h ncmpiAtt.h ncmpiType.h \
-  ../lib/pnetcdf.h ncmpiException.h ncmpiGroup.h \
-  ncmpiEnumType.h ncmpiCheck.h ncmpi_notyet.h
-ncmpiGroup.o: ncmpiGroup.cpp ncmpiGroup.h ncmpiType.h ../lib/pnetcdf.h \
-  ncmpiEnumType.h ncmpiCheck.h ncmpi_notyet.h ncmpiGroupAtt.h ncmpiAtt.h \
-  ncmpiException.h ncmpiVar.h ncmpiVarAtt.h ncmpiByte.h ncmpiUbyte.h \
-  ncmpiChar.h ncmpiShort.h ncmpiUshort.h ncmpiInt.h ncmpiUint.h \
-  ncmpiInt64.h ncmpiUint64.h ncmpiFloat.h ncmpiDouble.h \
-  ncmpiDim.h ncmpiVlenType.h ncmpiCompoundType.h ncmpiOpaqueType.h \
-  ncmpiException.h
-ncmpiByte.o: ncmpiByte.cpp ncmpiByte.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiChar.o: ncmpiChar.cpp ncmpiChar.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiCompoundType.o: ncmpiCompoundType.cpp ncmpiGroup.h ncmpiType.h \
-  ../lib/pnetcdf.h ncmpiEnumType.h ncmpiCheck.h \
-  ncmpi_notyet.h ncmpiGroupAtt.h ncmpiAtt.h ncmpiException.h \
-  ncmpiCompoundType.h ncmpiByte.h ncmpiUbyte.h ncmpiChar.h ncmpiShort.h \
-  ncmpiUshort.h ncmpiInt.h ncmpiUint.h ncmpiInt64.h ncmpiUint64.h \
-  ncmpiFloat.h ncmpiDouble.h
-ncmpiDouble.o: ncmpiDouble.cpp ncmpiDouble.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiFloat.o: ncmpiFloat.cpp ncmpiFloat.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiInt.o: ncmpiInt.cpp ncmpiInt.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiInt64.o: ncmpiInt64.cpp ncmpiInt64.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiOpaqueType.o: ncmpiOpaqueType.cpp ncmpiOpaqueType.h ncmpiType.h \
-  ../lib/pnetcdf.h ncmpiGroup.h ncmpiEnumType.h \
-  ncmpiCheck.h ncmpi_notyet.h ncmpiGroupAtt.h ncmpiAtt.h ncmpiException.h
-ncmpiShort.o: ncmpiShort.cpp ncmpiShort.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiUbyte.o: ncmpiUbyte.cpp ncmpiUbyte.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiUint.o: ncmpiUint.cpp ncmpiUint.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiUint64.o: ncmpiUint64.cpp ncmpiUint64.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiUshort.o: ncmpiUshort.cpp ncmpiUshort.h ncmpiType.h ../lib/pnetcdf.h
-ncmpiException.o: ncmpiException.cpp ncmpiException.h ../lib/pnetcdf.h
-ncmpiDim.o: ncmpiDim.cpp ncmpiDim.h ncmpiGroup.h ncmpiType.h \
-  ../lib/pnetcdf.h ncmpiEnumType.h ncmpiCheck.h ncmpi_notyet.h \
-  ncmpiGroupAtt.h ncmpiAtt.h ncmpiException.h
-ncmpiFile.o: ncmpiFile.cpp ncmpiFile.h ncmpiGroup.h ncmpiType.h \
-  ../lib/pnetcdf.h ncmpiEnumType.h ncmpiCheck.h \
-  ncmpi_notyet.h ncmpiGroupAtt.h ncmpiAtt.h ncmpiException.h ncmpiByte.h
-ncmpiVarAtt.o: ncmpiVarAtt.cpp ncmpiVar.h ../lib/pnetcdf.h \
-  ncmpiVarAtt.h ncmpiAtt.h ncmpiType.h ncmpiException.h ncmpiGroup.h \
-  ncmpiEnumType.h ncmpiCheck.h ncmpi_notyet.h ncmpiGroupAtt.h ncmpiByte.h \
-  ncmpiUbyte.h ncmpiChar.h ncmpiShort.h ncmpiUshort.h ncmpiInt.h \
-  ncmpiUint.h ncmpiInt64.h ncmpiUint64.h ncmpiFloat.h ncmpiDouble.h
-ncmpiVar.o: ncmpiVar.cpp ncmpiVarAtt.h ncmpiAtt.h ncmpiType.h \
-  ../lib/pnetcdf.h ncmpiException.h ncmpiDim.h \
-  ncmpiVar.h ncmpiGroup.h ncmpiEnumType.h ncmpiCheck.h ncmpi_notyet.h \
-  ncmpiGroupAtt.h ncmpiByte.h ncmpiUbyte.h ncmpiChar.h ncmpiShort.h \
-  ncmpiUshort.h ncmpiInt.h ncmpiUint.h ncmpiInt64.h ncmpiUint64.h \
-  ncmpiFloat.h ncmpiDouble.h
-ncmpiVlenType.o: ncmpiVlenType.cpp ncmpiVlenType.h ncmpiType.h \
-  ../lib/pnetcdf.h ncmpiGroup.h ncmpiEnumType.h \
-  ncmpiCheck.h ncmpi_notyet.h ncmpiGroupAtt.h ncmpiAtt.h ncmpiException.h \
-  ncmpiByte.h ncmpiUbyte.h ncmpiChar.h ncmpiShort.h ncmpiUshort.h \
-  ncmpiInt.h ncmpiUint.h ncmpiInt64.h ncmpiUint64.h ncmpiFloat.h \
-  ncmpiDouble.h
diff --git a/src/libf/Makefile.in b/src/libf/Makefile.in
deleted file mode 100644
index 448c8c3..0000000
--- a/src/libf/Makefile.in
+++ /dev/null
@@ -1,87 +0,0 @@
-#
-# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
-# See COPYRIGHT notice in top-level directory.
-#
-# $Id: Makefile.in 2678 2016-12-05 06:30:43Z wkliao $
-#
-# @configure_input@
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-# generated by configure, so it's in the build dir, not srcdirr
-include ../../macros.make
-
-# For VPATH build:
-# Add ../lib into search path because ../lib/pnetcdf.h is created at the
-# configure time and included by all C2F_SRCS files in this folder.
-# Add $(srcdir) into search path because the C2F_SRCS files created at the
-# configure time in this folder all include $(srcdir)/mpinetcdf_impl.h.
-INCLUDES = -I../lib -I$(srcdir)
-
-HEADER    = ../lib/pnetcdf.h
-LIBRARY   = ../lib/libpnetcdf.a
-ld_netcdf = -L../lib -lpnetcdf
-
-UTIL_SRCS = issyserrf.c \
-            xstrerrorf.c \
-            xstrerrnof.c \
-            xinq_libversf.c
-
-C2F_SRCS  = allf.c
-
-LIB_CSRCS = $(C2F_SRCS) $(UTIL_SRCS)
-
-LIB_FSRCS = strerrorf.f strerrnof.f inq_libversf.f
-
-PACKING_LIST = $(LIB_FSRCS) \
-	       nfconfig_inc.in \
-	       pnetcdf.inc.in \
-	       mpinetcdf_impl.h \
-	       buildiface \
-	       defs \
-	       createffiles \
-	       Makefile.in
-
-LIB_OBJS = $(LIB_CSRCS:.c=.o) $(LIB_FSRCS:.f=.o)
-
-GARBAGE	     = nfconfig.inc $(LIB_CSRCS) mpifnetcdf.h
-DIST_GARBAGE = nfconfig_inc pnetcdf.inc
-
-all: nfconfig.inc $(LIBRARY)
-
-objs: nfconfig.inc $(LIB_OBJS)
-
-library:
-	$(AR) $(ARFLAGS) $(LIBRARY) $(LIB_OBJS)
-	$(RANLIB) $(LIBRARY)
-
-$(LIBRARY): $(LIB_OBJS)
-	$(AR) $(ARFLAGS) $(LIBRARY) $(LIB_OBJS)
-	$(RANLIB) $(LIBRARY)
-
-$(LIB_CSRCS): mpifnetcdf.h
-
-mpifnetcdf.h: defs buildiface $(HEADER)
-	$(RM) -f $@ allf.c
-	$(srcdir)/buildiface -infile=$(HEADER) -deffile=$(srcdir)/defs > allf.c
-	@touch $(LIB_CSRCS)
-
-# Starting from 1.4.0, nfconfig.inc is only used in test/nf_test/tests.inc and
-# test/nf90_test/tests.inc
-#
-# the sed command below is for generating a fortran-friendly header files by
-# replacing C comment starter '/*' with '!' in Fortran and remove '*/'
-#
-nfconfig.inc: nfconfig_inc
-	$(RM) -f $@
-	$(SED) -e "s%/\*%!%g" -e "s%\*/%%g" $< > $@
-
-install:
-	$(INSTALL) -d -m 755 $(INCDIR)
-	$(INSTALL_DATA) pnetcdf.inc $(INCDIR)
-
-uninstall:
-	$(RM) -f $(INCDIR)/pnetcdf.inc
-
-include $(srcdir)/../../rules.make
diff --git a/src/libf/inq_libversf.f b/src/libf/inq_libversf.f
deleted file mode 100644
index ce91f54..0000000
--- a/src/libf/inq_libversf.f
+++ /dev/null
@@ -1,10 +0,0 @@
-      character *80 function nfmpi_inq_libvers()
-      integer ierr
-      character *(80) tmpstr
-
-      integer nfmpi_xinq_libvers
-      external nfmpi_xinq_libvers
-      
-      ierr = nfmpi_xinq_libvers(tmpstr)
-      nfmpi_inq_libvers = tmpstr
-      end
diff --git a/src/libf/nfconfig_inc.in b/src/libf/nfconfig_inc.in
deleted file mode 100644
index 6a2bb2e..0000000
--- a/src/libf/nfconfig_inc.in
+++ /dev/null
@@ -1,91 +0,0 @@
-#if 0
-    Copyright (C) 2003, Northwestern University and Argonne National Laboratory
-    See COPYRIGHT notice in top-level directory.
-
-    $Id: nfconfig_inc.in 1468 2013-10-26 16:53:18Z wkliao $ 
-#endif
-
-
-#ifndef UD_NETCDF_CPP_INC
-#define UD_NETCDF_CPP_INC
-
-
-#if 0
-    Do not have C-style comments in here because this file is processed
-    by both the FORTRAN compiler (for the nf_test/ stuff) and the C
-    compiler (for the FORTRAN-callable interface routines) and some 
-    FORTRAN preprocessors do not understand the /*...*/ syntax.
-#endif
-
-
-#if 0
-    The following macros define the supplementary FORTRAN arithmetic
-    datatypes beyond the standard INTEGER, REAL, and DOUBLEPRECISION --
-    ostensibly corresponding to 8-bit and 16-bit integers, respectively.
-    For example:
-
-	#define NF_INT1_T        integer*1
-	#define NF_INT2_T        integer*2
-	#define NF_INT8_T        integer*8
-
-    These are the types of the relevant arguments in the NF_*_INT1() and
-    NF_*_INT2() netCDF FORTRAN function calls.  The word "ostensibly"
-    is used advisedly: on some systems an "integer*2" datatype,
-    nevertheless, occupies 64 bits (we are not making this up).
-
-    If your FORTRAN system does not have the respective supplementary
-    datatype, then do not define the corresponding macro.
-#endif
-#undef NF_INT1_T
-#undef NF_INT2_T
-#undef NF_INT8_T
-
-
-#if 0
-   Define the following NF_*_IS_C_* macros appropriatly for your system.
-   The "INT1", "INT2", "INT", and "INT8" after the "NF_" refer to the
-   NF_INT1_T FORTRAN datatype, the NF_INT2_T FORTRAN datatype, the INTEGER
-   FORTRAN datatype, and the NF_INT8_T FORTRAN datatype, respectively.
-   If the respective FORTRAN datatype
-   does not exist, then do not define the corresponding macro.
-#endif
-#undef NF_INT1_IS_C_SIGNED_CHAR
-#undef NF_INT1_IS_C_SHORT
-#undef NF_INT1_IS_C_INT
-#undef NF_INT1_IS_C_LONG
-#undef NF_INT2_IS_C_SHORT
-#undef NF_INT2_IS_C_INT
-#undef NF_INT2_IS_C_LONG
-#undef NF_INT_IS_C_INT
-#undef NF_INT_IS_C_LONG
-#undef NF_INT8_IS_C_LONG
-#undef NF_INT8_IS_C_LONG_LONG
-#undef NF_REAL_IS_C_FLOAT
-#undef NF_REAL_IS_C_DOUBLE
-#undef NF_DOUBLEPRECISION_IS_C_DOUBLE
-#undef NF_DOUBLEPRECISION_IS_C_FLOAT
-
-
-#if 0
-   Whether the system uses something besides the IEEE floating-point
-   format to represent floating-point values.
-#endif
-#undef NO_IEEE_FLOAT
-
-
-#if 0
-   END OF CUSTOMIZATION
-#endif
-
-
-#if 0
-    FORTRAN data types corresponding to netCDF version 2 "byte" and "short"
-    data types (e.g. INTEGER*1, INTEGER*2).  See file "ftest.F" for usage.
-#endif
-#if !defined(NO_NETCDF_2)
-#   undef NCBYTE_T
-#   undef NCSHORT_T
-#endif
-
-
-#endif
diff --git a/src/libf/strerrorf.f b/src/libf/strerrorf.f
deleted file mode 100644
index fc0444c..0000000
--- a/src/libf/strerrorf.f
+++ /dev/null
@@ -1,10 +0,0 @@
-      character *80 function nfmpi_strerror( err )
-      integer err, ierr
-      character *(80) tmpstr
-
-      integer nfmpi_xstrerror
-      external nfmpi_xstrerror
-
-      ierr = nfmpi_xstrerror( err, tmpstr )
-      nfmpi_strerror = tmpstr
-      end
diff --git a/src/libf90/Makefile.in b/src/libf90/Makefile.in
deleted file mode 100644
index 45a248c..0000000
--- a/src/libf90/Makefile.in
+++ /dev/null
@@ -1,91 +0,0 @@
-#
-# Copyright (C) 2013, Northwestern University and Argonne National Laboratory
-# See COPYRIGHT notice in top-level directory.
-#
-# $Id: Makefile.in 2659 2016-11-27 22:15:33Z wkliao $
-#
-# @configure_input@
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-# generated by configure, so it's in the build dir, not srcdirr
-include ../../macros.make
-
-# F90FLAGS = @FC_DEFINE at MPI_OFFSET_KIND=@SIZEOF_MPI_OFFSET@
-
-# For VPATH build:
-# Add . into search path because api.f90 and nfmpi_constants.f90 are created in
-# the build directory at configure time and they are included in pnetcdf.f90.
-# If NAG compiler is used, $(srcdir) must also be added into search path
-# because NAG does not seem to look for include file in the same directory as
-# the source file.
-INCLUDES = -I. -I$(srcdir)
-
-LIBRARY = ../lib/libpnetcdf.a
-
-PNETCDF_MOD = pnetcdf. at FC_MODEXT@
-ifeq (@UPPER_CASE_MOD@, yes)
-  PNETCDF_MOD = PNETCDF. at FC_MODEXT@
-endif
-
-F90FLAGS += @FC_MODOUT at .
-M4FFLAGS += -DINTENTV=@INTENTV@
-
-M4_SRCS = getput_text.m4 \
-          getput_var.m4 \
-          getput_varn.m4 \
-          getput_vard.m4
-
-F90_SRCS = nf90_constants.f90 \
-           overloads.f90 \
-           visibility.f90 \
-           file.f90 \
-           dims.f90 \
-           attributes.f90 \
-           variables.f90
-
-SRCS     = $(F90_SRCS) $(M4_SRCS:.m4=.f90) \
-           pnetcdf.f90 api.f90 nfmpi_constants.f90
-
-LIB_OBJS = pnetcdf.o
-
-PACKING_LIST = $(F90_SRCS) \
-               $(M4_SRCS) \
-               Makefile.in \
-               pnetcdf.f90.in \
-               api.f90.in \
-               nfmpi_constants.f90.in
-
-GARBAGE		= $(PNETCDF_MOD) $(M4_SRCS:.m4=.f90)
-DIST_GARBAGE	= pnetcdf.f90 api.f90 nfmpi_constants.f90
-
-# When compiling pnetcdf.o, it also produce pnetcdf.mod
-%.mod: %.f90 $(SRCS)
-	$(COMPILE.f90) $<
-
-all: $(LIBRARY)
-
-objs: $(LIB_OBJS)
-
-library:
-	$(AR) $(ARFLAGS) $(LIBRARY) $(LIB_OBJS)
-	$(RANLIB) $(LIBRARY)
-
-$(LIBRARY): $(LIB_OBJS)
-	$(AR) $(ARFLAGS) $(LIBRARY) $(LIB_OBJS)
-	$(RANLIB) $(LIBRARY)
-
-$(LIB_OBJS): $(SRCS)
-
-$(PNETCDF_MOD): $(SRCS)
-
-install: $(PNETCDF_MOD)
-	$(INSTALL) -d -m 755 $(INCDIR)
-	$(INSTALL_DATA) $(PNETCDF_MOD) $(INCDIR)
-
-uninstall:
-	$(RM) -f $(INCDIR)/$(PNETCDF_MOD)
-
-include $(srcdir)/../../rules.make
-
diff --git a/src/libf90/api.f90.in b/src/libf90/api.f90.in
deleted file mode 100644
index 3e75e70..0000000
--- a/src/libf90/api.f90.in
+++ /dev/null
@@ -1,4121 +0,0 @@
-!
-!  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
-!  See COPYRIGHT notice in top-level directory.
-!
-! $Id: api.f90.in 2658 2016-11-27 22:13:48Z wkliao $
-!
-! @configure_input@
-
-!
-! miscellaneous subroutines:
-!
-INTERFACE
-    character(LEN=80) FUNCTION nfmpi_inq_libvers()
-    END FUNCTION   nfmpi_inq_libvers
-
-    character(LEN=80) FUNCTION nfmpi_strerror(ncerr)
-                            INTEGER,                       INTENT(IN)  :: ncerr
-    END FUNCTION   nfmpi_strerror
-
-    character(LEN=80) FUNCTION nfmpi_strerrno(ncerr)
-                            INTEGER,                       INTENT(IN)  :: ncerr
-    END FUNCTION   nfmpi_strerrno
-
-    logical        FUNCTION nfmpi_issyserr(ncerr)
-                            INTEGER,                       INTENT(IN)  :: ncerr
-    END FUNCTION   nfmpi_issyserr
-
-!
-! control subroutines:
-!
-    INTEGER        FUNCTION nfmpi_create(mpi_comm, path, cmode, mpi_info, ncid)
-                            INTEGER,                       INTENT(IN)  :: mpi_comm
-                            CHARACTER(len=*),              INTENT(IN)  :: path
-                            INTEGER,                       INTENT(IN)  :: cmode
-                            INTEGER,                       INTENT(IN)  :: mpi_info
-                            INTEGER,                       INTENT(OUT) :: ncid
-    END FUNCTION   nfmpi_create
-
-    INTEGER        FUNCTION nfmpi_open(mpi_comm, path, mode, mpi_info, ncid)
-                            INTEGER,                       INTENT(IN)  :: mpi_comm
-                            CHARACTER(len=*),              INTENT(IN)  :: path
-                            INTEGER,                       INTENT(IN)  :: mode
-                            INTEGER,                       INTENT(IN)  :: mpi_info
-                            INTEGER,                       INTENT(OUT) :: ncid
-    END FUNCTION   nfmpi_open
-
-    INTEGER        FUNCTION nfmpi_inq_format(ncid, format)
-                            INTEGER,                       INTENT(IN)   :: ncid
-                            INTEGER,                       INTENT(OUT)  :: format
-    END FUNCTION   nfmpi_inq_format
-
-    INTEGER        FUNCTION nfmpi_inq_file_format(path, format)
-                            CHARACTER(len=*),              INTENT(IN)  :: path
-                            INTEGER,                       INTENT(OUT)  :: format
-    END FUNCTION   nfmpi_inq_file_format
-
-    INTEGER        FUNCTION nfmpi_inq_file_info(ncid, mpi_info)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: mpi_info
-    END FUNCTION   nfmpi_inq_file_info
-
-    INTEGER        FUNCTION nfmpi_get_file_info(ncid, mpi_info)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: mpi_info
-    END FUNCTION   nfmpi_get_file_info
-
-    INTEGER        FUNCTION nfmpi_delete(path, mpi_info)
-                            CHARACTER(len=*),              INTENT(IN)  :: path
-                            INTEGER,                       INTENT(IN)  :: mpi_info
-    END FUNCTION   nfmpi_delete
-
-    INTEGER        FUNCTION nfmpi_enddef(ncid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-    END FUNCTION   nfmpi_enddef
-
-    INTEGER        FUNCTION nfmpi__enddef(ncid, h_minfree, v_align, v_minfree, r_align)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: h_minfree
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: v_align
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: v_minfree
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: r_align
-    END FUNCTION   nfmpi__enddef
-
-    INTEGER        FUNCTION nfmpi_redef(ncid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-    END FUNCTION   nfmpi_redef
-
-    INTEGER        FUNCTION nfmpi_set_default_format(new_format, old_format)
-                            INTEGER,                       INTENT(IN)  :: new_format
-                            INTEGER,                       INTENT(OUT) :: old_format
-    END FUNCTION   nfmpi_set_default_format
-
-    INTEGER        FUNCTION nfmpi_inq_default_format(default_format)
-                            INTEGER,                       INTENT(OUT) :: default_format
-    END FUNCTION   nfmpi_inq_default_format
-
-    INTEGER        FUNCTION nfmpi_sync(ncid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-    END FUNCTION   nfmpi_sync
-
-    INTEGER        FUNCTION nfmpi_abort(ncid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-    END FUNCTION   nfmpi_abort
-
-    INTEGER        FUNCTION nfmpi_close(ncid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-    END FUNCTION   nfmpi_close
-
-    INTEGER        FUNCTION nfmpi_set_fill(ncid, fillmode, old_mode)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: fillmode
-                            INTEGER,                       INTENT(OUT) :: old_mode
-    END FUNCTION   nfmpi_set_fill
-
-!
-! general inquiry subroutines:
-!
-
-    INTEGER        FUNCTION nfmpi_inq(ncid, ndims, nvars, ngatts, unlimdimid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: ndims
-                            INTEGER,                       INTENT(OUT) :: nvars
-                            INTEGER,                       INTENT(OUT) :: ngatts
-                            INTEGER,                       INTENT(OUT) :: unlimdimid
-    END FUNCTION   nfmpi_inq
-
-    INTEGER        FUNCTION nfmpi_inq_striping(ncid, striping_size, striping_count)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: striping_size
-                            INTEGER,                       INTENT(OUT) :: striping_count
-    END FUNCTION   nfmpi_inq_striping
-
-    INTEGER        FUNCTION nfmpi_inq_ndims(ncid, ndims)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: ndims
-    END FUNCTION   nfmpi_inq_ndims
-
-    INTEGER        FUNCTION nfmpi_inq_nvars(ncid, nvars)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: nvars
-    END FUNCTION   nfmpi_inq_nvars
-
-    INTEGER        FUNCTION nfmpi_inq_num_rec_vars(ncid, nvars)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: nvars
-    END FUNCTION   nfmpi_inq_num_rec_vars
-
-    INTEGER        FUNCTION nfmpi_inq_num_fix_vars(ncid, nvars)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: nvars
-    END FUNCTION   nfmpi_inq_num_fix_vars
-
-    INTEGER        FUNCTION nfmpi_inq_natts(ncid, ngatts)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: ngatts
-    END FUNCTION   nfmpi_inq_natts
-
-    INTEGER        FUNCTION nfmpi_inq_unlimdim(ncid, unlimdimid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: unlimdimid
-    END FUNCTION   nfmpi_inq_unlimdim
-
-!
-! dimension subroutines:
-!
-
-    INTEGER        FUNCTION nfmpi_def_dim(ncid, name, len, dimid)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
-                            INTEGER,                       INTENT(OUT) :: dimid
-    END FUNCTION   nfmpi_def_dim
-
-    INTEGER        FUNCTION nfmpi_inq_dimid(ncid, name, dimid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(OUT) :: dimid
-    END FUNCTION   nfmpi_inq_dimid
-
-    INTEGER        FUNCTION nfmpi_inq_dim(ncid, dimid, name, len)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: dimid
-                            CHARACTER(len=*),              INTENT(OUT) :: name
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: len
-    END FUNCTION   nfmpi_inq_dim
-
-    INTEGER        FUNCTION nfmpi_inq_dimname(ncid, dimid, name)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: dimid
-                            CHARACTER(len=*),              INTENT(OUT) :: name
-    END FUNCTION   nfmpi_inq_dimname
-
-    INTEGER        FUNCTION nfmpi_inq_dimlen(ncid, dimid, len)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: dimid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: len
-    END FUNCTION   nfmpi_inq_dimlen
-
-    INTEGER        FUNCTION nfmpi_rename_dim(ncid, dimid, name)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: dimid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-    END FUNCTION   nfmpi_rename_dim
-
-!
-! general attribute subroutines:
-!
-
-    INTEGER        FUNCTION nfmpi_inq_att(ncid, varid, name, xtype, len)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(OUT) :: xtype
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: len
-    END FUNCTION   nfmpi_inq_att
-
-    INTEGER        FUNCTION nfmpi_inq_attid(ncid, varid, name, attid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(OUT) :: attid
-    END FUNCTION   nfmpi_inq_attid
-
-    INTEGER        FUNCTION nfmpi_inq_atttype(ncid, varid, name, xtype)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(OUT) :: xtype
-    END FUNCTION   nfmpi_inq_atttype
-
-    INTEGER        FUNCTION nfmpi_inq_attlen(ncid, varid, name, len)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: len
-    END FUNCTION   nfmpi_inq_attlen
-
-    INTEGER        FUNCTION nfmpi_inq_attname(ncid, varid, attid, name)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(IN)  :: attid
-                            CHARACTER(len=*),              INTENT(OUT) :: name
-    END FUNCTION   nfmpi_inq_attname
-
-    INTEGER        FUNCTION nfmpi_copy_att(ncid_in, varid_in, name, ncid_out, varid_out)
-                            INTEGER,                       INTENT(IN)  :: ncid_in
-                            INTEGER,                       INTENT(IN)  :: varid_in
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(IN)  :: ncid_out
-                            INTEGER,                       INTENT(IN)  :: varid_out
-    END FUNCTION   nfmpi_copy_att
-
-    INTEGER        FUNCTION nfmpi_rename_att(ncid, varid, curname, newname)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: curname
-                            CHARACTER(len=*),              INTENT(IN)  :: newname
-    END FUNCTION   nfmpi_rename_att
-
-    INTEGER        FUNCTION nfmpi_del_att(ncid, varid, name)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-    END FUNCTION   nfmpi_del_att
-
-!
-! attribute put/get subroutines:
-!
-
-    INTEGER        FUNCTION nfmpi_put_att_text(ncid, varid, name, len, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_att_text
-
-    INTEGER        FUNCTION nfmpi_get_att_text(ncid, varid, name, text)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_att_text
-
-    INTEGER        FUNCTION nfmpi_put_att_int1(ncid, varid, name, xtype, len, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(IN)  :: xtype
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION   nfmpi_put_att_int1
-
-    INTEGER        FUNCTION nfmpi_get_att_int1(ncid, varid, name, i1vals)
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_att_int1
-
-    INTEGER        FUNCTION nfmpi_put_att_int2(ncid, varid, name, xtype, len, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(IN)  :: xtype
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
-                            INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
-    END FUNCTION   nfmpi_put_att_int2
-
-    INTEGER        FUNCTION nfmpi_get_att_int2(ncid, varid, name, i2vals)
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_att_int2
-
-    INTEGER        FUNCTION nfmpi_put_att_int(ncid, varid, name, xtype, len, IVALS)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(IN)  :: xtype
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
-                            INTEGER,                       INTENT(IN)  :: ivals(*)
-    END FUNCTION   nfmpi_put_att_int
-
-    INTEGER        FUNCTION nfmpi_get_att_int(ncid, varid, name, IVALS)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_att_int
-
-    INTEGER        FUNCTION nfmpi_put_att_real(ncid, varid, name, xtype, len, RVALS)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(IN)  :: xtype
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
-                            REAL,                          INTENT(IN)  :: rvals(*)
-    END FUNCTION   nfmpi_put_att_real
-
-    INTEGER        FUNCTION nfmpi_get_att_real(ncid, varid, name, rvals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_att_real
-
-    INTEGER        FUNCTION nfmpi_put_att_double(ncid, varid, name, xtype, len, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(IN)  :: xtype
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
-                            DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
-    END FUNCTION   nfmpi_put_att_double
-
-    INTEGER        FUNCTION nfmpi_get_att_double(ncid, varid, name, dvals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_att_double
-
-    INTEGER        FUNCTION nfmpi_put_att_int8(ncid, varid, name, xtype, len, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(IN)  :: xtype
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: len
-                            INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
-    END FUNCTION   nfmpi_put_att_int8
-
-    INTEGER        FUNCTION nfmpi_get_att_int8(ncid, varid, name, i8vals)
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_att_int8
-
-!
-! independent data mode subroutines:
-!
-    INTEGER        FUNCTION nfmpi_begin_indep_data(ncid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-    END FUNCTION   nfmpi_begin_indep_data
-
-    INTEGER        FUNCTION nfmpi_end_indep_data(ncid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-    END FUNCTION   nfmpi_end_indep_data
-!
-! general variable subroutines:
-!
-
-    INTEGER        FUNCTION nfmpi_def_var(ncid, name, datatype, ndims, dimids, varid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(IN)  :: datatype
-                            INTEGER,                       INTENT(IN)  :: ndims
-                            INTEGER,                       INTENT(IN)  :: dimids(ndims)
-                            INTEGER,                       INTENT(OUT) :: varid
-    END FUNCTION   nfmpi_def_var
-
-    INTEGER        FUNCTION nfmpi_inq_var(ncid, varid, name, datatype, ndims, dimids, natts)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(OUT) :: name
-                            INTEGER,                       INTENT(OUT) :: datatype
-                            INTEGER,                       INTENT(OUT) :: ndims
-                            INTEGER,                       INTENT(OUT) :: dimids(*)
-                            INTEGER,                       INTENT(OUT) :: natts
-    END FUNCTION   nfmpi_inq_var
-
-    INTEGER        FUNCTION nfmpi_inq_varid(ncid, name, varid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-                            INTEGER,                       INTENT(OUT) :: varid
-    END FUNCTION   nfmpi_inq_varid
-
-    INTEGER        FUNCTION nfmpi_inq_varname(ncid, varid, name)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(OUT) :: name
-    END FUNCTION   nfmpi_inq_varname
-
-    INTEGER        FUNCTION nfmpi_inq_vartype(ncid, varid, xtype)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(OUT) :: xtype
-    END FUNCTION   nfmpi_inq_vartype
-
-    INTEGER        FUNCTION nfmpi_inq_varndims(ncid, varid, ndims)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(OUT) :: ndims
-    END FUNCTION   nfmpi_inq_varndims
-
-    INTEGER        FUNCTION nfmpi_inq_vardimid(ncid, varid, dimids)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(OUT) :: dimids(*)
-    END FUNCTION   nfmpi_inq_vardimid
-
-    INTEGER        FUNCTION nfmpi_inq_varnatts(ncid, varid, natts)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(OUT) :: natts
-    END FUNCTION   nfmpi_inq_varnatts
-
-    INTEGER        FUNCTION nfmpi_rename_var(ncid, varid, name)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: name
-    END FUNCTION   nfmpi_rename_var
-
-!   INTEGER        FUNCTION nfmpi_def_var_fill(ncid, varid, no_fill, fill_value)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER,                       INTENT(IN)  :: no_fill
-!                           <type>,                        INTENT(IN)  :: fill_value
-!   END FUNCTION   nfmpi_def_var_fill
-
-!   INTEGER        FUNCTION nfmpi_inq_var_fill(ncid, varid, no_fill, fill_value)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER,                       INTENT(OUT) :: no_fill
-!                           <type>,                        INTENT(OUT) :: fill_value
-!   END FUNCTION   nfmpi_inq_var_fill
-
-    INTEGER        FUNCTION nfmpi_fill_var_rec(ncid, varid, recno)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: recno
-    END FUNCTION   nfmpi_fill_var_rec
-
-!
-! entire variable put/get subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_put_var(ncid, varid, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_var
-
-!   INTEGER        FUNCTION nfmpi_get_var(ncid, varid, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_var
-
-!   INTEGER        FUNCTION nfmpi_get_var_all (ncid, varid, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_var_all
-
-    INTEGER        FUNCTION nfmpi_put_var_text(ncid, varid, text)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_var_text
-
-    INTEGER        FUNCTION nfmpi_get_var_text(ncid, varid, text)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_var_text
-
-    INTEGER        FUNCTION nfmpi_get_var_text_all(ncid, varid, text)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_var_text_all
-
-    INTEGER        FUNCTION nfmpi_put_var_int1(ncid, varid, i1vals)
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION   nfmpi_put_var_int1
-
-    INTEGER        FUNCTION nfmpi_get_var_int1(ncid, varid, i1vals)
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_var_int1
-
-    INTEGER        FUNCTION nfmpi_get_var_int1_all(ncid, varid, i1vals)
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_var_int1_all
-
-    INTEGER        FUNCTION nfmpi_put_var_int2(ncid, varid, i2vals)
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION   nfmpi_put_var_int2
-
-    INTEGER        FUNCTION nfmpi_get_var_int2(ncid, varid, i2vals)
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_var_int2
-
-    INTEGER        FUNCTION nfmpi_get_var_int2_all(ncid, varid, i2vals)
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_var_int2_all
-
-    INTEGER        FUNCTION nfmpi_put_var_int(ncid, varid, ivals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION   nfmpi_put_var_int
-
-    INTEGER        FUNCTION nfmpi_get_var_int(ncid, varid, ivals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_var_int
-
-    INTEGER        FUNCTION nfmpi_get_var_int_all(ncid, varid, ivals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_var_int_all
-
-    INTEGER        FUNCTION nfmpi_put_var_real(ncid, varid, rvals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION   nfmpi_put_var_real
-
-    INTEGER        FUNCTION nfmpi_get_var_real(ncid, varid, rvals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_var_real
-
-    INTEGER        FUNCTION nfmpi_get_var_real_all(ncid, varid, rvals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_var_real_all
-
-    INTEGER        FUNCTION nfmpi_put_var_double(ncid, varid, dvals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION   nfmpi_put_var_double
-
-    INTEGER        FUNCTION nfmpi_get_var_double(ncid, varid, dvals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_var_double
-
-    INTEGER        FUNCTION nfmpi_get_var_double_all(ncid, varid, dvals)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_var_double_all
-
-    INTEGER        FUNCTION nfmpi_put_var_int8(ncid, varid, i8vals)
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION   nfmpi_put_var_int8
-
-    INTEGER        FUNCTION nfmpi_get_var_int8(ncid, varid, i8vals)
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_var_int8
-
-    INTEGER        FUNCTION nfmpi_get_var_int8_all(ncid, varid, i8vals)
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_var_int8_all
-
-!
-! single variable put/get subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_put_var1(ncid, varid, index, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_var1
-
-!   INTEGER        FUNCTION nfmpi_put_var1_all(ncid, varid, index, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_var1_all
-
-!   INTEGER        FUNCTION nfmpi_get_var1(ncid, varid, index, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_var1
-
-!   INTEGER        FUNCTION nfmpi_get_var1_all(ncid, varid, index, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_var1_all
-
-    INTEGER        FUNCTION nfmpi_put_var1_text(ncid, varid, index, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            CHARACTER,                     INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_var1_text
-
-    INTEGER        FUNCTION nfmpi_put_var1_text_all(ncid, varid, index, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            CHARACTER,                     INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_var1_text_all
-
-    INTEGER        FUNCTION nfmpi_get_var1_text(ncid, varid, index, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            CHARACTER,                     INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_var1_text
-
-    INTEGER        FUNCTION nfmpi_get_var1_text_all(ncid, varid, index, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            CHARACTER,                     INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_var1_text_all
-
-    INTEGER        FUNCTION nfmpi_put_var1_int1(ncid, varid, index, i1val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1val
-    END FUNCTION   nfmpi_put_var1_int1
-
-    INTEGER        FUNCTION nfmpi_put_var1_int1_all(ncid, varid, index, i1val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1val
-    END FUNCTION   nfmpi_put_var1_int1_all
-
-    INTEGER        FUNCTION nfmpi_get_var1_int1(ncid, varid, index, i1val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1val
-    END FUNCTION   nfmpi_get_var1_int1
-
-    INTEGER        FUNCTION nfmpi_get_var1_int1_all(ncid, varid, index, i1val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1val
-    END FUNCTION   nfmpi_get_var1_int1_all
-
-    INTEGER        FUNCTION nfmpi_put_var1_int2(ncid, varid, index, i2val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2val
-    END FUNCTION   nfmpi_put_var1_int2
-
-    INTEGER        FUNCTION nfmpi_put_var1_int2_all(ncid, varid, index, i2val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2val
-    END FUNCTION   nfmpi_put_var1_int2_all
-
-    INTEGER        FUNCTION nfmpi_get_var1_int2(ncid, varid, index, i2val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2val
-    END FUNCTION   nfmpi_get_var1_int2
-
-    INTEGER        FUNCTION nfmpi_get_var1_int2_all(ncid, varid, index, i2val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2val
-    END FUNCTION   nfmpi_get_var1_int2_all
-
-    INTEGER        FUNCTION nfmpi_put_var1_int(ncid, varid, index, ival)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ival
-    END FUNCTION   nfmpi_put_var1_int
-
-    INTEGER        FUNCTION nfmpi_put_var1_int_all(ncid, varid, index, ival)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ival
-    END FUNCTION   nfmpi_put_var1_int_all
-
-    INTEGER        FUNCTION nfmpi_get_var1_int(ncid, varid, index, ival)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER,                       INTENT(OUT) :: ival
-    END FUNCTION   nfmpi_get_var1_int
-
-    INTEGER        FUNCTION nfmpi_get_var1_int_all(ncid, varid, index, ival)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER,                       INTENT(OUT) :: ival
-    END FUNCTION   nfmpi_get_var1_int_all
-
-    INTEGER        FUNCTION nfmpi_put_var1_real(ncid, varid, index, rval)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            REAL,                          INTENT(@INTENTV@) :: rval
-    END FUNCTION   nfmpi_put_var1_real
-
-    INTEGER        FUNCTION nfmpi_put_var1_real_all(ncid, varid, index, rval)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            REAL,                          INTENT(@INTENTV@) :: rval
-    END FUNCTION   nfmpi_put_var1_real_all
-
-    INTEGER        FUNCTION nfmpi_get_var1_real(ncid, varid, index, rval)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            REAL,                          INTENT(OUT) :: rval
-    END FUNCTION   nfmpi_get_var1_real
-
-    INTEGER        FUNCTION nfmpi_get_var1_real_all(ncid, varid, index, rval)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            REAL,                          INTENT(OUT) :: rval
-    END FUNCTION   nfmpi_get_var1_real_all
-
-    INTEGER        FUNCTION nfmpi_put_var1_double(ncid, varid, index, dval)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dval
-    END FUNCTION   nfmpi_put_var1_double
-
-    INTEGER        FUNCTION nfmpi_put_var1_double_all(ncid, varid, index, dval)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dval
-    END FUNCTION   nfmpi_put_var1_double_all
-
-    INTEGER        FUNCTION nfmpi_get_var1_double(ncid, varid, index, dval)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dval
-    END FUNCTION   nfmpi_get_var1_double
-
-    INTEGER        FUNCTION nfmpi_get_var1_double_all(ncid, varid, index, dval)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dval
-    END FUNCTION   nfmpi_get_var1_double_all
-
-    INTEGER        FUNCTION nfmpi_put_var1_int8(ncid, varid, index, i8val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8val
-    END FUNCTION   nfmpi_put_var1_int8
-
-    INTEGER        FUNCTION nfmpi_put_var1_int8_all(ncid, varid, index, i8val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8val
-    END FUNCTION   nfmpi_put_var1_int8_all
-
-    INTEGER        FUNCTION nfmpi_get_var1_int8(ncid, varid, index, i8val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8val
-    END FUNCTION   nfmpi_get_var1_int8
-
-    INTEGER        FUNCTION nfmpi_get_var1_int8_all(ncid, varid, index, i8val)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8val
-    END FUNCTION   nfmpi_get_var1_int8_all
-
-!
-! variable array put/get subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_put_vara(ncid, varid, start, count, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_vara
-
-!   INTEGER        FUNCTION nfmpi_put_vara_all(ncid, varid, start, count, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_vara_all
-
-!   INTEGER        FUNCTION nfmpi_get_vara(ncid, varid, start, count, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_vara
-
-!   INTEGER        FUNCTION nfmpi_get_vara_all (ncid, varid, start, count, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_vara_all
-
-    INTEGER        FUNCTION nfmpi_put_vara_text(ncid, varid, start, count, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_vara_text
-
-    INTEGER        FUNCTION nfmpi_put_vara_text_all(ncid, varid, start, count, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_vara_text_all
-
-    INTEGER        FUNCTION nfmpi_get_vara_text(ncid, varid, start, count, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_vara_text
-
-    INTEGER        FUNCTION nfmpi_get_vara_text_all(ncid, varid, start, count, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_vara_text_all
-
-    INTEGER        FUNCTION nfmpi_put_vara_int1(ncid, varid, start, count, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION   nfmpi_put_vara_int1
-
-    INTEGER        FUNCTION nfmpi_put_vara_int1_all(ncid, varid, start, count, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION   nfmpi_put_vara_int1_all
-
-    INTEGER        FUNCTION nfmpi_get_vara_int1(ncid, varid, start, count, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_vara_int1
-
-    INTEGER        FUNCTION nfmpi_get_vara_int1_all(ncid, varid, start, count, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_vara_int1_all
-
-    INTEGER        FUNCTION nfmpi_put_vara_int2(ncid, varid, start, count, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION   nfmpi_put_vara_int2
-
-    INTEGER        FUNCTION nfmpi_put_vara_int2_all(ncid, varid, start, count, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION   nfmpi_put_vara_int2_all
-
-    INTEGER        FUNCTION nfmpi_get_vara_int2(ncid, varid, start, count, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_vara_int2
-
-    INTEGER        FUNCTION nfmpi_get_vara_int2_all(ncid, varid, start, count, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_vara_int2_all
-
-    INTEGER        FUNCTION nfmpi_put_vara_int(ncid, varid, start, count, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION   nfmpi_put_vara_int
-
-    INTEGER        FUNCTION nfmpi_put_vara_int_all(ncid, varid, start, count, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION   nfmpi_put_vara_int_all
-
-    INTEGER        FUNCTION nfmpi_get_vara_int(ncid, varid, start, count, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_vara_int
-
-    INTEGER        FUNCTION nfmpi_get_vara_int_all(ncid, varid, start, count, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_vara_int_all
-
-    INTEGER        FUNCTION nfmpi_put_vara_real(ncid, varid, start, count, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION   nfmpi_put_vara_real
-
-    INTEGER        FUNCTION nfmpi_put_vara_real_all(ncid, varid, start, count, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION   nfmpi_put_vara_real_all
-
-    INTEGER        FUNCTION nfmpi_get_vara_real(ncid, varid, start, count, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_vara_real
-
-    INTEGER        FUNCTION nfmpi_get_vara_real_all(ncid, varid, start, count, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_vara_real_all
-
-    INTEGER        FUNCTION nfmpi_put_vara_double(ncid, varid, start, count, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION   nfmpi_put_vara_double
-
-    INTEGER        FUNCTION nfmpi_put_vara_double_all(ncid, varid, start, count, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION   nfmpi_put_vara_double_all
-
-    INTEGER        FUNCTION nfmpi_get_vara_double(ncid, varid, start, count, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_vara_double
-
-    INTEGER        FUNCTION nfmpi_get_vara_double_all(ncid, varid, start, count, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_vara_double_all
-
-    INTEGER        FUNCTION nfmpi_put_vara_int8(ncid, varid, start, count, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION   nfmpi_put_vara_int8
-
-    INTEGER        FUNCTION nfmpi_put_vara_int8_all(ncid, varid, start, count, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION   nfmpi_put_vara_int8_all
-
-    INTEGER        FUNCTION nfmpi_get_vara_int8(ncid, varid, start, count, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_vara_int8
-
-    INTEGER        FUNCTION nfmpi_get_vara_int8_all(ncid, varid, start, count, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_vara_int8_all
-
-!
-! strided variable put/get subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_put_vars(ncid, varid, start, count, stride, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_vars
-
-!   INTEGER        FUNCTION nfmpi_put_vars_all(ncid, varid, start, count, stride, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_vars_all
-
-!   INTEGER        FUNCTION nfmpi_get_vars(ncid, varid, start, count, stride, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_vars
-
-!   INTEGER        FUNCTION nfmpi_get_vars_all(ncid, varid, start, count, stride, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_vars_all
-
-    INTEGER        FUNCTION nfmpi_put_vars_text(ncid, varid, start, count, stride, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_vars_text
-
-    INTEGER        FUNCTION nfmpi_put_vars_text_all(ncid, varid, start, count, stride, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_vars_text_all
-
-    INTEGER        FUNCTION nfmpi_get_vars_text(ncid, varid, start, count, stride, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_vars_text
-
-    INTEGER        FUNCTION nfmpi_get_vars_text_all(ncid, varid, start, count, stride, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_vars_text_all
-
-    INTEGER        FUNCTION nfmpi_put_vars_int1(ncid, varid, start, count, stride, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION   nfmpi_put_vars_int1
-
-    INTEGER        FUNCTION nfmpi_put_vars_int1_all(ncid, varid, start, count, stride, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION   nfmpi_put_vars_int1_all
-
-    INTEGER        FUNCTION nfmpi_get_vars_int1(ncid, varid, start, count, stride, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_vars_int1
-
-    INTEGER        FUNCTION nfmpi_get_vars_int1_all(ncid, varid, start, count, stride, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_vars_int1_all
-
-    INTEGER        FUNCTION nfmpi_put_vars_int2(ncid, varid, start, count, stride, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION   nfmpi_put_vars_int2
-
-    INTEGER        FUNCTION nfmpi_put_vars_int2_all(ncid, varid, start, count, stride, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION   nfmpi_put_vars_int2_all
-
-    INTEGER        FUNCTION nfmpi_get_vars_int2(ncid, varid, start, count, stride, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_vars_int2
-
-    INTEGER        FUNCTION nfmpi_get_vars_int2_all(ncid, varid, start, count, stride, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_vars_int2_all
-
-    INTEGER        FUNCTION nfmpi_put_vars_int(ncid, varid, start, count, stride, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION   nfmpi_put_vars_int
-
-    INTEGER        FUNCTION nfmpi_put_vars_int_all(ncid, varid, start, count, stride, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION   nfmpi_put_vars_int_all
-
-    INTEGER        FUNCTION nfmpi_get_vars_int(ncid, varid, start, count, stride, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_vars_int
-
-    INTEGER        FUNCTION nfmpi_get_vars_int_all(ncid, varid, start, count, stride, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_vars_int_all
-
-    INTEGER        FUNCTION nfmpi_put_vars_real(ncid, varid, start, count, stride, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION   nfmpi_put_vars_real
-
-    INTEGER        FUNCTION nfmpi_put_vars_real_all(ncid, varid, start, count, stride, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION   nfmpi_put_vars_real_all
-
-    INTEGER        FUNCTION nfmpi_get_vars_real(ncid, varid, start, count, stride, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_vars_real
-
-    INTEGER        FUNCTION nfmpi_get_vars_real_all(ncid, varid, start, count, stride, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_vars_real_all
-
-    INTEGER        FUNCTION nfmpi_put_vars_double(ncid, varid, start, count, stride, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION   nfmpi_put_vars_double
-
-    INTEGER        FUNCTION nfmpi_put_vars_double_all(ncid, varid, start, count, stride, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION   nfmpi_put_vars_double_all
-
-    INTEGER        FUNCTION nfmpi_get_vars_double(ncid, varid, start, count, stride, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_vars_double
-
-    INTEGER        FUNCTION nfmpi_get_vars_double_all(ncid, varid, start, count, stride, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_vars_double_all
-
-    INTEGER        FUNCTION nfmpi_put_vars_int8(ncid, varid, start, count, stride, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION   nfmpi_put_vars_int8
-
-    INTEGER        FUNCTION nfmpi_put_vars_int8_all(ncid, varid, start, count, stride, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION   nfmpi_put_vars_int8_all
-
-    INTEGER        FUNCTION nfmpi_get_vars_int8(ncid, varid, start, count, stride, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_vars_int8
-
-    INTEGER        FUNCTION nfmpi_get_vars_int8_all(ncid, varid, start, count, stride, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_vars_int8_all
-
-!
-! mapped variable put/get subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_put_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_varm
-
-!   INTEGER        FUNCTION nfmpi_put_varm_all(ncid, varid, start, count, stride, imap, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_put_varm_all
-
-!   INTEGER        FUNCTION nfmpi_get_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_varm
-
-!   INTEGER        FUNCTION nfmpi_get_varm_all(ncid, varid, start, count, stride, imap, buf, bufcount, datatype)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!   END FUNCTION   nfmpi_get_varm_all
-
-    INTEGER        FUNCTION nfmpi_put_varm_text(ncid, varid, start, count, stride, imap, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_varm_text
-
-    INTEGER        FUNCTION nfmpi_put_varm_text_all(ncid, varid, start, count, stride, imap, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION   nfmpi_put_varm_text_all
-
-    INTEGER        FUNCTION nfmpi_get_varm_text(ncid, varid, start, count, stride, imap, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_varm_text
-
-    INTEGER        FUNCTION nfmpi_get_varm_text_all(ncid, varid, start, count, stride, imap, text)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION   nfmpi_get_varm_text_all
-
-    INTEGER        FUNCTION nfmpi_put_varm_int1(ncid, varid, start, count, stride, imap, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION   nfmpi_put_varm_int1
-
-    INTEGER        FUNCTION nfmpi_put_varm_int1_all(ncid, varid, start, count, stride, imap, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION   nfmpi_put_varm_int1_all
-
-    INTEGER        FUNCTION nfmpi_get_varm_int1(ncid, varid, start, count, stride, imap, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_varm_int1
-
-    INTEGER        FUNCTION nfmpi_get_varm_int1_all(ncid, varid, start, count, stride, imap, i1vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION   nfmpi_get_varm_int1_all
-
-    INTEGER        FUNCTION nfmpi_put_varm_int2(ncid, varid, start, count, stride, imap, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION   nfmpi_put_varm_int2
-
-    INTEGER        FUNCTION nfmpi_put_varm_int2_all(ncid, varid, start, count, stride, imap, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION   nfmpi_put_varm_int2_all
-
-    INTEGER        FUNCTION nfmpi_get_varm_int2(ncid, varid, start, count, stride, imap, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_varm_int2
-
-    INTEGER        FUNCTION nfmpi_get_varm_int2_all(ncid, varid, start, count, stride, imap, i2vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION   nfmpi_get_varm_int2_all
-
-    INTEGER        FUNCTION nfmpi_put_varm_int (ncid, varid, start, count, stride, imap, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION   nfmpi_put_varm_int
-
-    INTEGER        FUNCTION nfmpi_put_varm_int_all(ncid, varid, start, count, stride, imap, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION   nfmpi_put_varm_int_all
-
-    INTEGER        FUNCTION nfmpi_get_varm_int (ncid, varid, start, count, stride, imap, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_varm_int
-
-    INTEGER        FUNCTION nfmpi_get_varm_int_all(ncid, varid, start, count, stride, imap, ivals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION   nfmpi_get_varm_int_all
-
-    INTEGER        FUNCTION nfmpi_put_varm_real(ncid, varid, start, count, stride, imap, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION   nfmpi_put_varm_real
-
-    INTEGER        FUNCTION nfmpi_put_varm_real_all(ncid, varid, start, count, stride, imap, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION   nfmpi_put_varm_real_all
-
-    INTEGER        FUNCTION nfmpi_get_varm_real(ncid, varid, start, count, stride, imap, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_varm_real
-
-    INTEGER        FUNCTION nfmpi_get_varm_real_all(ncid, varid, start, count, stride, imap, rvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION   nfmpi_get_varm_real_all
-
-    INTEGER        FUNCTION nfmpi_put_varm_double(ncid, varid, start, count, stride, imap, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION   nfmpi_put_varm_double
-
-    INTEGER        FUNCTION nfmpi_put_varm_double_all(ncid, varid, start, count, stride, imap, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION   nfmpi_put_varm_double_all
-
-    INTEGER        FUNCTION nfmpi_get_varm_double(ncid, varid, start, count, stride, imap, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_varm_double
-
-    INTEGER        FUNCTION nfmpi_get_varm_double_all(ncid, varid, start, count, stride, imap, dvals)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION   nfmpi_get_varm_double_all
-
-    INTEGER        FUNCTION nfmpi_put_varm_int8(ncid, varid, start, count, stride, imap, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION   nfmpi_put_varm_int8
-
-    INTEGER        FUNCTION nfmpi_put_varm_int8_all(ncid, varid, start, count, stride, imap, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION   nfmpi_put_varm_int8_all
-
-    INTEGER        FUNCTION nfmpi_get_varm_int8(ncid, varid, start, count, stride, imap, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_varm_int8
-
-    INTEGER        FUNCTION nfmpi_get_varm_int8_all(ncid, varid, start, count, stride, imap, i8vals)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION   nfmpi_get_varm_int8_all
-
-!
-! non-blocking variable array iput/iget subroutines:
-!
-
-!
-! entire variable iput/iget subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_iput_var(ncid, varid, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iput_var
-
-!   INTEGER        FUNCTION nfmpi_iget_var(ncid, varid, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iget_var
-
-
-    INTEGER        FUNCTION nfmpi_iput_var_text(ncid, varid, text, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var_text
-
-    INTEGER        FUNCTION nfmpi_iget_var_text(ncid, varid, text, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var_text
-
-    INTEGER        FUNCTION nfmpi_iput_var_int1(ncid, varid, i1vals, req)
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var_int1
-
-    INTEGER        FUNCTION nfmpi_iget_var_int1(ncid, varid, i1vals, req)
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var_int1
-
-    INTEGER        FUNCTION nfmpi_iput_var_int2(ncid, varid, i2vals, req)
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var_int2
-
-    INTEGER        FUNCTION nfmpi_iget_var_int2(ncid, varid, i2vals, req)
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var_int2
-
-    INTEGER        FUNCTION nfmpi_iput_var_int(ncid, varid, ivals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var_int
-
-    INTEGER        FUNCTION nfmpi_iget_var_int(ncid, varid, ivals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var_int
-
-    INTEGER        FUNCTION nfmpi_iput_var_real(ncid, varid, rvals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var_real
-
-    INTEGER        FUNCTION nfmpi_iget_var_real(ncid, varid, rvals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            REAL,                          INTENT(OUT) :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var_real
-
-    INTEGER        FUNCTION nfmpi_iput_var_double(ncid, varid, dvals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var_double
-
-    INTEGER        FUNCTION nfmpi_iget_var_double(ncid, varid, dvals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var_double
-
-    INTEGER        FUNCTION nfmpi_iput_var_int8(ncid, varid, i8vals, req)
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var_int8
-
-    INTEGER        FUNCTION nfmpi_iget_var_int8(ncid, varid, i8vals, req)
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var_int8
-
-!
-! single variable iput/iget subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_iput_var1(ncid, varid, index, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iput_var1
-
-!   INTEGER        FUNCTION nfmpi_iget_var1(ncid, varid, index, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iget_var1
-
-    INTEGER        FUNCTION nfmpi_iput_var1_text(ncid, varid, index, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            CHARACTER,                     INTENT(IN)  :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var1_text
-
-    INTEGER        FUNCTION nfmpi_iget_var1_text(ncid, varid, index, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            CHARACTER,                     INTENT(OUT) :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var1_text
-
-    INTEGER        FUNCTION nfmpi_iput_var1_int1(ncid, varid, index, i1val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var1_int1
-
-    INTEGER        FUNCTION nfmpi_iget_var1_int1(ncid, varid, index, i1val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var1_int1
-
-    INTEGER        FUNCTION nfmpi_iput_var1_int2(ncid, varid, index, i2val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var1_int2
-
-    INTEGER        FUNCTION nfmpi_iget_var1_int2(ncid, varid, index, i2val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var1_int2
-
-    INTEGER        FUNCTION nfmpi_iput_var1_int(ncid, varid, index, ival, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ival
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var1_int
-
-    INTEGER        FUNCTION nfmpi_iget_var1_int(ncid, varid, index, ival, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER,                       INTENT(OUT) :: ival
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var1_int
-
-    INTEGER        FUNCTION nfmpi_iput_var1_real(ncid, varid, index, rval, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            REAL,                          INTENT(@INTENTV@) :: rval
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var1_real
-
-    INTEGER        FUNCTION nfmpi_iget_var1_real(ncid, varid, index, rval, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            REAL,                          INTENT(OUT) :: rval
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var1_real
-
-    INTEGER        FUNCTION nfmpi_iput_var1_double(ncid, varid, index, dval, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dval
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var1_double
-
-    INTEGER        FUNCTION nfmpi_iget_var1_double(ncid, varid, index, dval, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dval
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var1_double
-
-    INTEGER        FUNCTION nfmpi_iput_var1_int8(ncid, varid, index, i8val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_var1_int8
-
-    INTEGER        FUNCTION nfmpi_iget_var1_int8(ncid, varid, index, i8val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_var1_int8
-
-!
-! variable array iput/iget subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_iput_vara(ncid, varid, start, count, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iput_vara
-
-!   INTEGER        FUNCTION nfmpi_iget_vara(ncid, varid, start, count, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iget_vara
-
-    INTEGER        FUNCTION nfmpi_iput_vara_text(ncid, varid, start, count, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vara_text
-
-    INTEGER        FUNCTION nfmpi_iget_vara_text(ncid, varid, start, count, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vara_text
-
-    INTEGER        FUNCTION nfmpi_iput_vara_int1(ncid, varid, start, count, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vara_int1
-
-    INTEGER        FUNCTION nfmpi_iget_vara_int1(ncid, varid, start, count, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vara_int1
-
-    INTEGER        FUNCTION nfmpi_iput_vara_int2(ncid, varid, start, count, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vara_int2
-
-    INTEGER        FUNCTION nfmpi_iget_vara_int2(ncid, varid, start, count, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vara_int2
-
-    INTEGER        FUNCTION nfmpi_iput_vara_int(ncid, varid, start, count, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vara_int
-
-    INTEGER        FUNCTION nfmpi_iget_vara_int(ncid, varid, start, count, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vara_int
-
-    INTEGER        FUNCTION nfmpi_iput_vara_real(ncid, varid, start, count, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vara_real
-
-    INTEGER        FUNCTION nfmpi_iget_vara_real(ncid, varid, start, count, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vara_real
-
-    INTEGER        FUNCTION nfmpi_iput_vara_double(ncid, varid, start, count, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vara_double
-
-    INTEGER        FUNCTION nfmpi_iget_vara_double(ncid, varid, start, count, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vara_double
-
-    INTEGER        FUNCTION nfmpi_iput_vara_int8(ncid, varid, start, count, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vara_int8
-
-    INTEGER        FUNCTION nfmpi_iget_vara_int8(ncid, varid, start, count, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vara_int8
-
-!
-! strided variable iput/iget subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_iput_vars(ncid, varid, start, count, stride, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iput_vars
-
-!   INTEGER        FUNCTION nfmpi_iget_vars(ncid, varid, start, count, stride, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iget_vars
-
-    INTEGER        FUNCTION nfmpi_iput_vars_text(ncid, varid, start, count, stride, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vars_text
-
-    INTEGER        FUNCTION nfmpi_iget_vars_text(ncid, varid, start, count, stride, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vars_text
-
-    INTEGER        FUNCTION nfmpi_iput_vars_int1(ncid, varid, start, count, stride, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vars_int1
-
-    INTEGER        FUNCTION nfmpi_iget_vars_int1(ncid, varid, start, count, stride, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vars_int1
-
-    INTEGER        FUNCTION nfmpi_iput_vars_int2(ncid, varid, start, count, stride, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vars_int2
-
-    INTEGER        FUNCTION nfmpi_iget_vars_int2(ncid, varid, start, count, stride, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vars_int2
-
-    INTEGER        FUNCTION nfmpi_iput_vars_int(ncid, varid, start, count, stride, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vars_int
-
-    INTEGER        FUNCTION nfmpi_iget_vars_int(ncid, varid, start, count, stride, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vars_int
-
-    INTEGER        FUNCTION nfmpi_iput_vars_real(ncid, varid, start, count, stride, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vars_real
-
-    INTEGER        FUNCTION nfmpi_iget_vars_real(ncid, varid, start, count, stride, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vars_real
-
-    INTEGER        FUNCTION nfmpi_iput_vars_double(ncid, varid, start, count, stride, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vars_double
-
-    INTEGER        FUNCTION nfmpi_iget_vars_double(ncid, varid, start, count, stride, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vars_double
-
-    INTEGER        FUNCTION nfmpi_iput_vars_int8(ncid, varid, start, count, stride, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_vars_int8
-
-    INTEGER        FUNCTION nfmpi_iget_vars_int8(ncid, varid, start, count, stride, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_vars_int8
-
-!
-! mapped variable iput/iget subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_iput_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iput_varm
-
-!   INTEGER        FUNCTION nfmpi_iget_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_iget_varm
-
-    INTEGER        FUNCTION nfmpi_iput_varm_text(ncid, varid, start, count, stride, imap, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_varm_text
-
-    INTEGER        FUNCTION nfmpi_iget_varm_text(ncid, varid, start, count, stride, imap, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            CHARACTER(len=*),              INTENT(OUT) :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_varm_text
-
-    INTEGER        FUNCTION nfmpi_iput_varm_int1(ncid, varid, start, count, stride, imap, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_varm_int1
-
-    INTEGER        FUNCTION nfmpi_iget_varm_int1(ncid, varid, start, count, stride, imap, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_varm_int1
-
-    INTEGER        FUNCTION nfmpi_iput_varm_int2(ncid, varid, start, count, stride, imap, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_varm_int2
-
-    INTEGER        FUNCTION nfmpi_iget_varm_int2(ncid, varid, start, count, stride, imap, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_varm_int2
-
-    INTEGER        FUNCTION nfmpi_iput_varm_int (ncid, varid, start, count, stride, imap, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_varm_int
-
-    INTEGER        FUNCTION nfmpi_iget_varm_int (ncid, varid, start, count, stride, imap, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER,                       INTENT(OUT) :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_varm_int
-
-    INTEGER        FUNCTION nfmpi_iput_varm_real(ncid, varid, start, count, stride, imap, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            REAL,                          INTENT(@INTENTV@) :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_varm_real
-
-    INTEGER        FUNCTION nfmpi_iget_varm_real(ncid, varid, start, count, stride, imap, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            REAL,                          INTENT(OUT) :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_varm_real
-
-    INTEGER        FUNCTION nfmpi_iput_varm_double(ncid, varid, start, count, stride, imap, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_varm_double
-
-    INTEGER        FUNCTION nfmpi_iget_varm_double(ncid, varid, start, count, stride, imap, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_varm_double
-
-    INTEGER        FUNCTION nfmpi_iput_varm_int8(ncid, varid, start, count, stride, imap, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iput_varm_int8
-
-    INTEGER        FUNCTION nfmpi_iget_varm_int8(ncid, varid, start, count, stride, imap, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_iget_varm_int8
-
-!
-! Begin buffered put non-blocking subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_bput_var(ncid, varid, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bput_var
-
-!   INTEGER        FUNCTION nfmpi_bget_var(ncid, varid, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bget_var
-
-    INTEGER        FUNCTION nfmpi_bput_var_text(ncid, varid, text, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            CHARACTER(len=*),              INTENT(IN)  :: text(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var_text
-
-    INTEGER        FUNCTION nfmpi_bput_var_int1(ncid, varid, i1vals, req)
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var_int1
-
-    INTEGER        FUNCTION nfmpi_bput_var_int2(ncid, varid, i2vals, req)
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var_int2
-
-    INTEGER        FUNCTION nfmpi_bput_var_int(ncid, varid, ivals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER,                       INTENT(IN)  :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var_int
-
-    INTEGER        FUNCTION nfmpi_bput_var_real(ncid, varid, rvals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            REAL,                          INTENT(IN)  :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var_real
-
-    INTEGER        FUNCTION nfmpi_bput_var_double(ncid, varid, dvals, req)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var_double
-
-    INTEGER        FUNCTION nfmpi_bput_var_int8(ncid, varid, i8vals, req)
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var_int8
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_bput_var1(ncid, varid, start, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bput_var1
-
-!   INTEGER        FUNCTION nfmpi_bget_var1(ncid, varid, start, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bget_var1
-
-    INTEGER        FUNCTION nfmpi_bput_var1_text(ncid, varid, index, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            CHARACTER,                     INTENT(IN)  :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var1_text
-
-    INTEGER        FUNCTION nfmpi_bput_var1_int1(ncid, varid, index, i1val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var1_int1
-
-    INTEGER        FUNCTION nfmpi_bput_var1_int2(ncid, varid, index, i2val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var1_int2
-
-    INTEGER        FUNCTION nfmpi_bput_var1_int(ncid, varid, index, ival, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER,                       INTENT(IN)  :: ival
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var1_int
-
-    INTEGER        FUNCTION nfmpi_bput_var1_real(ncid, varid, index, rval, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            REAL,                          INTENT(IN)  :: rval
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var1_real
-
-    INTEGER        FUNCTION nfmpi_bput_var1_double(ncid, varid, index, dval, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            DOUBLE PRECISION,              INTENT(IN)  :: dval
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var1_double
-
-    INTEGER        FUNCTION nfmpi_bput_var1_int8(ncid, varid, index, i8val, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: index(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8val
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_var1_int8
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_bput_vara(ncid, varid, start, count, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bput_vara
-
-!   INTEGER        FUNCTION nfmpi_bget_vara(ncid, varid, start, count, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bget_vara
-
-    INTEGER        FUNCTION nfmpi_bput_vara_text(ncid, varid, start, count, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vara_text
-
-    INTEGER        FUNCTION nfmpi_bput_vara_int1(ncid, varid, start, count, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vara_int1
-
-    INTEGER        FUNCTION nfmpi_bput_vara_int2(ncid, varid, start, count, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vara_int2
-
-    INTEGER        FUNCTION nfmpi_bput_vara_int(ncid, varid, start, count, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER,                       INTENT(IN)  :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vara_int
-
-    INTEGER        FUNCTION nfmpi_bput_vara_real(ncid, varid, start, count, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            REAL,                          INTENT(IN)  :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vara_real
-
-    INTEGER        FUNCTION nfmpi_bput_vara_double(ncid, varid, start, count, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vara_double
-
-    INTEGER        FUNCTION nfmpi_bput_vara_int8(ncid, varid, start, count, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vara_int8
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_bput_vars(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bput_vars
-
-!   INTEGER        FUNCTION nfmpi_bget_vars(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bget_vars
-
-    INTEGER        FUNCTION nfmpi_bput_vars_text(ncid, varid, start, count, stride, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vars_text
-
-    INTEGER        FUNCTION nfmpi_bput_vars_int1(ncid, varid, start, count, stride, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vars_int1
-
-    INTEGER        FUNCTION nfmpi_bput_vars_int2(ncid, varid, start, count, stride, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vars_int2
-
-    INTEGER        FUNCTION nfmpi_bput_vars_int(ncid, varid, start, count, stride, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER,                       INTENT(IN)  :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vars_int
-
-    INTEGER        FUNCTION nfmpi_bput_vars_real(ncid, varid, start, count, stride, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            REAL,                          INTENT(IN)  :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vars_real
-
-    INTEGER        FUNCTION nfmpi_bput_vars_double(ncid, varid, start, count, stride, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vars_double
-
-    INTEGER        FUNCTION nfmpi_bput_vars_int8(ncid, varid, start, count, stride, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_vars_int8
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER        FUNCTION nfmpi_bput_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-!                           <type>,                        INTENT(IN)  :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bput_varm
-
-!   INTEGER        FUNCTION nfmpi_bget_varm(ncid, varid, start, count, stride, imap, buf, bufcount, datatype, req)
-!                           INTEGER,                       INTENT(IN)  :: ncid
-!                           INTEGER,                       INTENT(IN)  :: varid
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-!                           <type>,                        INTENT(OUT) :: buf(*)
-!                           INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                           INTEGER,                       INTENT(IN)  :: datatype
-!                           INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION   nfmpi_bget_varm
-
-    INTEGER        FUNCTION nfmpi_bput_varm_text(ncid, varid, start, count, stride, imap, text, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            CHARACTER(len=*),              INTENT(IN)  :: text
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_varm_text
-
-    INTEGER        FUNCTION nfmpi_bput_varm_int1(ncid, varid, start, count, stride, imap, i1vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: OneByteInt = selected_int_kind(2)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_varm_int1
-
-    INTEGER        FUNCTION nfmpi_bput_varm_int2(ncid, varid, start, count, stride, imap, i2vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: TwoByteInt = selected_int_kind(4)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=TwoByteInt),      INTENT(IN)  :: i2vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_varm_int2
-
-    INTEGER        FUNCTION nfmpi_bput_varm_int (ncid, varid, start, count, stride, imap, ivals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER,                       INTENT(IN)  :: ivals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_varm_int
-
-    INTEGER        FUNCTION nfmpi_bput_varm_real(ncid, varid, start, count, stride, imap, rvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            REAL,                          INTENT(IN)  :: rvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_varm_real
-
-    INTEGER        FUNCTION nfmpi_bput_varm_double(ncid, varid, start, count, stride, imap, dvals, req)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            DOUBLE PRECISION,              INTENT(IN)  :: dvals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_varm_double
-
-    INTEGER        FUNCTION nfmpi_bput_varm_int8(ncid, varid, start, count, stride, imap, i8vals, req)
-                   @USE_MPIF_HEADER@
-                   integer, parameter :: EightByteInt = selected_int_kind(18)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: start(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: count(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: stride(*)
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: imap(*)
-                            INTEGER(KIND=EightByteInt),    INTENT(IN)  :: i8vals(*)
-                            INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION   nfmpi_bput_varm_int8
-
-    INTEGER        FUNCTION nfmpi_buffer_attach(ncid, bufsize)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufsize
-    END FUNCTION   nfmpi_buffer_attach
-
-    INTEGER        FUNCTION nfmpi_buffer_detach(ncid)
-                            INTEGER,                       INTENT(IN)  :: ncid
-    END FUNCTION   nfmpi_buffer_detach
-
-    INTEGER        FUNCTION nfmpi_inq_buffer_usage(ncid, usage)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: usage
-    END FUNCTION   nfmpi_inq_buffer_usage
-
-    INTEGER        FUNCTION nfmpi_inq_buffer_size(ncid, buf_size)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: buf_size
-    END FUNCTION   nfmpi_inq_buffer_size
-
-!
-! End buffered put non-blocking subroutines:
-!
-
-    INTEGER        FUNCTION nfmpi_wait(ncid, count, req, status)
-                            INTEGER,                       INTENT(IN)   :: ncid
-                            INTEGER,                       INTENT(IN)   :: count
-                            INTEGER,                       INTENT(INOUT):: req(count)
-                            INTEGER,                       INTENT(OUT)  :: status(count)
-    END FUNCTION   nfmpi_wait
-
-    INTEGER        FUNCTION nfmpi_wait_all(ncid, count, req, status)
-                            INTEGER,                       INTENT(IN)   :: ncid
-                            INTEGER,                       INTENT(IN)   :: count
-                            INTEGER,                       INTENT(INOUT):: req(count)
-                            INTEGER,                       INTENT(OUT)  :: status(count)
-    END FUNCTION   nfmpi_wait_all
-
-    INTEGER        FUNCTION nfmpi_cancel(ncid, count, req, status)
-                            INTEGER,                       INTENT(IN)   :: ncid
-                            INTEGER,                       INTENT(IN)   :: count
-                            INTEGER,                       INTENT(INOUT):: req(count)
-                            INTEGER,                       INTENT(OUT)  :: status(count)
-    END FUNCTION   nfmpi_cancel
-
-    INTEGER        FUNCTION nfmpi_inq_put_size(ncid, size)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
-    END FUNCTION   nfmpi_inq_put_size
-
-    INTEGER        FUNCTION nfmpi_inq_get_size(ncid, size)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
-    END FUNCTION   nfmpi_inq_get_size
-
-    INTEGER        FUNCTION nfmpi_inq_header_size(ncid, size)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
-    END FUNCTION   nfmpi_inq_header_size
-
-    INTEGER        FUNCTION nfmpi_inq_header_extent(ncid, extent)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: extent
-    END FUNCTION   nfmpi_inq_header_extent
-
-    INTEGER        FUNCTION nfmpi_inq_varoffset(ncid, varid, offset)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(IN)  :: varid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: offset
-    END FUNCTION   nfmpi_inq_varoffset
-
-    INTEGER        FUNCTION nfmpi_inq_nreqs(ncid, nreqs)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: nreqs
-    END FUNCTION   nfmpi_inq_nreqs
-
-    INTEGER        FUNCTION nfmpi_inq_malloc_size(size)
-                   @USE_MPIF_HEADER@
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
-    END FUNCTION   nfmpi_inq_malloc_size
-
-    INTEGER        FUNCTION nfmpi_inq_malloc_max_size(size)
-                   @USE_MPIF_HEADER@
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: size
-    END FUNCTION   nfmpi_inq_malloc_max_size
-
-    INTEGER        FUNCTION nfmpi_inq_malloc_list()
-    END FUNCTION   nfmpi_inq_malloc_list
-
-    INTEGER        FUNCTION nfmpi_inq_files_opened(nfiles, ncids)
-                            INTEGER,                       INTENT(OUT) :: nfiles
-                            INTEGER,                       INTENT(OUT) :: ncids(*)
-    END FUNCTION   nfmpi_inq_files_opened
-
-    INTEGER        FUNCTION nfmpi_inq_recsize(ncid, recsize)
-                   @USE_MPIF_HEADER@
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER(KIND=MPI_OFFSET_KIND), INTENT(OUT) :: recsize
-    END FUNCTION   nfmpi_inq_recsize
-
-    INTEGER        FUNCTION nfmpi_inq_path(ncid, pathlen, path)
-                            INTEGER,                       INTENT(IN)  :: ncid
-                            INTEGER,                       INTENT(OUT) :: pathlen
-                            CHARACTER(len=*),              INTENT(OUT) :: path
-    END FUNCTION   nfmpi_inq_path
-
-!
-! Begin of varn subroutines:
-!
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER FUNCTION nfmpi_get_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype)
-!                    INTEGER,                       INTENT(IN)  :: ncid
-!                    INTEGER,                       INTENT(IN)  :: varid
-!                    INTEGER,                       INTENT(IN)  :: num
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-!                    <type>,                        INTENT(OUT) :: buf(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                    INTEGER,                       INTENT(IN)  :: buftype
-!   END FUNCTION nfmpi_get_varn
-
-!   INTEGER FUNCTION nfmpi_get_varn_all(ncid, varid, num, starts, counts, buf, bufcount, buftype)
-!                    INTEGER,                       INTENT(IN)  :: ncid
-!                    INTEGER,                       INTENT(IN)  :: varid
-!                    INTEGER,                       INTENT(IN)  :: num
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-!                    <type>,                        INTENT(OUT) :: buf(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                    INTEGER,                       INTENT(IN)  :: buftype
-!   END FUNCTION nfmpi_get_varn_all
-
-!   INTEGER FUNCTION nfmpi_put_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype)
-!                    INTEGER,                       INTENT(IN)  :: ncid
-!                    INTEGER,                       INTENT(IN)  :: varid
-!                    INTEGER,                       INTENT(IN)  :: num
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-!                    <type>,                        INTENT(IN)  :: buf(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                    INTEGER,                       INTENT(IN)  :: buftype
-!   END FUNCTION nfmpi_put_varn
-
-!   INTEGER FUNCTION nfmpi_put_varn_all(ncid, varid, num, starts, counts, buf, bufcount, buftype)
-!                    INTEGER,                       INTENT(IN)  :: ncid
-!                    INTEGER,                       INTENT(IN)  :: varid
-!                    INTEGER,                       INTENT(IN)  :: num
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-!                    <type>,                        INTENT(IN)  :: buf(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                    INTEGER,                       INTENT(IN)  :: buftype
-!   END FUNCTION nfmpi_put_varn_all
-
-
-    INTEGER FUNCTION nfmpi_get_varn_text(ncid, varid, num, starts, counts, text)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION nfmpi_get_varn_text
-
-    INTEGER FUNCTION nfmpi_get_varn_int1(ncid, varid, num, starts, counts, i1vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: OneByteInt = selected_int_kind(2)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION nfmpi_get_varn_int1
-
-    INTEGER FUNCTION nfmpi_get_varn_int2(ncid, varid, num, starts, counts, i2vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: TwoByteInt = selected_int_kind(4)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION nfmpi_get_varn_int2
-
-    INTEGER FUNCTION nfmpi_get_varn_int(ncid, varid, num, starts, counts, ivals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION nfmpi_get_varn_int
-
-    INTEGER FUNCTION nfmpi_get_varn_real(ncid, varid, num, starts, counts, rvals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION nfmpi_get_varn_real
-
-    INTEGER FUNCTION nfmpi_get_varn_double(ncid, varid, num, starts, counts, dvals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION nfmpi_get_varn_double
-
-    INTEGER FUNCTION nfmpi_get_varn_int8(ncid, varid, num, starts, counts, i8vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: EightByteInt = selected_int_kind(18)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION nfmpi_get_varn_int8
-
-    INTEGER FUNCTION nfmpi_get_varn_text_all(ncid, varid, num, starts, counts, text)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     CHARACTER(len=*),              INTENT(OUT) :: text
-    END FUNCTION nfmpi_get_varn_text_all
-
-    INTEGER FUNCTION nfmpi_get_varn_int1_all(ncid, varid, num, starts, counts, i1vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: OneByteInt = selected_int_kind(2)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-    END FUNCTION nfmpi_get_varn_int1_all
-
-    INTEGER FUNCTION nfmpi_get_varn_int2_all(ncid, varid, num, starts, counts, i2vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: TwoByteInt = selected_int_kind(4)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-    END FUNCTION nfmpi_get_varn_int2_all
-
-    INTEGER FUNCTION nfmpi_get_varn_int_all(ncid, varid, num, starts, counts, ivals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER,                       INTENT(OUT) :: ivals(*)
-    END FUNCTION nfmpi_get_varn_int_all
-
-    INTEGER FUNCTION nfmpi_get_varn_real_all(ncid, varid, num, starts, counts, rvals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     REAL,                          INTENT(OUT) :: rvals(*)
-    END FUNCTION nfmpi_get_varn_real_all
-
-    INTEGER FUNCTION nfmpi_get_varn_double_all(ncid, varid, num, starts, counts, dvals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-    END FUNCTION nfmpi_get_varn_double_all
-
-    INTEGER FUNCTION nfmpi_get_varn_int8_all(ncid, varid, num, starts, counts, i8vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: EightByteInt = selected_int_kind(18)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-    END FUNCTION nfmpi_get_varn_int8_all
-
-
-    INTEGER FUNCTION nfmpi_put_varn_text(ncid, varid, num, starts, counts, text)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION nfmpi_put_varn_text
-
-    INTEGER FUNCTION nfmpi_put_varn_int1(ncid, varid, num, starts, counts, i1vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: OneByteInt = selected_int_kind(2)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION nfmpi_put_varn_int1
-
-    INTEGER FUNCTION nfmpi_put_varn_int2(ncid, varid, num, starts, counts, i2vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: TwoByteInt = selected_int_kind(4)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION nfmpi_put_varn_int2
-
-    INTEGER FUNCTION nfmpi_put_varn_int(ncid, varid, num, starts, counts, ivals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION nfmpi_put_varn_int
-
-    INTEGER FUNCTION nfmpi_put_varn_real(ncid, varid, num, starts, counts, rvals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION nfmpi_put_varn_real
-
-    INTEGER FUNCTION nfmpi_put_varn_double(ncid, varid, num, starts, counts, dvals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION nfmpi_put_varn_double
-
-    INTEGER FUNCTION nfmpi_put_varn_int8(ncid, varid, num, starts, counts, i8vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: EightByteInt = selected_int_kind(18)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION nfmpi_put_varn_int8
-
-    INTEGER FUNCTION nfmpi_put_varn_text_all(ncid, varid, num, starts, counts, text)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     CHARACTER(len=*),              INTENT(IN)  :: text
-    END FUNCTION nfmpi_put_varn_text_all
-
-    INTEGER FUNCTION nfmpi_put_varn_int1_all(ncid, varid, num, starts, counts, i1vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: OneByteInt = selected_int_kind(2)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-    END FUNCTION nfmpi_put_varn_int1_all
-
-    INTEGER FUNCTION nfmpi_put_varn_int2_all(ncid, varid, num, starts, counts, i2vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: TwoByteInt = selected_int_kind(4)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-    END FUNCTION nfmpi_put_varn_int2_all
-
-    INTEGER FUNCTION nfmpi_put_varn_int_all(ncid, varid, num, starts, counts, ivals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-    END FUNCTION nfmpi_put_varn_int_all
-
-    INTEGER FUNCTION nfmpi_put_varn_real_all(ncid, varid, num, starts, counts, rvals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
-    END FUNCTION nfmpi_put_varn_real_all
-
-    INTEGER FUNCTION nfmpi_put_varn_double_all(ncid, varid, num, starts, counts, dvals)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-    END FUNCTION nfmpi_put_varn_double_all
-
-    INTEGER FUNCTION nfmpi_put_varn_int8_all(ncid, varid, num, starts, counts, i8vals)
-            @USE_MPIF_HEADER@
-            integer, parameter :: EightByteInt = selected_int_kind(18)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-    END FUNCTION nfmpi_put_varn_int8_all
-
-!
-! flexible APIs, not ready yet for Fortran 77
-!
-!   INTEGER FUNCTION nfmpi_iget_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype, req)
-!                    INTEGER,                       INTENT(IN)  :: ncid
-!                    INTEGER,                       INTENT(IN)  :: varid
-!                    INTEGER,                       INTENT(IN)  :: num
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-!                    <type>,                        INTENT(OUT) :: buf(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                    INTEGER,                       INTENT(IN)  :: buftype
-!                    INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION nfmpi_iget_varn
-
-!   INTEGER FUNCTION nfmpi_iput_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype, req)
-!                    INTEGER,                       INTENT(IN)  :: ncid
-!                    INTEGER,                       INTENT(IN)  :: varid
-!                    INTEGER,                       INTENT(IN)  :: num
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-!                    <type>,                        INTENT(IN)  :: buf(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                    INTEGER,                       INTENT(IN)  :: buftype
-!                    INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION nfmpi_iput_varn
-
-    INTEGER FUNCTION nfmpi_iget_varn_text(ncid, varid, num, starts, counts, text, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     CHARACTER(len=*),              INTENT(OUT) :: text
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iget_varn_text
-
-    INTEGER FUNCTION nfmpi_iget_varn_int1(ncid, varid, num, starts, counts, i1vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: OneByteInt = selected_int_kind(2)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=OneByteInt),      INTENT(OUT) :: i1vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iget_varn_int1
-
-    INTEGER FUNCTION nfmpi_iget_varn_int2(ncid, varid, num, starts, counts, i2vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: TwoByteInt = selected_int_kind(4)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=TwoByteInt),      INTENT(OUT) :: i2vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iget_varn_int2
-
-    INTEGER FUNCTION nfmpi_iget_varn_int(ncid, varid, num, starts, counts, ivals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER,                       INTENT(OUT) :: ivals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iget_varn_int
-
-    INTEGER FUNCTION nfmpi_iget_varn_real(ncid, varid, num, starts, counts, rvals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     REAL,                          INTENT(OUT) :: rvals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iget_varn_real
-
-    INTEGER FUNCTION nfmpi_iget_varn_double(ncid, varid, num, starts, counts, dvals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     DOUBLE PRECISION,              INTENT(OUT) :: dvals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iget_varn_double
-
-    INTEGER FUNCTION nfmpi_iget_varn_int8(ncid, varid, num, starts, counts, i8vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: EightByteInt = selected_int_kind(18)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=EightByteInt),    INTENT(OUT) :: i8vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iget_varn_int8
-
-    INTEGER FUNCTION nfmpi_iput_varn_text(ncid, varid, num, starts, counts, text, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     CHARACTER(len=*),              INTENT(IN)  :: text
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iput_varn_text
-
-    INTEGER FUNCTION nfmpi_iput_varn_int1(ncid, varid, num, starts, counts, i1vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: OneByteInt = selected_int_kind(2)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iput_varn_int1
-
-    INTEGER FUNCTION nfmpi_iput_varn_int2(ncid, varid, num, starts, counts, i2vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: TwoByteInt = selected_int_kind(4)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iput_varn_int2
-
-    INTEGER FUNCTION nfmpi_iput_varn_int(ncid, varid, num, starts, counts, ivals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iput_varn_int
-
-    INTEGER FUNCTION nfmpi_iput_varn_real(ncid, varid, num, starts, counts, rvals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iput_varn_real
-
-    INTEGER FUNCTION nfmpi_iput_varn_double(ncid, varid, num, starts, counts, dvals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iput_varn_double
-
-    INTEGER FUNCTION nfmpi_iput_varn_int8(ncid, varid, num, starts, counts, i8vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: EightByteInt = selected_int_kind(18)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_iput_varn_int8
-
-!   INTEGER FUNCTION nfmpi_bput_varn(ncid, varid, num, starts, counts, buf, bufcount, buftype, req)
-!                    INTEGER,                       INTENT(IN)  :: ncid
-!                    INTEGER,                       INTENT(IN)  :: varid
-!                    INTEGER,                       INTENT(IN)  :: num
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-!                    <type>,                        INTENT(IN)  :: buf(*)
-!                    INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: bufcount
-!                    INTEGER,                       INTENT(IN)  :: buftype
-!                    INTEGER,                       INTENT(OUT) :: req
-!   END FUNCTION nfmpi_bput_varn
-
-    INTEGER FUNCTION nfmpi_bput_varn_text(ncid, varid, num, starts, counts, text, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     CHARACTER(len=*),              INTENT(IN)  :: text
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_bput_varn_text
-
-    INTEGER FUNCTION nfmpi_bput_varn_int1(ncid, varid, num, starts, counts, i1vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: OneByteInt = selected_int_kind(2)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=OneByteInt),      INTENT(IN)  :: i1vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_bput_varn_int1
-
-    INTEGER FUNCTION nfmpi_bput_varn_int2(ncid, varid, num, starts, counts, i2vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: TwoByteInt = selected_int_kind(4)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=TwoByteInt),      INTENT(@INTENTV@) :: i2vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_bput_varn_int2
-
-    INTEGER FUNCTION nfmpi_bput_varn_int(ncid, varid, num, starts, counts, ivals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER,                       INTENT(@INTENTV@) :: ivals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_bput_varn_int
-
-    INTEGER FUNCTION nfmpi_bput_varn_real(ncid, varid, num, starts, counts, rvals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     REAL,                          INTENT(@INTENTV@) :: rvals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_bput_varn_real
-
-    INTEGER FUNCTION nfmpi_bput_varn_double(ncid, varid, num, starts, counts, dvals, req)
-            @USE_MPIF_HEADER@
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     DOUBLE PRECISION,              INTENT(@INTENTV@) :: dvals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_bput_varn_double
-
-    INTEGER FUNCTION nfmpi_bput_varn_int8(ncid, varid, num, starts, counts, i8vals, req)
-            @USE_MPIF_HEADER@
-            integer, parameter :: EightByteInt = selected_int_kind(18)
-                     INTEGER,                       INTENT(IN)  :: ncid
-                     INTEGER,                       INTENT(IN)  :: varid
-                     INTEGER,                       INTENT(IN)  :: num
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: starts(*)
-                     INTEGER(KIND=MPI_OFFSET_KIND), INTENT(IN)  :: counts(*)
-                     INTEGER(KIND=EightByteInt),    INTENT(@INTENTV@) :: i8vals(*)
-                     INTEGER,                       INTENT(OUT) :: req
-    END FUNCTION nfmpi_bput_varn_int8
-
-!
-! End of varn subroutines:
-!
-
-END INTERFACE
-
-! PnetCDF flexible APIs
-      integer, external :: &
-          nfmpi_put_var, &
-          nfmpi_put_var1, &
-          nfmpi_put_vara, &
-          nfmpi_put_vars, &
-          nfmpi_put_varm, &
-          nfmpi_get_var, &
-          nfmpi_get_var1, &
-          nfmpi_get_vara, &
-          nfmpi_get_vars, &
-          nfmpi_get_varm, &
-          nfmpi_put_vard, &
-          nfmpi_get_vard, &
-          nfmpi_def_var_fill, &
-          nfmpi_inq_var_fill
-
-!         nfmpi_put_var_all
-! collective put an entire variable does not make sense
-!
-
-      integer, external :: &
-          nfmpi_put_var1_all, &
-          nfmpi_put_vara_all, &
-          nfmpi_put_vars_all, &
-          nfmpi_put_varm_all, &
-          nfmpi_get_var_all, &
-          nfmpi_get_var1_all, &
-          nfmpi_get_vara_all, &
-          nfmpi_get_vars_all, &
-          nfmpi_get_varm_all, &
-          nfmpi_iput_var, &
-          nfmpi_iput_var1, &
-          nfmpi_iput_vara, &
-          nfmpi_iput_vars, &
-          nfmpi_iput_varm, &
-          nfmpi_iget_var, &
-          nfmpi_iget_var1, &
-          nfmpi_iget_vara, &
-          nfmpi_iget_vars, &
-          nfmpi_iget_varm, &
-          nfmpi_bput_var, &
-          nfmpi_bput_var1, &
-          nfmpi_bput_vara, &
-          nfmpi_bput_vars, &
-          nfmpi_bput_varm, &
-          nfmpi_get_varn, &
-          nfmpi_put_varn, &
-          nfmpi_get_varn_all, &
-          nfmpi_put_varn_all, &
-          nfmpi_iget_varn, &
-          nfmpi_iput_varn, &
-          nfmpi_bput_varn, &
-          nfmpi_put_vard_all, &
-          nfmpi_get_vard_all
-
diff --git a/src/libf90/getput_text.m4 b/src/libf90/getput_text.m4
deleted file mode 100644
index 0ffd27c..0000000
--- a/src/libf90/getput_text.m4
+++ /dev/null
@@ -1,251 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-! Do not edit this file. It is produced from the corresponding .m4 source
-dnl
-!
-!  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
-!  See COPYRIGHT notice in top-level directory.
-!
-! $Id: getput_text.m4 1882 2014-11-21 17:44:34Z wkliao $
-!
-
-dnl
-dnl TEXTVAR1(ncid, varid, values, start, count, stride, map)
-dnl
-define(`TEXTVAR1',dnl
-`dnl
-   function nf90mpi_$1_var_text$3(ncid, varid, values, start, count, stride, map)
-     integer,                                                intent(in) :: ncid, varid
-     character (len=*),                                      intent($2) :: values
-     integer (kind=MPI_OFFSET_KIND), dimension(:), optional, intent(in) :: start, count, stride, map
-
-     integer                                                            :: nf90mpi_$1_var_text$3
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims)       :: localStart, localCount, localStride
- 
-     ! Set local arguments to default values
-     localStart (:)  = 1
-     localCount (1)  = LEN(values); localCount (2:) = 1
-     localStride(:)  = 1
-
-     if(present(start))  localStart (:size(start) ) = start(:)
-     if(present(count))  localCount (:size(count) ) = count(:)
-     if(present(stride)) localStride(:size(stride)) = stride(:)
-     if(present(map)) then
-       nf90mpi_$1_var_text$3 = nfmpi_$1_varm_text$3(ncid, varid, localStart, localCount, localStride, map, values)
-     else
-       nf90mpi_$1_var_text$3 = nfmpi_$1_vars_text$3(ncid, varid, localStart, localCount, localStride, values)
-     end if
-   end function nf90mpi_$1_var_text$3
-')dnl
-
-!
-! Independent put APIs
-!
-
-TEXTVAR1(put, in)
-TEXTVAR1(get, out)
-
-!
-! Collective put APIs
-!
-
-TEXTVAR1(put, in,  _all)
-TEXTVAR1(get, out, _all)
-
-
-dnl
-dnl TEXTVAR(ncid, varid, values, start, count, stride, map)
-dnl
-define(`TEXTVAR',dnl
-`dnl
-   function nf90mpi_$1_var_$2_text$6(ncid, varid, values, start, count, stride, map)
-     integer,                                                intent(in) :: ncid, varid
-     character (len=*), dimension($3),                       intent($5) :: values
-     integer (kind=MPI_OFFSET_KIND), dimension(:), optional, intent(in) :: start, count, stride, map
- 
-     integer                                                            :: nf90mpi_$1_var_$2_text$6
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims)       :: localStart, localCount, localStride, localMap
-     integer                                                            :: numDims, counter
- 
-     ! Set local arguments to default values
-     numDims = substr(`$2', `0', `1')
-
-     localStart (:         ) = 1
-     localCount (:numDims+1) = (/ LEN(values($4)), shape(values) /)
-     localCount (numDims+2:) = 0
-     localStride(:         ) = 1
-     ! localMap   (:numDims  ) = (/ 1, (product(localCount(:counter)), counter = 1, numDims - 1) /)
-     localMap(1) = 1
-     do counter = 1, numDims - 1
-        localMap(counter+1) = localMap(counter) * localCount(counter)
-     enddo
- 
-     if(present(start))  localStart (:size(start))  = start(:)
-     if(present(count))  localCount (:size(count))  = count(:)
-     if(present(stride)) localStride(:size(stride)) = stride(:)
-     if(present(map))  then
-       localMap   (:size(map))    = map(:)
-       nf90mpi_$1_var_$2_text$6 = &
-          nfmpi_$1_varm_text$6(ncid, varid, localStart, localCount, localStride, localMap, values($4))
-     else
-       nf90mpi_$1_var_$2_text$6 = &
-          nfmpi_$1_vars_text$6(ncid, varid, localStart, localCount, localStride, values($4))
-     end if
-   end function nf90mpi_$1_var_$2_text$6
-')dnl
-
-TEXTVAR(put, 1D,  :,               1,              in)
-TEXTVAR(put, 2D, `:,:',           `1,1',           in)
-TEXTVAR(put, 3D, `:,:,:',         `1,1,1',         in)
-TEXTVAR(put, 4D, `:,:,:,:',       `1,1,1,1',       in)
-TEXTVAR(put, 5D, `:,:,:,:,:',     `1,1,1,1,1',     in)
-TEXTVAR(put, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
-TEXTVAR(put, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
-
-TEXTVAR(get, 1D,  :,               1,              out)
-TEXTVAR(get, 2D, `:,:',           `1,1',           out)
-TEXTVAR(get, 3D, `:,:,:',         `1,1,1',         out)
-TEXTVAR(get, 4D, `:,:,:,:',       `1,1,1,1',       out)
-TEXTVAR(get, 5D, `:,:,:,:,:',     `1,1,1,1,1',     out)
-TEXTVAR(get, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out)
-TEXTVAR(get, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out)
-
-!
-! Collective APIs
-!
-
-TEXTVAR(put, 1D,  :,               1,              in, _all)
-TEXTVAR(put, 2D, `:,:',           `1,1',           in, _all)
-TEXTVAR(put, 3D, `:,:,:',         `1,1,1',         in, _all)
-TEXTVAR(put, 4D, `:,:,:,:',       `1,1,1,1',       in, _all)
-TEXTVAR(put, 5D, `:,:,:,:,:',     `1,1,1,1,1',     in, _all)
-TEXTVAR(put, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in, _all)
-TEXTVAR(put, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in, _all)
-
-TEXTVAR(get, 1D,  :,               1,              out, _all)
-TEXTVAR(get, 2D, `:,:',           `1,1',           out, _all)
-TEXTVAR(get, 3D, `:,:,:',         `1,1,1',         out, _all)
-TEXTVAR(get, 4D, `:,:,:,:',       `1,1,1,1',       out, _all)
-TEXTVAR(get, 5D, `:,:,:,:,:',     `1,1,1,1,1',     out, _all)
-TEXTVAR(get, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out, _all)
-TEXTVAR(get, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out, _all)
-
-!
-! Nonblocking APIs
-!
-
-dnl
-dnl NBTEXTVAR1(ncid, varid, values, req, start, count, stride, map)
-dnl
-define(`NBTEXTVAR1',dnl
-`dnl
-   function nf90mpi_$1_var_text(ncid, varid, values, req, start, count, stride, map)
-     integer,                                                intent( in) :: ncid, varid
-     integer,                                                intent(out) :: req
-     character (len=*),                                      intent( $2) :: values
-     integer (kind=MPI_OFFSET_KIND), dimension(:), optional, intent( in) :: start, count, stride, map
-
-     integer                                                             :: nf90mpi_$1_var_text
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims)        :: localStart, localCount, localStride
- 
-     ! Set local arguments to default values
-     localStart (:)  = 1
-     localCount (1)  = LEN(values); localCount (2:) = 1
-     localStride(:)  = 1
-          
-     if(present(start))  localStart (:size(start) ) = start(:)
-     if(present(count))  localCount (:size(count) ) = count(:)
-     if(present(stride)) localStride(:size(stride)) = stride(:)
-     if(present(map)) then
-       nf90mpi_$1_var_text = nfmpi_$1_varm_text(ncid, varid, localStart, localCount, localStride, map, values, req)
-     else
-       nf90mpi_$1_var_text = nfmpi_$1_vars_text(ncid, varid, localStart, localCount, localStride, values, req)
-     end if
-   end function nf90mpi_$1_var_text
-')dnl
-
-!
-! iput APIs
-!
-
-NBTEXTVAR1(iput, in)
-NBTEXTVAR1(iget, out)
-
-!
-! bput APIs
-!
-
-NBTEXTVAR1(bput, in)
-
-
-dnl
-dnl NBTEXTVAR(ncid, varid, values, req, start, count, stride, map)
-dnl
-define(`NBTEXTVAR',dnl
-`dnl
-   function nf90mpi_$1_var_$2_text(ncid, varid, values, req, start, count, stride, map)
-     integer,                                                intent( in) :: ncid, varid
-     integer,                                                intent(out) :: req
-     character (len=*), dimension($3),                       intent( $5) :: values
-     integer (kind=MPI_OFFSET_KIND), dimension(:), optional, intent( in) :: start, count, stride, map
- 
-     integer                                                             :: nf90mpi_$1_var_$2_text
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims)        :: localStart, localCount, localStride, localMap
-     integer                                                             :: numDims, counter
- 
-     ! Set local arguments to default values
-     numDims = substr(`$2', `0', `1')
-
-     localStart (:         ) = 1
-     localCount ( :numDims+1) = (/ LEN(values($4)), shape(values) /)
-     localCount (numDims+2:) = 0
-     localStride(:         ) = 1
-     ! localMap   (:numDims  ) = (/ 1, (product(localCount(:counter)), counter = 1, numDims - 1) /)
-     localMap(1) = 1
-     do counter = 1, numDims - 1
-        localMap(counter+1) = localMap(counter) * localCount(counter)
-     enddo
- 
-     if(present(start))  localStart (:size(start))  = start(:)
-     if(present(count))  localCount (:size(count))  = count(:)
-     if(present(stride)) localStride(:size(stride)) = stride(:)
-     if(present(map))  then
-       localMap   (:size(map))    = map(:)
-       nf90mpi_$1_var_$2_text = &
-          nfmpi_$1_varm_text(ncid, varid, localStart, localCount, localStride, localMap, values($4), req)
-     else
-       nf90mpi_$1_var_$2_text = &
-          nfmpi_$1_vars_text(ncid, varid, localStart, localCount, localStride, values($4), req)
-     end if
-   end function nf90mpi_$1_var_$2_text
-')dnl
-
-NBTEXTVAR(iput, 1D,  :,               1,              in)
-NBTEXTVAR(iput, 2D, `:,:',           `1,1',           in)
-NBTEXTVAR(iput, 3D, `:,:,:',         `1,1,1',         in)
-NBTEXTVAR(iput, 4D, `:,:,:,:',       `1,1,1,1',       in)
-NBTEXTVAR(iput, 5D, `:,:,:,:,:',     `1,1,1,1,1',     in)
-NBTEXTVAR(iput, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
-NBTEXTVAR(iput, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
-
-NBTEXTVAR(iget, 1D,  :,               1,              out)
-NBTEXTVAR(iget, 2D, `:,:',           `1,1',           out)
-NBTEXTVAR(iget, 3D, `:,:,:',         `1,1,1',         out)
-NBTEXTVAR(iget, 4D, `:,:,:,:',       `1,1,1,1',       out)
-NBTEXTVAR(iget, 5D, `:,:,:,:,:',     `1,1,1,1,1',     out)
-NBTEXTVAR(iget, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out)
-NBTEXTVAR(iget, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out)
-
-!
-! bput APIs
-!
-
-NBTEXTVAR(bput, 1D,  :,               1,              in)
-NBTEXTVAR(bput, 2D, `:,:',           `1,1',           in)
-NBTEXTVAR(bput, 3D, `:,:,:',         `1,1,1',         in)
-NBTEXTVAR(bput, 4D, `:,:,:,:',       `1,1,1,1',       in)
-NBTEXTVAR(bput, 5D, `:,:,:,:,:',     `1,1,1,1,1',     in)
-NBTEXTVAR(bput, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
-NBTEXTVAR(bput, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
-
diff --git a/src/libf90/getput_var.m4 b/src/libf90/getput_var.m4
deleted file mode 100644
index 9849fe9..0000000
--- a/src/libf90/getput_var.m4
+++ /dev/null
@@ -1,678 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-! Do not edit this file. It is produced from the corresponding .m4 source
-dnl
-!
-!  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
-!  See COPYRIGHT notice in top-level directory.
-!
-! $Id: getput_var.m4 2221 2015-12-12 00:39:15Z wkliao $
-!
-
-dnl
-dnl VAR_SCALAR
-dnl
-define(`VAR_SCALAR',dnl
-`dnl
-   function nf90mpi_$1_var_$3$2(ncid, varid, values, start, bufcount, buftype)
-     integer,                                                intent( in) :: ncid, varid
-     $4 (kind=$3),                                           intent($6)  :: values
-     integer (kind=MPI_OFFSET_KIND), dimension(:), optional, intent( in) :: start
-     integer (kind=MPI_OFFSET_KIND),               optional, intent( in) :: bufcount
-     integer,                                      optional, intent( in) :: buftype
-
-     integer                                                             :: nf90mpi_$1_var_$3$2
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims)        :: localIndex
- 
-     ! Set local arguments to default values
-     localIndex(:) = 1
-     if (present(start)) localIndex(:size(start)) = start(:)
- 
-     if (present(buftype)) then
-         nf90mpi_$1_var_$3$2 = nfmpi_$1_var1$2(ncid, varid, localIndex, values, bufcount, buftype)
-     else
-         nf90mpi_$1_var_$3$2 = nfmpi_$1_var1_$5$2(ncid, varid, localIndex, values)
-     endif
-   end function nf90mpi_$1_var_$3$2
-')dnl
-
-VAR_SCALAR(put,     , OneByteInt,    integer, int1,   in)
-VAR_SCALAR(put,     , TwoByteInt,    integer, int2,   INTENTV)
-VAR_SCALAR(put,     , FourByteInt,   integer, int,    INTENTV)
-VAR_SCALAR(put,     , FourByteReal,  real,    real,   INTENTV)
-VAR_SCALAR(put,     , EightByteReal, real,    double, INTENTV)
-VAR_SCALAR(put,     , EightByteInt,  integer, int8,   INTENTV)
-
-VAR_SCALAR(put, _all, OneByteInt,    integer, int1,   in)
-VAR_SCALAR(put, _all, TwoByteInt,    integer, int2,   INTENTV)
-VAR_SCALAR(put, _all, FourByteInt,   integer, int,    INTENTV)
-VAR_SCALAR(put, _all, FourByteReal,  real,    real,   INTENTV)
-VAR_SCALAR(put, _all, EightByteReal, real,    double, INTENTV)
-VAR_SCALAR(put, _all, EightByteInt,  integer, int8,   INTENTV)
-
-VAR_SCALAR(get,     , OneByteInt,    integer, int1,   out)
-VAR_SCALAR(get,     , TwoByteInt,    integer, int2,   out)
-VAR_SCALAR(get,     , FourByteInt,   integer, int,    out)
-VAR_SCALAR(get,     , FourByteReal,  real,    real,   out)
-VAR_SCALAR(get,     , EightByteReal, real,    double, out)
-VAR_SCALAR(get,     , EightByteInt,  integer, int8,   out)
-
-VAR_SCALAR(get, _all, OneByteInt,    integer, int1,   out)
-VAR_SCALAR(get, _all, TwoByteInt,    integer, int2,   out)
-VAR_SCALAR(get, _all, FourByteInt,   integer, int,    out)
-VAR_SCALAR(get, _all, FourByteReal,  real,    real,   out)
-VAR_SCALAR(get, _all, EightByteReal, real,    double, out)
-VAR_SCALAR(get, _all, EightByteInt,  integer, int8,   out)
-
-dnl
-dnl NBVAR1(ncid, varid, values, start, count, req)
-dnl
-define(`NBVAR1',dnl
-`dnl
-   function nf90mpi_$1_var_$2(ncid, varid, values, req, start, bufcount, buftype)
-     integer,                                                intent( in) :: ncid, varid
-     $3 (kind=$2),                                           intent($5)  :: values
-     integer,                                                intent(out) :: req
-     integer (kind=MPI_OFFSET_KIND), dimension(:), optional, intent( in) :: start
-     integer (kind=MPI_OFFSET_KIND),               optional, intent( in) :: bufcount
-     integer,                                      optional, intent( in) :: buftype
-
-     integer                                                             :: nf90mpi_$1_var_$2
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims)        :: localIndex
- 
-     ! Set local arguments to default values
-     localIndex(:) = 1
-     if (present(start)) localIndex(:size(start)) = start(:)
- 
-     if (present(buftype)) then
-         nf90mpi_$1_var_$2 = nfmpi_$1_var1(ncid, varid, localIndex, values, bufcount, buftype, req)
-     else
-         nf90mpi_$1_var_$2 = nfmpi_$1_var1_$4(ncid, varid, localIndex, values, req)
-     endif
-   end function nf90mpi_$1_var_$2
-')dnl
-
-!
-! Nonblocking iput APIs
-!
-
-NBVAR1(iput, OneByteInt,    integer, int1,   in)
-NBVAR1(iput, TwoByteInt,    integer, int2,   INTENTV)
-NBVAR1(iput, FourByteInt,   integer, int,    INTENTV)
-NBVAR1(iput, FourByteReal,  real,    real,   INTENTV)
-NBVAR1(iput, EightByteReal, real,    double, INTENTV)
-NBVAR1(iput, EightByteInt,  integer, int8,   INTENTV)
-
-!
-! Nonblocking iget APIs
-!
-
-NBVAR1(iget, OneByteInt,    integer, int1,   out)
-NBVAR1(iget, TwoByteInt,    integer, int2,   out)
-NBVAR1(iget, FourByteInt,   integer, int,    out)
-NBVAR1(iget, FourByteReal,  real,    real,   out)
-NBVAR1(iget, EightByteReal, real,    double, out)
-NBVAR1(iget, EightByteInt,  integer, int8,   out)
-
-!
-! Nonblocking bput APIs
-!
-
-NBVAR1(bput, OneByteInt,    integer, int1,   in)
-NBVAR1(bput, TwoByteInt,    integer, int2,   INTENTV)
-NBVAR1(bput, FourByteInt,   integer, int,    INTENTV)
-NBVAR1(bput, FourByteReal,  real,    real,   INTENTV)
-NBVAR1(bput, EightByteReal, real,    double, INTENTV)
-NBVAR1(bput, EightByteInt,  integer, int8,   INTENTV)
-
-dnl
-dnl VAR(ncid, varid, values, start, count, stride, map)
-dnl
-define(`VAR',dnl
-`dnl
-   function nf90mpi_$1_var_$2_$3$8(ncid, varid, values, start, count, stride, map, bufcount, buftype)
-     integer,                                                intent( in) :: ncid, varid
-     $4 (kind=$3), dimension($6),                            intent( $7) :: values
-     integer (kind=MPI_OFFSET_KIND), dimension(:), optional, intent( in) :: start, count, stride, map
-     integer (kind=MPI_OFFSET_KIND),               optional, intent( in) :: bufcount
-     integer,                                      optional, intent( in) :: buftype
- 
-     integer                                                             :: nf90mpi_$1_var_$2_$3$8
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims)        :: localStart, localCount, localStride, localMap
-     integer                                                             :: numDims, counter
- 
-     ! Set local arguments to default values
-     numDims = substr(`$2', `0', `1')
-     localStart (:         ) = 1
-     localCount (:numDims  ) = shape(values)
-     localCount (numDims+1:) = 1
-     localStride(:         ) = 1
-     ! localMap   (:numDims  ) = (/ 1, (product(localCount(:counter)), counter = 1, numDims - 1) /)
-     localMap(1) = 1
-     do counter = 1, numDims - 1
-        localMap(counter+1) = localMap(counter) * localCount(counter)
-     enddo
- 
-     if (present(start))  localStart (:size(start) )  = start(:)
-     if (present(count))  localCount (:size(count) )  = count(:)
-     if (present(stride)) localStride(:size(stride)) = stride(:)
-     if (present(map))  then
-         localMap   (:size(map))    = map(:)
-         if (present(buftype)) then
-             nf90mpi_$1_var_$2_$3$8 = &
-                nfmpi_$1_varm$8(ncid, varid, localStart, localCount, localStride, localMap, values, bufcount, buftype)
-         else
-             nf90mpi_$1_var_$2_$3$8 = &
-                nfmpi_$1_varm_$5$8(ncid, varid, localStart, localCount, localStride, localMap, values)
-         endif
-     else if (present(stride)) then
-         if (present(buftype)) then
-             nf90mpi_$1_var_$2_$3$8 = &
-                nfmpi_$1_vars$8(ncid, varid, localStart, localCount, localStride, values, bufcount, buftype)
-         else
-             nf90mpi_$1_var_$2_$3$8 = &
-                nfmpi_$1_vars_$5$8(ncid, varid, localStart, localCount, localStride, values)
-         endif
-     else
-         if (present(buftype)) then
-             nf90mpi_$1_var_$2_$3$8 = &
-                nfmpi_$1_vara$8(ncid, varid, localStart, localCount, values, bufcount, buftype)
-         else
-             nf90mpi_$1_var_$2_$3$8 = &
-                nfmpi_$1_vara_$5$8(ncid, varid, localStart, localCount, values)
-         endif
-     end if
-   end function nf90mpi_$1_var_$2_$3$8
-')dnl
-
-!
-! Independent put APIs
-!
-
-VAR(put, 1D, OneByteInt, integer, int1,  :,              in)
-VAR(put, 2D, OneByteInt, integer, int1, `:,:',           in)
-VAR(put, 3D, OneByteInt, integer, int1, `:,:,:',         in)
-VAR(put, 4D, OneByteInt, integer, int1, `:,:,:,:',       in)
-VAR(put, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     in)
-VAR(put, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
-VAR(put, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
-
-VAR(put, 1D, TwoByteInt, integer, int2,  :,              INTENTV)
-VAR(put, 2D, TwoByteInt, integer, int2, `:,:',           INTENTV)
-VAR(put, 3D, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
-VAR(put, 4D, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
-VAR(put, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
-VAR(put, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
-VAR(put, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
-
-VAR(put, 1D, FourByteInt, integer, int,  :,              INTENTV)
-VAR(put, 2D, FourByteInt, integer, int, `:,:',           INTENTV)
-VAR(put, 3D, FourByteInt, integer, int, `:,:,:',         INTENTV)
-VAR(put, 4D, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
-VAR(put, 5D, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
-VAR(put, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
-VAR(put, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
-
-VAR(put, 1D, FourByteReal, real,   real,  :,              INTENTV)
-VAR(put, 2D, FourByteReal, real,   real, `:,:',           INTENTV)
-VAR(put, 3D, FourByteReal, real,   real, `:,:,:',         INTENTV)
-VAR(put, 4D, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
-VAR(put, 5D, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
-VAR(put, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
-VAR(put, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
-
-VAR(put, 1D, EightByteReal, real, double,  :,              INTENTV)
-VAR(put, 2D, EightByteReal, real, double, `:,:',           INTENTV)
-VAR(put, 3D, EightByteReal, real, double, `:,:,:',         INTENTV)
-VAR(put, 4D, EightByteReal, real, double, `:,:,:,:',       INTENTV)
-VAR(put, 5D, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
-VAR(put, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
-VAR(put, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
-
-VAR(put, 1D, EightByteInt, integer, int8,  :,              INTENTV)
-VAR(put, 2D, EightByteInt, integer, int8, `:,:',           INTENTV)
-VAR(put, 3D, EightByteInt, integer, int8, `:,:,:',         INTENTV)
-VAR(put, 4D, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
-VAR(put, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
-VAR(put, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
-VAR(put, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
-
-!
-! Independent get APIs
-!
-
-VAR(get, 1D, OneByteInt, integer, int1,  :,              out)
-VAR(get, 2D, OneByteInt, integer, int1, `:,:',           out)
-VAR(get, 3D, OneByteInt, integer, int1, `:,:,:',         out)
-VAR(get, 4D, OneByteInt, integer, int1, `:,:,:,:',       out)
-VAR(get, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     out)
-VAR(get, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   out)
-VAR(get, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out)
-
-VAR(get, 1D, TwoByteInt, integer, int2,  :,              out)
-VAR(get, 2D, TwoByteInt, integer, int2, `:,:',           out)
-VAR(get, 3D, TwoByteInt, integer, int2, `:,:,:',         out)
-VAR(get, 4D, TwoByteInt, integer, int2, `:,:,:,:',       out)
-VAR(get, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     out)
-VAR(get, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out)
-VAR(get, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out)
-
-VAR(get, 1D, FourByteInt, integer, int,  :,              out)
-VAR(get, 2D, FourByteInt, integer, int, `:,:',           out)
-VAR(get, 3D, FourByteInt, integer, int, `:,:,:',         out)
-VAR(get, 4D, FourByteInt, integer, int, `:,:,:,:',       out)
-VAR(get, 5D, FourByteInt, integer, int, `:,:,:,:,:',     out)
-VAR(get, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   out)
-VAR(get, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', out)
-
-VAR(get, 1D, FourByteReal, real,   real,  :,              out)
-VAR(get, 2D, FourByteReal, real,   real, `:,:',           out)
-VAR(get, 3D, FourByteReal, real,   real, `:,:,:',         out)
-VAR(get, 4D, FourByteReal, real,   real, `:,:,:,:',       out)
-VAR(get, 5D, FourByteReal, real,   real, `:,:,:,:,:',     out)
-VAR(get, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   out)
-VAR(get, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', out)
-
-VAR(get, 1D, EightByteReal, real, double,  :,              out)
-VAR(get, 2D, EightByteReal, real, double, `:,:',           out)
-VAR(get, 3D, EightByteReal, real, double, `:,:,:',         out)
-VAR(get, 4D, EightByteReal, real, double, `:,:,:,:',       out)
-VAR(get, 5D, EightByteReal, real, double, `:,:,:,:,:',     out)
-VAR(get, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   out)
-VAR(get, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', out)
-
-VAR(get, 1D, EightByteInt, integer, int8,  :,              out)
-VAR(get, 2D, EightByteInt, integer, int8, `:,:',           out)
-VAR(get, 3D, EightByteInt, integer, int8, `:,:,:',         out)
-VAR(get, 4D, EightByteInt, integer, int8, `:,:,:,:',       out)
-VAR(get, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     out)
-VAR(get, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   out)
-VAR(get, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out)
-
-!
-! collective put APIs
-!
-
-VAR(put, 1D, OneByteInt, integer, int1,  :,              in, _all)
-VAR(put, 2D, OneByteInt, integer, int1, `:,:',           in, _all)
-VAR(put, 3D, OneByteInt, integer, int1, `:,:,:',         in, _all)
-VAR(put, 4D, OneByteInt, integer, int1, `:,:,:,:',       in, _all)
-VAR(put, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     in, _all)
-VAR(put, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   in, _all)
-VAR(put, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in, _all)
-
-VAR(put, 1D, TwoByteInt, integer, int2,  :,              INTENTV, _all)
-VAR(put, 2D, TwoByteInt, integer, int2, `:,:',           INTENTV, _all)
-VAR(put, 3D, TwoByteInt, integer, int2, `:,:,:',         INTENTV, _all)
-VAR(put, 4D, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV, _all)
-VAR(put, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV, _all)
-VAR(put, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV, _all)
-VAR(put, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV, _all)
-
-VAR(put, 1D, FourByteInt, integer, int,  :,              INTENTV, _all)
-VAR(put, 2D, FourByteInt, integer, int, `:,:',           INTENTV, _all)
-VAR(put, 3D, FourByteInt, integer, int, `:,:,:',         INTENTV, _all)
-VAR(put, 4D, FourByteInt, integer, int, `:,:,:,:',       INTENTV, _all)
-VAR(put, 5D, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV, _all)
-VAR(put, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV, _all)
-VAR(put, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV, _all)
-
-VAR(put, 1D, FourByteReal, real,   real,  :,              INTENTV, _all)
-VAR(put, 2D, FourByteReal, real,   real, `:,:',           INTENTV, _all)
-VAR(put, 3D, FourByteReal, real,   real, `:,:,:',         INTENTV, _all)
-VAR(put, 4D, FourByteReal, real,   real, `:,:,:,:',       INTENTV, _all)
-VAR(put, 5D, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV, _all)
-VAR(put, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV, _all)
-VAR(put, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV, _all)
-
-VAR(put, 1D, EightByteReal, real, double,  :,              INTENTV, _all)
-VAR(put, 2D, EightByteReal, real, double, `:,:',           INTENTV, _all)
-VAR(put, 3D, EightByteReal, real, double, `:,:,:',         INTENTV, _all)
-VAR(put, 4D, EightByteReal, real, double, `:,:,:,:',       INTENTV, _all)
-VAR(put, 5D, EightByteReal, real, double, `:,:,:,:,:',     INTENTV, _all)
-VAR(put, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV, _all)
-VAR(put, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV, _all)
-
-VAR(put, 1D, EightByteInt, integer, int8,  :,              INTENTV, _all)
-VAR(put, 2D, EightByteInt, integer, int8, `:,:',           INTENTV, _all)
-VAR(put, 3D, EightByteInt, integer, int8, `:,:,:',         INTENTV, _all)
-VAR(put, 4D, EightByteInt, integer, int8, `:,:,:,:',       INTENTV, _all)
-VAR(put, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV, _all)
-VAR(put, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV, _all)
-VAR(put, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV, _all)
-!
-! collective get APIs
-!
-
-VAR(get, 1D, OneByteInt, integer, int1,  :,              out, _all)
-VAR(get, 2D, OneByteInt, integer, int1, `:,:',           out, _all)
-VAR(get, 3D, OneByteInt, integer, int1, `:,:,:',         out, _all)
-VAR(get, 4D, OneByteInt, integer, int1, `:,:,:,:',       out, _all)
-VAR(get, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     out, _all)
-VAR(get, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   out, _all)
-VAR(get, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out, _all)
-
-VAR(get, 1D, TwoByteInt, integer, int2,  :,              out, _all)
-VAR(get, 2D, TwoByteInt, integer, int2, `:,:',           out, _all)
-VAR(get, 3D, TwoByteInt, integer, int2, `:,:,:',         out, _all)
-VAR(get, 4D, TwoByteInt, integer, int2, `:,:,:,:',       out, _all)
-VAR(get, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     out, _all)
-VAR(get, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out, _all)
-VAR(get, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out, _all)
-
-VAR(get, 1D, FourByteInt, integer, int,  :,              out, _all)
-VAR(get, 2D, FourByteInt, integer, int, `:,:',           out, _all)
-VAR(get, 3D, FourByteInt, integer, int, `:,:,:',         out, _all)
-VAR(get, 4D, FourByteInt, integer, int, `:,:,:,:',       out, _all)
-VAR(get, 5D, FourByteInt, integer, int, `:,:,:,:,:',     out, _all)
-VAR(get, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   out, _all)
-VAR(get, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', out, _all)
-
-VAR(get, 1D, FourByteReal, real,   real,  :,              out, _all)
-VAR(get, 2D, FourByteReal, real,   real, `:,:',           out, _all)
-VAR(get, 3D, FourByteReal, real,   real, `:,:,:',         out, _all)
-VAR(get, 4D, FourByteReal, real,   real, `:,:,:,:',       out, _all)
-VAR(get, 5D, FourByteReal, real,   real, `:,:,:,:,:',     out, _all)
-VAR(get, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   out, _all)
-VAR(get, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', out, _all)
-
-VAR(get, 1D, EightByteReal, real, double,  :,              out, _all)
-VAR(get, 2D, EightByteReal, real, double, `:,:',           out, _all)
-VAR(get, 3D, EightByteReal, real, double, `:,:,:',         out, _all)
-VAR(get, 4D, EightByteReal, real, double, `:,:,:,:',       out, _all)
-VAR(get, 5D, EightByteReal, real, double, `:,:,:,:,:',     out, _all)
-VAR(get, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   out, _all)
-VAR(get, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', out, _all)
-
-VAR(get, 1D, EightByteInt, integer, int8,  :,              out, _all)
-VAR(get, 2D, EightByteInt, integer, int8, `:,:',           out, _all)
-VAR(get, 3D, EightByteInt, integer, int8, `:,:,:',         out, _all)
-VAR(get, 4D, EightByteInt, integer, int8, `:,:,:,:',       out, _all)
-VAR(get, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     out, _all)
-VAR(get, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   out, _all)
-VAR(get, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out, _all)
-
-!
-! Nonblocking APIs
-!
-
-dnl
-dnl NBVAR(ncid, varid, values, start, count, stride, map, req)
-dnl
-define(`NBVAR',dnl
-`dnl
-   function nf90mpi_$1_var_$2_$3(ncid, varid, values, req, start, count, stride, map, bufcount, buftype)
-     integer,                                                intent( in) :: ncid, varid
-     $4 (kind=$3), dimension($6),                            intent( $7) :: values
-     integer,                                                intent(out) :: req
-     integer (kind=MPI_OFFSET_KIND), dimension(:), optional, intent( in) :: start, count, stride, map
-     integer (kind=MPI_OFFSET_KIND),               optional, intent( in) :: bufcount
-     integer,                                      optional, intent( in) :: buftype
- 
-     integer                                                             :: nf90mpi_$1_var_$2_$3
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims)        :: localStart, localCount, localStride, localMap
-     integer                                                             :: numDims, counter
- 
-     ! Set local arguments to default values
-     numDims = substr(`$2', `0', `1')
-     localStart (:         ) = 1
-     localCount (:numDims  ) = shape(values)
-     localCount (numDims+1:) = 1
-     localStride(:         ) = 1
-     ! localMap   (:numDims  ) = (/ 1, (product(localCount(:counter)), counter = 1, numDims - 1) /)
-     localMap(1) = 1
-     do counter = 1, numDims - 1
-        localMap(counter+1) = localMap(counter) * localCount(counter)
-     enddo
- 
-     if (present(start))  localStart (:size(start) )  = start(:)
-     if (present(count))  localCount (:size(count) )  = count(:)
-     if (present(stride)) localStride(:size(stride)) = stride(:)
-     if (present(map))  then
-         localMap   (:size(map))    = map(:)
-         if (present(buftype)) then
-             nf90mpi_$1_var_$2_$3 = &
-                 nfmpi_$1_varm(ncid, varid, localStart, localCount, localStride, localMap, values, bufcount, buftype, req)
-         else
-             nf90mpi_$1_var_$2_$3 = &
-                 nfmpi_$1_varm_$5(ncid, varid, localStart, localCount, localStride, localMap, values, req)
-         endif
-     else if (present(stride)) then
-         if (present(buftype)) then
-             nf90mpi_$1_var_$2_$3 = &
-                 nfmpi_$1_vars(ncid, varid, localStart, localCount, localStride, values, bufcount, buftype, req)
-         else
-             nf90mpi_$1_var_$2_$3 = &
-                 nfmpi_$1_vars_$5(ncid, varid, localStart, localCount, localStride, values, req)
-         endif
-     else
-         if (present(buftype)) then
-             nf90mpi_$1_var_$2_$3 = &
-                 nfmpi_$1_vara(ncid, varid, localStart, localCount, values, bufcount, buftype, req)
-         else
-             nf90mpi_$1_var_$2_$3 = &
-                 nfmpi_$1_vara_$5(ncid, varid, localStart, localCount, values, req)
-         endif
-     end if
-   end function nf90mpi_$1_var_$2_$3
-')dnl
-
-!
-! iput APIs
-!
-
-NBVAR(iput, 1D, OneByteInt, integer, int1,  :,              in)
-NBVAR(iput, 2D, OneByteInt, integer, int1, `:,:',           in)
-NBVAR(iput, 3D, OneByteInt, integer, int1, `:,:,:',         in)
-NBVAR(iput, 4D, OneByteInt, integer, int1, `:,:,:,:',       in)
-NBVAR(iput, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     in)
-NBVAR(iput, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
-NBVAR(iput, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
-
-NBVAR(iput, 1D, TwoByteInt, integer, int2,  :,              INTENTV)
-NBVAR(iput, 2D, TwoByteInt, integer, int2, `:,:',           INTENTV)
-NBVAR(iput, 3D, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
-NBVAR(iput, 4D, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
-NBVAR(iput, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
-NBVAR(iput, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
-NBVAR(iput, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
-
-NBVAR(iput, 1D, FourByteInt, integer, int,  :,              INTENTV)
-NBVAR(iput, 2D, FourByteInt, integer, int, `:,:',           INTENTV)
-NBVAR(iput, 3D, FourByteInt, integer, int, `:,:,:',         INTENTV)
-NBVAR(iput, 4D, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
-NBVAR(iput, 5D, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
-NBVAR(iput, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
-NBVAR(iput, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
-
-NBVAR(iput, 1D, FourByteReal, real,   real,  :,              INTENTV)
-NBVAR(iput, 2D, FourByteReal, real,   real, `:,:',           INTENTV)
-NBVAR(iput, 3D, FourByteReal, real,   real, `:,:,:',         INTENTV)
-NBVAR(iput, 4D, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
-NBVAR(iput, 5D, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
-NBVAR(iput, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
-NBVAR(iput, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
-
-NBVAR(iput, 1D, EightByteReal, real, double,  :,              INTENTV)
-NBVAR(iput, 2D, EightByteReal, real, double, `:,:',           INTENTV)
-NBVAR(iput, 3D, EightByteReal, real, double, `:,:,:',         INTENTV)
-NBVAR(iput, 4D, EightByteReal, real, double, `:,:,:,:',       INTENTV)
-NBVAR(iput, 5D, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
-NBVAR(iput, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
-NBVAR(iput, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
-
-NBVAR(iput, 1D, EightByteInt, integer, int8,  :,              INTENTV)
-NBVAR(iput, 2D, EightByteInt, integer, int8, `:,:',           INTENTV)
-NBVAR(iput, 3D, EightByteInt, integer, int8, `:,:,:',         INTENTV)
-NBVAR(iput, 4D, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
-NBVAR(iput, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
-NBVAR(iput, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
-NBVAR(iput, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
-
-!
-! iget APIs
-!
-
-NBVAR(iget, 1D, OneByteInt, integer, int1,  :,              out)
-NBVAR(iget, 2D, OneByteInt, integer, int1, `:,:',           out)
-NBVAR(iget, 3D, OneByteInt, integer, int1, `:,:,:',         out)
-NBVAR(iget, 4D, OneByteInt, integer, int1, `:,:,:,:',       out)
-NBVAR(iget, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     out)
-NBVAR(iget, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   out)
-NBVAR(iget, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out)
-
-NBVAR(iget, 1D, TwoByteInt, integer, int2,  :,              out)
-NBVAR(iget, 2D, TwoByteInt, integer, int2, `:,:',           out)
-NBVAR(iget, 3D, TwoByteInt, integer, int2, `:,:,:',         out)
-NBVAR(iget, 4D, TwoByteInt, integer, int2, `:,:,:,:',       out)
-NBVAR(iget, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     out)
-NBVAR(iget, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out)
-NBVAR(iget, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out)
-
-NBVAR(iget, 1D, FourByteInt, integer, int,  :,              out)
-NBVAR(iget, 2D, FourByteInt, integer, int, `:,:',           out)
-NBVAR(iget, 3D, FourByteInt, integer, int, `:,:,:',         out)
-NBVAR(iget, 4D, FourByteInt, integer, int, `:,:,:,:',       out)
-NBVAR(iget, 5D, FourByteInt, integer, int, `:,:,:,:,:',     out)
-NBVAR(iget, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   out)
-NBVAR(iget, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', out)
-
-NBVAR(iget, 1D, FourByteReal, real,   real,  :,              out)
-NBVAR(iget, 2D, FourByteReal, real,   real, `:,:',           out)
-NBVAR(iget, 3D, FourByteReal, real,   real, `:,:,:',         out)
-NBVAR(iget, 4D, FourByteReal, real,   real, `:,:,:,:',       out)
-NBVAR(iget, 5D, FourByteReal, real,   real, `:,:,:,:,:',     out)
-NBVAR(iget, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   out)
-NBVAR(iget, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', out)
-
-NBVAR(iget, 1D, EightByteReal, real, double,  :,              out)
-NBVAR(iget, 2D, EightByteReal, real, double, `:,:',           out)
-NBVAR(iget, 3D, EightByteReal, real, double, `:,:,:',         out)
-NBVAR(iget, 4D, EightByteReal, real, double, `:,:,:,:',       out)
-NBVAR(iget, 5D, EightByteReal, real, double, `:,:,:,:,:',     out)
-NBVAR(iget, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   out)
-NBVAR(iget, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', out)
-
-NBVAR(iget, 1D, EightByteInt, integer, int8,  :,              out)
-NBVAR(iget, 2D, EightByteInt, integer, int8, `:,:',           out)
-NBVAR(iget, 3D, EightByteInt, integer, int8, `:,:,:',         out)
-NBVAR(iget, 4D, EightByteInt, integer, int8, `:,:,:,:',       out)
-NBVAR(iget, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     out)
-NBVAR(iget, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   out)
-NBVAR(iget, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out)
-
-!
-! bput APIs
-!
-
-NBVAR(bput, 1D, OneByteInt, integer, int1,  :,              in)
-NBVAR(bput, 2D, OneByteInt, integer, int1, `:,:',           in)
-NBVAR(bput, 3D, OneByteInt, integer, int1, `:,:,:',         in)
-NBVAR(bput, 4D, OneByteInt, integer, int1, `:,:,:,:',       in)
-NBVAR(bput, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     in)
-NBVAR(bput, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
-NBVAR(bput, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
-
-NBVAR(bput, 1D, TwoByteInt, integer, int2,  :,              INTENTV)
-NBVAR(bput, 2D, TwoByteInt, integer, int2, `:,:',           INTENTV)
-NBVAR(bput, 3D, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
-NBVAR(bput, 4D, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
-NBVAR(bput, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
-NBVAR(bput, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
-NBVAR(bput, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
-
-NBVAR(bput, 1D, FourByteInt, integer, int,  :,              INTENTV)
-NBVAR(bput, 2D, FourByteInt, integer, int, `:,:',           INTENTV)
-NBVAR(bput, 3D, FourByteInt, integer, int, `:,:,:',         INTENTV)
-NBVAR(bput, 4D, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
-NBVAR(bput, 5D, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
-NBVAR(bput, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
-NBVAR(bput, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
-
-NBVAR(bput, 1D, FourByteReal, real,   real,  :,              INTENTV)
-NBVAR(bput, 2D, FourByteReal, real,   real, `:,:',           INTENTV)
-NBVAR(bput, 3D, FourByteReal, real,   real, `:,:,:',         INTENTV)
-NBVAR(bput, 4D, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
-NBVAR(bput, 5D, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
-NBVAR(bput, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
-NBVAR(bput, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
-
-NBVAR(bput, 1D, EightByteReal, real, double,  :,              INTENTV)
-NBVAR(bput, 2D, EightByteReal, real, double, `:,:',           INTENTV)
-NBVAR(bput, 3D, EightByteReal, real, double, `:,:,:',         INTENTV)
-NBVAR(bput, 4D, EightByteReal, real, double, `:,:,:,:',       INTENTV)
-NBVAR(bput, 5D, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
-NBVAR(bput, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
-NBVAR(bput, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
-
-NBVAR(bput, 1D, EightByteInt, integer, int8,  :,              INTENTV)
-NBVAR(bput, 2D, EightByteInt, integer, int8, `:,:',           INTENTV)
-NBVAR(bput, 3D, EightByteInt, integer, int8, `:,:,:',         INTENTV)
-NBVAR(bput, 4D, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
-NBVAR(bput, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
-NBVAR(bput, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
-NBVAR(bput, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
-
-!
-! Other nonblocking control APIs
-!
-
-   function nf90mpi_wait(ncid, num, req, st)
-     integer,               intent(in)    :: ncid, num
-     integer, dimension(:), intent(inout) :: req
-     integer, dimension(:), intent(out)   :: st
-     integer                              :: nf90mpi_wait
- 
-     nf90mpi_wait = nfmpi_wait(ncid, num, req, st)
-   end function nf90mpi_wait
-
-   function nf90mpi_wait_all(ncid, num, req, st)
-     integer,               intent(in)    :: ncid, num
-     integer, dimension(:), intent(inout) :: req
-     integer, dimension(:), intent(out)   :: st
-     integer                              :: nf90mpi_wait_all
- 
-     nf90mpi_wait_all = nfmpi_wait_all(ncid, num, req, st)
-   end function nf90mpi_wait_all
-
-   function nf90mpi_cancel(ncid, num, req, st)
-     integer,               intent(in)    :: ncid, num
-     integer, dimension(:), intent(inout) :: req
-     integer, dimension(:), intent(out)   :: st
-     integer                              :: nf90mpi_cancel
- 
-     nf90mpi_cancel = nfmpi_cancel(ncid, num, req, st)
-   end function nf90mpi_cancel
-
-   function nf90mpi_buffer_attach(ncid, bufsize)
-     integer,                        intent( in) :: ncid
-     integer (kind=MPI_OFFSET_KIND), intent( in) :: bufsize
-     integer                                     :: nf90mpi_buffer_attach
-
-     nf90mpi_buffer_attach = nfmpi_buffer_attach(ncid, bufsize)
-   end function nf90mpi_buffer_attach
-
-   function nf90mpi_inq_buffer_usage(ncid, usage)
-     integer,                        intent( in) :: ncid
-     integer (kind=MPI_OFFSET_KIND), intent(out) :: usage
-     integer                                     :: nf90mpi_inq_buffer_usage
-
-     nf90mpi_inq_buffer_usage = nfmpi_inq_buffer_usage(ncid, usage)
-   end function nf90mpi_inq_buffer_usage
-
-   function nf90mpi_inq_buffer_size(ncid, buf_size)
-     integer,                        intent( in) :: ncid
-     integer (kind=MPI_OFFSET_KIND), intent(out) :: buf_size
-     integer                                     :: nf90mpi_inq_buffer_size
-
-     nf90mpi_inq_buffer_size = nfmpi_inq_buffer_usage(ncid, buf_size)
-   end function nf90mpi_inq_buffer_size
-
-   function nf90mpi_buffer_detach(ncid)
-     integer,                       intent( in) :: ncid
-     integer                                    :: nf90mpi_buffer_detach
-
-     nf90mpi_buffer_detach = nfmpi_buffer_detach(ncid)
-   end function nf90mpi_buffer_detach
-
diff --git a/src/libf90/getput_varn.m4 b/src/libf90/getput_varn.m4
deleted file mode 100644
index e15d299..0000000
--- a/src/libf90/getput_varn.m4
+++ /dev/null
@@ -1,666 +0,0 @@
-dnl Process this m4 file to produce 'C' language file.
-dnl
-dnl If you see this line, you can ignore the next one.
-! Do not edit this file. It is produced from the corresponding .m4 source
-dnl
-!
-!  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
-!  See COPYRIGHT notice in top-level directory.
-!
-! $Id: getput_varn.m4 2221 2015-12-12 00:39:15Z wkliao $
-!
-
-dnl
-dnl VARN1
-dnl
-define(`VARN1',dnl
-`dnl
-   ! $1 a scalar of type $5 (kind=$4)
-   function nf90mpi_$1_varn_$4$2(ncid, varid, value, start)
-     integer,                                        intent(in) :: ncid, varid
-     $5 (kind=$4),                                   intent($3) :: value
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:), intent(in) :: start
-     integer                                                    :: nf90mpi_$1_varn_$4$2
- 
-     nf90mpi_$1_varn_$4$2 = nfmpi_$1_var1_$6$2(ncid, varid, start(:,1), value)
-   end function nf90mpi_$1_varn_$4$2
-')dnl
-
-VARN1(put,     , in,    OneByteInt,    integer, int1)
-VARN1(put,     , INTENTV, TwoByteInt,    integer, int2)
-VARN1(put,     , INTENTV, FourByteInt,   integer, int)
-VARN1(put,     , INTENTV, FourByteReal,  real,    real)
-VARN1(put,     , INTENTV, EightByteReal, real,    double)
-VARN1(put,     , INTENTV, EightByteInt,  integer, int8)
-
-VARN1(put, _all, in,    OneByteInt,    integer, int1)
-VARN1(put, _all, INTENTV, TwoByteInt,    integer, int2)
-VARN1(put, _all, INTENTV, FourByteInt,   integer, int)
-VARN1(put, _all, INTENTV, FourByteReal,  real,    real)
-VARN1(put, _all, INTENTV, EightByteReal, real,    double)
-VARN1(put, _all, INTENTV, EightByteInt,  integer, int8)
-
-VARN1(get,     , out,   OneByteInt,    integer, int1)
-VARN1(get,     , out,   TwoByteInt,    integer, int2)
-VARN1(get,     , out,   FourByteInt,   integer, int)
-VARN1(get,     , out,   FourByteReal,  real,    real)
-VARN1(get,     , out,   EightByteReal, real,    double)
-VARN1(get,     , out,   EightByteInt,  integer, int8)
-
-VARN1(get, _all, out,   OneByteInt,    integer, int1)
-VARN1(get, _all, out,   TwoByteInt,    integer, int2)
-VARN1(get, _all, out,   FourByteInt,   integer, int)
-VARN1(get, _all, out,   FourByteReal,  real,    real)
-VARN1(get, _all, out,   EightByteReal, real,    double)
-VARN1(get, _all, out,   EightByteInt,  integer, int8)
-
-dnl
-dnl VARN(ncid, varid, values, num, start, count)
-dnl
-define(`VARN',dnl
-`dnl
-   function nf90mpi_$1_varn_$2_$3$8(ncid, varid, values, num, start, count)
-     integer,                                                  intent(in) :: ncid, varid, num
-     $4 (kind=$3),                   dimension($6),            intent($7) :: values
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:),           intent(in) :: start
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:), optional, intent(in) :: count
-     integer                                                              :: nf90mpi_$1_varn_$2_$3$8
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims,num)     :: localCount
-     integer                                                              :: numDims
- 
-     ! Set local arguments to default values
-     numDims = size(start(:,1))
-     localCount(1:numDims,1:num) = 1
-     if (present(count)) localCount(1:numDims,1:num) = count(1:numDims,1:num)
-     nf90mpi_$1_varn_$2_$3$8 = nfmpi_$1_varn_$5$8(ncid, varid, num, start, &
-                                                  localCount(1:numDims,1:num), values)
-   end function nf90mpi_$1_varn_$2_$3$8
-')dnl
-
-!
-! put APIs
-!
-
-VARN(put, 1D, OneByteInt, integer, int1,  :,              in)
-VARN(put, 2D, OneByteInt, integer, int1, `:,:',           in)
-VARN(put, 3D, OneByteInt, integer, int1, `:,:,:',         in)
-VARN(put, 4D, OneByteInt, integer, int1, `:,:,:,:',       in)
-VARN(put, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     in)
-VARN(put, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
-VARN(put, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
-
-VARN(put, 1D, TwoByteInt, integer, int2,  :,              INTENTV)
-VARN(put, 2D, TwoByteInt, integer, int2, `:,:',           INTENTV)
-VARN(put, 3D, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
-VARN(put, 4D, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
-VARN(put, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
-VARN(put, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
-VARN(put, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
-
-VARN(put, 1D, FourByteInt, integer, int,  :,              INTENTV)
-VARN(put, 2D, FourByteInt, integer, int, `:,:',           INTENTV)
-VARN(put, 3D, FourByteInt, integer, int, `:,:,:',         INTENTV)
-VARN(put, 4D, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
-VARN(put, 5D, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
-VARN(put, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
-VARN(put, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
-
-VARN(put, 1D, FourByteReal, real,   real,  :,              INTENTV)
-VARN(put, 2D, FourByteReal, real,   real, `:,:',           INTENTV)
-VARN(put, 3D, FourByteReal, real,   real, `:,:,:',         INTENTV)
-VARN(put, 4D, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
-VARN(put, 5D, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
-VARN(put, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
-VARN(put, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
-
-VARN(put, 1D, EightByteReal, real, double,  :,              INTENTV)
-VARN(put, 2D, EightByteReal, real, double, `:,:',           INTENTV)
-VARN(put, 3D, EightByteReal, real, double, `:,:,:',         INTENTV)
-VARN(put, 4D, EightByteReal, real, double, `:,:,:,:',       INTENTV)
-VARN(put, 5D, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
-VARN(put, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
-VARN(put, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
-
-VARN(put, 1D, EightByteInt, integer, int8,  :,              INTENTV)
-VARN(put, 2D, EightByteInt, integer, int8, `:,:',           INTENTV)
-VARN(put, 3D, EightByteInt, integer, int8, `:,:,:',         INTENTV)
-VARN(put, 4D, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
-VARN(put, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
-VARN(put, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
-VARN(put, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
-
-!
-! get APIs
-!
-
-VARN(get, 1D, OneByteInt, integer, int1,  :,              out)
-VARN(get, 2D, OneByteInt, integer, int1, `:,:',           out)
-VARN(get, 3D, OneByteInt, integer, int1, `:,:,:',         out)
-VARN(get, 4D, OneByteInt, integer, int1, `:,:,:,:',       out)
-VARN(get, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     out)
-VARN(get, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   out)
-VARN(get, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out)
-
-VARN(get, 1D, TwoByteInt, integer, int2,  :,              out)
-VARN(get, 2D, TwoByteInt, integer, int2, `:,:',           out)
-VARN(get, 3D, TwoByteInt, integer, int2, `:,:,:',         out)
-VARN(get, 4D, TwoByteInt, integer, int2, `:,:,:,:',       out)
-VARN(get, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     out)
-VARN(get, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out)
-VARN(get, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out)
-
-VARN(get, 1D, FourByteInt, integer, int,  :,              out)
-VARN(get, 2D, FourByteInt, integer, int, `:,:',           out)
-VARN(get, 3D, FourByteInt, integer, int, `:,:,:',         out)
-VARN(get, 4D, FourByteInt, integer, int, `:,:,:,:',       out)
-VARN(get, 5D, FourByteInt, integer, int, `:,:,:,:,:',     out)
-VARN(get, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   out)
-VARN(get, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', out)
-
-VARN(get, 1D, FourByteReal, real,   real,  :,              out)
-VARN(get, 2D, FourByteReal, real,   real, `:,:',           out)
-VARN(get, 3D, FourByteReal, real,   real, `:,:,:',         out)
-VARN(get, 4D, FourByteReal, real,   real, `:,:,:,:',       out)
-VARN(get, 5D, FourByteReal, real,   real, `:,:,:,:,:',     out)
-VARN(get, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   out)
-VARN(get, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', out)
-
-VARN(get, 1D, EightByteReal, real, double,  :,              out)
-VARN(get, 2D, EightByteReal, real, double, `:,:',           out)
-VARN(get, 3D, EightByteReal, real, double, `:,:,:',         out)
-VARN(get, 4D, EightByteReal, real, double, `:,:,:,:',       out)
-VARN(get, 5D, EightByteReal, real, double, `:,:,:,:,:',     out)
-VARN(get, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   out)
-VARN(get, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', out)
-
-VARN(get, 1D, EightByteInt, integer, int8,  :,              out)
-VARN(get, 2D, EightByteInt, integer, int8, `:,:',           out)
-VARN(get, 3D, EightByteInt, integer, int8, `:,:,:',         out)
-VARN(get, 4D, EightByteInt, integer, int8, `:,:,:,:',       out)
-VARN(get, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     out)
-VARN(get, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   out)
-VARN(get, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out)
-
-!
-! collective put APIs
-!
-
-VARN(put, 1D, OneByteInt, integer, int1,  :,              in, _all)
-VARN(put, 2D, OneByteInt, integer, int1, `:,:',           in, _all)
-VARN(put, 3D, OneByteInt, integer, int1, `:,:,:',         in, _all)
-VARN(put, 4D, OneByteInt, integer, int1, `:,:,:,:',       in, _all)
-VARN(put, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     in, _all)
-VARN(put, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   in, _all)
-VARN(put, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in, _all)
-
-VARN(put, 1D, TwoByteInt, integer, int2,  :,              INTENTV, _all)
-VARN(put, 2D, TwoByteInt, integer, int2, `:,:',           INTENTV, _all)
-VARN(put, 3D, TwoByteInt, integer, int2, `:,:,:',         INTENTV, _all)
-VARN(put, 4D, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV, _all)
-VARN(put, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV, _all)
-VARN(put, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV, _all)
-VARN(put, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV, _all)
-
-VARN(put, 1D, FourByteInt, integer, int,  :,              INTENTV, _all)
-VARN(put, 2D, FourByteInt, integer, int, `:,:',           INTENTV, _all)
-VARN(put, 3D, FourByteInt, integer, int, `:,:,:',         INTENTV, _all)
-VARN(put, 4D, FourByteInt, integer, int, `:,:,:,:',       INTENTV, _all)
-VARN(put, 5D, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV, _all)
-VARN(put, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV, _all)
-VARN(put, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV, _all)
-
-VARN(put, 1D, FourByteReal, real,   real,  :,              INTENTV, _all)
-VARN(put, 2D, FourByteReal, real,   real, `:,:',           INTENTV, _all)
-VARN(put, 3D, FourByteReal, real,   real, `:,:,:',         INTENTV, _all)
-VARN(put, 4D, FourByteReal, real,   real, `:,:,:,:',       INTENTV, _all)
-VARN(put, 5D, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV, _all)
-VARN(put, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV, _all)
-VARN(put, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV, _all)
-
-VARN(put, 1D, EightByteReal, real, double,  :,              INTENTV, _all)
-VARN(put, 2D, EightByteReal, real, double, `:,:',           INTENTV, _all)
-VARN(put, 3D, EightByteReal, real, double, `:,:,:',         INTENTV, _all)
-VARN(put, 4D, EightByteReal, real, double, `:,:,:,:',       INTENTV, _all)
-VARN(put, 5D, EightByteReal, real, double, `:,:,:,:,:',     INTENTV, _all)
-VARN(put, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV, _all)
-VARN(put, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV, _all)
-
-VARN(put, 1D, EightByteInt, integer, int8,  :,              INTENTV, _all)
-VARN(put, 2D, EightByteInt, integer, int8, `:,:',           INTENTV, _all)
-VARN(put, 3D, EightByteInt, integer, int8, `:,:,:',         INTENTV, _all)
-VARN(put, 4D, EightByteInt, integer, int8, `:,:,:,:',       INTENTV, _all)
-VARN(put, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV, _all)
-VARN(put, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV, _all)
-VARN(put, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV, _all)
-
-!
-! collective get APIs
-!
-
-VARN(get, 1D, OneByteInt, integer, int1,  :,              out, _all)
-VARN(get, 2D, OneByteInt, integer, int1, `:,:',           out, _all)
-VARN(get, 3D, OneByteInt, integer, int1, `:,:,:',         out, _all)
-VARN(get, 4D, OneByteInt, integer, int1, `:,:,:,:',       out, _all)
-VARN(get, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     out, _all)
-VARN(get, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   out, _all)
-VARN(get, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out, _all)
-
-VARN(get, 1D, TwoByteInt, integer, int2,  :,              out, _all)
-VARN(get, 2D, TwoByteInt, integer, int2, `:,:',           out, _all)
-VARN(get, 3D, TwoByteInt, integer, int2, `:,:,:',         out, _all)
-VARN(get, 4D, TwoByteInt, integer, int2, `:,:,:,:',       out, _all)
-VARN(get, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     out, _all)
-VARN(get, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out, _all)
-VARN(get, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out, _all)
-
-VARN(get, 1D, FourByteInt, integer, int,  :,              out, _all)
-VARN(get, 2D, FourByteInt, integer, int, `:,:',           out, _all)
-VARN(get, 3D, FourByteInt, integer, int, `:,:,:',         out, _all)
-VARN(get, 4D, FourByteInt, integer, int, `:,:,:,:',       out, _all)
-VARN(get, 5D, FourByteInt, integer, int, `:,:,:,:,:',     out, _all)
-VARN(get, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   out, _all)
-VARN(get, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', out, _all)
-
-VARN(get, 1D, FourByteReal, real,   real,  :,              out, _all)
-VARN(get, 2D, FourByteReal, real,   real, `:,:',           out, _all)
-VARN(get, 3D, FourByteReal, real,   real, `:,:,:',         out, _all)
-VARN(get, 4D, FourByteReal, real,   real, `:,:,:,:',       out, _all)
-VARN(get, 5D, FourByteReal, real,   real, `:,:,:,:,:',     out, _all)
-VARN(get, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   out, _all)
-VARN(get, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', out, _all)
-
-VARN(get, 1D, EightByteReal, real, double,  :,              out, _all)
-VARN(get, 2D, EightByteReal, real, double, `:,:',           out, _all)
-VARN(get, 3D, EightByteReal, real, double, `:,:,:',         out, _all)
-VARN(get, 4D, EightByteReal, real, double, `:,:,:,:',       out, _all)
-VARN(get, 5D, EightByteReal, real, double, `:,:,:,:,:',     out, _all)
-VARN(get, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   out, _all)
-VARN(get, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', out, _all)
-
-VARN(get, 1D, EightByteInt, integer, int8,  :,              out, _all)
-VARN(get, 2D, EightByteInt, integer, int8, `:,:',           out, _all)
-VARN(get, 3D, EightByteInt, integer, int8, `:,:,:',         out, _all)
-VARN(get, 4D, EightByteInt, integer, int8, `:,:,:,:',       out, _all)
-VARN(get, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     out, _all)
-VARN(get, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   out, _all)
-VARN(get, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out, _all)
-
-!
-! text variable
-!
-
-dnl
-dnl TEXTVARN1(ncid, varid, values, num, start, count)
-dnl
-define(`TEXTVARN1',dnl
-`dnl
-   ! $1 a scalar of type character (len = *)
-   function nf90mpi_$1_varn_text$3(ncid, varid, value, start)
-     integer,                                        intent(in) :: ncid, varid
-     character (len=*),                              intent($2) :: value
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:), intent(in) :: start
-     integer                                                    :: nf90mpi_$1_varn_text$3
- 
-     nf90mpi_$1_varn_text$3 = nfmpi_$1_var1_text$3(ncid, varid, start(:,1), value)
-   end function nf90mpi_$1_varn_text$3
-')dnl
-
-TEXTVARN1(put, in)
-TEXTVARN1(get, out)
-TEXTVARN1(put, in,  _all)
-TEXTVARN1(get, out, _all)
-
-dnl
-dnl TEXTVARN(ncid, varid, values, num, start, count)
-dnl
-define(`TEXTVARN',dnl
-`dnl
-   function nf90mpi_$1_varn_$2_text$6(ncid, varid, values, num, start, count)
-     integer,                                                  intent(in) :: ncid, varid, num
-     character (len=*),              dimension($3),            intent($5) :: values
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:),           intent(in) :: start
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:), optional, intent(in) :: count
-     integer                                                              :: nf90mpi_$1_varn_$2_text$6
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims,num)     :: localCount
-     integer                                                              :: numDims
- 
-     ! Set local arguments to default values
-     numDims = size(start(:,1))
-     localCount(1:numDims,1:num) = 1
-     if (present(count)) localCount(1:numDims,1:num) = count(1:numDims,1:num)
-     nf90mpi_$1_varn_$2_text$6 = nfmpi_$1_varn_text$6(ncid, varid, num, start, &
-                                                      localCount(1:numDims,1:num), values($4))
-   end function nf90mpi_$1_varn_$2_text$6
-')dnl
-
-TEXTVARN(put, 1D,  :,               1,              in)
-TEXTVARN(put, 2D, `:,:',           `1,1',           in)
-TEXTVARN(put, 3D, `:,:,:',         `1,1,1',         in)
-TEXTVARN(put, 4D, `:,:,:,:',       `1,1,1,1',       in)
-TEXTVARN(put, 5D, `:,:,:,:,:',     `1,1,1,1,1',     in)
-TEXTVARN(put, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
-TEXTVARN(put, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
-
-TEXTVARN(get, 1D,  :,               1,              out)
-TEXTVARN(get, 2D, `:,:',           `1,1',           out)
-TEXTVARN(get, 3D, `:,:,:',         `1,1,1',         out)
-TEXTVARN(get, 4D, `:,:,:,:',       `1,1,1,1',       out)
-TEXTVARN(get, 5D, `:,:,:,:,:',     `1,1,1,1,1',     out)
-TEXTVARN(get, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out)
-TEXTVARN(get, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out)
-
-!
-! Collective APIs
-!
-
-TEXTVARN(put, 1D,  :,               1,              in, _all)
-TEXTVARN(put, 2D, `:,:',           `1,1',           in, _all)
-TEXTVARN(put, 3D, `:,:,:',         `1,1,1',         in, _all)
-TEXTVARN(put, 4D, `:,:,:,:',       `1,1,1,1',       in, _all)
-TEXTVARN(put, 5D, `:,:,:,:,:',     `1,1,1,1,1',     in, _all)
-TEXTVARN(put, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in, _all)
-TEXTVARN(put, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in, _all)
-
-TEXTVARN(get, 1D,  :,               1,              out, _all)
-TEXTVARN(get, 2D, `:,:',           `1,1',           out, _all)
-TEXTVARN(get, 3D, `:,:,:',         `1,1,1',         out, _all)
-TEXTVARN(get, 4D, `:,:,:,:',       `1,1,1,1',       out, _all)
-TEXTVARN(get, 5D, `:,:,:,:,:',     `1,1,1,1,1',     out, _all)
-TEXTVARN(get, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out, _all)
-TEXTVARN(get, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out, _all)
-
-!
-! Nonblocking APIs
-!
-
-dnl
-dnl IVARN1
-dnl
-define(`IVARN1',dnl
-`dnl
-   ! $1 a scalar of type $4 (kind=$3)
-   function nf90mpi_$1_varn_$3(ncid, varid, value, req, start)
-     integer,                                        intent(in) :: ncid, varid
-     $4 (kind=$3),                                   intent($2) :: value
-     integer,                                        intent(out):: req
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:), intent(in) :: start
-     integer                                                    :: nf90mpi_$1_varn_$3
- 
-     nf90mpi_$1_varn_$3 = nfmpi_$1_var1_$5(ncid, varid, start(:,1), value, req)
-   end function nf90mpi_$1_varn_$3
-')dnl
-
-IVARN1(iput, in,    OneByteInt,    integer, int1)
-IVARN1(iput, INTENTV, TwoByteInt,    integer, int2)
-IVARN1(iput, INTENTV, FourByteInt,   integer, int)
-IVARN1(iput, INTENTV, FourByteReal,  real,    real)
-IVARN1(iput, INTENTV, EightByteReal, real,    double)
-IVARN1(iput, INTENTV, EightByteInt,  integer, int8)
-
-IVARN1(iget, out,   OneByteInt,    integer, int1)
-IVARN1(iget, out,   TwoByteInt,    integer, int2)
-IVARN1(iget, out,   FourByteInt,   integer, int)
-IVARN1(iget, out,   FourByteReal,  real,    real)
-IVARN1(iget, out,   EightByteReal, real,    double)
-IVARN1(iget, out,   EightByteInt,  integer, int8)
-
-IVARN1(bput, in,    OneByteInt,    integer, int1)
-IVARN1(bput, INTENTV, TwoByteInt,    integer, int2)
-IVARN1(bput, INTENTV, FourByteInt,   integer, int)
-IVARN1(bput, INTENTV, FourByteReal,  real,    real)
-IVARN1(bput, INTENTV, EightByteReal, real,    double)
-IVARN1(bput, INTENTV, EightByteInt,  integer, int8)
-
-dnl
-dnl IVARN(ncid, varid, values, num, start, count)
-dnl
-define(`IVARN',dnl
-`dnl
-   function nf90mpi_$1_varn_$2_$3(ncid, varid, values, req, num, start, count)
-     integer,                                                  intent(in) :: ncid, varid, num
-     $4 (kind=$3),                   dimension($6),            intent($7) :: values
-     integer,                                                  intent(out):: req
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:),           intent(in) :: start
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:), optional, intent(in) :: count
-     integer                                                              :: nf90mpi_$1_varn_$2_$3
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims,num)     :: localCount
-     integer                                                              :: numDims
- 
-     ! Set local arguments to default values
-     numDims = size(start(:,1))
-     localCount(1:numDims,1:num) = 1
-     if (present(count)) localCount(1:numDims,1:num) = count(1:numDims,1:num)
-     nf90mpi_$1_varn_$2_$3 = nfmpi_$1_varn_$5(ncid, varid, num, start, &
-                                              localCount(1:numDims,1:num), values, req)
-   end function nf90mpi_$1_varn_$2_$3
-')dnl
-
-!
-! put APIs
-!
-
-IVARN(iput, 1D, OneByteInt, integer, int1,  :,              in)
-IVARN(iput, 2D, OneByteInt, integer, int1, `:,:',           in)
-IVARN(iput, 3D, OneByteInt, integer, int1, `:,:,:',         in)
-IVARN(iput, 4D, OneByteInt, integer, int1, `:,:,:,:',       in)
-IVARN(iput, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     in)
-IVARN(iput, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
-IVARN(iput, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
-
-IVARN(iput, 1D, TwoByteInt, integer, int2,  :,              INTENTV)
-IVARN(iput, 2D, TwoByteInt, integer, int2, `:,:',           INTENTV)
-IVARN(iput, 3D, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
-IVARN(iput, 4D, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
-IVARN(iput, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
-IVARN(iput, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
-IVARN(iput, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
-
-IVARN(iput, 1D, FourByteInt, integer, int,  :,              INTENTV)
-IVARN(iput, 2D, FourByteInt, integer, int, `:,:',           INTENTV)
-IVARN(iput, 3D, FourByteInt, integer, int, `:,:,:',         INTENTV)
-IVARN(iput, 4D, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
-IVARN(iput, 5D, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
-IVARN(iput, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
-IVARN(iput, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
-
-IVARN(iput, 1D, FourByteReal, real,   real,  :,              INTENTV)
-IVARN(iput, 2D, FourByteReal, real,   real, `:,:',           INTENTV)
-IVARN(iput, 3D, FourByteReal, real,   real, `:,:,:',         INTENTV)
-IVARN(iput, 4D, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
-IVARN(iput, 5D, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
-IVARN(iput, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
-IVARN(iput, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
-
-IVARN(iput, 1D, EightByteReal, real, double,  :,              INTENTV)
-IVARN(iput, 2D, EightByteReal, real, double, `:,:',           INTENTV)
-IVARN(iput, 3D, EightByteReal, real, double, `:,:,:',         INTENTV)
-IVARN(iput, 4D, EightByteReal, real, double, `:,:,:,:',       INTENTV)
-IVARN(iput, 5D, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
-IVARN(iput, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
-IVARN(iput, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
-
-IVARN(iput, 1D, EightByteInt, integer, int8,  :,              INTENTV)
-IVARN(iput, 2D, EightByteInt, integer, int8, `:,:',           INTENTV)
-IVARN(iput, 3D, EightByteInt, integer, int8, `:,:,:',         INTENTV)
-IVARN(iput, 4D, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
-IVARN(iput, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
-IVARN(iput, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
-IVARN(iput, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
-
-!
-! get APIs
-!
-
-IVARN(iget, 1D, OneByteInt, integer, int1,  :,              out)
-IVARN(iget, 2D, OneByteInt, integer, int1, `:,:',           out)
-IVARN(iget, 3D, OneByteInt, integer, int1, `:,:,:',         out)
-IVARN(iget, 4D, OneByteInt, integer, int1, `:,:,:,:',       out)
-IVARN(iget, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     out)
-IVARN(iget, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   out)
-IVARN(iget, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', out)
-
-IVARN(iget, 1D, TwoByteInt, integer, int2,  :,              out)
-IVARN(iget, 2D, TwoByteInt, integer, int2, `:,:',           out)
-IVARN(iget, 3D, TwoByteInt, integer, int2, `:,:,:',         out)
-IVARN(iget, 4D, TwoByteInt, integer, int2, `:,:,:,:',       out)
-IVARN(iget, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     out)
-IVARN(iget, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   out)
-IVARN(iget, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', out)
-
-IVARN(iget, 1D, FourByteInt, integer, int,  :,              out)
-IVARN(iget, 2D, FourByteInt, integer, int, `:,:',           out)
-IVARN(iget, 3D, FourByteInt, integer, int, `:,:,:',         out)
-IVARN(iget, 4D, FourByteInt, integer, int, `:,:,:,:',       out)
-IVARN(iget, 5D, FourByteInt, integer, int, `:,:,:,:,:',     out)
-IVARN(iget, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   out)
-IVARN(iget, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', out)
-
-IVARN(iget, 1D, FourByteReal, real,   real,  :,              out)
-IVARN(iget, 2D, FourByteReal, real,   real, `:,:',           out)
-IVARN(iget, 3D, FourByteReal, real,   real, `:,:,:',         out)
-IVARN(iget, 4D, FourByteReal, real,   real, `:,:,:,:',       out)
-IVARN(iget, 5D, FourByteReal, real,   real, `:,:,:,:,:',     out)
-IVARN(iget, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   out)
-IVARN(iget, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', out)
-
-IVARN(iget, 1D, EightByteReal, real, double,  :,              out)
-IVARN(iget, 2D, EightByteReal, real, double, `:,:',           out)
-IVARN(iget, 3D, EightByteReal, real, double, `:,:,:',         out)
-IVARN(iget, 4D, EightByteReal, real, double, `:,:,:,:',       out)
-IVARN(iget, 5D, EightByteReal, real, double, `:,:,:,:,:',     out)
-IVARN(iget, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   out)
-IVARN(iget, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', out)
-
-IVARN(iget, 1D, EightByteInt, integer, int8,  :,              out)
-IVARN(iget, 2D, EightByteInt, integer, int8, `:,:',           out)
-IVARN(iget, 3D, EightByteInt, integer, int8, `:,:,:',         out)
-IVARN(iget, 4D, EightByteInt, integer, int8, `:,:,:,:',       out)
-IVARN(iget, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     out)
-IVARN(iget, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   out)
-IVARN(iget, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', out)
-
-!
-! bput APIs
-!
-
-IVARN(bput, 1D, OneByteInt, integer, int1,  :,              in)
-IVARN(bput, 2D, OneByteInt, integer, int1, `:,:',           in)
-IVARN(bput, 3D, OneByteInt, integer, int1, `:,:,:',         in)
-IVARN(bput, 4D, OneByteInt, integer, int1, `:,:,:,:',       in)
-IVARN(bput, 5D, OneByteInt, integer, int1, `:,:,:,:,:',     in)
-IVARN(bput, 6D, OneByteInt, integer, int1, `:,:,:,:,:,:',   in)
-IVARN(bput, 7D, OneByteInt, integer, int1, `:,:,:,:,:,:,:', in)
-
-IVARN(bput, 1D, TwoByteInt, integer, int2,  :,              INTENTV)
-IVARN(bput, 2D, TwoByteInt, integer, int2, `:,:',           INTENTV)
-IVARN(bput, 3D, TwoByteInt, integer, int2, `:,:,:',         INTENTV)
-IVARN(bput, 4D, TwoByteInt, integer, int2, `:,:,:,:',       INTENTV)
-IVARN(bput, 5D, TwoByteInt, integer, int2, `:,:,:,:,:',     INTENTV)
-IVARN(bput, 6D, TwoByteInt, integer, int2, `:,:,:,:,:,:',   INTENTV)
-IVARN(bput, 7D, TwoByteInt, integer, int2, `:,:,:,:,:,:,:', INTENTV)
-
-IVARN(bput, 1D, FourByteInt, integer, int,  :,              INTENTV)
-IVARN(bput, 2D, FourByteInt, integer, int, `:,:',           INTENTV)
-IVARN(bput, 3D, FourByteInt, integer, int, `:,:,:',         INTENTV)
-IVARN(bput, 4D, FourByteInt, integer, int, `:,:,:,:',       INTENTV)
-IVARN(bput, 5D, FourByteInt, integer, int, `:,:,:,:,:',     INTENTV)
-IVARN(bput, 6D, FourByteInt, integer, int, `:,:,:,:,:,:',   INTENTV)
-IVARN(bput, 7D, FourByteInt, integer, int, `:,:,:,:,:,:,:', INTENTV)
-
-IVARN(bput, 1D, FourByteReal, real,   real,  :,              INTENTV)
-IVARN(bput, 2D, FourByteReal, real,   real, `:,:',           INTENTV)
-IVARN(bput, 3D, FourByteReal, real,   real, `:,:,:',         INTENTV)
-IVARN(bput, 4D, FourByteReal, real,   real, `:,:,:,:',       INTENTV)
-IVARN(bput, 5D, FourByteReal, real,   real, `:,:,:,:,:',     INTENTV)
-IVARN(bput, 6D, FourByteReal, real,   real, `:,:,:,:,:,:',   INTENTV)
-IVARN(bput, 7D, FourByteReal, real,   real, `:,:,:,:,:,:,:', INTENTV)
-
-IVARN(bput, 1D, EightByteReal, real, double,  :,              INTENTV)
-IVARN(bput, 2D, EightByteReal, real, double, `:,:',           INTENTV)
-IVARN(bput, 3D, EightByteReal, real, double, `:,:,:',         INTENTV)
-IVARN(bput, 4D, EightByteReal, real, double, `:,:,:,:',       INTENTV)
-IVARN(bput, 5D, EightByteReal, real, double, `:,:,:,:,:',     INTENTV)
-IVARN(bput, 6D, EightByteReal, real, double, `:,:,:,:,:,:',   INTENTV)
-IVARN(bput, 7D, EightByteReal, real, double, `:,:,:,:,:,:,:', INTENTV)
-
-IVARN(bput, 1D, EightByteInt, integer, int8,  :,              INTENTV)
-IVARN(bput, 2D, EightByteInt, integer, int8, `:,:',           INTENTV)
-IVARN(bput, 3D, EightByteInt, integer, int8, `:,:,:',         INTENTV)
-IVARN(bput, 4D, EightByteInt, integer, int8, `:,:,:,:',       INTENTV)
-IVARN(bput, 5D, EightByteInt, integer, int8, `:,:,:,:,:',     INTENTV)
-IVARN(bput, 6D, EightByteInt, integer, int8, `:,:,:,:,:,:',   INTENTV)
-IVARN(bput, 7D, EightByteInt, integer, int8, `:,:,:,:,:,:,:', INTENTV)
-
-!
-! text variable
-!
-
-dnl
-dnl ITEXTVARN1
-dnl
-define(`ITEXTVARN1',dnl
-`dnl
-   ! $1 a scalar of type character (len = *)
-   function nf90mpi_$1_varn_text(ncid, varid, value, req, start)
-     integer,                                        intent(in) :: ncid, varid
-     character (len = *),                            intent($2) :: value
-     integer,                                        intent(out):: req
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:), intent(in) :: start
-     integer                                                    :: nf90mpi_$1_varn_text
- 
-     nf90mpi_$1_varn_text = nfmpi_$1_var1_text(ncid, varid, start(:,1), value, req)
-   end function nf90mpi_$1_varn_text
-')dnl
-
-ITEXTVARN1(iput, in)
-ITEXTVARN1(iget, out)
-ITEXTVARN1(bput, in)
-
-dnl
-dnl ITEXTVARN(ncid, varid, values, num, start, count)
-dnl
-define(`ITEXTVARN',dnl
-`dnl
-   function nf90mpi_$1_varn_$2_text(ncid, varid, values, req, num, start, count)
-     integer,                                                  intent(in) :: ncid, varid, num
-     character (len=*),              dimension($3),            intent($5) :: values
-     integer,                                                  intent(out):: req
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:),           intent(in) :: start
-     integer (kind=MPI_OFFSET_KIND), dimension(:,:), optional, intent(in) :: count
-     integer                                                              :: nf90mpi_$1_varn_$2_text
-     integer (kind=MPI_OFFSET_KIND), dimension(nf90_max_var_dims,num)     :: localCount
-     integer                                                              :: numDims
- 
-     ! Set local arguments to default values
-     numDims = size(start(:,1))
-     localCount(1:numDims,1:num) = 1
-     if (present(count)) localCount(1:numDims,1:num) = count(1:numDims,1:num)
-     nf90mpi_$1_varn_$2_text = nfmpi_$1_varn_text(ncid, varid, num, start, &
-                                                  localCount(1:numDims,1:num), values($4), req)
-   end function nf90mpi_$1_varn_$2_text
-')dnl
-
-ITEXTVARN(iput, 1D,  :,               1,              in)
-ITEXTVARN(iput, 2D, `:,:',           `1,1',           in)
-ITEXTVARN(iput, 3D, `:,:,:',         `1,1,1',         in)
-ITEXTVARN(iput, 4D, `:,:,:,:',       `1,1,1,1',       in)
-ITEXTVARN(iput, 5D, `:,:,:,:,:',     `1,1,1,1,1',     in)
-ITEXTVARN(iput, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
-ITEXTVARN(iput, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
-
-ITEXTVARN(iget, 1D,  :,               1,              out)
-ITEXTVARN(iget, 2D, `:,:',           `1,1',           out)
-ITEXTVARN(iget, 3D, `:,:,:',         `1,1,1',         out)
-ITEXTVARN(iget, 4D, `:,:,:,:',       `1,1,1,1',       out)
-ITEXTVARN(iget, 5D, `:,:,:,:,:',     `1,1,1,1,1',     out)
-ITEXTVARN(iget, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   out)
-ITEXTVARN(iget, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', out)
-
-ITEXTVARN(bput, 1D,  :,               1,              in)
-ITEXTVARN(bput, 2D, `:,:',           `1,1',           in)
-ITEXTVARN(bput, 3D, `:,:,:',         `1,1,1',         in)
-ITEXTVARN(bput, 4D, `:,:,:,:',       `1,1,1,1',       in)
-ITEXTVARN(bput, 5D, `:,:,:,:,:',     `1,1,1,1,1',     in)
-ITEXTVARN(bput, 6D, `:,:,:,:,:,:',   `1,1,1,1,1,1',   in)
-ITEXTVARN(bput, 7D, `:,:,:,:,:,:,:', `1,1,1,1,1,1,1', in)
-
diff --git a/src/libs/Makefile.am b/src/libs/Makefile.am
new file mode 100644
index 0000000..a6a7ec7
--- /dev/null
+++ b/src/libs/Makefile.am
@@ -0,0 +1,70 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2815 2017-01-01 23:06:33Z wkliao $
+#
+# @configure_input@
+
+lib_LTLIBRARIES = libpnetcdf.la
+
+# Using libpnetcdf_la_LDFLAGS = $(ABIVERSIONFLAGS) does NOT seem to work,
+# because libpnetcdf_la_LINK is explicitly set below to deal with cross
+# language link.
+AM_LDFLAGS = $(ABIVERSIONFLAGS)
+
+libpnetcdf_la_SOURCES =
+libpnetcdf_la_LIBADD  = ../dispatchers/libdispatchers.la
+libpnetcdf_la_LIBADD += ../drivers/common/libcommon.la
+libpnetcdf_la_LIBADD += ../drivers/ncmpio/libncmpio.la
+if BUILD_DRIVER_FOO
+libpnetcdf_la_LIBADD += ../drivers/ncfoo/libncfoo.la
+endif
+
+nodist_EXTRA_libpnetcdf_la_SOURCES = dummyc.c
+
+if HAS_MPICXX
+libpnetcdf_la_LIBADD += ../binding/cxx/libcxx.la
+# According Automake Manual, Section 8.3.5 Libtool Convenience Libraries,
+# using nodist_EXTRA to trick automake to use C++ compiler
+nodist_EXTRA_libpnetcdf_la_SOURCES += dummycxx.cxx
+libpnetcdf_la_LINK = $(CXXLINK)
+else
+# From automake manual Section 8.14.3.1, "... if Fortran 77, C and C++ source
+# code is compiled into a program, then the C++ linker will be used." and "A
+# per-target _LINK variable will override the above selection"
+libpnetcdf_la_LINK = $(LINK)
+endif
+
+if HAS_FORTRAN
+libpnetcdf_la_LIBADD += ../binding/f77/libf77.la
+libpnetcdf_la_LIBADD += ../binding/f90/libf90.la
+# According to Automake Manual, Section 8.14.3 Mixing Fortran 77 With C and
+# C++, adding $(FLIBS) is necessary
+# libpnetcdf_la_LIBADD += $(FLIBS) $(FCLIBS)
+# nodist_EXTRA_libpnetcdf_la_SOURCES += dummyf90.f90
+endif
+
+../dispatchers/libdispatchers.la:
+	set -e; cd ../dispatchers && $(MAKE) $(MFLAGS)
+
+../drivers/common/libcommon.la:
+	set -e; cd ../drivers/common && $(MAKE) $(MFLAGS)
+
+../drivers/ncmpio/libncmpio.la:
+	set -e; cd ../drivers/ncmpio && $(MAKE) $(MFLAGS)
+
+../drivers/ncfoo/libncfoo.la:
+	set -e; cd ../drivers/ncfoo && $(MAKE) $(MFLAGS)
+
+../binding/cxx/libcxx.la:
+	set -e; cd ../binding/cxx && $(MAKE) $(MFLAGS)
+
+../binding/f77/libf77.la:
+	set -e; cd ../binding/f77 && $(MAKE) $(MFLAGS)
+
+../binding/f90/libf90.la:
+	set -e; cd ../binding/f90 && $(MAKE) $(MFLAGS)
+
+tests-local: all
+
diff --git a/src/libs/Makefile.in b/src/libs/Makefile.in
new file mode 100644
index 0000000..66f7ebb
--- /dev/null
+++ b/src/libs/Makefile.in
@@ -0,0 +1,829 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 2815 2017-01-01 23:06:33Z wkliao $
+#
+# @configure_input@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at BUILD_DRIVER_FOO_TRUE@am__append_1 = ../drivers/ncfoo/libncfoo.la
+ at HAS_MPICXX_TRUE@am__append_2 = ../binding/cxx/libcxx.la
+# According Automake Manual, Section 8.3.5 Libtool Convenience Libraries,
+# using nodist_EXTRA to trick automake to use C++ compiler
+ at HAS_MPICXX_TRUE@am__append_3 = dummycxx.cxx
+ at HAS_FORTRAN_TRUE@am__append_4 = ../binding/f77/libf77.la \
+ at HAS_FORTRAN_TRUE@	../binding/f90/libf90.la
+subdir = src/libs
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+libpnetcdf_la_DEPENDENCIES = ../dispatchers/libdispatchers.la \
+	../drivers/common/libcommon.la ../drivers/ncmpio/libncmpio.la \
+	$(am__append_1) $(am__append_2) $(am__append_4)
+am_libpnetcdf_la_OBJECTS =
+libpnetcdf_la_OBJECTS = $(am_libpnetcdf_la_OBJECTS)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(libpnetcdf_la_SOURCES) \
+	$(nodist_EXTRA_libpnetcdf_la_SOURCES)
+DIST_SOURCES = $(libpnetcdf_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libpnetcdf.la
+
+# Using libpnetcdf_la_LDFLAGS = $(ABIVERSIONFLAGS) does NOT seem to work,
+# because libpnetcdf_la_LINK is explicitly set below to deal with cross
+# language link.
+AM_LDFLAGS = $(ABIVERSIONFLAGS)
+libpnetcdf_la_SOURCES = 
+libpnetcdf_la_LIBADD = ../dispatchers/libdispatchers.la \
+	../drivers/common/libcommon.la ../drivers/ncmpio/libncmpio.la \
+	$(am__append_1) $(am__append_2) $(am__append_4)
+nodist_EXTRA_libpnetcdf_la_SOURCES = dummyc.c $(am__append_3)
+# From automake manual Section 8.14.3.1, "... if Fortran 77, C and C++ source
+# code is compiled into a program, then the C++ linker will be used." and "A
+# per-target _LINK variable will override the above selection"
+ at HAS_MPICXX_FALSE@libpnetcdf_la_LINK = $(LINK)
+ at HAS_MPICXX_TRUE@libpnetcdf_la_LINK = $(CXXLINK)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cxx .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libs/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/libs/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libpnetcdf.la: $(libpnetcdf_la_OBJECTS) $(libpnetcdf_la_DEPENDENCIES) $(EXTRA_libpnetcdf_la_DEPENDENCIES) 
+	$(AM_V_GEN)$(libpnetcdf_la_LINK) -rpath $(libdir) $(libpnetcdf_la_OBJECTS) $(libpnetcdf_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dummyc.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dummycxx.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.cxx.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cxx.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cxx.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-libLTLIBRARIES install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am \
+	uninstall-libLTLIBRARIES
+
+.PRECIOUS: Makefile
+
+# According to Automake Manual, Section 8.14.3 Mixing Fortran 77 With C and
+# C++, adding $(FLIBS) is necessary
+# libpnetcdf_la_LIBADD += $(FLIBS) $(FCLIBS)
+# nodist_EXTRA_libpnetcdf_la_SOURCES += dummyf90.f90
+
+../dispatchers/libdispatchers.la:
+	set -e; cd ../dispatchers && $(MAKE) $(MFLAGS)
+
+../drivers/common/libcommon.la:
+	set -e; cd ../drivers/common && $(MAKE) $(MFLAGS)
+
+../drivers/ncmpio/libncmpio.la:
+	set -e; cd ../drivers/ncmpio && $(MAKE) $(MFLAGS)
+
+../drivers/ncfoo/libncfoo.la:
+	set -e; cd ../drivers/ncfoo && $(MAKE) $(MFLAGS)
+
+../binding/cxx/libcxx.la:
+	set -e; cd ../binding/cxx && $(MAKE) $(MFLAGS)
+
+../binding/f77/libf77.la:
+	set -e; cd ../binding/f77 && $(MAKE) $(MFLAGS)
+
+../binding/f90/libf90.la:
+	set -e; cd ../binding/f90 && $(MAKE) $(MFLAGS)
+
+tests-local: all
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/packaging/Makefile.am b/src/packaging/Makefile.am
new file mode 100644
index 0000000..b2f4923
--- /dev/null
+++ b/src/packaging/Makefile.am
@@ -0,0 +1,15 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id$
+#
+# @configure_input@
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pnetcdf.pc
+
+install-data-hook:
+	$(SED_I) -e 's|INSTALL_PREFIX|$(prefix)|g ; s|INSTALL_EXEC_PREFIX|$(exec_prefix)|g' $(DESTDIR)$(libdir)/pkgconfig/pnetcdf.pc
+
+
diff --git a/src/packaging/Makefile.in b/src/packaging/Makefile.in
new file mode 100644
index 0000000..1ade968
--- /dev/null
+++ b/src/packaging/Makefile.in
@@ -0,0 +1,596 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id$
+#
+# @configure_input@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/packaging
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES = pnetcdf.pc
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
+DATA = $(pkgconfig_DATA)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/pnetcdf.pc.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = pnetcdf.pc
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/packaging/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/packaging/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+pnetcdf.pc: $(top_builddir)/config.status $(srcdir)/pnetcdf.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-pkgconfigDATA
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-pkgconfigDATA
+
+.MAKE: install-am install-data-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags-am distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am \
+	install-data-hook install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-pkgconfigDATA install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am tests-am \
+	tests-local uninstall uninstall-am uninstall-pkgconfigDATA
+
+.PRECIOUS: Makefile
+
+
+install-data-hook:
+	$(SED_I) -e 's|INSTALL_PREFIX|$(prefix)|g ; s|INSTALL_EXEC_PREFIX|$(exec_prefix)|g' $(DESTDIR)$(libdir)/pkgconfig/pnetcdf.pc
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/pnetcdf_pc.in b/src/packaging/pnetcdf.pc.in
similarity index 87%
rename from pnetcdf_pc.in
rename to src/packaging/pnetcdf.pc.in
index 697df49..afae815 100644
--- a/pnetcdf_pc.in
+++ b/src/packaging/pnetcdf.pc.in
@@ -33,13 +33,15 @@
 #               but not exposed to applications. The same rule as Cflags
 #               applies here.
 
-prefix=INSTALL_PREFIX   # prefix can be changed by "make install prefix=/path"
-exec_prefix=@exec_prefix@
+# prefix can be changed by "make install prefix=/path"
+prefix=INSTALL_PREFIX
+# exec_prefix can be changed by "make install exec_prefix=/path"
+exec_prefix=INSTALL_EXEC_PREFIX
 libdir=${exec_prefix}/lib
 includedir=${prefix}/include
 
-Name: Parallel-NetCDF
-Description: Parallel-NetCDF (pnetcdf) provides parallel access to NetCDF files
+Name: PnetCDF
+Description: Parallel-NetCDF (PnetCDF) provides parallel access to classic NetCDF files
 URL: http://cucis.ece.northwestern.edu/projects/PnetCDF/
 Version: @PNETCDF_VERSION@
 Cflags: -I${includedir}
diff --git a/src/utils/Makefile.am b/src/utils/Makefile.am
new file mode 100644
index 0000000..d5b081b
--- /dev/null
+++ b/src/utils/Makefile.am
@@ -0,0 +1,32 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3471 2017-10-21 07:40:00Z wkliao $
+#
+# @configure_input@
+
+SUBDIRS = ncmpigen ncmpidump ncmpidiff ncmpivalid pnetcdf_version ncoffsets
+DIST_SUBDIRS = $(SUBDIRS)
+
+# The script shows the end users how pnetcdf is built
+bin_SCRIPTS = pnetcdf-config
+
+EXTRA_DIST = pnetcdf-config.in
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
+
+# Note sed option -i for in-place substitution is not portable
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g" $(distdir)/pnetcdf-config.in
+
+install-exec-hook:
+	$(SED_I) -e 's|INSTALL_PREFIX|$(prefix)|g ; s|INSTALL_EXEC_PREFIX|$(exec_prefix)|g' $(DESTDIR)$(bindir)/pnetcdf-config
+	chmod +x $(DESTDIR)$(bindir)/pnetcdf-config
+
diff --git a/src/utils/Makefile.in b/src/utils/Makefile.in
index 76a1474..a527227 100644
--- a/src/utils/Makefile.in
+++ b/src/utils/Makefile.in
@@ -1,34 +1,812 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2285 2015-12-30 20:48:25Z wkliao $
+# $Id: Makefile.am 3471 2017-10-21 07:40:00Z wkliao $
 #
 # @configure_input@
 
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src/utils
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES = pnetcdf-config
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(bindir)"
+SCRIPTS = $(bin_SCRIPTS)
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/pnetcdf-config.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = ncmpigen ncmpidump ncmpidiff ncmpivalid pnetcdf_version ncoffsets
+DIST_SUBDIRS = $(SUBDIRS)
 
-include ../../macros.make
+# The script shows the end users how pnetcdf is built
+bin_SCRIPTS = pnetcdf-config
+EXTRA_DIST = pnetcdf-config.in
+all: all-recursive
 
-SUBDIRS = ncmpigen ncmpidump ncmpidiff ncmpivalid pnetcdf_version ncoffsets
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/utils/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/utils/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+pnetcdf-config: $(top_builddir)/config.status $(srcdir)/pnetcdf-config.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+install-binSCRIPTS: $(bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n' \
+	    -e 'h;s|.*|.|' \
+	    -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+	      if (++n[d] == $(am__install_max)) { \
+		print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+	    else { print "f", d "/" $$4, $$1 } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	     if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	     test -z "$$files" || { \
+	       echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	       $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	     } \
+	; done
+
+uninstall-binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	       sed -e 's,.*/,,;$(transform)'`; \
+	dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(SCRIPTS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binSCRIPTS
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+tests: tests-recursive
+
+tests-am: tests-local
+
+uninstall-am: uninstall-binSCRIPTS
+
+.MAKE: $(am__recursive_targets) install-am install-exec-am \
+	install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am dist-hook distclean distclean-generic \
+	distclean-libtool distclean-local distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binSCRIPTS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-exec-hook \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am uninstall-binSCRIPTS
 
-PACKING_LIST = Makefile.in
+.PRECIOUS: Makefile
 
-PACKING_SUBDIRS = $(SUBDIRS)
 
-all: $(SUBDIRS)
-$(SUBDIRS):
-	$(MAKE) $(MFLAGS) -C $@
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
 
-INSTALLDIRS = $(SUBDIRS:%=install-%)
-install: $(INSTALLDIRS)
-$(INSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:install-%=%) install
+# Note sed option -i for in-place substitution is not portable
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g" $(distdir)/pnetcdf-config.in
 
-UNINSTALLDIRS = $(SUBDIRS:%=uninstall-%)
-uninstall: $(UNINSTALLDIRS)
-$(UNINSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:uninstall-%=%) uninstall
+install-exec-hook:
+	$(SED_I) -e 's|INSTALL_PREFIX|$(prefix)|g ; s|INSTALL_EXEC_PREFIX|$(exec_prefix)|g' $(DESTDIR)$(bindir)/pnetcdf-config
+	chmod +x $(DESTDIR)$(bindir)/pnetcdf-config
 
-include $(srcdir)/../../rules.make
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/utils/ncmpidiff/Makefile.am b/src/utils/ncmpidiff/Makefile.am
new file mode 100644
index 0000000..5f73450
--- /dev/null
+++ b/src/utils/ncmpidiff/Makefile.am
@@ -0,0 +1,29 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+
+bin_PROGRAMS = ncmpidiff
+ncmpidiff_SOURCES = ncmpidiff.c
+ncmpidiff_LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+
+$(top_builddir)/src/libs/libpnetcdf.la:
+	set -e; cd $(top_builddir)/src/libs && $(MAKE) $(MFLAGS)
+
+dist_man_MANS = ncmpidiff.1
+
+CLEANFILES = *.gcno
+
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncmpidiff.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncmpidiff.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncmpidiff.1
+
+tests-local: all
+
diff --git a/src/utils/ncmpidiff/Makefile.in b/src/utils/ncmpidiff/Makefile.in
index 6421e85..d6ac7c0 100644
--- a/src/utils/ncmpidiff/Makefile.in
+++ b/src/utils/ncmpidiff/Makefile.in
@@ -1,62 +1,820 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2659 2016-11-27 22:15:33Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
 
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = ncmpidiff$(EXEEXT)
+subdir = src/utils/ncmpidiff
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_ncmpidiff_OBJECTS = ncmpidiff.$(OBJEXT)
+ncmpidiff_OBJECTS = $(am_ncmpidiff_OBJECTS)
+ncmpidiff_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(ncmpidiff_SOURCES)
+DIST_SOURCES = $(ncmpidiff_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/src/include \
+	-I$(top_builddir)/src/include
+ncmpidiff_SOURCES = ncmpidiff.c
+ncmpidiff_LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+dist_man_MANS = ncmpidiff.1
+CLEANFILES = *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/utils/ncmpidiff/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/utils/ncmpidiff/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+ncmpidiff$(EXEEXT): $(ncmpidiff_OBJECTS) $(ncmpidiff_DEPENDENCIES) $(EXTRA_ncmpidiff_DEPENDENCIES) 
+	@rm -f ncmpidiff$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ncmpidiff_OBJECTS) $(ncmpidiff_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpidiff.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(dist_man_MANS)
+	@$(NORMAL_INSTALL)
+	@list1=''; \
+	list2='$(dist_man_MANS)'; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
 
-include ../../../macros.make
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-# For VPATH build:
-# Add ../../lib into search path because ../../lib/pnetcdf.h is created in
-# the build directory at configure time and is included by C files here.
-INCLUDES	= -I../../lib
+pdf: pdf-am
 
-LDFLAGS        += -L../../lib
-LIBS           := -lpnetcdf $(LIBS) @LCOV_LIB@
+pdf-am:
 
-C_SOURCES	= ncmpidiff.c
-HEADERS		=
+ps: ps-am
 
-OBJS		= $(C_SOURCES:.c=.o)
+ps-am:
 
-PROGRAM		= ncmpidiff
-MANUAL		= ncmpidiff.1
+tests: tests-am
 
-PACKING_LIST	= $(C_SOURCES) $(HEADERS) $(MANUAL) \
-                  depend Makefile.in
+tests-am: tests-local
 
-GARBAGE		= $(PROGRAM)
+uninstall-am: uninstall-binPROGRAMS uninstall-man
 
-all:		$(PROGRAM)
+uninstall-man: uninstall-man1
 
-$(PROGRAM):	$(LIBRARY) $(OBJS)
-	$(LINK.c) $(OBJS) $(LDFLAGS) $(LIBS) 
+.MAKE: install-am install-strip
 
-install: $(PROGRAM) $(MANUAL)
-	$(INSTALL) -d -m 755 $(MANDIR)/man1
-	$(INSTALL_DATA) $(srcdir)/$(MANUAL) $(MANDIR)/man1/$(MANUAL)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am dist-hook distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-man uninstall-man1
 
-	$(INSTALL) -d $(BINDIR)
-	$(INSTALL) -m 755 $(PROGRAM) $(BINDIR)/$(PROGRAM)
+.PRECIOUS: Makefile
 
-uninstall:
-	$(RM) -f $(BINDIR)/$(PROGRAM)
-	$(RM) -f $(MANDIR)/man1/$(MANUAL)
 
-$(PROGRAM)_oc : $(C_SOURCES)
-	#setopt primary_language C
-	#load -C $(CPPFLAGS) $(C_SOURCES)
-	#load -C $(LIBS)
-	#setopt program_name $(PROGRAM)
+$(top_builddir)/src/libs/libpnetcdf.la:
+	set -e; cd $(top_builddir)/src/libs && $(MAKE) $(MFLAGS)
 
-TAGS:		FORCE
-	etags `echo $(PACKING_LIST) | fmt -1 | $(EGREP) '\.c|\.h'
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncmpidiff.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncmpidiff.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncmpidiff.1
 
-include $(srcdir)/../../../rules.make
-include $(srcdir)/depend
+tests-local: all
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/utils/ncmpidiff/depend b/src/utils/ncmpidiff/depend
deleted file mode 100644
index f36f816..0000000
--- a/src/utils/ncmpidiff/depend
+++ /dev/null
@@ -1 +0,0 @@
-ncmpidiff.o: ncmpidiff.c ../../lib/pnetcdf.h
diff --git a/src/utils/ncmpidiff/ncmpidiff.1 b/src/utils/ncmpidiff/ncmpidiff.1
index 625b77c..206031c 100644
--- a/src/utils/ncmpidiff/ncmpidiff.1
+++ b/src/utils/ncmpidiff/ncmpidiff.1
@@ -2,7 +2,7 @@
 .nr yr \n(yr+1900
 .af mo 01
 .af dy 01
-.TH NCMPIDIFF 1 2013-11-17 "Printed: \n(yr-\n(mo-\n(dy" "UTILITIES"
+.TH ncmpidiff 1 "PnetCDF 1.9.0.pre1" "Printed: \n(yr-\n(mo-\n(dy" "PnetCDF utilities"
 .SH NAME
 ncmpidiff \- compares two netCDF files in parallel
 .SH SYNOPSIS
@@ -27,18 +27,20 @@ files are compared.
 .IP "\fB-b\fP"
 Verbose mode - print results (same or different) for all components (file, header, or variables) in comparison
 .IP "\fB-q\fP"
-Quiet mode - print nothing when two components in comparison are the same
+Quiet mode - print nothing on the command-line output. This also disables verbose mode. When in quiet mode, users should check exit status. See below in "EXIT STATUS".
 .IP "\fB-h\fP"
 Compare file header only
 .IP "\fB-v\fP \fIvar1,...,varn\fP"
 Compare only the given list of variables
-
+.SH EXIT STATUS
+An exit status of 0 means no differences were found, and
+1 means some differences were found.
+Note on VMS-based system, the exit status values are reversed.
 .SH "SEE ALSO"
 .LP
 .BR ncmpidump (1),
 .BR pnetcdf (3)
 .SH DATE
-$Date: 2016-12-18 19:49:08 -0600 (Sun, 18 Dec 2016) $
+ 1 Nov 2017
 .LP
 
-
diff --git a/src/utils/ncmpidiff/ncmpidiff.c b/src/utils/ncmpidiff/ncmpidiff.c
index 98af325..79b02b4 100644
--- a/src/utils/ncmpidiff/ncmpidiff.c
+++ b/src/utils/ncmpidiff/ncmpidiff.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2010, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: ncmpidiff.c 2731 2016-12-19 01:49:08Z wkliao $ */
+/* $Id: ncmpidiff.c 3359 2017-09-10 18:29:10Z wkliao $ */
 
 /* wkliao: This diff utility compares header and variables of two files
  *         regardless the define order of the variables and attributes.
@@ -17,8 +17,8 @@
  *           mpiexec -n 8 ncmpidiff -h -v var1,var2 file1.nc file2.nc
  */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdarg.h>
@@ -61,7 +61,8 @@
 }
 
 #define CHECK_GLOBAL_ATT_DIFF(type, func, nctype) {                    \
-    int   pos, len = attlen1 * sizeof(type);                           \
+    int pos;                                                           \
+    size_t len = (size_t)attlen1 * sizeof(type);                       \
     type *b1 = (type *)malloc(len);                                    \
     if (!b1) OOM_ERROR                                                 \
     type *b2 = (type *)malloc(len);                                    \
@@ -83,7 +84,8 @@
 }
 
 #define CHECK_VAR_ATT_DIFF(type, func, nctype) {                              \
-    int   pos, len = attlen1 * sizeof(type);                                  \
+    int pos;                                                                  \
+    size_t len = (size_t)attlen1 * sizeof(type);                              \
     type *b1 = (type *)malloc(len);                                           \
     if (!b1) OOM_ERROR                                                        \
     type *b2 = (type *)malloc(len);                                           \
@@ -105,7 +107,8 @@
 }
 
 #define CHECK_VAR_DIFF(type, func, nctype) {                                 \
-    int   pos, isDiff, len = varsize * sizeof(type);                         \
+    int pos, isDiff;                                                         \
+    size_t len = (size_t)varsize * sizeof(type);                             \
     type *b1 = (type *)malloc(len);                                          \
     if (!b1) OOM_ERROR                                                       \
     type *b2 = (type *)malloc(len);                                          \
@@ -134,6 +137,7 @@ char *progname;
 #define EXIT_SUCCESS 0
 #define EXIT_FAILURE 1
 #else
+/* In OpenVMS, success is indicated by odd values and failure by even values. */
 #define EXIT_SUCCESS 1
 #define EXIT_FAILURE 0
 #endif
@@ -197,7 +201,7 @@ get_var_names(char *optarg, struct vspec* vspecp)
         if (*cp == ',')
             nvars++;
 
-    vspecp->names = (char **) malloc(nvars * sizeof(char*));
+    vspecp->names = (char **) malloc((size_t)nvars * sizeof(char*));
     if (!vspecp->names) OOM_ERROR
 
     cpp = vspecp->names;
@@ -240,7 +244,7 @@ int main(int argc, char **argv)
     int ncid1, ndims1, nvars1, natts1, unlimdimid1, *dimids1;
     int ncid2, ndims2, nvars2, natts2, unlimdimid2, *dimids2;
     char *name1, *name2;
-    MPI_Offset *shape, varsize, *start;
+    MPI_Offset *shape=NULL, varsize, *start=NULL;
     MPI_Offset attlen1, dimlen1, attlen2, dimlen2;
     nc_type type1, type2;
     MPI_Comm comm=MPI_COMM_WORLD;
@@ -295,18 +299,10 @@ int main(int argc, char **argv)
         check_header      = 1;
     }
 
-    dimids1 = (int*) malloc(NC_MAX_DIMS * sizeof(int));
-    if (!dimids1) OOM_ERROR
-    dimids2 = (int*) malloc(NC_MAX_DIMS * sizeof(int));
-    if (!dimids2) OOM_ERROR
     name1   = (char*) malloc(NC_MAX_NAME);
     if (!name1) OOM_ERROR
     name2   = (char*) malloc(NC_MAX_NAME);
     if (!name2) OOM_ERROR
-    shape   = (MPI_Offset*) malloc(NC_MAX_VAR_DIMS * sizeof(MPI_Offset));
-    if (!shape) OOM_ERROR
-    start   = (MPI_Offset*) malloc(NC_MAX_VAR_DIMS * sizeof(MPI_Offset));
-    if (!start) OOM_ERROR
 
     /* Nov. 18, 2014 -- disable subfiling as it does not correctly handle the
      * cases when  nprocs < num_subfiles */
@@ -378,12 +374,12 @@ int main(int argc, char **argv)
 
             if (attlen1 != attlen2) {
                 if (!quiet) printf("DIFF: global attribute \"%s\" length (%lld) != (%lld)\n",
-                       name1,(long long int)attlen1,(long long int)attlen2);
+                       name1,attlen1,attlen2);
                 numHeadDIFF++;
                 continue;
             }
             else if (verbose)
-                printf("\tSAME: length (%lld)\n",(long long int)attlen1);
+                printf("\tSAME: length (%lld)\n",attlen1);
 
             switch (type1) {
                 case NC_CHAR:   CHECK_GLOBAL_ATT_DIFF(char,   ncmpi_get_att_text,      NC_CHAR)
@@ -454,6 +450,9 @@ int main(int argc, char **argv)
         /* Compare variables' metadata */
         for (i=0; i<nvars1; i++) {
             int varid;
+            err = ncmpi_inq_varndims(ncid1, i, &ndims1); HANDLE_ERROR
+            dimids1 = (int*) malloc((size_t)ndims1 * SIZEOF_INT);
+            if (!dimids1) OOM_ERROR
             err = ncmpi_inq_var(ncid1, i, name1, &type1, &ndims1, dimids1, &natts1);
             HANDLE_ERROR
             /* find the variable with the same name from ncid2 */
@@ -465,6 +464,9 @@ int main(int argc, char **argv)
                 numVarDIFF++;
                 continue;
             }
+            err = ncmpi_inq_varndims(ncid2, varid, &ndims2); HANDLE_ERROR
+            dimids2 = (int*) malloc((size_t)ndims2 * SIZEOF_INT);
+            if (!dimids2) OOM_ERROR
             err = ncmpi_inq_var(ncid2, varid, name2, &type2, &ndims2, dimids2, &natts2);
             HANDLE_ERROR
 
@@ -582,6 +584,8 @@ int main(int argc, char **argv)
                     numHeadDIFF++;
                 }
             }
+            free(dimids1);
+            free(dimids2);
         }
         for (i=0; i<nvars2; i++) { /* check variables in file2 but not in file1 */
             int varid;
@@ -599,15 +603,13 @@ int main(int argc, char **argv)
     }
 
     /* compare variable contents */
-    for (i=0; i<NC_MAX_VAR_DIMS; i++) start[i] = 0;
-
     nvars = 0;
     if (check_variable_list) nvars = var_list.nvars;
 
     if (check_entire_file) { /* header has been checked */
         ncmpi_inq_nvars(ncid1, &nvars);
         var_list.nvars = nvars;
-        var_list.names = (char**) malloc(nvars * sizeof(char*));
+        var_list.names = (char**) malloc((size_t)nvars * sizeof(char*));
         if (!var_list.names) OOM_ERROR
         /* get all the variable names from file1 */
         for (i=0; i<nvars; i++) {
@@ -640,8 +642,14 @@ int main(int argc, char **argv)
             }
             continue;
         }
+        err = ncmpi_inq_varndims(ncid1, varid1, &ndims1); HANDLE_ERROR
+        dimids1 = (int*) malloc((size_t)ndims1 * SIZEOF_INT);
+        if (!dimids1) OOM_ERROR
         err = ncmpi_inq_var(ncid1, varid1, name1, &type1, &ndims1, dimids1, &natts1);
         HANDLE_ERROR
+        err = ncmpi_inq_varndims(ncid2, varid2, &ndims2); HANDLE_ERROR
+        dimids2 = (int*) malloc((size_t)ndims2 * SIZEOF_INT);
+        if (!dimids2) OOM_ERROR
         err = ncmpi_inq_var(ncid2, varid2, name2, &type2, &ndims2, dimids2, &natts2);
         HANDLE_ERROR
 
@@ -675,6 +683,10 @@ int main(int argc, char **argv)
         else if (!check_header && !rank && verbose)
             printf("\tSAME: number of dimensions (%d)\n",ndims1);
 
+        shape = (MPI_Offset*) calloc((size_t)ndims1 * 2, SIZEOF_MPI_OFFSET);
+        if (!shape) OOM_ERROR
+        start = shape + ndims1;
+
         /* check dimension length only */
         for (j=0; j<ndims1; j++) { /* check variable's dimensionality */
             err = ncmpi_inq_dimlen(ncid1, dimids1[j], &dimlen1);
@@ -700,13 +712,31 @@ int main(int argc, char **argv)
         if (j != ndims1)
             continue; /* skip this variable */
 
-        varsize  = 1;
-        /* block partition the variable along the 1st dimension */
+        if (dimids1[0] == unlimdimid1) { /* record variable */
+            err = ncmpi_inq_dimlen(ncid1, unlimdimid1, &shape[0]);
+            HANDLE_ERROR
+        }
+
         for (j=0; j<ndims1; j++) {
-            if (j == 0) {
-                shape[j] /= nprocs;
+            if (shape[j] >= nprocs) { /* partition along dimension j among processes */
+                MPI_Offset dimLen = shape[j];
+                shape[j] = dimLen / nprocs;
                 start[j] = shape[j] * rank;
+                if (rank < dimLen % nprocs) {
+                    start[j] += rank;
+                    shape[j]++;
+                }
+                else
+                    start[j] += dimLen % nprocs;
+                break;
             }
+        }
+        /* if none of shape[*] >= nprocs, then let all processes compare the
+         * whole variable */
+
+        varsize = 1;
+        /* block partition the variable along the 1st dimension */
+        for (j=0; j<ndims1; j++) {
             varsize *= shape[j];
         }
  
@@ -724,6 +754,9 @@ int main(int argc, char **argv)
             case NC_UINT64: CHECK_VAR_DIFF(uint64, ncmpi_get_vara_ulonglong_all, NC_UINT64)
             default: ; /* TODO: handle unexpected types */
         }
+        free(shape);
+        free(dimids1);
+        free(dimids2);
     }
 
     /* close files */
@@ -734,25 +767,22 @@ int main(int argc, char **argv)
 
     /* summary of the difference */
     MPI_Reduce(&numVarDIFF, &varDIFF, 1, MPI_LONG_LONG_INT, MPI_SUM, 0, comm);
-    if (rank == 0) {
+    if (rank == 0 && !quiet) {
         if (check_header) {
-            if (numHeadDIFF == 0) {
-                if (!quiet) printf("Headers of two files are the same\n");
-            }
+            if (numHeadDIFF == 0)
+                printf("Headers of two files are the same\n");
             else
                 printf("Number of differences in header %lld\n",numHeadDIFF);
         }
         if (check_variable_list) {
-            if (varDIFF == 0) {
-                if (!quiet) printf("Compared variable(s) are the same\n");
-            }
+            if (varDIFF == 0)
+                printf("Compared variable(s) are the same\n");
             else
                 printf("Compared variables(s) has %lld differences\n",varDIFF);
         }
         if (check_entire_file) {
-            if (varDIFF == 0) {
-                if (!quiet) printf("All variables of two files are the same\n");
-            }
+            if (varDIFF == 0)
+                printf("All variables of two files are the same\n");
             else
                 printf("Number of differences in variables %lld\n",varDIFF);
         }
@@ -764,22 +794,12 @@ int main(int argc, char **argv)
             free(var_list.names[i]);
         free(var_list.names);
     }
-    free(dimids1);
-    free(dimids2);
     free(name1);
     free(name2);
-    free(shape);
-    free(start);
 
     if (rank == 0) numDIFF = varDIFF + numHeadDIFF;
     MPI_Bcast(&numDIFF, 1, MPI_LONG_LONG_INT, 0, comm);
 
     MPI_Finalize();
-#ifdef vms
-    if (quiet) exit((numDIFF == 0) ? 0 : 1);
-    else       exit(EXIT_SUCCESS);
-#else
-    if (quiet) return ((numDIFF == 0) ? 0 : 1);
-    else       return EXIT_SUCCESS;
-#endif
+    exit((numDIFF == 0) ? EXIT_SUCCESS : EXIT_FAILURE);
 }
diff --git a/src/utils/ncmpidump/Makefile.am b/src/utils/ncmpidump/Makefile.am
new file mode 100644
index 0000000..92c3d33
--- /dev/null
+++ b/src/utils/ncmpidump/Makefile.am
@@ -0,0 +1,43 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+
+NCGEN = ../ncmpigen/ncmpigen
+
+bin_PROGRAMS = ncmpidump
+ncmpidump_SOURCES = ncmpidump.c vardata.c dumplib.c
+ncmpidump_LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+
+$(top_builddir)/src/libs/libpnetcdf.la:
+	set -e; cd $(top_builddir)/src/libs && $(MAKE) $(MFLAGS)
+
+dist_man_MANS = ncmpidump.1
+
+HFILES = ncmpidump.h vardata.h dumplib.h
+
+EXTRA_DIST = $(HFILES) $(MANUAL) test0.cdl
+
+CLEANFILES = test0.nc test1.nc test1.cdl test2.cdl *.gcno
+
+test: $(bin_PROGRAMS)
+	$(NCGEN) -b -o `pwd`/test0.nc $(srcdir)/test0.cdl
+	./$(bin_PROGRAMS) -n test1 test0.nc > test1.cdl
+	$(NCGEN) -b -o `pwd`/test1.nc `pwd`/test1.cdl
+	./$(bin_PROGRAMS) test1.nc > test2.cdl
+	@cmp test1.cdl test2.cdl && \
+	     echo "*** $(bin_PROGRAMS) test successful ***"
+
+tests-local: all
+
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncmpidump.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncmpidump.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncmpidump.1
+
diff --git a/src/utils/ncmpidump/Makefile.in b/src/utils/ncmpidump/Makefile.in
index e12a37d..1fde212 100644
--- a/src/utils/ncmpidump/Makefile.in
+++ b/src/utils/ncmpidump/Makefile.in
@@ -1,73 +1,834 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2659 2016-11-27 22:15:33Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
 
-srcdir = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = ncmpidump$(EXEEXT)
+subdir = src/utils/ncmpidump
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_ncmpidump_OBJECTS = ncmpidump.$(OBJEXT) vardata.$(OBJEXT) \
+	dumplib.$(OBJEXT)
+ncmpidump_OBJECTS = $(am_ncmpidump_OBJECTS)
+ncmpidump_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(ncmpidump_SOURCES)
+DIST_SOURCES = $(ncmpidump_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I$(top_srcdir)/src/include \
+	-I$(top_builddir)/src/include
+NCGEN = ../ncmpigen/ncmpigen
+ncmpidump_SOURCES = ncmpidump.c vardata.c dumplib.c
+ncmpidump_LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+dist_man_MANS = ncmpidump.1
+HFILES = ncmpidump.h vardata.h dumplib.h
+EXTRA_DIST = $(HFILES) $(MANUAL) test0.cdl
+CLEANFILES = test0.nc test1.nc test1.cdl test2.cdl *.gcno
+all: all-am
 
-include ../../../macros.make
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/utils/ncmpidump/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/utils/ncmpidump/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-NCGEN		= ../ncmpigen/ncmpigen
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-# For VPATH build:
-# Add ../../lib into search path because ../../lib/pnetcdf.h is created in
-# the build directory at configure time and is included by C files here.
-INCLUDES	= -I../../lib
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
 
-LDFLAGS        += -L../../lib
-LIBS           := -lpnetcdf $(LIBS) @LCOV_LIB@
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
-C_SOURCES	= ncmpidump.c vardata.c dumplib.c
-HEADERS		= ncmpidump.h vardata.h dumplib.h
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 
-OBJS            = $(C_SOURCES:.c=.o)
+ncmpidump$(EXEEXT): $(ncmpidump_OBJECTS) $(ncmpidump_DEPENDENCIES) $(EXTRA_ncmpidump_DEPENDENCIES) 
+	@rm -f ncmpidump$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ncmpidump_OBJECTS) $(ncmpidump_LDADD) $(LIBS)
 
-PROGRAM		= ncmpidump
-MANUAL		= ncmpidump.1
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
 
-PACKING_LIST    = $(C_SOURCES) $(HEADERS) $(MANUAL) \
-                  depend Makefile.in \
-                  test0.cdl
+distclean-compile:
+	-rm -f *.tab.c
 
-GARBAGE		= $(PROGRAM) test0.nc test1.nc test1.cdl test2.cdl
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dumplib.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpidump.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vardata.Po at am__quote@
 
-all:		$(PROGRAM)
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
 
-$(PROGRAM):	$(LIBRARY) $(OBJS)
-	$(LINK.c) $(OBJS) $(LDFLAGS) $(LIBS) 
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-test:		$(PROGRAM) FORCE
-	$(NCGEN) -b $(srcdir)/test0.cdl -o `pwd`/test0.nc
-	./$(PROGRAM) -n test1 test0.nc > test1.cdl
-	$(NCGEN) -b `pwd`/test1.cdl -o `pwd`/test1.nc
-	./$(PROGRAM) test1.nc > test2.cdl
-	@cmp test1.cdl test2.cdl && \
-	     echo "*** $(PROGRAM) test successful ***"
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(dist_man_MANS)
+	@$(NORMAL_INSTALL)
+	@list1=''; \
+	list2='$(dist_man_MANS)'; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
 
-install: $(PROGRAM) $(MANUAL)
-	$(INSTALL) -d -m 755 $(MANDIR)/man1
-	$(INSTALL_DATA) $(srcdir)/$(MANUAL) $(MANDIR)/man1/$(MANUAL)
+info: info-am
 
-	$(INSTALL) -d $(BINDIR)
-	$(INSTALL) -m 755 $(PROGRAM) $(BINDIR)/$(PROGRAM)
+info-am:
 
-uninstall:
-	$(RM) -f $(BINDIR)/$(PROGRAM)
-	$(RM) -f $(MANDIR)/man1/$(MANUAL)
+install-data-am: install-man
 
-$(PROGRAM)_oc : $(C_SOURCES)
-	#setopt primary_language C
-	#load -C $(CPPFLAGS) $(C_SOURCES)
-	#load -C $(LIBS)
-	#setopt program_name $(PROGRAM)
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am dist-hook distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-man uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+$(top_builddir)/src/libs/libpnetcdf.la:
+	set -e; cd $(top_builddir)/src/libs && $(MAKE) $(MFLAGS)
+
+test: $(bin_PROGRAMS)
+	$(NCGEN) -b -o `pwd`/test0.nc $(srcdir)/test0.cdl
+	./$(bin_PROGRAMS) -n test1 test0.nc > test1.cdl
+	$(NCGEN) -b -o `pwd`/test1.nc `pwd`/test1.cdl
+	./$(bin_PROGRAMS) test1.nc > test2.cdl
+	@cmp test1.cdl test2.cdl && \
+	     echo "*** $(bin_PROGRAMS) test successful ***"
 
-TAGS:		FORCE
-	etags `echo $(PACKING_LIST) | fmt -1 | $(EGREP) '\.c|\.h'
+tests-local: all
 
-include $(srcdir)/../../../rules.make
-include $(srcdir)/depend
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncmpidump.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncmpidump.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncmpidump.1
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/utils/ncmpidump/depend b/src/utils/ncmpidump/depend
deleted file mode 100644
index de556d1..0000000
--- a/src/utils/ncmpidump/depend
+++ /dev/null
@@ -1,3 +0,0 @@
-dumplib.o: dumplib.c dumplib.h ../../lib/pnetcdf.h
-ncmpidump.o: ncmpidump.c dumplib.h ncmpidump.h vardata.h ../../lib/pnetcdf.h
-vardata.o: vardata.c dumplib.h ncmpidump.h vardata.h ../../lib/pnetcdf.h
diff --git a/src/utils/ncmpidump/ncmpidump.1 b/src/utils/ncmpidump/ncmpidump.1
index dfa5c74..c52f8ce 100644
--- a/src/utils/ncmpidump/ncmpidump.1
+++ b/src/utils/ncmpidump/ncmpidump.1
@@ -2,7 +2,7 @@
 .nr yr \n(yr+1900
 .af mo 01
 .af dy 01
-.TH NCMPIDUMP 1 "2013-11-17" "Printed: \n(yr-\n(mo-\n(dy" "UTILITIES"
+.TH ncmpidump 1 "PnetCDF 1.9.0.pre1" "Printed: \n(yr-\n(mo-\n(dy" "PnetCDF utilities"
 .SH NAME
 ncmpidump \- Convert netCDF files to ASCII form (CDL)
 .SH SYNOPSIS
@@ -130,7 +130,7 @@ significant digits.  In the absence of any
 \fB-p\fP specifications, floating-point and double-precision data are
 displayed with 7 and 15 significant digits respectively.  CDL files can be
 made smaller if less precision is required.  If both floating-point and
-double-presision precisions are specified, the two values must appear
+double-precision precisions are specified, the two values must appear
 separated by a comma (no blanks) as a single argument to the command.
 If you really want every last bit of precision from the netCDF file
 represented in the CDL file for all possible floating-point values, you will
@@ -185,7 +185,7 @@ Goldberg, \fBACM Computing Surveys, Vol. 23, No. 1\fP, March 1991, pp. 5-48.
 .BR ncmpigen (1),
 .BR pnetcdf (3)
 .SH DATE
-$Date: 2013-11-17 00:21:28 -0600 (Sun, 17 Nov 2013) $
+ 1 Nov 2017
 .SH BUGS
 .LP
 Character arrays that contain a null-byte are treated like C strings, so no
diff --git a/src/utils/ncmpidump/ncmpidump.c b/src/utils/ncmpidump/ncmpidump.c
index e10a7be..0b35315 100644
--- a/src/utils/ncmpidump/ncmpidump.c
+++ b/src/utils/ncmpidump/ncmpidump.c
@@ -3,10 +3,10 @@
  *   See netcdf/README file for copying and redistribution conditions.
  *   $Header$
  *********************************************************************/
-/* $Id: ncmpidump.c 2675 2016-12-04 18:55:24Z wkliao $ */
+/* $Id: ncmpidump.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdio.h>
@@ -344,8 +344,8 @@ do_ncdump(const char *path, struct fspec* specp)
     int xdimid;           /* id of unlimited dimension */
     int dimid;            /* dimension id */
     int varid;            /* variable id */
-    struct ncdim dims[NC_MAX_DIMS]; /* dimensions */
-    size_t vdims[NC_MAX_DIMS];    /* dimension sizes for a single variable */
+    struct ncdim *dims;   /* dimensions */
+    size_t *vdims;        /* dimension sizes for a single variable */
     struct ncvar var;     /* variable */
     struct ncatt att;     /* attribute */
     int id;               /* dimension number per variable */
@@ -362,6 +362,8 @@ do_ncdump(const char *path, struct fspec* specp)
      * cases when  nprocs < num_subfiles */
     MPI_Info_create (&info);
     MPI_Info_set (info, "pnetcdf_subfiling", "disable");
+    var.dims = NULL;
+    dims = NULL;
 
     ncmpi_status = ncmpi_open(MPI_COMM_WORLD, path, NC_NOWRITE,
                               info, &ncid);
@@ -418,6 +420,7 @@ do_ncdump(const char *path, struct fspec* specp)
         /* print dimension info */
         if (ndims > 0) Printf ("dimensions:\n");
 
+        dims = (struct ncdim*) malloc(ndims*sizeof(struct ncdim));
         for (dimid = 0; dimid < ndims; dimid++) {
             NC_CHECK(ncmpi_inq_dim(ncid, dimid, dims[dimid].name,
                                    &dims[dimid].size) );
@@ -433,6 +436,8 @@ do_ncdump(const char *path, struct fspec* specp)
 
         /* get variable info, with variable attributes */
         for (varid = 0; varid < nvars; varid++) {
+            NC_CHECK(ncmpi_inq_varndims(ncid, varid, &var.ndims));
+            var.dims = (int*) realloc(var.dims, var.ndims * sizeof(int));
             NC_CHECK(ncmpi_inq_var(ncid, varid, var.name, &var.type,
                                    &var.ndims, var.dims, &var.natts) );
             Printf ("\t%s %s", type_name(var.type), var.name);
@@ -462,6 +467,8 @@ do_ncdump(const char *path, struct fspec* specp)
                 /* if var list specified, test for membership */
                 if (specp->nlvars > 0 && ! varmember(vlist, varid))
                     continue;
+                NC_CHECK(ncmpi_inq_varndims(ncid, varid, &var.ndims));
+                var.dims = (int*) realloc(var.dims, var.ndims * sizeof(int));
                 NC_CHECK(ncmpi_inq_var(ncid, varid, var.name, &var.type,
                                        &var.ndims, var.dims, &var.natts));
                 if (specp->coord_vals) {
@@ -485,6 +492,7 @@ do_ncdump(const char *path, struct fspec* specp)
                 if (var.ndims == 0 || var.dims[0] != xdimid ||
                     dims[xdimid].size != 0) { 
                     /* Collect variable's dim sizes */
+                    vdims = (size_t*) malloc(var.ndims * sizeof(size_t));
                     for (id = 0; id < var.ndims; id++)
                          vdims[id] = dims[var.dims[id]].size;
 
@@ -549,13 +557,16 @@ do_ncdump(const char *path, struct fspec* specp)
                         if (vlist) free(vlist);
                         return;
                     }
+                    free(vdims);
                 }
             }
         }
         Printf ("}\n");
+        free(dims);
     }
     NC_CHECK(ncmpi_close(ncid));
     if (vlist) free(vlist);
+    free(var.dims);
 }
 
 
diff --git a/src/utils/ncmpidump/ncmpidump.h b/src/utils/ncmpidump/ncmpidump.h
index e340cea..246d2e8 100644
--- a/src/utils/ncmpidump/ncmpidump.h
+++ b/src/utils/ncmpidump/ncmpidump.h
@@ -3,7 +3,7 @@
  *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
  *   $Header$
  *********************************************************************/
-/* $Id: ncmpidump.h 1468 2013-10-26 16:53:18Z wkliao $ */
+/* $Id: ncmpidump.h 2896 2017-02-26 23:57:34Z wkliao $ */
 
 
 /* error checking macro */
@@ -27,7 +27,7 @@ struct ncvar {			/* variable */
     char name[NC_MAX_NAME];
     nc_type type;
     int ndims;
-    int dims[NC_MAX_VAR_DIMS];
+    int *dims;                  /* dimension IDs */
     int natts;
     boolean has_fillval;
     double fillval;
diff --git a/src/utils/ncmpidump/vardata.c b/src/utils/ncmpidump/vardata.c
index 444e3b6..8bd372c 100644
--- a/src/utils/ncmpidump/vardata.c
+++ b/src/utils/ncmpidump/vardata.c
@@ -3,10 +3,10 @@
  *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
  *   $Header$
  *********************************************************************/
-/* $Id: vardata.c 2322 2016-02-26 22:47:06Z wkliao $ */
+/* $Id: vardata.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 #include <stdio.h>
 #include <ctype.h>
@@ -298,14 +298,14 @@ annotate(
       case LANG_C:
 	/* C variable indices */
 	for (id = 0; id < vrank-1; id++)
-	  Printf("%lu,", (unsigned long) cor[id]);
-	Printf("%lu", (unsigned long) cor[id] + iel);
+	  Printf("%lld,", cor[id]);
+	Printf("%lld", cor[id] + iel);
 	break;
       case LANG_F:
 	/* Fortran variable indices */
-	Printf("%lu", (unsigned long) cor[vrank-1] + iel + 1);
+	Printf("%lld", cor[vrank-1] + iel + 1);
 	for (id = vrank-2; id >=0 ; id--) {
-	    Printf(",%lu", 1 + (unsigned long) cor[id]);
+	    Printf(",%lld", 1 + cor[id]);
 	}
 	break;
     }
@@ -523,9 +523,9 @@ vardata(
      const struct fspec* fsp	/* formatting specs */
      )
 {
-    MPI_Offset cor[NC_MAX_DIMS];	/* corner coordinates */
-    MPI_Offset edg[NC_MAX_DIMS];	/* edges of hypercube */
-    size_t add[NC_MAX_DIMS];	/* "odometer" increment to next "row"  */
+    MPI_Offset *cor;	/* corner coordinates */
+    MPI_Offset *edg;	/* edges of hypercube */
+    size_t *add;	/* "odometer" increment to next "row"  */
  
     int id;
     int ir;
@@ -574,6 +574,10 @@ vardata(
 	initeps = 1;
     }
 
+    cor = (MPI_Offset*) malloc(vrank * sizeof (MPI_Offset));
+    edg = (MPI_Offset*) malloc(vrank * sizeof (MPI_Offset));
+    add = (size_t*) malloc(vrank * sizeof (size_t));
+
     nels = 1;
     for (id = 0; id < vrank; id++) {
 	cor[id] = 0;
@@ -733,6 +737,9 @@ vardata(
         if (vals) memset(vals, 0, VALBUFSIZ);
     }
     free(vals);
+    free(cor);
+    free(edg);
+    free(add);
 
     return 0;
 }
diff --git a/src/utils/ncmpigen/Makefile.am b/src/utils/ncmpigen/Makefile.am
new file mode 100644
index 0000000..63d5e1f
--- /dev/null
+++ b/src/utils/ncmpigen/Makefile.am
@@ -0,0 +1,79 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .a .o .c .h
+
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/drivers/ncmpio
+
+bin_PROGRAMS = ncmpigen
+ncmpigen_SOURCES = main.c load.c escapes.c getfill.c init.c genlib.c ncmpigentab.c
+ncmpigen_LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+
+$(top_builddir)/src/libs/libpnetcdf.la:
+	set -e; cd $(top_builddir)/src/libs && $(MAKE) $(MFLAGS)
+
+NCMPIDUMP = ../ncmpidump/ncmpidump
+dist_man_MANS = ncmpigen.1
+
+HFILES = generic.h genlib.h ncmpigen.h ncmpigentab.h
+
+EXTRA_DIST = $(HFILES) $(MANUAL) \
+             ncmpigenyy.c Makefile.in \
+             ncmpigen.l ncmpigen.y c0.cdl
+
+CLEANFILES = c0.nc c1.cdl c1.nc c2.cdl f0.nc \
+	     ctest.c ctest ctest0.nc ctest1.cdl \
+	     ftest.f ftest ftest0.nc ftest1.cdl \
+	     lex.ncmpi.c y.tab.c y.tab.h *.gcno
+
+# generating the fortran does not work yet
+# test:           $(PROGRAM) b-test c-test f-test FORCE
+# test:           $(PROGRAM) b-test c-test FORCE
+
+# Below is used if a PnetCDF developer wants to rebuild ncmpigenyy.c or
+# ncmpigentab.c. In that case, configure.in at the root directory needs
+# to check the availability of commands yacc/lex/bison. Otherwise the
+# below is never invoked, but records how to do it.
+# $(srcdir)/ncmpigentab.c \
+# $(srcdir)/ncmpigentab.h:	ncmpigen.y ncmpigenyy.c ncmpigen.h
+# if HAVE_YACC_LEX
+# 	$(yacc) -d $(srcdir)/ncmpigen.y; \
+# 	cp -f y.tab.c ncmpigentab.c; \
+# 	cp -f y.tab.h ncmpigentab.h
+# else
+# 	@echo "Error: one of $? is modified, but cannot find bison or yacc, required to re-generate $@"
+# endif
+
+# ncmpigenyy.c:	ncmpigen.l
+# if HAVE_YACC_LEX
+# 	$(lex) $(srcdir)/ncmpigen.l; \
+# 	cp -f lex.ncmpi.c ncmpigenyy.c
+# else
+# 	@echo "Error: $? is modified, but cannot find flex or lex, required to re-generate $@"
+# endif
+
+# vmstab.h \
+# vmstab.c:	ncmpigen.y
+# 	@echo 1>&2 "$@ is out-of-date with respect to $?"
+# 	@echo 1>&2 "It must be recreated via POSIX yacc(1) on a VMS system"
+# 	false
+# vms_yy.c:	ncmpigenyy.c
+# 	@echo 1>&2 "$@ is out-of-date with respect to $?"
+# 	@echo 1>&2 "It must be recreated via POSIX lex(1) on a VMS system"
+# 	false
+
+tests-local: all
+
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncmpigen.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncmpigen.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncmpigen.1
+
diff --git a/src/utils/ncmpigen/Makefile.in b/src/utils/ncmpigen/Makefile.in
index fdd4e2b..0775562 100644
--- a/src/utils/ncmpigen/Makefile.in
+++ b/src/utils/ncmpigen/Makefile.in
@@ -1,178 +1,877 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2659 2016-11-27 22:15:33Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
 
-srcdir = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = ncmpigen$(EXEEXT)
+subdir = src/utils/ncmpigen
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_ncmpigen_OBJECTS = main.$(OBJEXT) load.$(OBJEXT) escapes.$(OBJEXT) \
+	getfill.$(OBJEXT) init.$(OBJEXT) genlib.$(OBJEXT) \
+	ncmpigentab.$(OBJEXT)
+ncmpigen_OBJECTS = $(am_ncmpigen_OBJECTS)
+ncmpigen_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(ncmpigen_SOURCES)
+DIST_SOURCES = $(ncmpigen_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .a .o .c .h
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include \
+	-I$(top_builddir)/src/include \
+	-I$(top_builddir)/src/drivers/ncmpio
+ncmpigen_SOURCES = main.c load.c escapes.c getfill.c init.c genlib.c ncmpigentab.c
+ncmpigen_LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+NCMPIDUMP = ../ncmpidump/ncmpidump
+dist_man_MANS = ncmpigen.1
+HFILES = generic.h genlib.h ncmpigen.h ncmpigentab.h
+EXTRA_DIST = $(HFILES) $(MANUAL) \
+             ncmpigenyy.c Makefile.in \
+             ncmpigen.l ncmpigen.y c0.cdl
 
-include ../../../macros.make
+CLEANFILES = c0.nc c1.cdl c1.nc c2.cdl f0.nc \
+	     ctest.c ctest ctest0.nc ctest1.cdl \
+	     ftest.f ftest ftest0.nc ftest1.cdl \
+	     lex.ncmpi.c y.tab.c y.tab.h *.gcno
 
-lex		= @LEX@ -Pncmpi
-yacc		= @YACC@ -p ncmpi
+all: all-am
 
-NCMPIDUMP	= ../ncmpidump/ncmpidump
-PROGRAM		= ncmpigen
-MANUAL		= ncmpigen.1
+.SUFFIXES:
+.SUFFIXES: .a .o .c .h .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/utils/ncmpigen/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/utils/ncmpigen/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-# For VPATH build:
-# Add ../../lib into search path because ../../lib/pnetcdf.h is created in
-# the build directory at configure time and is included by C files here.
-INCLUDES	= -I$(srcdir) -I../../lib
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-LDFLAGS        += -L../../lib
-LIBS           := -lpnetcdf $(LIBS) @LCOV_LIB@
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
 
-C_SOURCES       = main.c load.c escapes.c getfill.c init.c genlib.c ncmpigentab.c
-HEADERS         = generic.h genlib.h ncmpigen.h ncmpigentab.h
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
-PROGRAM_SRCS	= $(C_SOURCES)
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 
-OBJS		= $(PROGRAM_SRCS:.c=.o)
+ncmpigen$(EXEEXT): $(ncmpigen_OBJECTS) $(ncmpigen_DEPENDENCIES) $(EXTRA_ncmpigen_DEPENDENCIES) 
+	@rm -f ncmpigen$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ncmpigen_OBJECTS) $(ncmpigen_LDADD) $(LIBS)
 
-PACKING_LIST    = $(C_SOURCES) $(HEADERS) $(MANUAL) \
-                  ncmpigenyy.c depend Makefile.in \
-                  ncmpigen.l ncmpigen.y c0.cdl
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
 
-GARBAGE		= $(PROGRAM) \
-		  c0.nc c1.cdl c1.nc c2.cdl \
-		  f0.nc \
-		  ctest.c ctest ctest0.nc ctest1.cdl \
-		  ftest.f ftest ftest0.nc ftest1.cdl \
-		  lex.ncmpi.c y.tab.c y.tab.h
+distclean-compile:
+	-rm -f *.tab.c
 
-all:		$(PROGRAM)
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/escapes.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/genlib.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/getfill.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/init.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/load.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/main.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpigentab.Po at am__quote@
 
-#  generating the fortran does not work yet
-#test:           $(PROGRAM) b-test c-test f-test FORCE
-test:           $(PROGRAM) b-test c-test FORCE
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
 
-install: $(PROGRAM) $(MANUAL)
-	$(INSTALL) -d -m 755 $(MANDIR)/man1
-	$(INSTALL_DATA) $(srcdir)/$(MANUAL) $(MANDIR)/man1/$(MANUAL)
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-	$(INSTALL) -d $(BINDIR)
-	$(INSTALL) -m 755 $(PROGRAM) $(BINDIR)/$(PROGRAM)
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-uninstall:
-	$(RM) -f $(BINDIR)/$(PROGRAM)
-	$(RM) -f $(MANDIR)/man1/$(MANUAL)
+mostlyclean-libtool:
+	-rm -f *.lo
 
-$(PROGRAM):	$(OBJS) $(LIBRARY)
-	$(LINK.c) $(OBJS) $(LDFLAGS) $(LIBS) 
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(dist_man_MANS)
+	@$(NORMAL_INSTALL)
+	@list1=''; \
+	list2='$(dist_man_MANS)'; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
 
-# Below is used if a PnetCDF developer wants to rebuild ncmpigenyy.c or
-# ncmpigentab.c. In that case, configure.in at the root directory needs
-# to check the availability of commands yacc/lex/bison. Otherwise the
-# below is never invoked, but records how to do it.
-$(srcdir)/ncmpigentab.c \
-$(srcdir)/ncmpigentab.h:	ncmpigen.y ncmpigenyy.c ncmpigen.h
-ifeq (@have_yacc_lex@, yes)
-	$(yacc) -d $(srcdir)/ncmpigen.y; \
-	cp -f y.tab.c ncmpigentab.c; \
-	cp -f y.tab.h ncmpigentab.h
-else
-	@echo "Error: one of $? is modified, but cannot find bison or yacc, required to re-generate $@"
-endif
-
-ncmpigenyy.c:	ncmpigen.l
-ifeq (@have_yacc_lex@, yes)
-	$(lex) $(srcdir)/ncmpigen.l; \
-	cp -f lex.ncmpi.c ncmpigenyy.c
-else
-	@echo "Error: $? is modified, but cannot find flex or lex, required to re-generate $@"
-endif
-
-vmstab.h \
-vmstab.c:	ncmpigen.y
-	@echo 1>&2 "$@ is out-of-date with respect to $?"
-	@echo 1>&2 "It must be recreated via POSIX yacc(1) on a VMS system"
-	false
-vms_yy.c:	ncmpigenyy.c
-	@echo 1>&2 "$@ is out-of-date with respect to $?"
-	@echo 1>&2 "It must be recreated via POSIX lex(1) on a VMS system"
-	false
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tests-local: 
 
-#
-# test "-b" option of ncmpigen
-#
-b-test:		$(PROGRAM) c1.cdl
-	@./$(PROGRAM) -b c1.cdl && \
-	$(NCMPIDUMP) `pwd`/c1.nc > c2.cdl
-	@if diff c1.cdl c2.cdl; then \
-	    echo "*** $(PROGRAM) -b test successful ***"; \
-	else \
-	    echo "*** $(PROGRAM) -b test failed ***"; \
-	    exit 1; \
-	fi
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
 
-#
-# test "-c" option of ncmpigen
-#
-c-test:	$(PROGRAM) c1.cdl
-	./$(PROGRAM) -c -o ctest0.nc $(srcdir)/c0.cdl > ctest.c && \
-	$(COMPILE.c) ctest.c && \
-	$(LINK.c) ctest.o -o ctest $(LDFLAGS) $(LIBS) && \
-	./ctest	&& \
-	$(NCMPIDUMP) -n c1 `pwd`/ctest0.nc > ctest1.cdl
-	@if diff c1.cdl ctest1.cdl; then \
-	    echo "*** $(PROGRAM) -c test successful ***"; \
-	else \
-	    echo "*** $(PROGRAM) -c test failed ***"; \
-	    exit 1; \
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
 	fi
+ctags: ctags-am
 
-c1.cdl:	$(PROGRAM) c0.cdl
-	./$(PROGRAM) -b -o c0.nc $(srcdir)/c0.cdl
-	$(NCMPIDUMP) -n c1 `pwd`/c0.nc > $@
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
 
-#
-# test "-f" option of ncmpigen
-#
-f-test:	$(PROGRAM) c0.cdl c1.cdl
-	@if [ -n "$(MPIF77)" ]; then \
-	    $(MAKE) $(MFLAGS) ftest1.cdl && \
-	    if diff c1.cdl ftest1.cdl; then \
-		echo "*** $(PROGRAM) -f test successful ***"; \
-	    else \
-		echo "*** $(PROGRAM) -f test failed ***"; \
-		exit 1; \
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
 	    fi; \
-	else \
-	    echo 1>&2 "\`$@' not made because no FORTRAN compiler"; \
-	fi
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
 
-ftest1.cdl: $(PROGRAM) c0.cdl pnetcdf.inc
-	./$(PROGRAM) -f -o ftest0.nc $(srcdir)/c0.cdl > ftest.f
-	$(COMPILE.f) ftest.f
-	$(LINK.f) -o ftest ftest.o $(LDFLAGS) $(LIBS)
-	./ftest
-	$(NCMPIDUMP) -n c1 ftest0.nc > ftest1.cdl
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-pnetcdf.inc:
-	@if [ -n "$(MPIF77)" ]; then \
-	    cp $(srcdir)/../../libf/$@ .; \
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
 	else \
-	    echo 1>&2 "\`$@' not made because no FORTRAN compiler"; \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
 	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am dist-hook distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-man uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+$(top_builddir)/src/libs/libpnetcdf.la:
+	set -e; cd $(top_builddir)/src/libs && $(MAKE) $(MFLAGS)
+
+# generating the fortran does not work yet
+# test:           $(PROGRAM) b-test c-test f-test FORCE
+# test:           $(PROGRAM) b-test c-test FORCE
+
+# Below is used if a PnetCDF developer wants to rebuild ncmpigenyy.c or
+# ncmpigentab.c. In that case, configure.in at the root directory needs
+# to check the availability of commands yacc/lex/bison. Otherwise the
+# below is never invoked, but records how to do it.
+# $(srcdir)/ncmpigentab.c \
+# $(srcdir)/ncmpigentab.h:	ncmpigen.y ncmpigenyy.c ncmpigen.h
+# if HAVE_YACC_LEX
+# 	$(yacc) -d $(srcdir)/ncmpigen.y; \
+# 	cp -f y.tab.c ncmpigentab.c; \
+# 	cp -f y.tab.h ncmpigentab.h
+# else
+# 	@echo "Error: one of $? is modified, but cannot find bison or yacc, required to re-generate $@"
+# endif
 
-$(PROGRAM)_src : $(PROGRAM_SRCS)
-	#setopt primary_language C
-	#load -C $(CPPFLAGS) $(PROGRAM_SRCS)
-	#load -C $(LIBS)
-	#load -C /usr/lang/SC2.0.1/libansi.a
-	#setopt program_name gribtonc
+# ncmpigenyy.c:	ncmpigen.l
+# if HAVE_YACC_LEX
+# 	$(lex) $(srcdir)/ncmpigen.l; \
+# 	cp -f lex.ncmpi.c ncmpigenyy.c
+# else
+# 	@echo "Error: $? is modified, but cannot find flex or lex, required to re-generate $@"
+# endif
 
-$(PROGRAM)_obj : $(PROGRAM_SRCS)
-	#setopt primary_language C
-	#load -C $(CPPFLAGS) $(OBJS)
-	#load -C $(LIBS)
-	#setopt program_name gribtonc
+# vmstab.h \
+# vmstab.c:	ncmpigen.y
+# 	@echo 1>&2 "$@ is out-of-date with respect to $?"
+# 	@echo 1>&2 "It must be recreated via POSIX yacc(1) on a VMS system"
+# 	false
+# vms_yy.c:	ncmpigenyy.c
+# 	@echo 1>&2 "$@ is out-of-date with respect to $?"
+# 	@echo 1>&2 "It must be recreated via POSIX lex(1) on a VMS system"
+# 	false
 
-include $(srcdir)/../../../rules.make
+tests-local: all
 
-include $(srcdir)/depend
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncmpigen.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncmpigen.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncmpigen.1
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/utils/ncmpigen/depend b/src/utils/ncmpigen/depend
deleted file mode 100644
index d3ca56f..0000000
--- a/src/utils/ncmpigen/depend
+++ /dev/null
@@ -1,9 +0,0 @@
-escapes.o: escapes.c generic.h ncmpigen.h genlib.h ../../lib/pnetcdf.h
-genlib.o: genlib.c generic.h ncmpigen.h genlib.h ../../lib/pnetcdf.h
-getfill.o: getfill.c generic.h ncmpigen.h genlib.h ../../lib/pnetcdf.h
-init.o: init.c generic.h ncmpigen.h genlib.h ../../lib/pnetcdf.h
-load.o: load.c generic.h ncmpigen.h genlib.h ../../lib/pnetcdf.h
-main.o: main.c generic.h ncmpigen.h genlib.h ../../lib/pnetcdf.h
-ncmpigenyy.o: ncmpigenyy.c genlib.h ncmpigentab.h ../../lib/pnetcdf.h
-ncmpigentab.o: ncmpigentab.c generic.h ncmpigen.h genlib.h ncmpigenyy.c \
- ncmpigentab.h ../../lib/pnetcdf.h
diff --git a/src/utils/ncmpigen/genlib.c b/src/utils/ncmpigen/genlib.c
index 4357879..a52236e 100644
--- a/src/utils/ncmpigen/genlib.c
+++ b/src/utils/ncmpigen/genlib.c
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <assert.h>
 #include <ctype.h>	/* for isprint() */
 #ifndef NO_STDARG
 #include	<stdarg.h>
@@ -458,7 +459,8 @@ gen_c(
 	cline("   /* assign attributes */");
 	for (iatt = 0; iatt < natts; iatt++) {
 	    if (atts[iatt].type == NC_CHAR) { /* string */
-		val_string = cstrstr((char *) atts[iatt].val, atts[iatt].len);
+		assert(atts[iatt].len == (size_t)atts[iatt].len);
+		val_string = cstrstr((char *) atts[iatt].val, (size_t)atts[iatt].len);
 		sprintf(stmnt,
 			"   stat = ncmpi_put_att_text(ncid, %s%s, \"%s\", %lu, %s);",
 			atts[iatt].var == -1 ? "NC_GLOBAL" : vars[atts[iatt].var].lname,
@@ -849,7 +851,8 @@ gen_fortran(
 	fline("* assign attributes");
 	for (iatt = 0; iatt < natts; iatt++) {
 	    if (atts[iatt].type == NC_CHAR) { /* string */
-		val_string = fstrstr((char *) atts[iatt].val, atts[iatt].len);
+		assert(atts[iatt].len == (size_t)atts[iatt].len);
+		val_string = fstrstr((char *) atts[iatt].val, (size_t)atts[iatt].len);
 		sprintf(stmnt, 
 			"iret = nfmpi_put_att_text(ncid, %s%s, \'%s\', %lu, %s)",
 			atts[iatt].var == -1 ? "NF_GLOBAL" : vars[atts[iatt].var].lname,
@@ -1173,7 +1176,7 @@ fstring(
 char *
 cstrstr(
      const char *valp,		/* pointer to vector of characters*/
-     MPI_Offset len)		/* number of characters in valp */
+     size_t len)		/* number of characters in valp */
 {
     static char *sp;
     char *cp;
@@ -1242,7 +1245,7 @@ cstrstr(
 char *
 fstrstr(
      const char *str,			/* pointer to vector of characters */
-     MPI_Offset ilen)			/* number of characters in istr */
+     size_t ilen)			/* number of characters in istr */
 {
     static char *ostr;
     char *cp, tstr[12];
@@ -1250,10 +1253,6 @@ fstrstr(
     char *istr, *istr0;		/* for null-terminated copy */
     int ii;
 
-    if(12*ilen != (MPI_Offset)(12*ilen)) {
-	derror("too much character data!");
-	exit(9);
-    }
     istr0 = istr = (char *) emalloc(ilen + 1);
     for(ii = 0; ii < ilen; ii++) {
 	istr[ii] = str[ii];
diff --git a/src/utils/ncmpigen/genlib.h b/src/utils/ncmpigen/genlib.h
index 1d10e3a..0e07377 100644
--- a/src/utils/ncmpigen/genlib.h
+++ b/src/utils/ncmpigen/genlib.h
@@ -29,8 +29,8 @@ extern const char* ncatype ( nc_type  type );
 extern const char* nfstype ( nc_type  type );
 extern const char* nfftype ( nc_type  type );
 extern char* fstring ( nc_type  type, void* valp, int num );
-extern char* cstrstr ( const char* valp, MPI_Offset len );
-extern char* fstrstr ( const char* str, MPI_Offset ilen );
+extern char* cstrstr ( const char* valp, size_t len );
+extern char* fstrstr ( const char* str, size_t ilen );
 extern MPI_Offset nctypesize( nc_type type );
 
 extern void	derror ( const char *fmt, ... )
diff --git a/src/utils/ncmpigen/load.c b/src/utils/ncmpigen/load.c
index 0f4046a..cb22e55 100644
--- a/src/utils/ncmpigen/load.c
+++ b/src/utils/ncmpigen/load.c
@@ -1,7 +1,7 @@
 /*********************************************************************
  *   Copyright 1993, UCAR/Unidata
  *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
- *   $Id: load.c 2320 2016-02-24 13:18:32Z wkliao $
+ *   $Id: load.c 3341 2017-08-25 22:29:08Z wkliao $
  *********************************************************************/
 
 #include <stdio.h>
@@ -75,7 +75,7 @@ gen_load_c(
     long long *int64valp = NULL;
     unsigned long long *uint64valp = NULL;
     char stmnt[C_MAX_STMNT];
-    MPI_Offset stmnt_len;
+    size_t stmnt_len;
     char s2[C_MAX_STMNT];
 
     if (!vars[varnum].has_data)
@@ -144,7 +144,7 @@ gen_load_c(
 		break;
 	      default:
 		derror("Unhandled type %d\n", vars[varnum].type);
-		break;
+		return;
 	    }
             for (ival = 0; ival < var_len-1; ival++) {
 		switch (vars[varnum].type) {
@@ -182,7 +182,7 @@ gen_load_c(
 		    break;
 		  default:
 		    derror("Unhandled type %d\n", vars[varnum].type);
-		    break;
+		    return;
 
 		}
 		stmnt_len += strlen(s2);
@@ -374,7 +374,7 @@ static void
 fstrcat(
     char *s,			/* source string of stement being built */
     const char *t,		/* string to be appended to source */
-    MPI_Offset *slenp			/* pointer to length of source string */
+    size_t *slenp		/* pointer to length of source string */
     )
 {
     *slenp += strlen(t);
@@ -410,7 +410,7 @@ f_var_init(
     long long *int64valp;
     unsigned long long *uint64valp;
     char stmnt[FORT_MAX_STMNT];
-    MPI_Offset stmnt_len;
+    size_t stmnt_len;
     char s2[FORT_MAX_STMNT];
     int ival;
     
@@ -605,8 +605,7 @@ load_netcdf(void *rec_start)
 {
     int i, idim;
     int stat = NC_NOERR;
-    MPI_Offset start[NC_MAX_VAR_DIMS];
-    MPI_Offset count[NC_MAX_VAR_DIMS];
+    MPI_Offset *start, *count;
     char *charvalp = NULL;
     short *shortvalp = NULL;
     int *intvalp = NULL;
@@ -657,6 +656,10 @@ load_netcdf(void *rec_start)
 	derror("Unhandled type %d\n", vars[varnum].type);
 	break;
     }
+
+    start = (MPI_Offset*) malloc(vars[varnum].ndims * 2 * sizeof(MPI_Offset));
+    count = start + vars[varnum].ndims;
+
     if (vars[varnum].ndims > 0) {
 	/* initialize start to upper left corner (0,0,0,...) */
 	start[0] = 0;
@@ -833,4 +836,5 @@ load_netcdf(void *rec_start)
                 break;
         }
     }
+    free(start);
 }
diff --git a/src/utils/ncmpigen/main.c b/src/utils/ncmpigen/main.c
index eb148e8..a1c87c8 100644
--- a/src/utils/ncmpigen/main.c
+++ b/src/utils/ncmpigen/main.c
@@ -4,8 +4,8 @@
  *   $Header$
  *********************************************************************/
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
 #include <stdio.h>		/* has getopt() under VMS */
diff --git a/src/utils/ncmpigen/ncmpigen.1 b/src/utils/ncmpigen/ncmpigen.1
index 094a956..b92526d 100644
--- a/src/utils/ncmpigen/ncmpigen.1
+++ b/src/utils/ncmpigen/ncmpigen.1
@@ -2,7 +2,7 @@
 .nr yr \n(yr+1900
 .af mo 01
 .af dy 01
-.TH NCMPIGEN 1 2013-11-17 "Printed: \n(yr-\n(mo-\n(dy" "UTILITIES"
+.TH ncmpigen 1 "PnetCDF 1.9.0.pre1" "Printed: \n(yr-\n(mo-\n(dy" "PnetCDF utilities"
 .SH NAME
 ncmpigen \- From a CDL file generate a netCDF file, a C program, or a Fortran
 program
@@ -356,7 +356,7 @@ For example the following are all acceptable \fIdouble\fP constants:
 .fi
 .RE
 .SH DATE
-$Date: 2014-04-16 13:38:34 -0500 (Wed, 16 Apr 2014) $
+ 1 Nov 2017
 .SH BUGS
 .LP
 The programs generated by \fBncmpigen\fP when using the \fB-c\fP or \fB-f\fP
diff --git a/src/utils/ncmpivalid/Makefile.am b/src/utils/ncmpivalid/Makefile.am
new file mode 100644
index 0000000..3852691
--- /dev/null
+++ b/src/utils/ncmpivalid/Makefile.am
@@ -0,0 +1,33 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+AM_CPPFLAGS  = -I${top_srcdir}/src/include
+AM_CPPFLAGS += -I$(top_srcdir)/src/drivers/ncmpio
+AM_CPPFLAGS += -I$(top_srcdir)/src/drivers/include
+AM_CPPFLAGS += -I$(top_builddir)/src/drivers/ncmpio
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/drivers/include
+
+bin_PROGRAMS = ncmpivalid
+ncmpivalid_SOURCES = ncmpivalid.c
+ncmpivalid_LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+
+$(top_builddir)/src/libs/libpnetcdf.la:
+	set -e; cd $(top_builddir)/src/libs && $(MAKE) $(MFLAGS)
+
+dist_man_MANS = ncmpivalid.1
+
+CLEANFILES = *.gcno
+
+tests-local: all
+
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncmpivalid.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncmpivalid.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncmpivalid.1
+
diff --git a/src/utils/ncmpivalid/Makefile.in b/src/utils/ncmpivalid/Makefile.in
index ac62837..b42d89c 100644
--- a/src/utils/ncmpivalid/Makefile.in
+++ b/src/utils/ncmpivalid/Makefile.in
@@ -1,64 +1,824 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2659 2016-11-27 22:15:33Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
 
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = ncmpivalid$(EXEEXT)
+subdir = src/utils/ncmpivalid
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+am_ncmpivalid_OBJECTS = ncmpivalid.$(OBJEXT)
+ncmpivalid_OBJECTS = $(am_ncmpivalid_OBJECTS)
+ncmpivalid_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(ncmpivalid_SOURCES)
+DIST_SOURCES = $(ncmpivalid_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+AM_CPPFLAGS = -I${top_srcdir}/src/include \
+	-I$(top_srcdir)/src/drivers/ncmpio \
+	-I$(top_srcdir)/src/drivers/include \
+	-I$(top_builddir)/src/drivers/ncmpio \
+	-I$(top_builddir)/src/include \
+	-I$(top_builddir)/src/drivers/include
+ncmpivalid_SOURCES = ncmpivalid.c
+ncmpivalid_LDADD = $(top_builddir)/src/libs/libpnetcdf.la
+dist_man_MANS = ncmpivalid.1
+CLEANFILES = *.gcno
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/utils/ncmpivalid/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/utils/ncmpivalid/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+ncmpivalid$(EXEEXT): $(ncmpivalid_OBJECTS) $(ncmpivalid_DEPENDENCIES) $(EXTRA_ncmpivalid_DEPENDENCIES) 
+	@rm -f ncmpivalid$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ncmpivalid_OBJECTS) $(ncmpivalid_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpivalid.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(dist_man_MANS)
+	@$(NORMAL_INSTALL)
+	@list1=''; \
+	list2='$(dist_man_MANS)'; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
 
-include ../../../macros.make
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-# For VPATH build:
-# Add ../../lib into search path because ../../lib/pnetcdf.h is created at the
-# configure time and included by ncmpivalid.c
-# Add $(srcdir)/../../lib into search path because $(srcdir)/../../lib/ncx.h
-# and $(srcdir)/../../lib/macro.h are included by ncmpivalid.c
-INCLUDES	= -I../../lib -I$(srcdir)/../../lib
+pdf: pdf-am
 
-LDFLAGS        += -L../../lib
-LIBS           := -lpnetcdf $(LIBS) @LCOV_LIB@
+pdf-am:
 
-C_SOURCES	= ncmpivalid.c
-HEADERS		=
+ps: ps-am
 
-OBJS            = $(C_SOURCES:.c=.o)
+ps-am:
 
-PROGRAM		= ncmpivalid
-MANUAL		= ncmpivalid.1
+tests: tests-am
 
-PACKING_LIST	= $(C_SOURCES) $(HEADERS) $(MANUAL) \
-                  Makefile.in depend
+tests-am: tests-local
 
-GARBAGE		= $(PROGRAM)
+uninstall-am: uninstall-binPROGRAMS uninstall-man
 
-all:		$(PROGRAM)
+uninstall-man: uninstall-man1
 
-$(PROGRAM):	$(LIBRARY) $(OBJS)
-	$(LINK.c) $(OBJS) $(LDFLAGS) $(LIBS) 
+.MAKE: install-am install-strip
 
-install: $(PROGRAM) $(MANUAL)
-	$(INSTALL) -d -m 755 $(MANDIR)/man1
-	$(INSTALL_DATA) $(srcdir)/$(MANUAL) $(MANDIR)/man1/$(MANUAL)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am dist-hook distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-man uninstall-man1
 
-	$(INSTALL) -d $(BINDIR)
-	$(INSTALL) -m 755 $(PROGRAM) $(BINDIR)/$(PROGRAM)
+.PRECIOUS: Makefile
 
-uninstall:
-	$(RM) -f $(BINDIR)/$(PROGRAM)
-	$(RM) -f $(MANDIR)/man1/$(MANUAL)
 
-$(PROGRAM)_oc : $(C_SOURCES)
-	#setopt primary_language C
-	#load -C $(CPPFLAGS) $(C_SOURCES)
-	#load -C $(LIBS)
-	#setopt program_name $(PROGRAM)
+$(top_builddir)/src/libs/libpnetcdf.la:
+	set -e; cd $(top_builddir)/src/libs && $(MAKE) $(MFLAGS)
 
-TAGS:		FORCE
-	etags `echo $(PACKING_LIST) | fmt -1 | $(EGREP) '\.c|\.h'
+tests-local: all
 
-include $(srcdir)/../../../rules.make
-include $(srcdir)/depend
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncmpivalid.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncmpivalid.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncmpivalid.1
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/utils/ncmpivalid/depend b/src/utils/ncmpivalid/depend
deleted file mode 100644
index 5a9acdb..0000000
--- a/src/utils/ncmpivalid/depend
+++ /dev/null
@@ -1 +0,0 @@
-ncmpivalid.o: ncmpivalid.c ../../lib/ncx.h ../../lib/macro.h
diff --git a/src/utils/ncmpivalid/ncmpivalid.1 b/src/utils/ncmpivalid/ncmpivalid.1
index 9b2dba7..aacf350 100644
--- a/src/utils/ncmpivalid/ncmpivalid.1
+++ b/src/utils/ncmpivalid/ncmpivalid.1
@@ -2,7 +2,7 @@
 .nr yr \n(yr+1900
 .af mo 01
 .af dy 01
-.TH NCMPIVALID 1 2013-11-17 "Printed: \n(yr-\n(mo-\n(dy" "UTILITIES"
+.TH ncmpivalid 1 "PnetCDF 1.9.0.pre1" "Printed: \n(yr-\n(mo-\n(dy" "PnetCDF utilities"
 .SH NAME
 ncmpivalid \- validates a netCDF file in parallel
 .SH SYNOPSIS
@@ -10,19 +10,31 @@ ncmpivalid \- validates a netCDF file in parallel
 .HP
 mpiexec -n 4 ncmpivalid
 .nh
+\%[-q]
+\%[-h]
 \%\fIfile\fP
 .hy
 .ft
 .SH DESCRIPTION
-\fBncmpivalid\fP checks a netCDF file whether it conforms
-the CDF file format.
-
+\fBncmpivalid\fP checks a netCDF file whether it conforms the CDF file format.
+If the input file is a valid NetCDF file, then a message of successful validation
+is printed on command-line output, for example,
+File "testfile.nc" is a valid NetCDF file.
+Otherwise, a NetCDF error message is printed.
+.SH OPTIONS
+.IP "\fB-q\fP"
+Quiet mode - print nothing on the command-line output. When in quiet mode, users should check exit status. See below in "EXIT STATUS".
+.IP "\fB-h\fP"
+Print the available command-line options
+.SH EXIT STATUS
+An exit status of 0 means no differences were found, and
+1 means some differences were found.
+Note on VMS-based system, the exit status values are reversed.
 .SH "SEE ALSO"
 .LP
 .BR ncmpidump (1),
 .BR pnetcdf (3)
 .SH DATE
-$Date: 2013-11-17 00:21:28 -0600 (Sun, 17 Nov 2013) $
+ 1 Nov 2017
 .LP
 
-
diff --git a/src/utils/ncmpivalid/ncmpivalid.c b/src/utils/ncmpivalid/ncmpivalid.c
index 54a90b9..d515798 100644
--- a/src/utils/ncmpivalid/ncmpivalid.c
+++ b/src/utils/ncmpivalid/ncmpivalid.c
@@ -2,63 +2,157 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: ncmpivalid.c 2726 2016-12-18 06:48:19Z wkliao $ */
+/* $Id: ncmpivalid.c 3495 2017-11-01 05:15:00Z wkliao $ */
 
-#if HAVE_CONFIG_H
-# include <ncconfig.h>
+#ifdef HAVE_CONFIG_H
+# include <config.h>
 #endif
 
-#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include <sys/types.h>  /* open() */
 #include <sys/stat.h>   /* open() */
 #include <fcntl.h>      /* open() */
-#include <unistd.h>     /* read() */
-#include <string.h>
-#include <stdio.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
+#include <unistd.h>     /* read() getopt() */
+#include <string.h>     /* strcpy(), strncpy() */
+#include <assert.h>
 #include <errno.h>
 
 #include <mpi.h>
 
+/* TODO: should not use any PnetCDF source codes, as this CDF format validate
+ * utility should run independently from PnetCDF
+ */
+#include <ncmpio_NC.h>
 #include <ncx.h>
-#include <macro.h>
+#include <common.h>
+
+#ifndef EXIT_FAILURE
+#ifndef vms
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE 1
+#else
+/* In OpenVMS, success is indicated by odd values and failure by even values. */
+#define EXIT_SUCCESS 1
+#define EXIT_FAILURE 0
+#endif
+#endif
+
+#define DEBUG
+#ifdef DEBUG
+#define DEBUG_RETURN(e) {                                             \
+    printf("(Error %s at line %d in file %s)\n",#e,__LINE__,__FILE__);\
+    return e;                                                         \
+}
+#else
+#define DEBUG_RETURN(e) return e;
+#endif
 
 /*
- * "magic number" at beginning of file: 0x43444601 (big endian) 
+ * "magic number" at beginning of file: 0x43444601 (big Edian) 
  */
 static const schar ncmagic[] = {'C', 'D', 'F', 0x01}; 
 
-/* Prototypes for functions used only in this file */
-static int val_get_NCtype(bufferinfo *gbp, NCtype *typep);
-static int val_get_size_t(bufferinfo *gbp, MPI_Offset *sp);
-static int val_get_NC_string(bufferinfo *gbp, NC_string **ncstrpp);
-static int val_get_NC_dim(bufferinfo *gbp, NC_dim **dimpp);
-static int val_get_NC_dimarray(bufferinfo *gbp, NC_dimarray *ncap);
-static int val_get_nc_type(bufferinfo *gbp, nc_type *typep);
-static int val_get_NC_attrV(bufferinfo *gbp, NC_attr *attrp);
-static int val_get_NC_attr(bufferinfo *gbp, NC_attr **attrpp);
-static int val_get_NC_attrarray(bufferinfo *gbp, NC_attrarray *ncap);
-static int val_get_NC_var(bufferinfo *gbp, NC_var **varpp);
-static int val_get_NC_vararray(bufferinfo *gbp, NC_vararray *ncap);
-static int val_get_NC(NC *ncp);
+#define ABSENT 0
+#define X_SIZEOF_INT 4
+static int x_sizeof_NON_NEG;
+
+/*----< ncmpio_xlen_nc_type() >----------------------------------------------*/
+/* return the length of external NC data type */
+static int
+xlen_nc_type(nc_type xtype) {
+    switch(xtype) {
+        case NC_BYTE:
+        case NC_CHAR:
+        case NC_UBYTE:  return 1;
+        case NC_SHORT:
+        case NC_USHORT: return 2;
+        case NC_INT:
+        case NC_UINT:
+        case NC_FLOAT:  return 4;
+        case NC_DOUBLE:
+        case NC_INT64:
+        case NC_UINT64: return 8;
+        default: DEBUG_RETURN(NC_EBADTYPE)
+    }
+}
+
+/* calculate the followings
+ *   ncp->begin_var           first variable's offset, file header extent
+ *   ncp->begin_rec           first record variable's offset
+ *   ncp->recsize             sum of all single record size of all variables
+ *   ncp->vars.value[*]->len  individual variable size (record size)
+ */
+static int
+compute_var_shape(NC *ncp)
+{
+    int i, j, err;
+    NC_var *first_var = NULL;       /* first "non-record" var */
+    NC_var *first_rec = NULL;       /* first "record" var */
+
+    if (ncp->vars.ndefined == 0) return NC_NOERR;
+
+    ncp->begin_var = ncp->xsz;
+    ncp->begin_rec = ncp->xsz;
+    ncp->recsize   = 0;
+
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        /* check if dimids are valid */
+        for (j=0; j<ncp->vars.value[i]->ndims; j++) {
+            if (ncp->vars.value[i]->dimids[j] < 0 ||
+                ncp->vars.value[i]->dimids[j] >= ncp->dims.ndefined)
+                DEBUG_RETURN(NC_EBADDIM) /* dimid is not defined */
+        }
+        /* ncp->vars.value[i]->len will be recomputed from dimensions in
+         * ncmpio_NC_var_shape64() */
+        err = ncmpio_NC_var_shape64(ncp->vars.value[i], &ncp->dims);
+        if (err != NC_NOERR) return err;
+
+        if (IS_RECVAR(ncp->vars.value[i])) {
+            if (first_rec == NULL) first_rec = ncp->vars.value[i];
+            ncp->recsize += ncp->vars.value[i]->len;
+        }
+        else { /* fixed-size variable */
+            if (first_var == NULL) first_var = ncp->vars.value[i];
+            ncp->begin_rec = ncp->vars.value[i]->begin
+                           + ncp->vars.value[i]->len;
+        }
+    }
+
+    if (first_rec != NULL) {
+        if (ncp->begin_rec > first_rec->begin)
+            DEBUG_RETURN(NC_ENOTNC) /* not a netCDF file or corrupted */
+
+        ncp->begin_rec = first_rec->begin;
+        /*
+         * for special case of exactly one record variable, pack value
+         */
+        if (ncp->recsize == first_rec->len)
+            ncp->recsize = *first_rec->dsizes * first_rec->xsz;
+    }
 
+    if (first_var != NULL)
+        ncp->begin_var = first_var->begin;
+    else
+        ncp->begin_var = ncp->begin_rec;
 
-#define ABORT {printf("Abort: at line=%d func=%s\n", __LINE__,__func__); fflush(stdout); MPI_Abort(MPI_COMM_WORLD, -1);}
+    if (ncp->begin_var <= 0 || ncp->xsz > ncp->begin_var ||
+        ncp->begin_rec <= 0 || ncp->begin_var > ncp->begin_rec)
+        DEBUG_RETURN(NC_ENOTNC) /* not a netCDF file or corrupted */
 
-/* Begin Of get NC */
+    return NC_NOERR;
+}
 
 /*
  * Fetch the next header chunk.
  */
 static int
-val_fetch(bufferinfo *gbp) {
-  ssize_t nn = 0;
-  MPI_Offset slack;        /* any leftover data in the buffer */
-  MPI_Aint pos_addr, base_addr;
+val_fetch(int fd, bufferinfo *gbp) {
+    ssize_t nn = 0;
+    MPI_Offset slack;        /* any leftover data in the buffer */
+    MPI_Aint pos_addr, base_addr;
 
-  assert(gbp->base != NULL);
+    assert(gbp->base != NULL);
   
 #ifdef HAVE_MPI_GET_ADDRESS
     MPI_Get_address(gbp->pos,  &pos_addr);
@@ -67,36 +161,43 @@ val_fetch(bufferinfo *gbp) {
     MPI_Address(gbp->pos,  &pos_addr);
     MPI_Address(gbp->base, &base_addr);
 #endif
-  slack = gbp->size - (pos_addr - base_addr);
-  /* if gbp->pos and gbp->base are the same, there is no leftover buffer data
-   * to worry about.  
-   * In the other extreme, where gbp->size == (gbp->pos - gbp->base), then all
-   * data in the buffer has been consumed */
-  if (slack == gbp->size) slack = 0;
-
-  memset(gbp->base, 0, gbp->size);
-  gbp->pos = gbp->base;
-  gbp->index = 0;
-
-  if (-1 == lseek(gbp->nciop->fd, gbp->offset-slack, SEEK_SET)) {
-      printf("Error at line %d: lseek %s\n",__LINE__,strerror(errno));
-      return -1;
-  }
-  nn = read(gbp->nciop->fd, gbp->base, gbp->size);
-  if (nn < gbp->size) {
-      printf("Error: Unexpected EOF ");
-      return -1;
-  }
-  gbp->offset += (gbp->size - slack);
+    slack = gbp->size - (pos_addr - base_addr);
+    /* if gbp->pos and gbp->base are the same, there is no leftover buffer data
+     * to worry about.  
+     * In the other extreme, where gbp->size == (gbp->pos - gbp->base), then all
+     * data in the buffer has been consumed */
+    if (slack == gbp->size) slack = 0;
+
+    memset(gbp->base, 0, gbp->size);
+    gbp->pos = gbp->base;
+
+    if (-1 == lseek(fd, gbp->offset-slack, SEEK_SET)) {
+        printf("Error at line %d: lseek %s\n",__LINE__,strerror(errno));
+        return -1;
+    }
+    nn = read(fd, gbp->base, gbp->size);
+    if (nn == -1) {
+        printf("Error at line %d: lseek %s\n",__LINE__,strerror(errno));
+        return -1;
+    }
+/*
+    if (nn < gbp->size) {
+        printf("Error: file header size is less than expected\n");
+printf("Error: pos_addr=%ld base_addr=%ld gbp->size=%lld nn=%zd\n",pos_addr,base_addr,gbp->size,nn);
+        DEBUG_RETURN(NC_ENOTNC)
+    }
+*/
+    gbp->offset += (gbp->size - slack);
 
-  return NC_NOERR;
+    return NC_NOERR;
 }
 
 /*
  * Ensure that 'nextread' bytes are available.
  */
 static int
-val_check_buffer(bufferinfo *gbp,
+val_check_buffer(int         fd,
+                 bufferinfo *gbp,
                  MPI_Offset  nextread)
 {
     MPI_Aint pos_addr, base_addr;
@@ -111,66 +212,65 @@ val_check_buffer(bufferinfo *gbp,
     if (pos_addr + nextread <= base_addr + gbp->size)
         return NC_NOERR;
 
-    return val_fetch(gbp);
+    return val_fetch(fd, gbp);
 } 
 
 static int
-val_get_NCtype(bufferinfo *gbp, NCtype *typep) {
-  unsigned int type = 0;
-  int status = val_check_buffer(gbp, X_SIZEOF_INT);
-  if (status != NC_NOERR) {
-    printf("NC component type is expected for ");
-    return status;
-  }
+val_get_NC_tag(int fd, bufferinfo *gbp, NC_tag *tagp)
+{
+    unsigned int tag = 0;
+    int status = val_check_buffer(fd, gbp, x_sizeof_NON_NEG);
+    if (status != NC_NOERR) {
+        printf("NC component tag is expected for ");
+        return status;
+    }
 
-  status = ncmpix_get_uint32((const void**)(&gbp->pos), &type);
-  if (status != NC_NOERR)
-    return status;
-  *typep = (NCtype) type;
-  return NC_NOERR;
+    status = ncmpix_get_uint32((const void**)(&gbp->pos), &tag);
+    if (status != NC_NOERR) return status;
+    *tagp = (NC_tag) tag;
+    return NC_NOERR;
 }
 
 static int
-val_get_size_t(bufferinfo *gbp, MPI_Offset *sp) {
-  int sizeof_t = (gbp->version == 5) ? 8 : 4; 
-  int status = val_check_buffer(gbp, sizeof_t);
+val_get_size_t(int fd, bufferinfo *gbp, MPI_Offset *sp) {
+  int sizeof_t = (gbp->version < 5) ? 4 : 8; 
+  int status = val_check_buffer(fd, gbp, sizeof_t);
   if (status != NC_NOERR) {
     printf("size is expected for ");
     return status; 
   }
-  if (gbp->version == 5) {
-      unsigned long long tmp=0;
-      status = ncmpix_get_uint64((const void **)(&gbp->pos), &tmp);
+  if (gbp->version < 5) {
+      unsigned int tmp=0;
+      status = ncmpix_get_uint32((const void **)(&gbp->pos), &tmp);
       *sp = (MPI_Offset)tmp;
   }
   else {
-      unsigned int tmp=0;
-      status = ncmpix_get_uint32((const void **)(&gbp->pos), &tmp);
+      unsigned long long tmp=0;
+      status = ncmpix_get_uint64((const void **)(&gbp->pos), &tmp);
       *sp = (MPI_Offset)tmp;
   }
   return status;
 }
 
 static int
-val_get_NC_string(bufferinfo *gbp, NC_string **ncstrpp) {
-  int status;
-  MPI_Offset  nchars = 0, padding, bufremain, strcount; 
-  NC_string *ncstrp;
-  char *cpos, pad[X_ALIGN-1];
-  MPI_Aint pos_addr, base_addr;
+val_get_NC_string(int fd, bufferinfo *gbp, char **namep) {
+    int status;
+    char *cpos, pad[X_ALIGN-1];
+    MPI_Offset nchars=0, padding, bufremain, strcount;
+    MPI_Aint pos_addr, base_addr;
 
-  status = val_get_size_t(gbp, &nchars);
-  if (status != NC_NOERR) {
-    printf("the name string of ");
-    return status;
-  }
+    *namep = NULL;
+    status = val_get_size_t(fd, gbp, &nchars);
+    if (status != NC_NOERR) {
+        printf("the name string of ");
+        return status;
+    }
 
-  ncstrp = ncmpii_new_NC_string(nchars, NULL);
-  if (ncstrp == NULL)
-    return NC_ENOMEM;
+    *namep = (char*) NCI_Malloc((size_t)nchars + 1);
+    if (*namep == NULL) DEBUG_RETURN(NC_ENOMEM)
+    (*namep)[nchars] = '\0'; /* add terminal character */
 
-  padding = _RNDUP(X_SIZEOF_CHAR * ncstrp->nchars, X_ALIGN)
-            - X_SIZEOF_CHAR * ncstrp->nchars;
+    padding = _RNDUP(nchars, X_ALIGN) - nchars;
 #ifdef HAVE_MPI_GET_ADDRESS
     MPI_Get_address(gbp->pos,  &pos_addr);
     MPI_Get_address(gbp->base, &base_addr);
@@ -178,181 +278,213 @@ val_get_NC_string(bufferinfo *gbp, NC_string **ncstrpp) {
     MPI_Address(gbp->pos,  &pos_addr);
     MPI_Address(gbp->base, &base_addr);
 #endif
-  bufremain = gbp->size - (pos_addr - base_addr);
-  cpos = ncstrp->cp;
-
-  while (nchars > 0) {
-    if (bufremain > 0) {
-      strcount = MIN(bufremain, X_SIZEOF_CHAR * nchars); 
-      (void) memcpy(cpos, gbp->pos, strcount);
-      nchars -= strcount/X_SIZEOF_CHAR;
-      gbp->pos = (void *)((char *)gbp->pos + strcount);
-      cpos += strcount; 
-      bufremain -= strcount;
-    } else {
-      status = val_fetch(gbp);
-      if(status != NC_NOERR) {
-	printf("fetching the name string of ");
-        ncmpii_free_NC_string(ncstrp);
-        return status;
-      } 
-      bufremain = gbp->size;
+    bufremain = gbp->size - (pos_addr - base_addr);
+    cpos = *namep;
+
+    while (nchars > 0) {
+        if (bufremain > 0) {
+            strcount = MIN(bufremain, nchars); 
+            (void) memcpy(cpos, gbp->pos, strcount);
+            nchars -= strcount;
+            gbp->pos = (void *)((char *)gbp->pos + strcount);
+            cpos += strcount; 
+            bufremain -= strcount;
+        } else {
+            status = val_fetch(fd, gbp);
+            if (status != NC_NOERR) {
+                printf("fetching the name string of ");
+                NCI_Free(*namep);
+                *namep = NULL;
+                return status;
+            } 
+            bufremain = gbp->size;
+        }
     }
-  }
 
-  memset(pad, 0, X_ALIGN-1);
-  status = val_check_buffer(gbp, padding);
-  if(status != NC_NOERR) {
-    printf("fetching padding for the name string of ");
-    ncmpii_free_NC_string(ncstrp);
-    return status;
-  } 
-  if (memcmp(gbp->pos, pad, padding) != 0) {
-    printf("Error @ [0x%8.8Lx]: \n\tPadding should be 0x00 for the name string alignment of ", (long long unsigned)
-	   (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size));
-    ncmpii_free_NC_string(ncstrp);
-    return NC_EINVAL;
-  }
-  gbp->pos = (void *)((char *)gbp->pos + padding);
-  
-  *ncstrpp = ncstrp;
-  
-  return NC_NOERR;  
+    if (padding > 0) {
+        memset(pad, 0, X_ALIGN-1);
+        status = val_check_buffer(fd, gbp, padding);
+        if (status != NC_NOERR) {
+            printf("fetching padding for the name string of ");
+            return status;
+        } 
+        if (memcmp(gbp->pos, pad, padding) != 0) {
+            printf("Error @ [0x%8.8Lx]: \n\tPadding should be 0x00 for the name string alignment of ", (long long unsigned)
+	           (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size));
+            NCI_Free(*namep);
+            *namep = NULL;
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+        gbp->pos = (void *)((char *)gbp->pos + padding);
+    }
+
+    return NC_NOERR;  
 }
 
 static int
-val_get_NC_dim(bufferinfo *gbp, NC_dim **dimpp) {
-  int status;
-  NC_string *ncstrp;
-  NC_dim *dimp;
+val_get_NC_dim(int fd, bufferinfo *gbp, NC_dim **dimpp) {
+    int status;
+    char *name=NULL;
+    NC_dim *dimp;
 
-  status = val_get_NC_string(gbp, &ncstrp);
-  if (status != NC_NOERR) 
-    return status;
+    *dimpp = NULL;
 
-  dimp = ncmpii_new_x_NC_dim(ncstrp);
-  if(dimp == NULL)
-    return NC_ENOMEM;
+    status = val_get_NC_string(fd, gbp, &name);
+    if (status != NC_NOERR) {
+        if (name != NULL) NCI_Free(name);
+        return status;
+    }
 
-  status = val_get_size_t(gbp, &dimp->size);
-  if(status != NC_NOERR) {
-    printf("\"%s\" - ", ncstrp->cp);
-    ncmpii_free_NC_dim(dimp); /* frees name */
-    return status;
-  }
+    dimp = (NC_dim*) NCI_Malloc(sizeof(NC_dim));
+    if (dimp == NULL) {
+        if (name != NULL) NCI_Free(name);
+        DEBUG_RETURN(NC_ENOMEM)
+    }
+    dimp->name     = name;
+    dimp->name_len = strlen(name);
+
+    status = val_get_size_t(fd, gbp, &dimp->size);
+    if (status != NC_NOERR) { /* frees dimp */
+        printf("\"%s\" - ", name);
+        NCI_Free(dimp->name);
+        NCI_Free(dimp);
+        return status;
+    }
 
-  *dimpp = dimp;
+    *dimpp = dimp;
 
-  return NC_NOERR;
+    return NC_NOERR;
 }
 
 static int
-val_get_NC_dimarray(bufferinfo *gbp, NC_dimarray *ncap) {
-  int status;
-  NCtype type = NC_UNSPECIFIED; 
-  NC_dim **dpp, **end;
-  int dim;
-  MPI_Offset tmp;
+val_get_NC_dimarray(int fd, bufferinfo *gbp, NC_dimarray *ncap)
+{
+    /* netCDF file format:
+     *  ...
+     * dim_list     = ABSENT | NC_DIMENSION  nelems  [dim ...]
+     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *                ZERO  ZERO64  // for CDF-5
+     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_DIMENSION = \x00 \x00 \x00 \x0A         // tag for list of dimensions
+     * nelems       = NON_NEG       // number of elements in following sequence
+     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
+     *                <non-negative INT64>        // CDF-5
+     */
+    int status;
+    NC_tag tag = NC_UNSPECIFIED; 
+    int dim;
+    unsigned long long err_addr;
+    MPI_Offset tmp;
 
-  assert(gbp != NULL && gbp->pos != NULL);
-  assert(ncap != NULL);
-  assert(ncap->value == NULL);
+    assert(gbp != NULL && gbp->pos != NULL);
+    assert(ncap != NULL);
+    assert(ncap->value == NULL);
 
-  status = val_get_NCtype(gbp, &type);
-  if(status != NC_NOERR) {
-    printf("preamble of ");
-    return status; 
-  }
+    /* read NC_tag (NC_DIMENSION or ZERO) from gbp buffer */
+    status = val_get_NC_tag(fd, gbp, &tag);
+    if (status != NC_NOERR) {
+        printf("preamble of \n");
+        return status; 
+    }
 
-  status = val_get_size_t(gbp, &tmp);
-  if(status != NC_NOERR) {
-    printf("the length of ");
-    return status;
-  }
-  ncap->ndefined = tmp; /* number of allowable defined variables < 2^32 */
-
-  if(ncap->ndefined == 0) {
-    if (type != NC_DIMENSION && type != NC_UNSPECIFIED) {
-      printf("Error @ [0x%8.8Lx]: \n\tInvalid NC component type, while ",
-	      (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size - 2 * X_SIZEOF_SIZE_T));
-      printf("NC_DIMENSION or NC_UNSPECIFIED is expected for ");
-      return NC_EINVAL;
-    }
-  } else {
-    if(type != NC_DIMENSION) {
-      printf("Error @ [0x%8.8Lx]: \n\tInvalid NC component type, while ",
-	      (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size - 2 * X_SIZEOF_SIZE_T));
-      printf("NC_DIMENSION is expected since number of dimensions is %d for ", ncap->ndefined);
-      return NC_EINVAL;
-    }
-
-    ncap->value = (NC_dim **) NCI_Malloc(ncap->ndefined * sizeof(NC_dim *));
-    if(ncap->value == NULL)
-      return NC_ENOMEM;
-    ncap->nalloc = ncap->ndefined;
-
-    dpp = ncap->value;
-    end = &dpp[ncap->ndefined];
-    for( /*NADA*/ dim = 0; dpp < end; dpp++, dim++) {
-      status = val_get_NC_dim(gbp, dpp);
-      if (status != NC_NOERR) {
-	printf("dimension[%d] in ", dim);
-        ncap->ndefined = dpp - ncap->value;
-        ncmpii_free_NC_dimarray(ncap);
+    /* read nelems (number of dimensions) from gbp buffer */
+    status = val_get_size_t(fd, gbp, &tmp);
+    if (status != NC_NOERR) {
+        printf("the length of ");
         return status;
-      }
     }
-  }
+    if (tmp > NC_MAX_DIMS) {
+        /* number of allowable defined dimensions NC_MAX_DIMS */
+        printf("the length of ");
+        return NC_EMAXDIMS;
+    }
+    ncap->ndefined = (int)tmp;
+
+    err_addr = (size_t)gbp->pos - (size_t)gbp->base + gbp->offset - gbp->size -
+               (X_SIZEOF_INT + x_sizeof_NON_NEG); 
+
+    if (ncap->ndefined == 0) {
+        /* no dimension defined */
+        /* From the CDF file format specification, the tag is either
+         * NC_DIMENSION or ABSENT (ZERO), but we follow NetCDF library to skip
+         * checking the tag when ndefined is zero.
+         */
+        return NC_NOERR;
+#if 0
+        if (tag != ABSENT) {
+            printf("Error @ [0x%8.8Lx]:\n", err_addr);
+            printf("\tInvalid NC component tag, while ABSENT is expected for ");
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+#endif
+    } else {
+        if (tag != NC_DIMENSION) {
+            printf("Error @ [0x%8.8Lx]:\n", err_addr);
+            printf("\tInvalid NC component tag, while NC_DIMENSION is expected as number of dimensions is %d for ", ncap->ndefined);
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+
+        /* check each dimension */
+        size_t alloc_size = (size_t)ncap->ndefined + NC_ARRAY_GROWBY;
+        ncap->value = (NC_dim **) NCI_Calloc(alloc_size, sizeof(NC_dim *));
+        if (ncap->value == NULL) DEBUG_RETURN(NC_ENOMEM)
+
+        for (dim=0; dim<ncap->ndefined; dim++) {
+            status = val_get_NC_dim(fd, gbp, &ncap->value[dim]);
+            if (status != NC_NOERR) {
+	        printf("dimension[%d] in ", dim);
+                ncap->ndefined = dim;
+                ncmpio_free_NC_dimarray(ncap);
+                return status;
+            }
+        }
+    }
 
-  return NC_NOERR;
+    return NC_NOERR;
 }
 
 static int
-val_get_nc_type(bufferinfo *gbp, nc_type *typep) {
-    /* NCtype is 4-byte integer */
-    unsigned int type = 0;
-    int status = val_check_buffer(gbp, 4);
+val_get_nc_type(int fd, bufferinfo *gbp, nc_type *xtypep) {
+    /* nc_type is 4-byte integer */
+    unsigned int xtype = 0;
+    int status = val_check_buffer(fd, gbp, 4);
     if (status != NC_NOERR) return status;
 
     /* get a 4-byte integer */
-    status = ncmpix_get_uint32((const void**)(&gbp->pos), &type);
-    gbp->index += X_SIZEOF_INT;
+    status = ncmpix_get_uint32((const void**)(&gbp->pos), &xtype);
     if (status != NC_NOERR) return status;
 
-  if (   type != NC_BYTE
-      && type != NC_UBYTE
-      && type != NC_CHAR
-      && type != NC_SHORT
-      && type != NC_USHORT
-      && type != NC_INT
-      && type != NC_UINT
-      && type != NC_FLOAT
-      && type != NC_DOUBLE
-      && type != NC_INT64
-      && type != NC_UINT64) {
-    printf("Error @ [0x%8.8Lx]: \n\tUnknown data type for the values of ",
-	   (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size - X_SIZEOF_INT));
-    return NC_EINVAL; 
-  }
- 
-  *typep = (nc_type) type;
+    if (xtype < NC_BYTE) goto err_exit;
+
+    if (gbp->version < 5) {
+        if (xtype > NC_DOUBLE) goto err_exit;
+    }
+    else if (xtype > NC_UINT64) goto err_exit;
 
-  return NC_NOERR;
+    *xtypep = (nc_type) xtype;
+
+    return NC_NOERR;
+
+err_exit:
+    printf("Error @ [0x%8.8Lx]: \n\tUnknown NC data xtype for the values of ",
+	   (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size - X_SIZEOF_INT));
+    DEBUG_RETURN(NC_EBADTYPE)
 }
 
 /*
  * Get the values of an attribute  
  */
 static int
-val_get_NC_attrV(bufferinfo *gbp, NC_attr *attrp) {
+val_get_NC_attrV(int fd, bufferinfo *gbp, NC_attr *attrp) {
     int status;
     void *value = attrp->xvalue;
     char pad[X_ALIGN-1]; 
-    MPI_Offset nvalues = attrp->nelems, esz, padding, bufremain, attcount;
+    MPI_Offset nvalues, padding, bufremain, attcount;
     MPI_Aint pos_addr, base_addr;
 
-    esz = ncmpix_len_nctype(attrp->type);
-    padding = attrp->xsz - esz * nvalues;
+    nvalues = attrp->nelems * xlen_nc_type(attrp->xtype);
+    padding = attrp->xsz - nvalues;
 #ifdef HAVE_MPI_GET_ADDRESS
     MPI_Get_address(gbp->pos,  &pos_addr);
     MPI_Get_address(gbp->base, &base_addr);
@@ -362,71 +494,127 @@ val_get_NC_attrV(bufferinfo *gbp, NC_attr *attrp) {
 #endif
     bufremain = gbp->size - (pos_addr - base_addr);
 
-  while (nvalues > 0) {
-    if (bufremain > 0) {
-      attcount = MIN(bufremain, esz * nvalues);
-      (void) memcpy(value, gbp->pos, attcount);
-      nvalues -= attcount/esz;
-      gbp->pos = (void *)((char *)gbp->pos + attcount);
-      value = (void *)((char *)value + attcount);
-      bufremain -= attcount;
-    } else {
-      status = val_fetch(gbp);
-      if(status != NC_NOERR) {
-	printf("fetching the values of ");
-        return status;
-      }
-      bufremain = gbp->size;
+    while (nvalues > 0) {
+        if (bufremain > 0) {
+            attcount = MIN(bufremain, nvalues);
+            (void) memcpy(value, gbp->pos, attcount);
+            nvalues -= attcount;
+            gbp->pos = (void *)((char *)gbp->pos + attcount);
+            value = (void *)((char *)value + attcount);
+            bufremain -= attcount;
+        } else {
+            status = val_fetch(fd, gbp);
+            if(status != NC_NOERR) {
+	        printf("fetching the values of ");
+                return status;
+            }
+            bufremain = gbp->size;
+        }
     }
-  }
  
-  memset(pad, 0, X_ALIGN-1);
-  if (memcmp(gbp->pos, pad, padding) != 0) {
-    printf("Error @ [0x%8.8Lx]: \n\tPadding should be 0x00 for the values alignment of ",
-           (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size)); 
-    return NC_EINVAL;
-  }
-  gbp->pos = (void *)((char *)gbp->pos + padding);
+    if (padding > 0) {
+        memset(pad, 0, X_ALIGN-1);
+        if (memcmp(gbp->pos, pad, padding) != 0) {
+            printf("Error @ [0x%8.8Lx]: \n\tPadding should be 0x00 for the values alignment of ",
+                   (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size)); 
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+        gbp->pos = (void *)((char *)gbp->pos + padding);
+    }
+
+    return NC_NOERR;
+}
 
-  return NC_NOERR;
+static MPI_Offset
+x_len_NC_attrV(nc_type    xtype,
+               MPI_Offset nelems)
+{
+    switch(xtype) {
+        case NC_BYTE:
+        case NC_CHAR:
+        case NC_UBYTE:  return _RNDUP(nelems, 4);
+        case NC_SHORT:
+        case NC_USHORT: return ((nelems + (nelems)%2) * 2);
+        case NC_INT:    return (nelems * 4);
+        case NC_UINT:   return (nelems * 4);
+        case NC_FLOAT:  return (nelems * 4);
+        case NC_DOUBLE: return (nelems * 8);
+        case NC_INT64:  return (nelems * 8);
+        case NC_UINT64: return (nelems * 8);
+        default: fprintf(stderr, "Error: bad xtype(%d) in %s\n",xtype,__func__);
+    }
+    return 0;
+}
+
+static int
+new_NC_attr(char        *name,
+            nc_type      xtype,
+            MPI_Offset   nelems,
+            NC_attr    **attrp)
+{
+    *attrp = (NC_attr*) NCI_Malloc(sizeof(NC_attr));
+    if (*attrp == NULL ) DEBUG_RETURN(NC_ENOMEM)
+
+    (*attrp)->xtype    = xtype;
+    (*attrp)->xsz      = 0;
+    (*attrp)->nelems   = nelems;
+    (*attrp)->xvalue   = NULL;
+    (*attrp)->name     = name;
+    (*attrp)->name_len = strlen(name);
+
+    if (nelems > 0) {
+        MPI_Offset xsz = x_len_NC_attrV(xtype, nelems);
+        (*attrp)->xsz    = xsz;
+        (*attrp)->xvalue = NCI_Malloc((size_t)xsz);
+        if ((*attrp)->xvalue == NULL) {
+            NCI_Free(*attrp);
+            *attrp = NULL;
+            DEBUG_RETURN(NC_ENOMEM)
+        }
+    }
+    return NC_NOERR;
 }
 
 static int
-val_get_NC_attr(bufferinfo *gbp, NC_attr **attrpp) {
-  NC_string *strp;
+val_get_NC_attr(int fd, bufferinfo *gbp, NC_attr **attrpp) {
+  char *name=NULL;
   int status;
-  nc_type type; 
+  nc_type xtype; 
   MPI_Offset nelems;
   NC_attr *attrp;
 
-  status = val_get_NC_string(gbp, &strp);
-  if(status != NC_NOERR)
-    return status;
+  status = val_get_NC_string(fd, gbp, &name);
+  if (status != NC_NOERR) {
+      if (name != NULL) NCI_Free(name);
+      return status;
+  }
 
-  status = val_get_nc_type(gbp, &type);
+  status = val_get_nc_type(fd, gbp, &xtype);
   if(status != NC_NOERR) {
-    printf("\"%s\" - ", strp->cp);
-    ncmpii_free_NC_string(strp);
+    printf("\"%s\" - ", name);
+    if (name != NULL) NCI_Free(name);
     return status;
   }
 
-  status = val_get_size_t(gbp, &nelems); 
+  status = val_get_size_t(fd, gbp, &nelems); 
   if(status != NC_NOERR) {
-    printf("the values of \"%s\" - ", strp->cp);
-    ncmpii_free_NC_string(strp);
+    printf("the values of \"%s\" - ", name);
+    if (name != NULL) NCI_Free(name);
     return status;
   }
 
-  attrp = ncmpii_new_x_NC_attr(strp, type, nelems);
-  if(attrp == NULL) {
-    ncmpii_free_NC_string(strp);
+  status = new_NC_attr(name, xtype, nelems, &attrp);
+  if(status != NC_NOERR) {
+    if (name != NULL) NCI_Free(name);
     return status;
   }
 
-  status = val_get_NC_attrV(gbp, attrp);
+  status = val_get_NC_attrV(fd, gbp, attrp);
   if(status != NC_NOERR) {
-    printf("\"%s\" - ", strp->cp);
-    ncmpii_free_NC_attr(attrp); /* frees strp */ 
+    printf("\"%s\" - ", name);
+    NCI_Free(attrp->name);
+    NCI_Free(attrp->xvalue);
+    NCI_Free(attrp);
     return status;
   }
 
@@ -436,315 +624,625 @@ val_get_NC_attr(bufferinfo *gbp, NC_attr **attrpp) {
 }
 
 static int
-val_get_NC_attrarray(bufferinfo *gbp, NC_attrarray *ncap){
-  int status;
-  NCtype type = NC_UNSPECIFIED;
-  NC_attr **app, **end;
-  int att;
-  MPI_Offset tmp;
+val_get_NC_attrarray(int fd, bufferinfo *gbp, NC_attrarray *ncap)
+{
+    /* netCDF file format:
+     *  ...
+     * att_list     = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
+     * ABSENT       = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *                ZERO  ZERO64  // for CDF-5
+     * ZERO         = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64       = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_ATTRIBUTE = \x00 \x00 \x00 \x0C         // tag for list of attributes
+     * nelems       = NON_NEG       // number of elements in following sequence
+     * NON_NEG      = <non-negative INT> |        // CDF-1 and CDF-2
+     *                <non-negative INT64>        // CDF-5
+     */
+    int status;
+    NC_tag tag = NC_UNSPECIFIED;
+    int att;
+    MPI_Offset tmp;
+    unsigned long long err_addr;
 
-  assert(gbp != NULL && gbp->pos != NULL);
-  assert(ncap != NULL);
-  assert(ncap->value == NULL);
+    assert(gbp != NULL && gbp->pos != NULL);
+    assert(ncap != NULL);
+    assert(ncap->value == NULL);
 
-  status = val_get_NCtype(gbp, &type);
-  if(status != NC_NOERR) {
-    printf("preamble of ");
-    return status; 
-  }
+    /* read NC_tag (NC_ATTRIBUTE or ZERO) from gbp buffer */
+    status = val_get_NC_tag(fd, gbp, &tag);
+    if (status != NC_NOERR) {
+        printf("preamble of ");
+        return status; 
+    }
 
-  status = val_get_size_t(gbp, &tmp);
-  if(status != NC_NOERR) {
-    printf("the length of ");
-    return status;
-  }
-  ncap->ndefined = tmp; /* number of allowable defined variables < 2^32 */
-
-  if(ncap->ndefined == 0) {
-    if (type != NC_ATTRIBUTE && type != NC_UNSPECIFIED) {
-      printf("Error @ [0x%8.8Lx]: \n\tInvalid NC component type, while ",
-              (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size - 2 * X_SIZEOF_SIZE_T));
-      printf("NC_ATTRIBUTE or NC_UNSPECIFIED is expected for "); 
-      return NC_EINVAL;
-    }
-  } else {
-    if(type != NC_ATTRIBUTE) {
-      printf("Error @ [0x%8.8Lx]: \n\tInvalid NC component type, while ",
-              (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size - 2 * X_SIZEOF_SIZE_T));
-      printf("NC_ATTRIBUTE is expected since number of attributes is %d for ", (int)ncap->ndefined);  
-      return NC_EINVAL;
-    }
-
-    ncap->value = (NC_attr **) NCI_Malloc(ncap->ndefined * sizeof(NC_attr *));
-    if(ncap->value == NULL)
-      return NC_ENOMEM;
-    ncap->nalloc = ncap->ndefined; 
-
-    app = ncap->value;
-    end = &app[ncap->ndefined];
-    for( /*NADA*/ att = 0; app < end; app++, att++) {
-      status = val_get_NC_attr(gbp, app);
-      if (status != NC_NOERR) {
-	printf("attribute[%d] of ", att);
-        ncap->ndefined = app - ncap->value;
-        ncmpii_free_NC_attrarray(ncap);
+    /* read nelems (number of attributes) from gbp buffer */
+    status = val_get_size_t(fd, gbp, &tmp);
+    if (status != NC_NOERR) {
+        printf("the length of ");
         return status;
-      }
     }
-  }
+    if (tmp > NC_MAX_ATTRS) {
+        /* number of allowable defined attributes NC_MAX_ATTRS */
+        printf("the length of ");
+        return NC_EMAXATTS;
+    }
+    ncap->ndefined = (int)tmp;
+
+    err_addr = (size_t)gbp->pos - (size_t)gbp->base + gbp->offset - gbp->size -
+               (X_SIZEOF_INT + x_sizeof_NON_NEG); 
+
+    if (ncap->ndefined == 0) {
+        /* no attribute defined */
+        /* From the CDF file format specification, the tag is either
+         * NC_ATTRIBUTE or ABSENT (ZERO), but we follow NetCDF library to skip
+         * checking the tag when ndefined is zero.
+         */
+        return NC_NOERR;
+#if 0
+        if (tag != ABSENT) {
+            printf("Error @ [0x%8.8Lx]:\n", err_addr);
+            printf("\tInvalid NC component tag, while ABSENT is expected for ");
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+#endif
+    } else {
+        if (tag != NC_ATTRIBUTE) {
+            printf("Error @ [0x%8.8Lx]:\n", err_addr);
+            printf("\tInvalid NC component tag, while NC_ATTRIBUTE is expected as number of dimensions is %d for ", ncap->ndefined);
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+
+        size_t alloc_size = (size_t)ncap->ndefined + NC_ARRAY_GROWBY;
+        ncap->value = (NC_attr **) NCI_Calloc(alloc_size, sizeof(NC_attr *));
+        if (ncap->value == NULL) DEBUG_RETURN(NC_ENOMEM)
+
+        for (att=0; att<ncap->ndefined; att++) {
+            status = val_get_NC_attr(fd, gbp, &ncap->value[att]);
+            if (status != NC_NOERR) {
+	        printf("attribute[%d] of ", att);
+                ncap->ndefined = att;
+                ncmpio_free_NC_attrarray(ncap);
+                return status;
+            }
+        }
+    }
   
-  return NC_NOERR;
+    return NC_NOERR;
+}
+
+/*----< ncmpio_new_NC_var() >------------------------------------------------*/
+static NC_var *
+val_new_NC_var(char *name, int ndims)
+{
+    NC_var *varp;
+
+    varp = (NC_var *) NCI_Calloc(1, sizeof(NC_var));
+    if (varp == NULL) return NULL;
+
+    if (ndims > 0) {
+        varp->shape  = (MPI_Offset*)NCI_Calloc(ndims, SIZEOF_MPI_OFFSET);
+        varp->dsizes = (MPI_Offset*)NCI_Calloc(ndims, SIZEOF_MPI_OFFSET);
+        varp->dimids = (int *)      NCI_Calloc(ndims, SIZEOF_INT);
+    }
+
+    varp->name     = name;
+    varp->name_len = strlen(name);
+    varp->ndims    = ndims;
+    varp->xsz      = 0;
+    varp->len      = 0;
+    varp->begin    = 0;
+
+    return varp;
 }
 
 static int
-val_get_NC_var(bufferinfo *gbp, NC_var **varpp) {
-  NC_string *strp;
-  int dim, status;
-  MPI_Offset ndims, *tmp_dim;
-  NC_var *varp;
-
-  status = val_get_NC_string(gbp, &strp);
-  if(status != NC_NOERR)
-    return status;
+val_get_NC_var(int          fd,
+               bufferinfo  *gbp,
+               NC_var     **varpp,
+               int          f_ndims) /* no. dimensions defined in file */
 
-  status = val_get_size_t(gbp, &ndims);
-  if(status != NC_NOERR) {
-     printf("the dimid list of \"%s\" - ", strp->cp);
-     ncmpii_free_NC_string(strp); 
-     return status;
-  }
+{
+    /* netCDF file format:
+     * netcdf_file = header data
+     * header      = magic numrecs dim_list gatt_list var_list
+     *  ...
+     * var         = name nelems [dimid ...] vatt_list nc_type vsize begin
+     * nelems      = NON_NEG
+     * dimid       = NON_NEG
+     * vatt_list   = att_list
+     * nc_type     = NC_BYTE | NC_CHAR | NC_SHORT | ...
+     * vsize       = NON_NEG
+     * begin       = OFFSET        // Variable start location.
+     * OFFSET      = <non-negative INT> |  // CDF-1
+     *               <non-negative INT64>  // CDF-2 and CDF-5
+     * NON_NEG     = <non-negative INT> |  // CDF-1 and CDF-2
+     *               <non-negative INT64>  // CDF-5
+     */
+    char *name=NULL;
+    int dim, dimid, status;
+    MPI_Offset ndims;
+    NC_var *varp;
+
+    status = val_get_NC_string(fd, gbp, &name);
+    if (status != NC_NOERR) {
+        if (name != NULL) NCI_Free(name);
+        return status;
+    }
 
-  varp = ncmpii_new_x_NC_var(strp, ndims);
-  if(varp == NULL) {
-    ncmpii_free_NC_string(strp);
-    return NC_ENOMEM;
-  }
+    status = val_get_size_t(fd, gbp, &ndims);
+    if (status != NC_NOERR) {
+        printf("the dimid list of \"%s\" - ", name);
+        if (name != NULL) NCI_Free(name);
+        return status;
+    }
+    /* cannot be more than NC_MAX_VAR_DIMS */
+    if (ndims > NC_MAX_VAR_DIMS) {
+        if (name != NULL) NCI_Free(name);
+        DEBUG_RETURN(NC_EMAXDIMS)
+    }
 
-  for (dim = 0; dim < ndims; dim++ ) {
-    status = val_check_buffer(gbp, (gbp->version == 5 ? 8 : 4));
-    if(status != NC_NOERR) {
-      printf("the dimid[%d] is expected for \"%s\" - ", dim, strp->cp);
-      ncmpii_free_NC_var(varp);
-      return status;
+    varp = val_new_NC_var(name, ndims);
+    if (varp == NULL) {
+        if (name != NULL) NCI_Free(name);
+        DEBUG_RETURN(NC_ENOMEM)
     }
-    tmp_dim = (MPI_Offset*) (varp->dimids + dim);
-    if (gbp->version == 5) {
-        unsigned long long tmp=0;
-        status = ncmpix_get_uint64((const void **)(&gbp->pos), &tmp);
-        *tmp_dim = (MPI_Offset)tmp;
+
+    for (dim=0; dim<ndims; dim++) {
+        status = val_check_buffer(fd, gbp, (gbp->version < 5 ? 4 : 8));
+        if (status != NC_NOERR) {
+            printf("the dimid[%d] is expected for \"%s\" - ", dim, name);
+            ncmpio_free_NC_var(varp);
+            return status;
+        }
+        if (gbp->version < 5) {
+            unsigned int tmp=0;
+            status = ncmpix_get_uint32((const void **)(&gbp->pos), &tmp);
+            dimid = (int)tmp;
+        }
+        else {
+            unsigned long long tmp=0;
+            status = ncmpix_get_uint64((const void **)(&gbp->pos), &tmp);
+            dimid = (int)tmp;
+        }
+        if (status != NC_NOERR) {
+            ncmpio_free_NC_var(varp);
+            return status;
+        }
+        /* dimid should be < f_ndims (num of dimensions defined in file) */
+        if (dimid >= f_ndims) {
+            ncmpio_free_NC_var(varp);
+            DEBUG_RETURN(NC_EBADDIM)
+        }
+        varp->dimids[dim] = dimid;
     }
-    else {
+
+    /* var = name nelems [dimid ...] vatt_list nc_type vsize begin
+     *                               ^^^^^^^^^                     */
+    status = val_get_NC_attrarray(fd, gbp, &varp->attrs);
+    if (status != NC_NOERR) {
+        printf("ATTRIBUTE list of \"%s\" - ", name);
+        ncmpio_free_NC_var(varp);
+        return status;
+    }
+
+    /* var = name nelems [dimid ...] vatt_list nc_type vsize begin
+     *                                         ^^^^^^^             */
+    status = val_get_nc_type(fd, gbp, &varp->xtype);
+    if (status != NC_NOERR) {
+        printf("\"%s\" - ", name);
+        ncmpio_free_NC_var(varp);
+        return status;
+    } 
+
+    status = ncmpii_xlen_nc_type(varp->xtype, &varp->xsz);
+    if (status != NC_NOERR) {
+        printf("\"%s\" - ", name);
+        ncmpio_free_NC_var(varp);
+        return status;
+    } 
+
+    /* var = name nelems [dimid ...] vatt_list nc_type vsize begin
+     *                                                 ^^^^^      
+     * instead of use vsize from file, we recalculate it in
+     * compute_var_shape() */
+    status = val_get_size_t(fd, gbp, &varp->len);
+    if (status != NC_NOERR) {
+        printf("the data of  \"%s\" - ", name);
+        ncmpio_free_NC_var(varp);
+        return status;
+    }
+
+    status = val_check_buffer(fd, gbp, (gbp->version == 1 ? 4 : 8));
+    if (status != NC_NOERR) {
+        printf("offset is expected for the data of \"%s\" - ", name);
+        ncmpio_free_NC_var(varp);
+        return status;
+    }
+    /* var = name nelems [dimid ...] vatt_list nc_type vsize begin
+     *                                                       ^^^^^ */
+    if (gbp->version == 1) {
         unsigned int tmp=0;
         status = ncmpix_get_uint32((const void **)(&gbp->pos), &tmp);
-        *tmp_dim = (MPI_Offset)tmp;
+        varp->begin = (MPI_Offset)tmp;
     }
-    if(status != NC_NOERR) {
-      ncmpii_free_NC_var(varp);
-      return status;
+    else {
+        unsigned long long tmp=0;
+        status = ncmpix_get_uint64((const void **)(&gbp->pos), &tmp);
+        varp->begin = (MPI_Offset)tmp;
+    }
+    if (status != NC_NOERR) {
+        ncmpio_free_NC_var(varp);
+        return status;
     }
-  }
 
-  status = val_get_NC_attrarray(gbp, &varp->attrs);
-  if(status != NC_NOERR) {
-    printf("ATTRIBUTE list of \"%s\" - ", strp->cp);
-    ncmpii_free_NC_var(varp);
-    return status;
-  }
+    *varpp = varp;
+    return NC_NOERR;
+}
 
-  status = val_get_nc_type(gbp, &varp->type);
-  if(status != NC_NOERR) {
-    printf("\"%s\" - ", strp->cp);
-    ncmpii_free_NC_var(varp);
-    return status;
-  } 
+static int
+val_get_NC_vararray(int          fd,
+                    bufferinfo  *gbp,
+                    NC_vararray *ncap,
+                    int          f_ndims) /* no. dimensions defined in file */
 
-  status = val_get_size_t(gbp, &varp->len);
-  if(status != NC_NOERR) {
-    printf("the data of  \"%s\" - ", strp->cp);
-    ncmpii_free_NC_var(varp);
-    return status;
-  }
+{
+    /* netCDF file format:
+     * netcdf_file = header  data
+     * header      = magic  numrecs  dim_list  gatt_list  var_list
+     *  ...
+     * var_list    = ABSENT | NC_VARIABLE   nelems  [var ...]
+     * ABSENT      = ZERO  ZERO |  // list is not present for CDF-1 and 2
+     *               ZERO  ZERO64  // for CDF-5
+     * ZERO        = \x00 \x00 \x00 \x00                      // 32-bit zero
+     * ZERO64      = \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00  // 64-bit zero
+     * NC_VARIABLE = \x00 \x00 \x00 \x0B         // tag for list of variables
+     * nelems      = NON_NEG       // number of elements in following sequence
+     * NON_NEG     = <non-negative INT> |        // CDF-1 and CDF-2
+     *               <non-negative INT64>        // CDF-5
+     */
+    int status;
+    NC_tag tag = NC_UNSPECIFIED;
+    int var;
+    MPI_Offset tmp;
+    unsigned long long err_addr;
 
-  status = val_check_buffer(gbp, (gbp->version == 5 ? 8 : 4));
-  if(status != NC_NOERR) {
-    printf("offset is expected for the data of \"%s\" - ", strp->cp);
-    ncmpii_free_NC_var(varp);
-    return status;
-  }
-  if (gbp->version == 1) {
-      unsigned int tmp=0;
-      status = ncmpix_get_uint32((const void **)(&gbp->pos), &tmp);
-      varp->begin = (MPI_Offset)tmp;
-  }
-  else {
-      unsigned long long tmp=0;
-      status = ncmpix_get_uint64((const void **)(&gbp->pos), &tmp);
-      varp->begin = (MPI_Offset)tmp;
-  }
-  if(status != NC_NOERR) {
-    ncmpii_free_NC_var(varp);
-    return status;
-  }
+    assert(gbp != NULL && gbp->pos != NULL);
+    assert(ncap != NULL);
+    assert(ncap->value == NULL); 
+
+    /* read NC_tag (NC_VARIABLE or ZERO) from gbp buffer */
+    status = val_get_NC_tag(fd, gbp, &tag);
+    if (status != NC_NOERR) {
+        printf("preamble of ");
+        return status;
+    }
+ 
+    /* read nelems (number of variables) from gbp buffer */
+    status = val_get_size_t(fd, gbp, &tmp);
+    if (status != NC_NOERR) {
+        printf("the length of ");
+        return status;
+    }
+    if (tmp > NC_MAX_VARS) {
+        /* number of allowable defined variables NC_MAX_VARS */
+        printf("the length of ");
+        return NC_EMAXVARS;
+    }
+    ncap->ndefined = (int)tmp;
+
+    err_addr = (size_t)gbp->pos - (size_t)gbp->base + gbp->offset - gbp->size -
+               (X_SIZEOF_INT + x_sizeof_NON_NEG);
 
-  *varpp = varp;
-  return NC_NOERR;
+    if (ncap->ndefined == 0) {
+        /* From the CDF file format specification, the tag is either
+         * NC_VARIABLE or ABSENT (ZERO), but we follow NetCDF library to skip
+         * checking the tag when ndefined is zero.
+         */
+        return NC_NOERR;
+#if 0
+        if (tag != ABSENT) {
+            printf("Error @ [0x%8.8Lx]:\n", err_addr);
+            printf("\tInvalid NC component tag, while ABSENT is expected for ");
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+#endif
+    } else {
+        if (tag != NC_VARIABLE) {
+            printf("Error @ [0x%8.8Lx]:\n", err_addr);
+            printf("\tInvalid NC component tag, while NC_VARIABLE is expected as number of dimensions is %d for ", ncap->ndefined);
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+ 
+        size_t alloc_size = (size_t)ncap->ndefined + NC_ARRAY_GROWBY;
+        ncap->value = (NC_var **) NCI_Calloc(alloc_size, sizeof(NC_var *));
+        if (ncap->value == NULL) DEBUG_RETURN(NC_ENOMEM) 
+
+        for (var=0; var<ncap->ndefined; var++) {
+            status = val_get_NC_var(fd, gbp, &ncap->value[var], f_ndims);
+            if (status != NC_NOERR) {
+                printf("variable[%d] in ", var);
+                ncap->ndefined = var;
+                ncmpio_free_NC_vararray(ncap);
+                return status;
+            }
+        }
+    }
+
+    return NC_NOERR;
 }
 
+/*----< NC_check_vlen() >----------------------------------------------------*/
+/* Check whether variable size is less than or equal to vlen_max,
+ * without overflowing in arithmetic calculations.  If OK, return 1,
+ * else, return 0.  For CDF1 format or for CDF2 format on non-LFS
+ * platforms, vlen_max should be 2^31 - 4, but for CDF2 format on
+ * systems with LFS it should be 2^32 - 4.
+ */
 static int
-val_get_NC_vararray(bufferinfo *gbp, NC_vararray *ncap) {
-  int status;
-  NCtype type = NC_UNSPECIFIED;
-  NC_var **vpp, **end;
-  int var;
-  MPI_Offset tmp;
+NC_check_vlen(NC_var     *varp,
+              MPI_Offset  vlen_max)
+{
+    int i;
+    MPI_Offset prod=varp->xsz;     /* product of xsz and dimensions so far */
 
-  assert(gbp != NULL && gbp->pos != NULL);
-  assert(ncap != NULL);
-  assert(ncap->value == NULL); 
+    for (i = IS_RECVAR(varp) ? 1 : 0; i < varp->ndims; i++) {
+        if (varp->shape[i] > vlen_max / prod) {
+            return 0;           /* size in bytes won't fit in a 32-bit int */
+        }
+        prod *= varp->shape[i];
+    }
+    return 1;
+}
 
-  status = val_get_NCtype(gbp, &type);
-  if(status != NC_NOERR) {
-    printf("preamble of ");
-    return status;
-  }
- 
-  status = val_get_size_t(gbp, &tmp);
-  if(status != NC_NOERR) {
-    printf("the length of ");
-    return status;
-  }
-  ncap->ndefined = tmp; /* number of allowable defined variables < 2^32 */
- 
-  if(ncap->ndefined == 0) {
-    if (type != NC_VARIABLE && type != NC_UNSPECIFIED) {
-      printf("Error @ [0x%8.8Lx]: \n\tInvalid NC component type, while ",
-              (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size - 2 * X_SIZEOF_SIZE_T));
-      printf("NC_VARIABLE or NC_UNSPECIFIED is expected for ");
-      return NC_EINVAL;
-    }
-  } else {
-    if(type != NC_VARIABLE) {
-      printf("Error @ [0x%8.8Lx]: \n\tInvalid NC component type, while ",
-              (long long unsigned) (((size_t) gbp->pos - (size_t) gbp->base) + gbp->offset - gbp->size - 2 * X_SIZEOF_SIZE_T));
-      printf("NC_VARIABLE is expected since number of variables is %d for ", ncap->ndefined);        
-      return NC_EINVAL;
+/*
+ * Given a valid ncp, check all variables for their sizes against the maximal
+ * allowable sizes. Different CDF formation versions have different maximal
+ * sizes. This function returns NC_EVARSIZE if any variable has a bad len
+ * (product of non-rec dim sizes too large), else return NC_NOERR.
+ */
+static int
+val_NC_check_vlens(NC *ncp)
+{
+    NC_var **vpp;
+    /* maximum permitted variable size (or size of one record's worth
+       of a record variable) in bytes.  This is different for format 1
+       and format 2. */
+    MPI_Offset ii, vlen_max, rec_vars_count;
+    MPI_Offset large_fix_vars_count, large_rec_vars_count;
+    int last = 0;
+
+    if (ncp->vars.ndefined == 0)
+        return NC_NOERR;
+
+    if (ncp->format >= 5) /* CDF-5 */
+        vlen_max = X_INT64_MAX - 3; /* "- 3" handles rounded-up size */
+    else if (ncp->flags & NC_64BIT_OFFSET) /* CDF2 format */
+        vlen_max = X_UINT_MAX  - 3; /* "- 3" handles rounded-up size */
+    else
+        vlen_max = X_INT_MAX   - 3; /* CDF1 format */
+
+    /* Loop through vars, first pass is for non-record variables */
+    large_fix_vars_count = 0;
+    rec_vars_count = 0;
+    vpp = ncp->vars.value;
+    for (ii = 0; ii < ncp->vars.ndefined; ii++, vpp++) {
+        if (!IS_RECVAR(*vpp)) {
+            last = 0;
+            if (NC_check_vlen(*vpp, vlen_max) == 0) {
+                /* check this variable's shape product against vlen_max */
+                if (ncp->format >= 5) /* CDF-5 */
+                    DEBUG_RETURN(NC_EVARSIZE)
+                large_fix_vars_count++;
+                last = 1;
+            }
+        } else {
+            rec_vars_count++;
+        }
     }
- 
-    ncap->value = (NC_var **) NCI_Malloc(ncap->ndefined * sizeof(NC_var *));
-    if(ncap->value == NULL)
-      return NC_ENOMEM; 
-    ncap->nalloc = ncap->ndefined;
-
-    vpp = ncap->value;
-    end = &vpp[ncap->ndefined];
-    for( /*NADA*/ var = 0; vpp < end; vpp++, var++) {
-      status = val_get_NC_var(gbp, vpp);
-      if (status != NC_NOERR) {
-        printf("variable[%d] in ", var);
-        ncap->ndefined = vpp - ncap->value;
-        ncmpii_free_NC_vararray(ncap);
-        return status;
-      }
+    /* OK if last non-record variable size too large, since not used to
+       compute an offset */
+    if (large_fix_vars_count > 1) {  /* only one "too-large" variable allowed */
+        printf("CDF-%d format allows only one large fixed-size variable\n",ncp->format);
+        DEBUG_RETURN(NC_EVARSIZE)
     }
-  }
 
-  return NC_NOERR;
+    /* The only "too-large" variable must be the last one defined */
+    if (large_fix_vars_count == 1 && last == 0) {
+        printf("CDF-%d format allows only one large fixed-size variable and it must be the last one defined\n",ncp->format);
+        DEBUG_RETURN(NC_EVARSIZE)
+    }
+
+    if (rec_vars_count == 0) return NC_NOERR;
+
+    /* if there is a "too-large" fixed-size variable, no record variable is
+     * allowed */
+    if (large_fix_vars_count == 1) {
+        printf("CDF-%d format allows only one large fixed-size variable when there is no record variable defined\n",ncp->format);
+        DEBUG_RETURN(NC_EVARSIZE)
+    }
+
+    /* Loop through vars, second pass is for record variables.   */
+    large_rec_vars_count = 0;
+    vpp = ncp->vars.value;
+    for (ii = 0; ii < ncp->vars.ndefined; ii++, vpp++) {
+        if (IS_RECVAR(*vpp)) {
+            last = 0;
+            if (NC_check_vlen(*vpp, vlen_max) == 0) {
+                /* check this variable's shape product against vlen_max */
+                if (ncp->format >= 5) /* CDF-5 */
+                    DEBUG_RETURN(NC_EVARSIZE)
+                large_rec_vars_count++;
+                last = 1;
+            }
+        }
+    }
+
+    /* For CDF-2, no record variable can require more than 2^32 - 4 bytes of
+     * storage for each record's worth of data, unless it is the last record
+     * variable. See
+     * http://www.unidata.ucar.edu/software/netcdf/docs/file_structure_and_performance.html#offset_format_limitations
+     */
+    if (large_rec_vars_count > 1) { /* only one "too-large" variable allowed */
+        printf("CDF-%d format allows only one large record variable\n",ncp->format);
+        DEBUG_RETURN(NC_EVARSIZE)
+    }
+
+    /* and it has to be the last one */
+    if (large_rec_vars_count == 1 && last == 0) {
+        printf("CDF-%d format allows only one large record variable and it must be the last one defined\n",ncp->format);
+        DEBUG_RETURN(NC_EVARSIZE)
+    }
+
+    return NC_NOERR;
+}
+
+/*
+ * Given a valid ncp, check all variables for their begins whether in an
+ * increasing order.
+ */
+static int
+val_NC_check_voff(NC *ncp)
+{
+    NC_var *varp;
+    MPI_Offset i, prev, prev_off;
+
+    if (ncp->vars.ndefined == 0) return NC_NOERR;
+
+    /* Loop through vars, first pass is for non-record variables */
+    prev_off = ncp->begin_var;
+    prev     = 0;
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        varp = ncp->vars.value[i];
+        if (IS_RECVAR(varp)) continue;
+
+        if (varp->begin < prev_off) {
+            if (i == 0)
+                printf("Variable \"%s\" begin offset (%lld) is less than header extent (%lld)\n", varp->name, varp->begin, prev_off);
+            else
+                printf("Variable \"%s\" begin offset (%lld) is less than previous variable \"%s\" end offset (%lld)\n", varp->name, varp->begin, ncp->vars.value[prev]->name, prev_off);
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+        prev_off = varp->begin + varp->len;
+        prev = i;
+    }
+
+    if (ncp->begin_rec < prev_off) {
+        printf("Record variable section begin offset (%lld) is less than fix-sized variable section end offset (%lld)\n", varp->begin, prev_off);
+        DEBUG_RETURN(NC_ENOTNC)
+    }
+
+    /* Loop through vars, second pass is for record variables */
+    prev_off = ncp->begin_rec;
+    prev     = 0;
+    for (i=0; i<ncp->vars.ndefined; i++) {
+        varp = ncp->vars.value[i];
+        if (!IS_RECVAR(varp)) continue;
+
+        if (varp->begin < prev_off) {
+            if (i == 0)
+                printf("Variable \"%s\" begin offset (%lld) is less than record variable section begin offset (%lld)\n", varp->name, varp->begin, prev_off);
+            else
+                printf("Variable \"%s\" begin offset (%lld) is less than previous variable \"%s\" end offset (%lld)\n", varp->name, varp->begin, ncp->vars.value[prev]->name, prev_off);
+            DEBUG_RETURN(NC_ENOTNC)
+        }
+        prev_off = varp->begin + varp->len;
+        prev = i;
+    }
+
+    return NC_NOERR;
 }
 
 static int
-val_get_NC(NC *ncp) {
+val_get_NC(int fd, NC *ncp)
+{
     int status;
     bufferinfo getbuf;
     char magic[sizeof(ncmagic)];
     MPI_Offset nrecs = 0;
     MPI_Aint pos_addr, base_addr;
 
-    assert(ncp != NULL);
-
     /* Initialize the get buffer that stores the header read from the file */
-    getbuf.nciop = ncp->nciop;
-    getbuf.offset = 0;     /* read from start of the file */
+    getbuf.comm          = ncp->comm;
+    getbuf.collective_fh = ncp->collective_fh;
+    getbuf.offset        = 0;     /* read from start of the file */
 
     /* CDF-5's minimum header size is 4 bytes more than CDF-1 and CDF-2's */
     getbuf.size = _RNDUP( MAX(MIN_NC_XSZ+4, ncp->chunk), X_ALIGN );
-    if (getbuf.size > NC_DEFAULT_CHUNKSIZE)
-        getbuf.size = NC_DEFAULT_CHUNKSIZE;
 
     getbuf.pos = getbuf.base = (void *)NCI_Malloc(getbuf.size);
-    getbuf.index = 0;
 
-    /* Fetch the next header chunk. The chunk is 'gbp->size' bytes big */
-    status = val_fetch(&getbuf);
-    if (status != NC_NOERR) {
-        printf("magic number (C D F \\001) is expected!\n");
-        return status;
-    }
+    /* Fetch the next header chunk. The chunk is 'gbp->size' bytes big
+     * netcdf_file = header data
+     * header      = magic numrecs dim_list gatt_list var_list
+     */
+    status = val_fetch(fd, &getbuf);
+    if (status != NC_NOERR) goto fn_exit;
   
     /* First get the file format information, magic */
     memset(magic, 0, sizeof(magic));
-    status = ncmpix_getn_text((const void **)(&getbuf.pos), sizeof(magic),
-                              magic);
-    getbuf.index += sizeof(magic);
+    status = ncmpix_getn_text((const void **)(&getbuf.pos), sizeof(magic), magic);
 
     if (memcmp(magic, ncmagic, sizeof(ncmagic)-1) != 0) {
-        printf("Error @ [0x%8.8x]: \n\tUnknow magic number, while (C D F \\001, \\002, or \\005) is expected!\n", (unsigned) 0);
-        NCI_Free(getbuf.base);
-        return NC_ENOTNC;
+        printf("Error: Unknow file signature, (C D F \\001, \\002, or \\005) is expected!\n");
+        status = NC_ENOTNC;
+        goto fn_exit;
     }
 
     /* check version number in last byte of magic */
     if (magic[sizeof(ncmagic)-1] == 0x1) {
         getbuf.version = 1;
+        ncp->format = 1;
         fSet(ncp->flags, NC_32BIT);
     } else if (magic[sizeof(ncmagic)-1] == 0x2) {
         getbuf.version = 2;
+        ncp->format = 2;
         fSet(ncp->flags, NC_64BIT_OFFSET);
         if (sizeof(MPI_Offset) != 8) {
             /* take the easy way out: if we can't support all CDF-2
              * files, return immediately */
-            NCI_Free(getbuf.base);
-            return NC_ESMALL;
+            status = NC_ESMALL;
+            goto fn_exit;
         }
     } else if (magic[sizeof(ncmagic)-1] == 0x5) {
         getbuf.version = 5;
+        ncp->format = 5;
         fSet(ncp->flags, NC_64BIT_DATA);
         if (sizeof(MPI_Offset) != 8) {
-            NCI_Free(getbuf.base);
-            return NC_ESMALL;
+            status = NC_ESMALL;
+            goto fn_exit;
         }
     } else {
-        NCI_Free(getbuf.base);
-        return NC_ENOTNC;
+        status = NC_ENOTNC;
+        goto fn_exit;
     }
 
-    /* status = val_check_buffer(&getbuf, X_SIZEOF_SIZE_T); */
-    status = val_check_buffer(&getbuf, (getbuf.version == 1) ? 4 : 8);
+    /* header = magic numrecs dim_list gatt_list var_list
+     * Check numrecs
+     */
+    status = val_check_buffer(fd, &getbuf, (getbuf.version < 5) ? 4 : 8);
     if (status != NC_NOERR) {
-        printf("number of records is expected!\n");
-        NCI_Free(getbuf.base);
-        return status;
+        printf("Error: number of records is expected!\n");
+        status = NC_ENOTNC;
+        goto fn_exit;
     }
 
     /* get numrecs from getbuf into ncp */
-    if (getbuf.version == 5) {
-        unsigned long long tmp=0;
-        status = ncmpix_get_uint64((const void **)(&getbuf.pos), &tmp);
-        nrecs = (MPI_Offset)tmp;
-    }
-    else {
+    if (getbuf.version < 5) {
         unsigned int tmp=0;
         status = ncmpix_get_uint32((const void **)(&getbuf.pos), &tmp);
         nrecs = (MPI_Offset)tmp;
     }
-    if (status != NC_NOERR) {
-        NCI_Free(getbuf.base);
-        return status;
+    else {
+        unsigned long long tmp=0;
+        status = ncmpix_get_uint64((const void **)(&getbuf.pos), &tmp);
+        nrecs = (MPI_Offset)tmp;
     }
+    if (status != NC_NOERR) goto fn_exit;
 
-    if (getbuf.version == 5)
-        getbuf.index += X_SIZEOF_INT64;
+    if (getbuf.version < 5)
+        x_sizeof_NON_NEG = 4;
     else
-        getbuf.index += X_SIZEOF_SIZE_T;
+        x_sizeof_NON_NEG = 8;
 
     ncp->numrecs = nrecs;
 
@@ -757,118 +1255,186 @@ val_get_NC(NC *ncp) {
 #endif
     assert(pos_addr < base_addr + getbuf.size);
 
-    /* get dim_list from getbuf into ncp */
-    status = val_get_NC_dimarray(&getbuf, &ncp->dims);
+    /* header = magic numrecs dim_list gatt_list var_list
+     * dim_list = ABSENT | NC_DIMENSION  nelems  [dim ...]
+     * Check dim_list
+     */
+    status = val_get_NC_dimarray(fd, &getbuf, &ncp->dims);
     if (status != NC_NOERR) {
         printf("DIMENSION list!\n");
-        NCI_Free(getbuf.base);
-        return status;
+        goto fn_exit;
     }
 
-    status = val_get_NC_attrarray(&getbuf, &ncp->attrs); 
+    /* header = magic numrecs dim_list gatt_list var_list
+     * att_list = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
+     * Check att_list
+     */
+    status = val_get_NC_attrarray(fd, &getbuf, &ncp->attrs); 
     if (status != NC_NOERR) {
         printf("GLOBAL ATTRIBUTE list!\n");
-        NCI_Free(getbuf.base);
-        return status;
+        goto fn_exit;
     }
 
-  status = val_get_NC_vararray(&getbuf, &ncp->vars);
-  if(status != NC_NOERR) {
-    printf("VARIABLE list!\n");
-    NCI_Free(getbuf.base);
-    return status; 
-  }
+    /* header = magic numrecs dim_list gatt_list var_list
+     * var_list    = ABSENT | NC_VARIABLE   nelems  [var ...]
+     * Check var_list
+     */
+    status = val_get_NC_vararray(fd, &getbuf, &ncp->vars, ncp->dims.ndefined);
+    if (status != NC_NOERR) {
+        printf("VARIABLE list!\n");
+        goto fn_exit;
+    }
 
-  ncp->xsz = ncmpii_hdr_len_NC(ncp);
-  status = ncmpii_NC_computeshapes(ncp);
-  NCI_Free(getbuf.base);
+    ncp->xsz = ncmpio_hdr_len_NC(ncp);
 
-  return status;
+    status = compute_var_shape(ncp);
+    if (status != NC_NOERR) goto fn_exit;
+
+    status = val_NC_check_vlens(ncp);
+    if (status != NC_NOERR) goto fn_exit;
+
+    status = val_NC_check_voff(ncp);
+    if (status != NC_NOERR) goto fn_exit;
+
+fn_exit:
+    NCI_Free(getbuf.base);
+
+    return status;
 }
 
 /* End Of get NC */
 
-int main(int argc, char **argv) {
+static void
+usage(char *argv0)
+{
+    char *help =
+    "Usage: %s [-h] | [-q] file_name\n"
+    "       [-h] Print help\n"
+    "       [-q] Quiet mode (exit 1 when fail, 0 success)\n"
+    "       filename: input netCDF file name\n";
+    fprintf(stderr, help, argv0);
+    fprintf(stderr,"       PnetCDF library version %s\n", ncmpi_inq_libvers());
+}
 
-    char *ncfile;
-    int status;
-    NC *ncp;
+int main(int argc, char **argv)
+{
+    extern int optind;
+    char filename[512], *cmd;
+    int i, rank, nprocs, verbose=1, fd, status=NC_NOERR;
+    NC *ncp=NULL;
     struct stat ncfilestat;
 
     MPI_Init(&argc, &argv);
-
-    if (argc != 2) {
-        printf("Usage: %s <ncfile>\n", argv[0]);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    cmd = (char*) malloc(strlen(argv[0])+1);
+    strcpy(cmd,argv[0]);
+
+    /* get command-line arguments */
+    while ((i = getopt(argc, argv, "hq")) != EOF)
+        switch(i) {
+            case 'q': verbose = 0;
+                      break;
+            case 'h':
+            default:  if (rank==0) usage(cmd);
+                      free(cmd);
+                      MPI_Finalize();
+                      return 1;
+        }
+    argc -= optind;
+    argv += optind;
+    if (argc != 1) {
+        if (rank==0) usage(cmd);
         MPI_Finalize();
+        free(cmd);
         return 1;
-    } 
-
-    ncfile = argv[1];
-
-    /* open the netCDF file */
-    ncp = ncmpii_new_NC(NULL);
-    if (ncp == NULL) {
-        printf("ncmpii_new_NC(): Not enough memory!\n");
-        ABORT
     }
+    free(cmd);
+    snprintf(filename, 512, "%s", argv[0]);
 
-    ncp->nciop = ncmpiio_new(ncfile, NC_NOWRITE);
-    if (ncp->nciop == NULL) {
-        ncmpii_free_NC(ncp);
-        printf("ncmpiio_new(): Not enough memory!\n");
-        ABORT
+    fd = open(filename, O_RDONLY);
+    if (fd == -1) {
+        fprintf(stderr, "Error on open file %s (%s)\n",
+                filename,strerror(errno));
+        MPI_Finalize();
+        return 1;
     }
 
-    if ( (*((int *)&ncp->nciop->fd) = open(ncfile, O_RDONLY)) < 0 ) {
-        printf("Can not open file: %s\n", ncfile);
-        ncmpiio_free(ncp->nciop);
-        ncmpii_free_NC(ncp);
-        ABORT
+    /* Allocate NC object */
+    ncp = (NC*) NCI_Calloc(1, sizeof(NC));
+    if (ncp == NULL) {
+        status = NC_ENOMEM;
+        printf("Error at line %d when calling ncmpio_new_NC()\n",__LINE__);
+        goto prog_exit;
     }
 
-    /* read to validate the header */
-    status = val_get_NC(ncp);
-    if (status !=  NC_NOERR) {
-        printf("Error at line %d (%s)\n",__LINE__,ncmpi_strerror(status));
-        close(ncp->nciop->fd);
-        ncmpiio_free(ncp->nciop);
-        ncmpii_free_NC(ncp);
-        ABORT
-    }
+    /* read and validate the header */
+    status = val_get_NC(fd, ncp);
+    if (status != NC_NOERR && status != -1) goto prog_exit;
 
     /* check data size */
-    if (-1 == fstat(ncp->nciop->fd, &ncfilestat)) {
+    if (-1 == fstat(fd, &ncfilestat)) {
         printf("Error at line %d fstat (%s)\n",__LINE__,strerror(errno));
-        close(ncp->nciop->fd);
-        ncmpiio_free(ncp->nciop);
-        ncmpii_free_NC(ncp);
-        return 0;
+        status = NC_EFILE;
+        goto prog_exit;
     }
-    if ( ncp->begin_rec + ncp->recsize * ncp->numrecs < ncfilestat.st_size ) {
-        printf("Error: \n\tData size is larger than defined!\n");
-        close(ncp->nciop->fd);
-        ncmpiio_free(ncp->nciop);
-        ncmpii_free_NC(ncp);
-        return 0;  
-    } else if ( ncp->numrecs > 0 &&
-                ncp->begin_rec + ncp->recsize * (ncp->numrecs - 1) > ncfilestat.st_size ) {
-        printf("Error: \n\tData size is less than expected!\n");
-        printf("\tbegin_rec=%lld recsize=%lld numrecs=%lld ncfilestat.st_size=%lld\n",ncp->begin_rec, ncp->recsize, ncp->numrecs, (long long) ncfilestat.st_size);
-        close(ncp->nciop->fd);
-        ncmpiio_free(ncp->nciop);
-        ncmpii_free_NC(ncp);
-        return 0;
+    if (ncp->numrecs > 0) {
+        MPI_Offset expect_fsize;
+        expect_fsize = ncp->begin_rec + ncp->recsize * ncp->numrecs;
+        if (expect_fsize < ncfilestat.st_size) {
+            printf("Error: file size (%lld) is larger than expected (%lld)!\n",(long long)ncfilestat.st_size, expect_fsize);
+            printf("\tbegin_rec=%lld recsize=%lld numrecs=%lld ncfilestat.st_size=%lld\n",ncp->begin_rec, ncp->recsize, ncp->numrecs, (long long) ncfilestat.st_size);
+            status = NC_EFILE;
+            goto prog_exit;
+        }
+        else if (expect_fsize > ncfilestat.st_size) {
+            /* if file header are valid and the only error is the file size
+             * less than expected, then this is due to partial data written
+             * to the variable while the file is in no fill mode */
+            if (verbose)
+                printf("Warning: file size (%lld) is less than expected (%lld)!\n",(long long)ncfilestat.st_size, expect_fsize);
+        }
+    }
+    else {
+        MPI_Offset expect_fsize;
+        if (ncp->vars.ndefined == 0)
+            expect_fsize = ncp->xsz;
+        else
+            /* find the size of last fix-sized variable */
+            expect_fsize = ncp->vars.value[ncp->vars.ndefined-1]->begin +
+                           ncp->vars.value[ncp->vars.ndefined-1]->len;
+        if (expect_fsize < ncfilestat.st_size) {
+            printf("Error: file size (%lld) is larger than expected (%lld)!\n",(long long)ncfilestat.st_size, expect_fsize);
+            status = NC_EFILE;
+            goto prog_exit;
+        }
+        else if (expect_fsize > ncfilestat.st_size) {
+            /* if file header are valid and the only error is the file size
+             * less than expected, then this is due to partial data written
+             * to the variable while the file is in no fill mode */
+            if (verbose)
+                printf("Warning: file size (%lld) is less than expected (%lld)!\n",(long long)ncfilestat.st_size, expect_fsize);
+        }
     }
 
+prog_exit:
+    if (ncp != NULL) {
+        if (ncp->dims.value  != NULL) NCI_Free(ncp->dims.value);
+        if (ncp->attrs.value != NULL) NCI_Free(ncp->attrs.value);
+        if (ncp->vars.value  != NULL) NCI_Free(ncp->vars.value);
+        NCI_Free(ncp);
+    }
+    close(fd);
 
-  /* close the file */
-
-  close(ncp->nciop->fd);
-  ncmpiio_free(ncp->nciop);
-  ncmpii_free_NC(ncp);
-
-  printf("The netCDF file is validated!\n");
+    if (status == NC_NOERR) {
+        if (verbose)
+            printf("File \"%s\" is a valid NetCDF file.\n",filename);
+    }
+    else
+        printf("Error: %s\n",ncmpi_strerror(status));
 
     MPI_Finalize();
-    return 0;
+
+    exit((status == NC_NOERR) ? EXIT_SUCCESS : EXIT_FAILURE);
 }
diff --git a/src/utils/ncoffsets/Makefile.am b/src/utils/ncoffsets/Makefile.am
new file mode 100644
index 0000000..ca6a6d0
--- /dev/null
+++ b/src/utils/ncoffsets/Makefile.am
@@ -0,0 +1,25 @@
+#
+# Copyright (C) 2015, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3495 2017-11-01 05:15:00Z wkliao $
+#
+# @configure_input@
+
+bin_PROGRAMS = ncoffsets
+EXTRA_DIST = ncoffsets.c
+
+ncoffsets$(EXEEXT): ncoffsets.c
+	$(SEQ_CC) -o $@ $<
+
+dist_man_MANS = ncoffsets.1
+
+tests-local: all
+
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncoffsets.c
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncoffsets.c
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncoffsets.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncoffsets.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncoffsets.1
+
diff --git a/src/utils/ncoffsets/Makefile.in b/src/utils/ncoffsets/Makefile.in
index 7d77a0b..6b40c07 100644
--- a/src/utils/ncoffsets/Makefile.in
+++ b/src/utils/ncoffsets/Makefile.in
@@ -1,38 +1,813 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2015, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2253 2015-12-22 01:45:40Z wkliao $
+# $Id: Makefile.am 3495 2017-11-01 05:15:00Z wkliao $
 #
 # @configure_input@
 
-srcdir = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = ncoffsets$(EXEEXT)
+subdir = src/utils/ncoffsets
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+ncoffsets_SOURCES = ncoffsets.c
+ncoffsets_OBJECTS = ncoffsets.$(OBJEXT)
+ncoffsets_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = ncoffsets.c
+DIST_SOURCES = ncoffsets.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = ncoffsets.c
+dist_man_MANS = ncoffsets.1
+all: all-am
 
-include ../../../macros.make
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/utils/ncoffsets/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/utils/ncoffsets/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-C_SOURCES	= ncoffsets.c
-OBJS            = $(C_SOURCES:.c=.o)
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-PROGRAM		= $(C_SOURCES:.c=)
-MANUAL		= ncoffsets.1
-PACKING_LIST    = $(C_SOURCES) $(MANUAL) Makefile.in
-GARBAGE		= $(PROGRAM)
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
 
-all: $(PROGRAM)
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
 
-ncoffsets: ncoffsets.c
-	$(SEQ_CC) -o $@ $<
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncoffsets.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(dist_man_MANS)
+	@$(NORMAL_INSTALL)
+	@list1=''; \
+	list2='$(dist_man_MANS)'; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
 
-install: $(PROGRAM) $(MANUAL)
-	$(INSTALL) -d -m 755 $(MANDIR)/man1
-	$(INSTALL_DATA) $(srcdir)/$(MANUAL) $(MANDIR)/man1/$(MANUAL)
-	$(INSTALL) -d $(BINDIR)
-	$(INSTALL) -m 755 $(PROGRAM) $(BINDIR)/$(PROGRAM)
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am dist-hook distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-man uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+ncoffsets$(EXEEXT): ncoffsets.c
+	$(SEQ_CC) -o $@ $<
 
-uninstall:
-	$(RM) -f $(BINDIR)/$(PROGRAM)
-	$(RM) -f $(MANDIR)/man1/$(MANUAL)
+tests-local: all
 
-include $(srcdir)/../../../rules.make
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncoffsets.c
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncoffsets.c
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/ncoffsets.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/ncoffsets.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/ncoffsets.1
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/utils/ncoffsets/ncoffsets.1 b/src/utils/ncoffsets/ncoffsets.1
index 578ca93..1822412 100644
--- a/src/utils/ncoffsets/ncoffsets.1
+++ b/src/utils/ncoffsets/ncoffsets.1
@@ -2,7 +2,7 @@
 .nr yr \n(yr+1900
 .af mo 01
 .af dy 01
-.TH PNETCDF_VERSION 1 2014-04-15 "Printed: \n(yr-\n(mo-\n(dy" "UTILITIES"
+.TH ncoffsets 1 "PnetCDF 1.9.0.pre1" "Printed: \n(yr-\n(mo-\n(dy" "PnetCDF utilities"
 .SH NAME
 ncoffsets \- print the starting/ending file offsets for netCDF variables
 .SH SYNOPSIS
@@ -105,5 +105,5 @@ Check if there are gaps in between two adjacent fixed-size variables.
 .LP
 .BR pnetcdf (3)
 .SH DATE
-$Date: 2016-11-16 15:33:05 -0600 (Wed, 16 Nov 2016) $
+ 1 Nov 2017
 .LP
diff --git a/src/utils/ncoffsets/ncoffsets.c b/src/utils/ncoffsets/ncoffsets.c
index 923c8e5..6baac1e 100644
--- a/src/utils/ncoffsets/ncoffsets.c
+++ b/src/utils/ncoffsets/ncoffsets.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: ncoffsets.c 2709 2016-12-16 17:15:57Z wkliao $ */
+/* $Id: ncoffsets.c 3495 2017-11-01 05:15:00Z wkliao $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -50,7 +50,7 @@ static int verbose_debug;
 #define	NC_EINVAL	(-36)	/**< Invalid Argument */
 #define NC_EBADDIM	(-46)	/**< Invalid dimension id or name */
 #define NC_EUNLIMPOS	(-47)	/**< NC_UNLIMITED in the wrong index */
-#define NC_ENOTNC	(-51)	/**< Not a netcdf file */
+#define NC_ENOTNC	(-51)	/**< Not a netcdf file (file format violates CDF specification) */
 #define NC_EVARSIZE     (-62)   /**< One or more variable sizes violate format constraints */
 
 #define NC_UNLIMITED 0L
@@ -228,7 +228,7 @@ swap4b(void *val)
 }
 
 static void
-swap8b(long long *val)
+swap8b(unsigned long long *val)
 {
     uint64_t *op = (uint64_t*)val;
     *op = SWAP8B(*op);
@@ -240,7 +240,7 @@ get_uint64(bufferinfo *gbp) {
     unsigned long long tmp;
     memcpy(&tmp, gbp->pos, 8);
     if (is_little_endian) swap8b(&tmp);
-    gbp->pos += 8;
+    gbp->pos = (char*)gbp->pos + 8;
     return tmp;
 }
 
@@ -250,7 +250,7 @@ get_uint32(bufferinfo *gbp) {
     unsigned int tmp;
     memcpy(&tmp, gbp->pos, 4);
     if (is_little_endian) swap4b(&tmp);
-    gbp->pos += 4;
+    gbp->pos = (char*)gbp->pos + 4;
     return tmp;
 }
 
@@ -781,7 +781,7 @@ hdr_fetch(bufferinfo *gbp) {
 
     assert(gbp->base != NULL);
 
-    slack = gbp->size - (gbp->pos - gbp->base);
+    slack = gbp->size - ((char*)gbp->pos - (char*)gbp->base);
     /* if gbp->pos and gbp->base are the same, there is no leftover buffer
      * data to worry about.
      * In the other extreme, where gbp->size == (gbp->pos - gbp->base), then
@@ -809,7 +809,7 @@ static int
 hdr_check_buffer(bufferinfo *gbp,
                  size_t      nextread)
 {
-    if (gbp->pos + nextread <= gbp->base + gbp->size)
+    if ((char*)gbp->pos + nextread <= (char*)gbp->base + gbp->size)
         return NC_NOERR;
 
     /* read the next chunk from file */
@@ -856,7 +856,7 @@ hdr_get_nc_type(bufferinfo *gbp,
         type != NC_INT64   &&
         type != NC_UINT64
        )
-        DEBUG_RETURN_ERROR(NC_EINVAL);
+        DEBUG_RETURN_ERROR(NC_ENOTNC);
 
     *typep = (nc_type) type;
     return NC_NOERR;
@@ -894,7 +894,7 @@ hdr_get_NC_name(bufferinfo  *gbp,
 
     nbytes = nchars;
     padding = _RNDUP(ncstrp->nchars, X_ALIGN) - ncstrp->nchars;
-    bufremain = gbp->size - (gbp->pos - gbp->base);
+    bufremain = gbp->size - ((char*)gbp->pos - (char*)gbp->base);
     cpos = ncstrp->cp;
 
     /* get namestring with padding */
@@ -921,7 +921,7 @@ hdr_get_NC_name(bufferinfo  *gbp,
         memset(pad, 0, X_ALIGN-1);
         if (memcmp(gbp->pos, pad, padding) != 0) {
             free(ncstrp);
-            DEBUG_RETURN_ERROR(NC_EINVAL);
+            DEBUG_RETURN_ERROR(NC_ENOTNC);
         }
         gbp->pos = (void *)((char *)gbp->pos + padding);
     }
@@ -1037,10 +1037,10 @@ hdr_get_NC_dimarray(bufferinfo  *gbp,
     ncap->ndefined = (int)ndefined;
 
     if (ndefined == 0) {
-        if (type != NC_DIMENSION && type != NC_UNSPECIFIED)
-            DEBUG_RETURN_ERROR(NC_EINVAL);
+        if (type != NC_UNSPECIFIED)
+            DEBUG_RETURN_ERROR(NC_ENOTNC);
     } else {
-        if (type != NC_DIMENSION) DEBUG_RETURN_ERROR(NC_EINVAL);
+        if (type != NC_DIMENSION) DEBUG_RETURN_ERROR(NC_ENOTNC);
 
         ncap->value = (NC_dim **) malloc(ndefined * sizeof(NC_dim*));
         MALLOC_CHECK(ncap->value)
@@ -1084,7 +1084,7 @@ hdr_get_NC_attrV(bufferinfo *gbp,
 
     nbytes = attrp->nelems * ncmpix_len_nctype(attrp->type);
     padding = attrp->xsz - nbytes;
-    bufremain = gbp->size - (gbp->pos - gbp->base);
+    bufremain = gbp->size - ((char*)gbp->pos - (char*)gbp->base);
 
     /* get values */
     while (nbytes > 0) {
@@ -1106,7 +1106,7 @@ hdr_get_NC_attrV(bufferinfo *gbp,
     if (padding > 0) {
         memset(pad, 0, X_ALIGN-1);
         if (memcmp(gbp->pos, pad, (size_t)padding) != 0)
-            DEBUG_RETURN_ERROR(NC_EINVAL);
+            DEBUG_RETURN_ERROR(NC_ENOTNC);
         gbp->pos = (void *)((char *)gbp->pos + padding);
     }
 
@@ -1275,11 +1275,11 @@ hdr_get_NC_attrarray(bufferinfo   *gbp,
     ncap->ndefined = (int)ndefined;
 
     if (ndefined == 0) {
-        if (type != NC_ATTRIBUTE && type != NC_UNSPECIFIED)
-            DEBUG_RETURN_ERROR(NC_EINVAL);
+        if (type != NC_UNSPECIFIED)
+            DEBUG_RETURN_ERROR(NC_ENOTNC);
     } else {
         if (type != NC_ATTRIBUTE)
-            DEBUG_RETURN_ERROR(NC_EINVAL);
+            DEBUG_RETURN_ERROR(NC_ENOTNC);
 
         ncap->value = (NC_attr **)malloc((size_t)ndefined * sizeof(NC_attr*));
         MALLOC_CHECK(ncap->value)
@@ -1487,11 +1487,11 @@ hdr_get_NC_vararray(bufferinfo  *gbp,
     ncap->ndefined = (int)ndefined;
 
     if (ndefined == 0) { /* no variable defined */
-        if (type != NC_VARIABLE && type != NC_UNSPECIFIED)
-            DEBUG_RETURN_ERROR(NC_EINVAL);
+        if (type != NC_UNSPECIFIED)
+            DEBUG_RETURN_ERROR(NC_ENOTNC);
     } else {
         if (type != NC_VARIABLE)
-            DEBUG_RETURN_ERROR(NC_EINVAL);
+            DEBUG_RETURN_ERROR(NC_ENOTNC);
 
         ncap->value = (NC_var **) malloc((size_t)ndefined * sizeof(NC_var*));
         MALLOC_CHECK(ncap->value)
@@ -1548,7 +1548,7 @@ ncmpii_hdr_get_NC(int fd, NC *ncp)
 
     /* First get the file format information, magic */
     magic = getbuf.base;
-    getbuf.pos += 4;
+    getbuf.pos = (char*)getbuf.pos + 4;
 
     /* don't need to worry about CDF-1 or CDF-2
      * if the first bits are not 'CDF'
@@ -1625,6 +1625,7 @@ ncmpii_free_NC(NC *ncp)
     free(ncp->path);
 }
 
+#if 0
 const char *
 ncmpi_strerror(int err)
 {
@@ -1647,6 +1648,7 @@ ncmpi_strerror(int err)
          return "Unknown error code";
    }
 }
+#endif
 
 const char *
 ncmpii_err_code_name(int err)
@@ -1764,7 +1766,7 @@ usage(char *cmd)
 "       [-x]            Check gaps in fixed-size variables, output 1 if gaps\n"
 "                       are found, 0 for otherwise.\n"
 "       file            Input netCDF file name\n"
-"*Parallel netCDF library version 1.7.0\n";
+"*Parallel netCDF library version 1.9.0.pre1 of  1 Nov 2017\n";
     fprintf(stderr, help, cmd);
 }
 
@@ -1773,7 +1775,7 @@ int main(int argc, char *argv[])
 {
     extern int optind;
     char *filename, *cmd, *env_str;
-    int i, j, err, opt, nvars;
+    int i, j, err, opt;
     int print_var_size=0, print_gap=0, check_gap=0, print_all_rec=0;
     NC *ncp;
     struct fspec *fspecp=NULL;
@@ -1811,6 +1813,7 @@ int main(int argc, char *argv[])
             free(fspecp->lvars[i]);
         if (fspecp->lvars != NULL) free(fspecp->lvars);
         free(fspecp);
+        free(cmd);
         return 1;
     }
     free(cmd);
diff --git a/pnetcdf-config.in b/src/utils/pnetcdf-config.in
similarity index 76%
rename from pnetcdf-config.in
rename to src/utils/pnetcdf-config.in
index f44c498..b6eded4 100644
--- a/pnetcdf-config.in
+++ b/src/utils/pnetcdf-config.in
@@ -11,24 +11,22 @@
 #
 # @configure_input@
 
-prefix="@prefix@"
-exec_prefix="@exec_prefix@"
+prefix=INSTALL_PREFIX
+exec_prefix=INSTALL_EXEC_PREFIX
 libdir="@libdir@"
 includedir="@includedir@"
 
 # Preprocessing:
 FC_DEFINE="@FC_DEFINE@"
 CPP="@CPP@"
-FPP="@FPP@"
 
+CPPFLAGS="@CPPFLAGS@"
 if test "x at PNETCDF_DEBUG@" = x1 ; then
-  CPPFLAGS="@CPPFLAGS@ -DPNETCDF_DEBUG"
-  CXXCPPFLAGS="@CXXCPPFLAGS@ -DPNETCDF_DEBUG"
-  FPPFLAGS="@FPPFLAGS@ @NAGf90FPPFLAGS@ @FC_DEFINE at PNETCDF_DEBUG"
-else
-  CPPFLAGS="@CPPFLAGS@"
-  CXXCPPFLAGS="@CXXCPPFLAGS@"
-  FPPFLAGS="@FPPFLAGS@ @NAGf90FPPFLAGS@"
+   if test "x$CPPFLAGS" = x ; then
+      CPPFLAGS="-DPNETCDF_DEBUG"
+   else
+      CPPFLAGS="$CPPFLAGS -DPNETCDF_DEBUG"
+   fi
 fi
 
 # Compilation:
@@ -40,15 +38,13 @@ MPIF90="@MPIF90@"
 # debugging and optimization options for compiling and linking
 CFLAGS="@CFLAGS@"
 CXXFLAGS="@CXXFLAGS@"
-F77FLAGS="@F77FLAGS@ @NAG_FCFLAGS@"
-F90FLAGS="@F90FLAGS@ @NAG_FCFLAGS@"
+FFLAGS="@FFLAGS@"
+FCFLAGS="@FCFLAGS@"
 
 # Linking:
 FLIBS="@FLIBS@"
 FCLIBS="@FCLIBS@"
-F90LIBS="@F90LIBS@"
 FLDFLAGS="@FLDFLAGS@"
-F90LDFLAGS="@F90LDFLAGS@"
 LDFLAGS="@LDFLAGS@"
 LIBS="@LIBS@"
 
@@ -61,7 +57,7 @@ has_fortran="@has_fortran@"
 has_cxx="@has_mpicxx@"
 
 config_date="@CONFIG_DATE@"
-release_date="@PNETCDF_RELEASE_DATE@"
+release_date=" 1 Nov 2017"
 
 usage()
 {
@@ -78,13 +74,12 @@ Available values for OPTION include:
   --has-c++            whether C++ API is installed
   --c++                C++ compiler
   --cxxflags           C++ compiler flags
-  --cxxppflags         C++ pre-processor flags
   --has-fortran        whether Fortran API is installed
   --f77                Fortran 77 compiler
-  --f77flags           Fortran 77 compiler flags
+  --fflags             Fortran 77 compiler flags
   --fppflags           Fortran pre-processor flags
-  --f90                Fortran 90 compiler
-  --f90flags           Fortran 90 compiler flags
+  --fc                 Fortran 9x compiler
+  --fcflags            Fortran 9x compiler flags
   --ldflags            Linker options
   --libs               Libraries used to build PnetCDF
   --relax-coord-bound  Whether using a relaxed coordinate boundary check
@@ -117,42 +112,39 @@ all()
 if test "x$has_cxx" = xyes ; then
         echo "  --cxx               -> $MPICXX"
         echo "  --cxxflags          -> $CXXFLAGS"
-        echo "  --cxxppflags        -> $CXXCPPFLAGS"
 fi
         echo
         echo "  --has-fortran       -> $has_fortran"
 if test "x$has_fortran" = xyes ; then
         echo "  --f77               -> $MPIF77"
-        echo "  --f77flags          -> $F77FLAGS"
-        echo "  --fppflags          -> $FPPFLAGS"
-#        echo "  --f77libs           -> $FCLIBS"
+        echo "  --fflags            -> $FFLAGS"
         echo
-        echo "  --f90               -> $MPIF90"
-        echo "  --f90flags          -> $F90FLAGS"
-#        echo "  --f90libs           -> $F90LIBS"
+        echo "  --fc                -> $MPIF90"
+        echo "  --fcflags           -> $FCFLAGS"
+#        echo "  --fclibs            -> $FCLIBS"
 fi
         echo
-if test "x${enable_erange_fill}" = xno; then
+if test "x at ENABLE_ERANGE_FILL@" = x0; then
         echo "  --erange-fill       -> disabled"
 else
         echo "  --erange-fill       -> enabled"
 fi
-if test "x at ENABLE_SUBFILING@" = xyes; then
+if test "x at ENABLE_SUBFILING@" = x1; then
         echo "  --subfiling         -> enabled"
 else
         echo "  --subfiling         -> disabled"
 fi
-if test "x at RELAX_COORD_BOUND@" = xyes; then
+if test "x at RELAX_COORD_BOUND@" = x1; then
         echo "  --relax-coord-bound -> enabled"
 else
         echo "  --relax-coord-bound -> disabled"
 fi
-if test "x at is_bigendian@" = xno  && (test "x at in_place_swap@" = xno) ; then
+if test "x at ac_cv_c_bigendian@" = xno  && (test "x at in_place_swap@" = xno) ; then
         echo "  --in-place-swap     -> disabled"
 else
         echo "  --in-place-swap     -> enabled"
 fi
-if test "x at PNETCDF_DEBUG@" = xyes; then
+if test "x at PNETCDF_DEBUG@" = x1; then
         echo "  --debug             -> enabled"
 else
         echo "  --debug             -> disabled"
@@ -237,10 +229,6 @@ while test $# -gt 0; do
         echo "$CXXFLAGS" | sed -e 's/^[ \t]*//'
         ;;
 
-    --cxxppflags)
-        echo "$CXXCPPFLAGS" | sed -e 's/^[ \t]*//'
-        ;;
-
     --has-fortran)
         echo "$has_fortran" | sed -e 's/^[ \t]*//'
         ;;
@@ -249,32 +237,24 @@ while test $# -gt 0; do
         echo "$MPIF77" | sed -e 's/^[ \t]*//'
         ;;
 
-    --f77flags)
-        echo "$F77FLAGS" | sed -e 's/^[ \t]*//'
-        ;;
-
-    --fppflags)
-        echo "$FPPFLAGS" | sed -e 's/^[ \t]*//'
+    --fflags)
+        echo "$FFLAGS" | sed -e 's/^[ \t]*//'
         ;;
 
-#    --f77libs)
-#        echo "$FCLIBS" | sed -e 's/^[ \t]*//'
-#        ;;
-
-    --f90)
+    --fc)
         echo "$MPIF90" | sed -e 's/^[ \t]*//'
         ;;
 
-    --f90flags)
-        echo "$F90FLAGS" | sed -e 's/^[ \t]*//'
+    --fcflags)
+        echo "$FCFLAGS" | sed -e 's/^[ \t]*//'
         ;;
 
-#    --f90libs)
-#        echo "$F90LIBS" | sed -e 's/^[ \t]*//'
+#    --fclibs)
+#        echo "$FCLIBS" | sed -e 's/^[ \t]*//'
 #        ;;
 
     --relax-coord-bound)
-if test "x at RELAX_COORD_BOUND@" = xyes; then
+if test "x at RELAX_COORD_BOUND@" = x1; then
         echo "enabled"
 else
         echo "disabled"
@@ -282,7 +262,7 @@ fi
         ;;
 
     --in-place-swap)
-if test "x at is_bigendian@" = xno  && (test "x at in_place_swap@" = xno) ; then
+if test "x at ac_cv_c_bigendian@" = xno  && (test "x at in_place_swap@" = xno) ; then
         echo "disabled"
 else
         echo "enabled"
@@ -298,7 +278,7 @@ fi
         ;;
 
     --subfiling)
-if test "x at ENABLE_SUBFILING@" = xyes; then
+if test "x at ENABLE_SUBFILING@" = x1; then
         echo "enabled"
 else
         echo "disabled"
@@ -306,7 +286,7 @@ fi
         ;;
 
     --debug)
-if test "x at PNETCDF_DEBUG@" = xyes; then
+if test "x at PNETCDF_DEBUG@" = x1; then
         echo "enabled"
 else
         echo "disabled"
diff --git a/src/utils/pnetcdf_version/Makefile.am b/src/utils/pnetcdf_version/Makefile.am
new file mode 100644
index 0000000..61ded7f
--- /dev/null
+++ b/src/utils/pnetcdf_version/Makefile.am
@@ -0,0 +1,36 @@
+#
+# Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3495 2017-11-01 05:15:00Z wkliao $
+#
+# @configure_input@
+
+bin_PROGRAMS = pnetcdf_version
+
+XDEFS = -DMPICC="\"$(MPICC)\""   -DCFLAGS="\"$(CFLAGS)\""
+XDEFS += -DCONFIGURE_ARGS_CLEAN="\"$(CONFIGURE_ARGS_CLEAN)\""
+XDEFS += -DPNETCDF_VERSION="\"$(PNETCDF_VERSION)\""
+
+if HAS_MPICXX
+XDEFS += -DMPICXX="\"$(MPICXX)\"" -DCXXFLAGS="\"$(CXXFLAGS)\""
+endif
+
+if HAS_FORTRAN
+XDEFS += -DMPIF77="\"$(MPIF77)\"" -DFFLAGS="\"$(FFLAGS)\""
+XDEFS += -DMPIF90="\"$(MPIF90)\"" -DFCFLAGS="\"$(FCFLAGS)\""
+endif
+
+pnetcdf_version$(EXEEXT): pnetcdf_version.c
+	$(SEQ_CC) $(XDEFS) -o $@ $<
+
+dist_man_MANS = pnetcdf_version.1
+
+tests-local: all
+
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/pnetcdf_version.c
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/pnetcdf_version.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/pnetcdf_version.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/pnetcdf_version.1
+
diff --git a/src/utils/pnetcdf_version/Makefile.in b/src/utils/pnetcdf_version/Makefile.in
index e9dac19..a522681 100644
--- a/src/utils/pnetcdf_version/Makefile.in
+++ b/src/utils/pnetcdf_version/Makefile.in
@@ -1,55 +1,820 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2659 2016-11-27 22:15:33Z wkliao $
+# $Id: Makefile.am 3495 2017-11-01 05:15:00Z wkliao $
 #
 # @configure_input@
 
-srcdir = @srcdir@
 VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = pnetcdf_version$(EXEEXT)
+ at HAS_MPICXX_TRUE@am__append_1 = -DMPICXX="\"$(MPICXX)\"" -DCXXFLAGS="\"$(CXXFLAGS)\""
+ at HAS_FORTRAN_TRUE@am__append_2 = -DMPIF77="\"$(MPIF77)\"" \
+ at HAS_FORTRAN_TRUE@	-DFFLAGS="\"$(FFLAGS)\"" \
+ at HAS_FORTRAN_TRUE@	-DMPIF90="\"$(MPIF90)\"" \
+ at HAS_FORTRAN_TRUE@	-DFCFLAGS="\"$(FCFLAGS)\""
+subdir = src/utils/pnetcdf_version
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+pnetcdf_version_SOURCES = pnetcdf_version.c
+pnetcdf_version_OBJECTS = pnetcdf_version.$(OBJEXT)
+pnetcdf_version_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = pnetcdf_version.c
+DIST_SOURCES = pnetcdf_version.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+XDEFS = -DMPICC="\"$(MPICC)\"" -DCFLAGS="\"$(CFLAGS)\"" \
+	-DCONFIGURE_ARGS_CLEAN="\"$(CONFIGURE_ARGS_CLEAN)\"" \
+	-DPNETCDF_VERSION="\"$(PNETCDF_VERSION)\"" $(am__append_1) \
+	$(am__append_2)
+dist_man_MANS = pnetcdf_version.1
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/utils/pnetcdf_version/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu src/utils/pnetcdf_version/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnetcdf_version.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-man1: $(dist_man_MANS)
+	@$(NORMAL_INSTALL)
+	@list1=''; \
+	list2='$(dist_man_MANS)'; \
+	test -n "$(man1dir)" \
+	  && test -n "`echo $$list1$$list2`" \
+	  || exit 0; \
+	echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+	$(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+	{ for i in $$list1; do echo "$$i"; done;  \
+	if test -n "$$list2"; then \
+	  for i in $$list2; do echo "$$i"; done \
+	    | sed -n '/\.1[a-z]*$$/p'; \
+	fi; \
+	} | while read p; do \
+	  if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; echo "$$p"; \
+	done | \
+	sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+	sed 'N;N;s,\n, ,g' | { \
+	list=; while read file base inst; do \
+	  if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+	    echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+	    $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+	  fi; \
+	done; \
+	for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+	while read files; do \
+	  test -z "$$files" || { \
+	    echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+	    $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+	done; }
+
+uninstall-man1:
+	@$(NORMAL_UNINSTALL)
+	@list=''; test -n "$(man1dir)" || exit 0; \
+	files=`{ for i in $$list; do echo "$$i"; done; \
+	l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+	  sed -n '/\.1[a-z]*$$/p'; \
+	} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+	      -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+	dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	$(MAKE) $(AM_MAKEFLAGS) \
+	  top_distdir="$(top_distdir)" distdir="$(distdir)" \
+	  dist-hook
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
 
-include ../../../macros.make
+ps: ps-am
 
-DEFS  = -DMPICC="\"$(MPICC)\""   -DCFLAGS="\"$(CFLAGS)\""
-DEFS += -DCONFIGURE_ARGS_CLEAN="\"@CONFIGURE_ARGS_CLEAN@\""
-DEFS += -DPNETCDF_VERSION="\"@PNETCDF_VERSION@\""
-DEFS += -DPNETCDF_RELEASE_DATE="\"@PNETCDF_RELEASE_DATE@\""
+ps-am:
 
-ifeq (@has_mpicxx@, yes)
-DEFS += -DMPICXX="\"$(MPICXX)\"" -DCXXFLAGS="\"$(CXXFLAGS)\""
-endif
+tests: tests-am
 
-ifeq (@has_fortran@, yes)
-DEFS += -DMPIF77="\"$(MPIF77)\"" -DF77FLAGS="\"$(F77FLAGS)\""
-DEFS += -DMPIF90="\"$(MPIF90)\"" -DF90FLAGS="\"$(F90FLAGS)\""
-endif
+tests-am: tests-local
 
-C_SOURCES	= pnetcdf_version.c
+uninstall-am: uninstall-binPROGRAMS uninstall-man
 
-PROGRAM		= pnetcdf_version
-MANUAL		= pnetcdf_version.1
+uninstall-man: uninstall-man1
 
-PACKING_LIST    = $(C_SOURCES) $(MANUAL) \
-                  Makefile.in depend
+.MAKE: install-am install-strip
 
-GARBAGE		= $(PROGRAM)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am dist-hook distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-man1 install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am uninstall-binPROGRAMS \
+	uninstall-man uninstall-man1
 
-all: $(PROGRAM)
+.PRECIOUS: Makefile
 
-pnetcdf_version: pnetcdf_version.c
-	$(SEQ_CC) $(DEFS) -o $@ $<
 
-install: $(PROGRAM) $(MANUAL)
-	$(INSTALL) -d -m 755 $(MANDIR)/man1
-	$(INSTALL_DATA) $(srcdir)/$(MANUAL) $(MANDIR)/man1/$(MANUAL)
-	$(INSTALL) -d $(BINDIR)
-	$(INSTALL) -m 755 $(PROGRAM) $(BINDIR)/$(PROGRAM)
+pnetcdf_version$(EXEEXT): pnetcdf_version.c
+	$(SEQ_CC) $(XDEFS) -o $@ $<
 
-uninstall:
-	$(RM) -f $(BINDIR)/$(PROGRAM)
-	$(RM) -f $(MANDIR)/man1/$(MANUAL)
+tests-local: all
 
-include $(srcdir)/../../../rules.make
-include $(srcdir)/depend
+dist-hook:
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/pnetcdf_version.c
+	$(SED_I) -e "s|PNETCDF_RELEASE_VERSION|$(PNETCDF_VERSION)|g" $(distdir)/pnetcdf_version.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE2|`date '+%Y-%m-%d'`|g"   $(distdir)/pnetcdf_version.1
+	$(SED_I) -e "s|PNETCDF_RELEASE_DATE|`date '+%e %b %Y'`|g"    $(distdir)/pnetcdf_version.1
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/utils/pnetcdf_version/depend b/src/utils/pnetcdf_version/depend
deleted file mode 100644
index 568a29a..0000000
--- a/src/utils/pnetcdf_version/depend
+++ /dev/null
@@ -1 +0,0 @@
-pnetcdf_version.o: pnetcdf_version.c
diff --git a/src/utils/pnetcdf_version/pnetcdf_version.1 b/src/utils/pnetcdf_version/pnetcdf_version.1
index 57c412a..283c23b 100644
--- a/src/utils/pnetcdf_version/pnetcdf_version.1
+++ b/src/utils/pnetcdf_version/pnetcdf_version.1
@@ -2,7 +2,7 @@
 .nr yr \n(yr+1900
 .af mo 01
 .af dy 01
-.TH PNETCDF_VERSION 1 2014-04-15 "Printed: \n(yr-\n(mo-\n(dy" "UTILITIES"
+.TH pnetcdf_version 1 "PnetCDF 1.9.0.pre1" "Printed: \n(yr-\n(mo-\n(dy" "PnetCDF utilities"
 .SH NAME
 pnetcdf_version \- print the version information of PnetCDF library
 .SH SYNOPSIS
@@ -41,8 +41,8 @@ Print all information about the PnetCDF library by running the command with no o
 % pnetcdf_version
 .sp
 .nf
-PnetCDF Version:    	1.4.2.pre1
-PnetCDF Release date:	15 Apr 2014
+PnetCDF Version:    	1.9.0.pre1
+PnetCDF Release date:	 1 Nov 2017
 PnetCDF configure: 	--with-mpi=/usr/local/bin
 MPICC:  /usr/local/bin/mpicc -g -O2
 MPICXX: /usr/local/bin/mpicxx -g -O2
@@ -54,7 +54,7 @@ MPIF90: /usr/local/bin/mpif90 -g -O2
 .LP
 .BR pnetcdf (3)
 .SH DATE
-$Date: 2016-11-16 15:33:05 -0600 (Wed, 16 Nov 2016) $
+ 1 Nov 2017
 .LP
 
 
diff --git a/src/utils/pnetcdf_version/pnetcdf_version.c b/src/utils/pnetcdf_version/pnetcdf_version.c
index bfae58b..13339d9 100644
--- a/src/utils/pnetcdf_version/pnetcdf_version.c
+++ b/src/utils/pnetcdf_version/pnetcdf_version.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: pnetcdf_version.c 2264 2015-12-22 15:42:59Z wkliao $ */
+/* $Id: pnetcdf_version.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -72,32 +72,40 @@ int main( int argc, char *argv[] )
         printf( "PnetCDF Version:    \t%s\n", PNETCDF_VERSION);
     }
     if (flags[Date]) {
-        printf( "PnetCDF Release date:\t%s\n", PNETCDF_RELEASE_DATE);
+        printf( "PnetCDF Release date:\t 1 Nov 2017\n");
     }
     if (flags[Configure_args]) {
         printf( "PnetCDF configure: \t%s\n", CONFIGURE_ARGS_CLEAN);
     }
     if (flags[Compilers]) {
+#ifdef CFLAGS
         if (strcmp(CFLAGS, ""))
             printf( "MPICC:  %s %s\n", MPICC, CFLAGS);
         else
+#endif
             printf( "MPICC:  %s\n", MPICC);
 #ifdef MPICXX
+#ifdef CXXFLAGS
         if (strcmp(CXXFLAGS, ""))
             printf( "MPICXX: %s %s\n", MPICXX, CXXFLAGS);
         else
+#endif
             printf( "MPICXX: %s\n", MPICXX);
 #endif
 #ifdef MPIF77
-        if (strcmp(F77FLAGS, ""))
-            printf( "MPIF77: %s %s\n", MPIF77, F77FLAGS);
+#ifdef FFLAGS
+        if (strcmp(FFLAGS, ""))
+            printf( "MPIF77: %s %s\n", MPIF77, FFLAGS);
         else
+#endif
             printf( "MPIF77: %s\n", MPIF77);
 #endif
 #ifdef MPIF90
-        if (strcmp(F90FLAGS, ""))
-            printf( "MPIF90: %s %s\n", MPIF90, F90FLAGS);
+#ifdef FCFLAGS
+        if (strcmp(FCFLAGS, ""))
+            printf( "MPIF90: %s %s\n", MPIF90, FCFLAGS);
         else
+#endif
             printf( "MPIF90: %s\n", MPIF90);
 #endif
     }
diff --git a/stamp-h.in b/stamp-h.in
deleted file mode 100644
index 9788f70..0000000
--- a/stamp-h.in
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
diff --git a/test/C/Makefile.am b/test/C/Makefile.am
new file mode 100644
index 0000000..fc06267
--- /dev/null
+++ b/test/C/Makefile.am
@@ -0,0 +1,60 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c
+
+AM_DEFAULT_SOURCE_EXT = .c
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+
+if DECL_MPI_OFFSET
+   AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+endif
+
+TESTPROGRAMS = pres_temp_4D_wr \
+               pres_temp_4D_rd
+
+check_PROGRAMS = $(TESTPROGRAMS)
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+EXTRA_DIST = seq_runs.sh
+
+CLEANFILES = testfile.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+
+ptest ptests ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest2 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/C/Makefile.in b/test/C/Makefile.in
index 0f57c5b..3753cf2 100644
--- a/test/C/Makefile.in
+++ b/test/C/Makefile.in
@@ -1,79 +1,1105 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2590 2016-10-31 21:37:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at DECL_MPI_OFFSET_TRUE@am__append_1 = -DHAVE_DECL_MPI_OFFSET
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = test/C
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = pres_temp_4D_wr$(EXEEXT) pres_temp_4D_rd$(EXEEXT)
+pres_temp_4D_rd_SOURCES = pres_temp_4D_rd.c
+pres_temp_4D_rd_OBJECTS = pres_temp_4D_rd.$(OBJEXT)
+pres_temp_4D_rd_LDADD = $(LDADD)
+pres_temp_4D_rd_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+pres_temp_4D_wr_SOURCES = pres_temp_4D_wr.c
+pres_temp_4D_wr_OBJECTS = pres_temp_4D_wr.$(OBJEXT)
+pres_temp_4D_wr_LDADD = $(LDADD)
+pres_temp_4D_wr_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = pres_temp_4D_rd.c pres_temp_4D_wr.c
+DIST_SOURCES = pres_temp_4D_rd.c pres_temp_4D_wr.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include $(am__append_1)
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+TESTPROGRAMS = pres_temp_4D_wr \
+               pres_temp_4D_rd
+
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+EXTRA_DIST = seq_runs.sh
+CLEANFILES = testfile.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .lo .log .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/C/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/C/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+pres_temp_4D_rd$(EXEEXT): $(pres_temp_4D_rd_OBJECTS) $(pres_temp_4D_rd_DEPENDENCIES) $(EXTRA_pres_temp_4D_rd_DEPENDENCIES) 
+	@rm -f pres_temp_4D_rd$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pres_temp_4D_rd_OBJECTS) $(pres_temp_4D_rd_LDADD) $(LIBS)
+
+pres_temp_4D_wr$(EXEEXT): $(pres_temp_4D_wr_OBJECTS) $(pres_temp_4D_wr_DEPENDENCIES) $(EXTRA_pres_temp_4D_wr_DEPENDENCIES) 
+	@rm -f pres_temp_4D_wr$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pres_temp_4D_wr_OBJECTS) $(pres_temp_4D_wr_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pres_temp_4D_rd.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pres_temp_4D_wr.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
 
-srcdir	= @srcdir@
-VPATH	= @srcdir@
+install-pdf: install-pdf-am
 
-include ../../macros.make
+install-pdf-am:
 
-INCLUDES  = -I../../src/lib -I$(srcdir)/../common
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+install-ps: install-ps-am
 
-SRCS    = pres_temp_4D_wr.c \
-          pres_temp_4D_rd.c
+install-ps-am:
 
-OBJS    = $(SRCS:.c=.o)
-PROGS   = $(SRCS:.c=)
+installcheck-am:
 
-GARBAGE      = $(PROGS) *.nc
-PACKING_LIST = $(SRCS) Makefile.in
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-all: $(PROGS)
+mostlyclean: mostlyclean-am
 
-$(OBJS): $(srcdir)/../common/testutils.h 
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-$(PROGS): ../common/libtestutils.a
+pdf: pdf-am
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+pdf-am:
 
-pres_temp_4D_wr.o: pres_temp_4D_wr.c 
+ps: ps-am
 
-pres_temp_4D_wr: pres_temp_4D_wr.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+ps-am:
 
-pres_temp_4D_rd.o: pres_temp_4D_rd.c 
+tests: tests-am
 
-pres_temp_4D_rd: pres_temp_4D_rd.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tests-am: tests-local
 
-check testing verbose_testing: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_SEQRUN) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+uninstall-am:
 
-TEST_MPIRUN_2  = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_6  = $(subst NP,6,$(TEST_MPIRUN))
+.MAKE: check-am install-am install-strip
 
-ptest2: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_2) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
 
-ptest4: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_4) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+.PRECIOUS: Makefile
 
-ptest6: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_6) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
 
-ptest: ptest4
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
-ptests: ptest2 ptest4 ptest6
+ptest ptests ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
-ptest8 ptest10:
+ptest2 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/C/pres_temp_4D_rd.c b/test/C/pres_temp_4D_rd.c
index 77562f0..c4bb6bc 100644
--- a/test/C/pres_temp_4D_rd.c
+++ b/test/C/pres_temp_4D_rd.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: pres_temp_4D_rd.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: pres_temp_4D_rd.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /*
    This is an example which reads some 4D pressure and
@@ -16,7 +16,7 @@
    Full documentation of the netCDF C API can be found at:
    http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c
 
-   $Id: pres_temp_4D_rd.c 2744 2016-12-28 16:25:22Z wkliao $
+   $Id: pres_temp_4D_rd.c 3341 2017-08-25 22:29:08Z wkliao $
 */
 
 #include <stdio.h>
@@ -50,7 +50,7 @@
 #define DEGREES_NORTH "degrees_north"
 
 /* These are used to calculate the values we expect to find. */
-#define SAMPLE_PRESSURE 900
+#define SAMPLE_PRESSURE 900.0
 #define SAMPLE_TEMP 9.0
 #define START_LAT 25.0
 #define START_LON -125.0
@@ -63,14 +63,6 @@
 #define LON_UNITS "degrees_east"
 #define MAX_ATT_LEN 80
 
-/* Handle errors by printing an error message and exiting with a
- * non-zero status. */
-#define CHECK_ERR { \
-    if (err != NC_NOERR) { \
-        nerrs++; \
-        printf("Error: %s at line %d (%s)\n", __FILE__,__LINE__,ncmpi_strerror(err)); } }
-
-
 int
 main(int argc, char **argv)
 {
@@ -83,8 +75,8 @@ main(int argc, char **argv)
 
    /* Program variables to hold the data we will read. We will only
       need enough space to hold one timestep of data; one record. */
-   float **pres_in; /* [NLVL/nprocs][NLAT][NLON] */
-   float **temp_in; /* [NLVL/nprocs][NLAT][NLON] */
+   float **pres_in=NULL; /* [NLVL/nprocs][NLAT][NLON] */
+   float **temp_in=NULL; /* [NLVL/nprocs][NLAT][NLON] */
 
    /* These program variables hold the latitudes and longitudes. */
    float lats[NLAT], lons[NLON];
@@ -104,7 +96,7 @@ main(int argc, char **argv)
    if (argc > 2) {
        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
        MPI_Finalize();
-       return 0;
+       return 1;
    }
    if (argc == 2) filename = argv[1];
 
@@ -127,6 +119,8 @@ main(int argc, char **argv)
    CHECK_ERR
 
    /* Read the coordinate variable data. */
+   memset(lats, 0, sizeof(float)*NLAT);
+   memset(lons, 0, sizeof(float)*NLON);
    err = ncmpi_get_var_float_all(ncid, lat_varid, &lats[0]);
    CHECK_ERR
    err = ncmpi_get_var_float_all(ncid, lon_varid, &lons[0]);
@@ -134,11 +128,17 @@ main(int argc, char **argv)
 
    /* Check the coordinate variable data. */
    for (lat = 0; lat < NLAT; lat++)
-      if (lats[lat] != START_LAT + 5.*lat)
-	 return 2;
+      if (lats[lat] != START_LAT + 5.*lat) {
+          printf("\nError at line %d in %s: expect %e but got %e\n", __LINE__,__FILE__, START_LAT+5.*lat,lats[lat]);
+	  nerrs++;
+          goto fn_exit;
+      }
    for (lon = 0; lon < NLON; lon++)
-      if (lons[lon] != START_LON + 5.*lon)
-	 return 2;
+      if (lons[lon] != START_LON + 5.*lon) {
+          printf("\nError at line %d in %s: expect %e but got %e\n", __LINE__,__FILE__, START_LON+5.*lon,lons[lon]);
+	  nerrs++;
+          goto fn_exit;
+      }
 
    /* Get the varids of the pressure and temperature netCDF
     * variables. */
@@ -193,23 +193,31 @@ main(int argc, char **argv)
       i = (int)start[1] * NLAT * NLON;
       for (lvl=0; lvl<count[1]; lvl++)
 	 for (lat = 0; lat < NLAT; lat++)
-	    for (lon = 0; lon < NLON; lon++)
-	    {
-	       if (pres_in[lvl][lat*NLON+lon] != SAMPLE_PRESSURE + i) 
+	    for (lon = 0; lon < NLON; lon++) {
+	       if (pres_in[lvl][lat*NLON+lon] != SAMPLE_PRESSURE + i) {
+                  printf("\nError at line %d in %s: expect %e but got %e\n", __LINE__,__FILE__, SAMPLE_PRESSURE+i,pres_in[lvl][lat*NLON+lon]);
 		  nerrs++;
-	       if (temp_in[lvl][lat*NLON+lon] != SAMPLE_TEMP + i) 
+		  goto fn_exit;
+               }
+	       if (temp_in[lvl][lat*NLON+lon] != SAMPLE_TEMP + i) {
+                  printf("\nError at line %d in %s: expect %e but got %e\n", __LINE__,__FILE__, SAMPLE_TEMP+i,temp_in[lvl][lat*NLON+lon]);
 		  nerrs++;
+		  goto fn_exit;
+               }
 	       i++;
 	    }
 
    } /* next record */
 
-   /* Close the file. */
-   err = ncmpi_close(ncid);
-   CHECK_ERR
+fn_exit:
+    /* Close the file. */
+    err = ncmpi_close(ncid);
+    CHECK_ERR
 
-   if (count[1] > 0) free(pres_in[0]);
-   free(pres_in);
+    if (pres_in != NULL) {
+       if (pres_in[0] != NULL) free(pres_in[0]);
+       free(pres_in);
+    }
 
     /* check if there is any malloc residue */
     MPI_Offset malloc_size, sum_size;
@@ -228,5 +236,5 @@ main(int argc, char **argv)
     }
 
    MPI_Finalize();
-   return (nerrs) ? 2 : 0;
+   return (nerrs > 0);
 }
diff --git a/test/C/pres_temp_4D_wr.c b/test/C/pres_temp_4D_wr.c
index 4b32680..d5d1b05 100644
--- a/test/C/pres_temp_4D_wr.c
+++ b/test/C/pres_temp_4D_wr.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: pres_temp_4D_wr.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: pres_temp_4D_wr.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 
 /*
@@ -17,7 +17,7 @@
    Full documentation of the netCDF C API can be found at:
    http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c
 
-   $Id: pres_temp_4D_wr.c 2744 2016-12-28 16:25:22Z wkliao $
+   $Id: pres_temp_4D_wr.c 3341 2017-08-25 22:29:08Z wkliao $
 */
 
 #include <stdio.h>
@@ -51,7 +51,7 @@
 #define DEGREES_NORTH "degrees_north"
 
 /* These are used to construct some example data. */
-#define SAMPLE_PRESSURE 900
+#define SAMPLE_PRESSURE 900.0
 #define SAMPLE_TEMP 9.0
 #define START_LAT 25.0
 #define START_LON -125.0
@@ -64,18 +64,6 @@
 #define LON_UNITS "degrees_east"
 #define MAX_ATT_LEN 80
 
-/* Handle errors by printing an error message and exiting with a
- * non-zero status. */
-#define ERR(e) {printf("Error: %s\n", nc_strerror(e)); return 2;}
-
-#define CHECK_ERR { \
-    if (err != NC_NOERR) { \
-        nerrs++; \
-        printf("Error: %s at line %d: %s\n", __FILE__,__LINE__,ncmpi_strerror(err)); \
-    } \
-}
-
-
 int
 main(int argc, char ** argv)
 {
@@ -113,7 +101,7 @@ main(int argc, char ** argv)
    if (argc > 2) {
        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
        MPI_Finalize();
-       return 0;
+       return 1;
    }
    if (argc == 2) filename = argv[1];
 
@@ -134,7 +122,6 @@ main(int argc, char ** argv)
 
    /* Create the file. */
    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid);
-
    CHECK_ERR
 
    /* Define the dimensions. The record dimension is defined to have
@@ -290,5 +277,5 @@ main(int argc, char ** argv)
 
     MPI_Finalize();
 
-    return nerrs;
+    return (nerrs > 0);
 }
diff --git a/test/C/seq_runs.sh b/test/C/seq_runs.sh
new file mode 100755
index 0000000..dc7a792
--- /dev/null
+++ b/test/C/seq_runs.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+for j in 0 1 ; do { \
+export PNETCDF_SAFE_MODE=$$j ; \
+for i in $TESTPROGRAMS; do ( \
+    $TESTSEQRUN ./$i              ${TESTOUTDIR}/testfile.nc ; \
+    ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc ; \
+) ; done ; } ; done
diff --git a/test/CXX/Makefile.am b/test/CXX/Makefile.am
new file mode 100644
index 0000000..f4d18ae
--- /dev/null
+++ b/test/CXX/Makefile.am
@@ -0,0 +1,61 @@
+#
+# Copyright (C) 2014, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .cpp
+
+AM_DEFAULT_SOURCE_EXT = .cpp
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/binding/cxx
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+
+if DECL_MPI_OFFSET
+   AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+endif
+
+TESTPROGRAMS = nctst \
+               test_classic
+
+check_PROGRAMS = $(TESTPROGRAMS)
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+EXTRA_DIST = seq_runs.sh
+
+CLEANFILES = testfile.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+
+ptest ptests ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest2 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/CXX/Makefile.in b/test/CXX/Makefile.in
index 0034d3a..849389f 100644
--- a/test/CXX/Makefile.in
+++ b/test/CXX/Makefile.in
@@ -1,76 +1,1106 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2590 2016-10-31 21:37:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at DECL_MPI_OFFSET_TRUE@am__append_1 = -DHAVE_DECL_MPI_OFFSET
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = test/CXX
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = nctst$(EXEEXT) test_classic$(EXEEXT)
+nctst_SOURCES = nctst.cpp
+nctst_OBJECTS = nctst.$(OBJEXT)
+nctst_LDADD = $(LDADD)
+nctst_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+test_classic_SOURCES = test_classic.cpp
+test_classic_OBJECTS = test_classic.$(OBJEXT)
+test_classic_LDADD = $(LDADD)
+test_classic_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = nctst.cpp test_classic.cpp
+DIST_SOURCES = nctst.cpp test_classic.cpp
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .cpp
+AM_DEFAULT_SOURCE_EXT = .cpp
+AM_CPPFLAGS = -I$(top_srcdir)/src/include \
+	-I$(top_builddir)/src/binding/cxx -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include $(am__append_1)
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+TESTPROGRAMS = nctst \
+               test_classic
+
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+EXTRA_DIST = seq_runs.sh
+CLEANFILES = testfile.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .cpp .lo .log .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/CXX/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/CXX/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+nctst$(EXEEXT): $(nctst_OBJECTS) $(nctst_DEPENDENCIES) $(EXTRA_nctst_DEPENDENCIES) 
+	@rm -f nctst$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(nctst_OBJECTS) $(nctst_LDADD) $(LIBS)
+
+test_classic$(EXEEXT): $(test_classic_OBJECTS) $(test_classic_DEPENDENCIES) $(EXTRA_test_classic_DEPENDENCIES) 
+	@rm -f test_classic$(EXEEXT)
+	$(AM_V_CXXLD)$(CXXLINK) $(test_classic_OBJECTS) $(test_classic_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nctst.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_classic.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
 
-srcdir	= @srcdir@
-VPATH	= @srcdir@
+install-ps: install-ps-am
 
-include ../../macros.make
+install-ps-am:
 
-INCLUDES  = -I../../src/lib -I../../src/libcxx -I$(srcdir)/../common
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+installcheck-am:
 
-SRCS    = nctst.cpp \
-          test_classic.cpp
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-OBJS    = $(SRCS:.cpp=.o)
-PROGS   = $(SRCS:.cpp=)
+mostlyclean: mostlyclean-am
 
-GARBAGE      = $(PROGS) *.nc
-PACKING_LIST = $(SRCS) Makefile.in
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-all: $(PROGS)
+pdf: pdf-am
 
-$(OBJS): $(srcdir)/../common/testutils.h
+pdf-am:
 
-$(PROGS): ../common/libtestutils.a
+ps: ps-am
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+ps-am:
 
-nctst.o: nctst.cpp 
+tests: tests-am
 
-nctst: nctst.o $(LIBRARY) $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+tests-am: tests-local
 
-test_classic.o: test_classic.cpp 
+uninstall-am:
 
-test_classic: test_classic.o $(LIBRARY)
-	$(LINK.cxx) $< $(LDFLAGS) $(LIBS)
+.MAKE: check-am install-am install-strip
 
-check testing verbose_testing: $(PROGS)
-	$(TEST_SEQRUN) ./nctst        $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./test_classic $(TEST_OUTDIR)/testfile.nc
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
 
-TEST_MPIRUN_2  = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_6  = $(subst NP,6,$(TEST_MPIRUN))
+.PRECIOUS: Makefile
 
-ptest4: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_4) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
 
-ptest2: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_2) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
-ptest6: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_6) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+ptest ptests ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
-ptest: ptest4
-ptests: ptest2 ptest4 ptest6
-ptest8 ptest10:
+ptest2 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/CXX/nctst.cpp b/test/CXX/nctst.cpp
index 950bbf5..293ffdd 100644
--- a/test/CXX/nctst.cpp
+++ b/test/CXX/nctst.cpp
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: nctst.cpp 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: nctst.cpp 3341 2017-08-25 22:29:08Z wkliao $ */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -508,7 +508,7 @@ main(int argc, char* argv[])	// test new netCDF interface
    if (argc > 2) {
        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
        MPI_Finalize();
-       return 0;
+       return 1;
    }
    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
    else           strcpy(filename, "testfile.nc");
@@ -563,7 +563,6 @@ main(int argc, char* argv[])	// test new netCDF interface
         else       printf(PASS_STR);
     }
 
-
-   MPI_Finalize();
-   return nerrs;
+    MPI_Finalize();
+    return (nerrs > 0);
 }
diff --git a/test/CXX/seq_runs.sh b/test/CXX/seq_runs.sh
new file mode 100755
index 0000000..51f53f0
--- /dev/null
+++ b/test/CXX/seq_runs.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+for j in 0 1 ; do { \
+   export PNETCDF_SAFE_MODE=$$j ; \
+   for i in $TESTPROGRAMS; do ( \
+       ${TESTSEQRUN} ./$i            ${TESTOUTDIR}/testfile.nc ; \
+       ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc ; \
+) ; done ; } ; done
diff --git a/test/CXX/test_classic.cpp b/test/CXX/test_classic.cpp
index efe9fcf..7d233d1 100644
--- a/test/CXX/test_classic.cpp
+++ b/test/CXX/test_classic.cpp
@@ -19,7 +19,7 @@ int main( int argc, char *argv[] )
    if (argc > 2) {
        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
        MPI_Finalize();
-       return 0;
+       return 1;
    }
    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
    else           strcpy(filename, "testfile.nc");
@@ -93,6 +93,6 @@ int main( int argc, char *argv[] )
         else       printf(PASS_STR);
     }
 
-   MPI_Finalize();
-   return 0;
+    MPI_Finalize();
+    return (nerrs > 0);
 }
diff --git a/test/F90/Makefile.am b/test/F90/Makefile.am
new file mode 100644
index 0000000..a6484c3
--- /dev/null
+++ b/test/F90/Makefile.am
@@ -0,0 +1,103 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .f90
+
+AM_DEFAULT_SOURCE_EXT = .f90
+AM_FCFLAGS = -I$(top_builddir)/src/binding/f77 $(FC_MODINC)$(top_builddir)/src/binding/f90 $(FC_MODINC)../common
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la
+
+TESTPROGRAMS = tst_f90 \
+               f90tst_vars \
+               tst_types2 \
+               tst_f90_cdf5 \
+               f90tst_vars2 \
+               f90tst_vars3 \
+               f90tst_vars4 \
+               test_intent
+
+check_PROGRAMS = $(TESTPROGRAMS) \
+                 tst_io \
+                 tst_flarge \
+                 f90tst_parallel \
+                 f90tst_parallel2 \
+                 f90tst_parallel3 \
+                 f90tst_parallel4
+
+TESTS_ENVIRONMENT =
+
+if RUN_LARGE_FILE_TEST
+   TESTPROGRAMS += tst_flarge
+   TESTS_ENVIRONMENT += RUN_LARGE_FILE_TEST="yes" ; export RUN_LARGE_FILE_TEST;
+endif
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT += TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+EXTRA_DIST = seq_runs.sh
+
+CLEANFILES  = *.nc *.$(FC_MODEXT) core core.* *.gcda *.gcno *.gcov gmon.out
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+PARALLEL_PROGS = f90tst_parallel \
+                 f90tst_parallel2 \
+                 f90tst_parallel3 \
+                 f90tst_parallel4
+
+TESTMPIRUN2  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+TESTMPIRUN10 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/10/g'`
+
+
+ptest ptest4: $(PARALLEL_PROGS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(PARALLEL_PROGS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest2: $(PARALLEL_PROGS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(PARALLEL_PROGS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest8: $(PARALLEL_PROGS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(PARALLEL_PROGS); do ( \
+	$(TESTMPIRUN8) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest10: $(PARALLEL_PROGS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(PARALLEL_PROGS); do ( \
+	$(TESTMPIRUN10) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptests: ptest2 ptest4 ptest8 ptest10
+ptest6:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/F90/Makefile.in b/test/F90/Makefile.in
index 7462058..725ef8a 100644
--- a/test/F90/Makefile.in
+++ b/test/F90/Makefile.in
@@ -1,142 +1,1236 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2251 2015-12-20 21:13:42Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = $(am__EXEEXT_2) tst_io$(EXEEXT) tst_flarge$(EXEEXT) \
+	f90tst_parallel$(EXEEXT) f90tst_parallel2$(EXEEXT) \
+	f90tst_parallel3$(EXEEXT) f90tst_parallel4$(EXEEXT)
+ at RUN_LARGE_FILE_TEST_TRUE@am__append_1 = tst_flarge
+ at RUN_LARGE_FILE_TEST_TRUE@am__append_2 = RUN_LARGE_FILE_TEST="yes" ; export RUN_LARGE_FILE_TEST;
+subdir = test/F90
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at RUN_LARGE_FILE_TEST_TRUE@am__EXEEXT_1 = tst_flarge$(EXEEXT)
+am__EXEEXT_2 = tst_f90$(EXEEXT) f90tst_vars$(EXEEXT) \
+	tst_types2$(EXEEXT) tst_f90_cdf5$(EXEEXT) \
+	f90tst_vars2$(EXEEXT) f90tst_vars3$(EXEEXT) \
+	f90tst_vars4$(EXEEXT) test_intent$(EXEEXT) $(am__EXEEXT_1)
+f90tst_parallel_SOURCES = f90tst_parallel.f90
+f90tst_parallel_OBJECTS = f90tst_parallel.$(OBJEXT)
+f90tst_parallel_LDADD = $(LDADD)
+f90tst_parallel_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+f90tst_parallel2_SOURCES = f90tst_parallel2.f90
+f90tst_parallel2_OBJECTS = f90tst_parallel2.$(OBJEXT)
+f90tst_parallel2_LDADD = $(LDADD)
+f90tst_parallel2_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+f90tst_parallel3_SOURCES = f90tst_parallel3.f90
+f90tst_parallel3_OBJECTS = f90tst_parallel3.$(OBJEXT)
+f90tst_parallel3_LDADD = $(LDADD)
+f90tst_parallel3_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+f90tst_parallel4_SOURCES = f90tst_parallel4.f90
+f90tst_parallel4_OBJECTS = f90tst_parallel4.$(OBJEXT)
+f90tst_parallel4_LDADD = $(LDADD)
+f90tst_parallel4_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+f90tst_vars_SOURCES = f90tst_vars.f90
+f90tst_vars_OBJECTS = f90tst_vars.$(OBJEXT)
+f90tst_vars_LDADD = $(LDADD)
+f90tst_vars_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+f90tst_vars2_SOURCES = f90tst_vars2.f90
+f90tst_vars2_OBJECTS = f90tst_vars2.$(OBJEXT)
+f90tst_vars2_LDADD = $(LDADD)
+f90tst_vars2_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+f90tst_vars3_SOURCES = f90tst_vars3.f90
+f90tst_vars3_OBJECTS = f90tst_vars3.$(OBJEXT)
+f90tst_vars3_LDADD = $(LDADD)
+f90tst_vars3_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+f90tst_vars4_SOURCES = f90tst_vars4.f90
+f90tst_vars4_OBJECTS = f90tst_vars4.$(OBJEXT)
+f90tst_vars4_LDADD = $(LDADD)
+f90tst_vars4_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+test_intent_SOURCES = test_intent.f90
+test_intent_OBJECTS = test_intent.$(OBJEXT)
+test_intent_LDADD = $(LDADD)
+test_intent_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_f90_SOURCES = tst_f90.f90
+tst_f90_OBJECTS = tst_f90.$(OBJEXT)
+tst_f90_LDADD = $(LDADD)
+tst_f90_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_f90_cdf5_SOURCES = tst_f90_cdf5.f90
+tst_f90_cdf5_OBJECTS = tst_f90_cdf5.$(OBJEXT)
+tst_f90_cdf5_LDADD = $(LDADD)
+tst_f90_cdf5_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_flarge_SOURCES = tst_flarge.f90
+tst_flarge_OBJECTS = tst_flarge.$(OBJEXT)
+tst_flarge_LDADD = $(LDADD)
+tst_flarge_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_io_SOURCES = tst_io.f90
+tst_io_OBJECTS = tst_io.$(OBJEXT)
+tst_io_LDADD = $(LDADD)
+tst_io_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_types2_SOURCES = tst_types2.f90
+tst_types2_OBJECTS = tst_types2.$(OBJEXT)
+tst_types2_LDADD = $(LDADD)
+tst_types2_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+AM_V_FC = $(am__v_FC_ at AM_V@)
+am__v_FC_ = $(am__v_FC_ at AM_DEFAULT_V@)
+am__v_FC_0 = @echo "  FC      " $@;
+am__v_FC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+SOURCES = f90tst_parallel.f90 f90tst_parallel2.f90 \
+	f90tst_parallel3.f90 f90tst_parallel4.f90 f90tst_vars.f90 \
+	f90tst_vars2.f90 f90tst_vars3.f90 f90tst_vars4.f90 \
+	test_intent.f90 tst_f90.f90 tst_f90_cdf5.f90 tst_flarge.f90 \
+	tst_io.f90 tst_types2.f90
+DIST_SOURCES = f90tst_parallel.f90 f90tst_parallel2.f90 \
+	f90tst_parallel3.f90 f90tst_parallel4.f90 f90tst_vars.f90 \
+	f90tst_vars2.f90 f90tst_vars3.f90 f90tst_vars4.f90 \
+	test_intent.f90 tst_f90.f90 tst_f90_cdf5.f90 tst_flarge.f90 \
+	tst_io.f90 tst_types2.f90
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .f90
+AM_DEFAULT_SOURCE_EXT = .f90
+AM_FCFLAGS = -I$(top_builddir)/src/binding/f77 $(FC_MODINC)$(top_builddir)/src/binding/f90 $(FC_MODINC)../common
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la
+TESTPROGRAMS = tst_f90 f90tst_vars tst_types2 tst_f90_cdf5 \
+	f90tst_vars2 f90tst_vars3 f90tst_vars4 test_intent \
+	$(am__append_1)
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = $(am__append_2) TESTPROGRAMS="$(TESTPROGRAMS)" ; \
+	export TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export \
+	TESTSEQRUN; TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+EXTRA_DIST = seq_runs.sh
+CLEANFILES = *.nc *.$(FC_MODEXT) core core.* *.gcda *.gcno *.gcov gmon.out
+PARALLEL_PROGS = f90tst_parallel \
+                 f90tst_parallel2 \
+                 f90tst_parallel3 \
+                 f90tst_parallel4
+
+TESTMPIRUN2 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN8 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/8/g'`
+TESTMPIRUN10 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/10/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .f90 .lo .log .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/F90/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/F90/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+f90tst_parallel$(EXEEXT): $(f90tst_parallel_OBJECTS) $(f90tst_parallel_DEPENDENCIES) $(EXTRA_f90tst_parallel_DEPENDENCIES) 
+	@rm -f f90tst_parallel$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(f90tst_parallel_OBJECTS) $(f90tst_parallel_LDADD) $(LIBS)
+
+f90tst_parallel2$(EXEEXT): $(f90tst_parallel2_OBJECTS) $(f90tst_parallel2_DEPENDENCIES) $(EXTRA_f90tst_parallel2_DEPENDENCIES) 
+	@rm -f f90tst_parallel2$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(f90tst_parallel2_OBJECTS) $(f90tst_parallel2_LDADD) $(LIBS)
+
+f90tst_parallel3$(EXEEXT): $(f90tst_parallel3_OBJECTS) $(f90tst_parallel3_DEPENDENCIES) $(EXTRA_f90tst_parallel3_DEPENDENCIES) 
+	@rm -f f90tst_parallel3$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(f90tst_parallel3_OBJECTS) $(f90tst_parallel3_LDADD) $(LIBS)
+
+f90tst_parallel4$(EXEEXT): $(f90tst_parallel4_OBJECTS) $(f90tst_parallel4_DEPENDENCIES) $(EXTRA_f90tst_parallel4_DEPENDENCIES) 
+	@rm -f f90tst_parallel4$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(f90tst_parallel4_OBJECTS) $(f90tst_parallel4_LDADD) $(LIBS)
+
+f90tst_vars$(EXEEXT): $(f90tst_vars_OBJECTS) $(f90tst_vars_DEPENDENCIES) $(EXTRA_f90tst_vars_DEPENDENCIES) 
+	@rm -f f90tst_vars$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(f90tst_vars_OBJECTS) $(f90tst_vars_LDADD) $(LIBS)
+
+f90tst_vars2$(EXEEXT): $(f90tst_vars2_OBJECTS) $(f90tst_vars2_DEPENDENCIES) $(EXTRA_f90tst_vars2_DEPENDENCIES) 
+	@rm -f f90tst_vars2$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(f90tst_vars2_OBJECTS) $(f90tst_vars2_LDADD) $(LIBS)
+
+f90tst_vars3$(EXEEXT): $(f90tst_vars3_OBJECTS) $(f90tst_vars3_DEPENDENCIES) $(EXTRA_f90tst_vars3_DEPENDENCIES) 
+	@rm -f f90tst_vars3$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(f90tst_vars3_OBJECTS) $(f90tst_vars3_LDADD) $(LIBS)
+
+f90tst_vars4$(EXEEXT): $(f90tst_vars4_OBJECTS) $(f90tst_vars4_DEPENDENCIES) $(EXTRA_f90tst_vars4_DEPENDENCIES) 
+	@rm -f f90tst_vars4$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(f90tst_vars4_OBJECTS) $(f90tst_vars4_LDADD) $(LIBS)
+
+test_intent$(EXEEXT): $(test_intent_OBJECTS) $(test_intent_DEPENDENCIES) $(EXTRA_test_intent_DEPENDENCIES) 
+	@rm -f test_intent$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(test_intent_OBJECTS) $(test_intent_LDADD) $(LIBS)
+
+tst_f90$(EXEEXT): $(tst_f90_OBJECTS) $(tst_f90_DEPENDENCIES) $(EXTRA_tst_f90_DEPENDENCIES) 
+	@rm -f tst_f90$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(tst_f90_OBJECTS) $(tst_f90_LDADD) $(LIBS)
+
+tst_f90_cdf5$(EXEEXT): $(tst_f90_cdf5_OBJECTS) $(tst_f90_cdf5_DEPENDENCIES) $(EXTRA_tst_f90_cdf5_DEPENDENCIES) 
+	@rm -f tst_f90_cdf5$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(tst_f90_cdf5_OBJECTS) $(tst_f90_cdf5_LDADD) $(LIBS)
+
+tst_flarge$(EXEEXT): $(tst_flarge_OBJECTS) $(tst_flarge_DEPENDENCIES) $(EXTRA_tst_flarge_DEPENDENCIES) 
+	@rm -f tst_flarge$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(tst_flarge_OBJECTS) $(tst_flarge_LDADD) $(LIBS)
+
+tst_io$(EXEEXT): $(tst_io_OBJECTS) $(tst_io_DEPENDENCIES) $(EXTRA_tst_io_DEPENDENCIES) 
+	@rm -f tst_io$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(tst_io_OBJECTS) $(tst_io_LDADD) $(LIBS)
+
+tst_types2$(EXEEXT): $(tst_types2_OBJECTS) $(tst_types2_DEPENDENCIES) $(EXTRA_tst_types2_DEPENDENCIES) 
+	@rm -f tst_types2$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(tst_types2_OBJECTS) $(tst_types2_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+.f90.o:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+	$(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+mostlyclean-libtool:
+	-rm -f *.lo
 
-include ../../macros.make
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
 
-INCLUDES  =
-FPPFLAGS += @FC_MODINC at ../../src/libf90 @FC_MODINC at ../common
-F90FLAGS += @FC_MODOUT at .
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
 
-F90_SRCS = tst_f90.f90 \
-           tst_io.f90 \
-           f90tst_vars.f90 \
-           tst_types2.f90 \
-           tst_f90_cdf5.f90 \
-           f90tst_vars2.f90 \
-           f90tst_vars3.f90 \
-           f90tst_vars4.f90 \
-           tst_flarge.f90 \
-           f90tst_parallel.f90 \
-           f90tst_parallel2.f90 \
-           f90tst_parallel3.f90 \
-           f90tst_parallel4.f90 \
-           test_intent.f90
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
 
-PROGS    = $(F90_SRCS:.f90=)
-OBJS     = $(F90_SRCS:.f90=.o)
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
 
-GARBAGE  = $(PROGS) *.nc *. at FC_MODEXT@
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
 
-PACKING_LIST = $(F90_SRCS) Makefile.in depend
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
 
-all: $(PROGS)
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 
-$(PROGS): ../common/libtestutils.a
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
 
-tst_f90: tst_f90.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
 
-tst_io: tst_io.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
 
-f90tst_vars: f90tst_vars.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
 
-tst_types2: tst_types2.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-tst_f90_cdf5: tst_f90_cdf5.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
-f90tst_vars2: f90tst_vars2.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
-f90tst_vars3: f90tst_vars3.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
-f90tst_vars4: f90tst_vars4.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-tst_flarge: tst_flarge.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
 
-f90tst_parallel: f90tst_parallel.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
 
-f90tst_parallel2: f90tst_parallel2.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+dvi: dvi-am
 
-f90tst_parallel3: f90tst_parallel3.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+dvi-am:
 
-f90tst_parallel4: f90tst_parallel4.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+html: html-am
 
-test_intent: test_intent.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+html-am:
 
-testing check verbose_testing: $(PROGS)
-	$(TEST_SEQRUN) ./test_intent  $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_f90      $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./f90tst_vars  $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_types2   $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_f90_cdf5 $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./f90tst_vars2 $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./f90tst_vars3 $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./f90tst_vars4 $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_flarge   $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_io       $(TEST_OUTDIR)
+info: info-am
 
-PARALLEL_PROGS = f90tst_parallel f90tst_parallel2 f90tst_parallel3 f90tst_parallel4
+info-am:
 
-TEST_MPIRUN_2   = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4   = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_8   = $(subst NP,8,$(TEST_MPIRUN))
-TEST_MPIRUN_10  = $(subst NP,10,$(TEST_MPIRUN))
+install-data-am:
 
-ptest4: $(PARALLEL_PROGS)
-	@for i in $(PARALLEL_PROGS); do ( \
-	$(TEST_MPIRUN_4) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
+
+.PRECIOUS: Makefile
+
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+ptest ptest4: $(PARALLEL_PROGS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(PARALLEL_PROGS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
 ptest2: $(PARALLEL_PROGS)
-	@for i in $(PARALLEL_PROGS); do ( \
-	$(TEST_MPIRUN_2) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(PARALLEL_PROGS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
 ptest8: $(PARALLEL_PROGS)
-	@for i in $(PARALLEL_PROGS); do ( \
-	$(TEST_MPIRUN_8) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(PARALLEL_PROGS); do ( \
+	$(TESTMPIRUN8) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
 ptest10: $(PARALLEL_PROGS)
-	@for i in $(PARALLEL_PROGS); do ( \
-	$(TEST_MPIRUN_10) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(PARALLEL_PROGS); do ( \
+	$(TESTMPIRUN10) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
-ptest: ptest4
 ptests: ptest2 ptest4 ptest8 ptest10
 ptest6:
 
-install:
-
-uninstall:
-
-include $(srcdir)/depend
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/F90/depend b/test/F90/depend
deleted file mode 100644
index d4b6d2c..0000000
--- a/test/F90/depend
+++ /dev/null
@@ -1,13 +0,0 @@
-tst_f90.o: tst_f90.f90
-tst_io.o: tst_io.f90
-f90tst_vars.o: f90tst_vars.f90
-tst_types2.o: tst_types2.f90
-tst_f90_cdf5.o: tst_f90_cdf5.f90
-f90tst_vars2.o: f90tst_vars2.f90
-f90tst_vars3.o: f90tst_vars3.f90
-f90tst_vars4.o: f90tst_vars4.f90
-tst_flarge.o: tst_flarge.f90
-f90tst_parallel.o: f90tst_parallel.f90
-f90tst_parallel2.o: f90tst_parallel2.f90
-f90tst_parallel3.o: f90tst_parallel3.f90
-f90tst_parallel4.o: f90tst_parallel4.f90
diff --git a/test/F90/seq_runs.sh b/test/F90/seq_runs.sh
new file mode 100755
index 0000000..9e58033
--- /dev/null
+++ b/test/F90/seq_runs.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+for j in 0 1 ; do { \
+    export PNETCDF_SAFE_MODE=$$j ; \
+    for i in ${TESTPROGRAMS}; do ( \
+        ${TESTSEQRUN} ./$i            ${TESTOUTDIR}/testfile.nc ; \
+        ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc ; \
+) ; done ; } ; done
+
+${TESTSEQRUN} ./tst_io ${TESTOUTDIR}
+
diff --git a/test/F90/test_intent.f90 b/test/F90/test_intent.f90
index 0a0c607..f344a1d 100644
--- a/test/F90/test_intent.f90
+++ b/test/F90/test_intent.f90
@@ -2,7 +2,7 @@
 !   Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: test_intent.f90 2231 2015-12-16 21:08:02Z wkliao $
+! $Id: test_intent.f90 3341 2017-08-25 22:29:08Z wkliao $
 
 !
 ! This program tests Fortran 90 INTENT modifier used in PnetCDF.
@@ -22,7 +22,7 @@
               write(6,*) trim(message), trim(nf90mpi_strerror(err))
               msg = '*** TESTING F90 test_intent.f90 '
               call pass_fail(1, msg)
-              call MPI_Abort(MPI_COMM_WORLD, -1, err)
+              STOP 2
           end if
       end subroutine check
 
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..af003d9
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,79 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
+#
+# @configure_input@
+
+C_SUBDIRS = common \
+            C \
+            fandc \
+            nc_test \
+            cdf_format \
+            header \
+            testcases \
+            nonblocking \
+            largefile
+
+DIST_SUBDIRS = $(C_SUBDIRS) CXX nf_test nf90_test F90 subfile
+
+SUBDIRS = $(C_SUBDIRS)
+
+if HAS_MPICXX
+SUBDIRS += CXX
+endif
+
+if HAS_FORTRAN
+SUBDIRS += nf_test
+if HAVE_MPI_MOD
+SUBDIRS += nf90_test F90
+endif
+endif
+
+if ENABLE_SUBFILING
+SUBDIRS += subfile
+endif
+
+# below is the alternative when AM_EXTRA_RECURSIVE_TARGETS is not defined
+# TESTS_DIRS = $(SUBDIRS:%=tests-%)
+# tests: $(TESTS_DIRS)
+# $(TESTS_DIRS): 
+# 	$(MAKE) $(MFLAGS) -C $(@:tests-%=%) tests
+
+if BUILD_COVERAGE
+   PTEST_SUBDIRS =
+else
+   PTEST_SUBDIRS = $(SUBDIRS)
+endif
+
+ptest:
+	(echo "=============================================")  && \
+	(echo "    Parallel testing on 4 MPI processes")  && \
+	(echo "=============================================")  && \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest4 $$* ; \
+	  done ) ;
+
+ptests:
+	for i in 2 4 6 ; do \
+	(echo "=============================================")  && \
+	(echo "    Parallel testing on $$i MPI processes")  && \
+	(echo "=============================================")  && \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest$$i $$* ; \
+	  done ) ; \
+	done ;
+
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
+
+.PHONY: ptest ptests
+
+.NOTPARALLEL:
+
diff --git a/test/Makefile.in b/test/Makefile.in
index 5ee7a0b..9aae1ba 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -1,108 +1,769 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2318 2016-02-04 00:18:26Z wkliao $
+# $Id: Makefile.am 3341 2017-08-25 22:29:08Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at HAS_MPICXX_TRUE@am__append_1 = CXX
+ at HAS_FORTRAN_TRUE@am__append_2 = nf_test
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__append_3 = nf90_test F90
+ at ENABLE_SUBFILING_TRUE@am__append_4 = subfile
+subdir = test
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
-
-include ../macros.make
-
-SUBDIRS = common \
-          nc_test \
-          C \
-          fandc \
-          nonblocking \
-          cdf_format \
-          header \
-          testcases
-
-# Packing subdirs must include all directories
-PACKING_SUBDIRS := $(SUBDIRS) largefile nf_test nf90_test F90 subfile CXX
-
-ifeq (@large_file_test@, yes)
-SUBDIRS += largefile
-endif
-
-ifeq (@has_mpicxx@, yes)
-SUBDIRS += CXX
-endif
-
-ifeq (@has_fortran@, yes)
-SUBDIRS += nf_test
-ifeq (@mpi_mod@, yes)
-SUBDIRS += nf90_test
-SUBDIRS += F90
-endif
-endif
-
-ifeq (@enable_subfiling@, yes)
-SUBDIRS += subfile
-endif
-
-PACKING_LIST = Makefile.in
-
-all: $(SUBDIRS)
-$(SUBDIRS):
-	$(MAKE) $(MFLAGS) -C $@
-
-tests: all
-
-test_int: common
-test_float: common
-test_double_int: common
-test_double: common
-
-CHECK_DIRS = $(SUBDIRS:%=check-%)
-check testing: $(CHECK_DIRS)
-$(CHECK_DIRS):
-	$(MAKE) $(MFLAGS) -C $(@:check-%=%) testing
-
-VCHECK_DIRS = $(SUBDIRS:%=vcheck-%)
-verbose_check verbose_testing: $(VCHECK_DIRS)
-$(VCHECK_DIRS):
-	$(MAKE) $(MFLAGS) -C $(@:vcheck-%=%) verbose_testing
-
-ptest: all
-ifeq (@enable_coverage@, yes)
-	echo "Parallel test is disabled because coverage analysis was enabled"
-else
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+C_SUBDIRS = common \
+            C \
+            fandc \
+            nc_test \
+            cdf_format \
+            header \
+            testcases \
+            nonblocking \
+            largefile
+
+DIST_SUBDIRS = $(C_SUBDIRS) CXX nf_test nf90_test F90 subfile
+SUBDIRS = $(C_SUBDIRS) $(am__append_1) $(am__append_2) $(am__append_3) \
+	$(am__append_4)
+ at BUILD_COVERAGE_FALSE@PTEST_SUBDIRS = $(SUBDIRS)
+
+# below is the alternative when AM_EXTRA_RECURSIVE_TARGETS is not defined
+# TESTS_DIRS = $(SUBDIRS:%=tests-%)
+# tests: $(TESTS_DIRS)
+# $(TESTS_DIRS): 
+# 	$(MAKE) $(MFLAGS) -C $(@:tests-%=%) tests
+ at BUILD_COVERAGE_TRUE@PTEST_SUBDIRS = 
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+tests: tests-recursive
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-generic distclean-libtool \
+	distclean-local distclean-tags distdir dvi dvi-am html html-am \
+	info info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am tests-am \
+	tests-local uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ptest:
 	(echo "=============================================")  && \
 	(echo "    Parallel testing on 4 MPI processes")  && \
 	(echo "=============================================")  && \
-	( for d in $(SUBDIRS) ; do \
-		$(MAKE) $(MFLAGS) -C $$d ptest4 ; \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest4 $$* ; \
 	  done ) ;
-endif
 
-ptests: all
-ifeq (@enable_coverage@, yes)
-	echo "Parallel test is disabled because coverage analysis was enabled"
-else
-	for i in 2 4 6 8 10 ; do \
+ptests:
+	for i in 2 4 6 ; do \
 	(echo "=============================================")  && \
 	(echo "    Parallel testing on $$i MPI processes")  && \
 	(echo "=============================================")  && \
-	( for d in $(SUBDIRS) ; do \
-		$(MAKE) $(MFLAGS) -C $$d ptest$$i ; \
+	( for d in $(PTEST_SUBDIRS) ; do \
+		$(MAKE) $(MFLAGS) -C $$d ptest$$i $$* ; \
 	  done ) ; \
 	done ;
-endif
-
-INSTALLDIRS = $(SUBDIRS:%=install-%)
-install: all $(INSTALLDIRS)
-$(INSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:install-%=%) install
 
-UNINSTALLDIRS = $(SUBDIRS:%=uninstall-%)
-uninstall: $(UNINSTALLDIRS)
-$(UNINSTALLDIRS): 
-	$(MAKE) $(MFLAGS) -C $(@:uninstall-%=%) uninstall
+# For VPATH build (parallel build), try delete all sub-directories
+distclean-local:
+	if [ "$(abs_builddir)" != "$(abs_srcdir)" ] ; then \
+	   for d in $(DIST_SUBDIRS) ; do \
+	       rmdir $$d || true ; \
+	   done ; \
+	fi
 
-include $(srcdir)/../rules.make
+.PHONY: ptest ptests
 
 .NOTPARALLEL:
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/cdf_format/Makefile.am b/test/cdf_format/Makefile.am
new file mode 100644
index 0000000..4dad036
--- /dev/null
+++ b/test/cdf_format/Makefile.am
@@ -0,0 +1,69 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+
+if DECL_MPI_OFFSET
+   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+   AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+   # AM_FFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+TESTPROGRAMS = test_inq_format \
+               cdf_type \
+               dim_cdf12
+
+check_PROGRAMS = $(TESTPROGRAMS) tst_open_cdf5 tst_corrupt
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+CLEANFILES = testfile.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+EXTRA_DIST = seq_runs.sh test_cdf1.nc test_cdf2.nc test_cdf5.nc \
+             bad_begin.nc5 \
+             bad_xtype.nc1 bad_xtype.nc2 bad_xtype.nc5 \
+             bad_ndims.nc1 bad_ndims.nc2 bad_ndims.nc5 \
+             bad_dimid.nc1 bad_dimid.nc2 bad_dimid.nc5 \
+             bad_nattrs.nc1 bad_nattrs.nc2 bad_nattrs.nc5
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+
+ptest ptests ptest4: $(TESTPROGRAMS)
+	export PNETCDF_SAFE_MODE=0 && $(TESTMPIRUN4) ./test_inq_format $(srcdir)
+	export PNETCDF_SAFE_MODE=0 && $(TESTMPIRUN4) ./cdf_type $(TESTOUTDIR)/testfile.nc
+	export PNETCDF_SAFE_MODE=0 && $(TESTMPIRUN4) ./dim_cdf12 $(TESTOUTDIR)/testfile.nc
+	export PNETCDF_SAFE_MODE=1 && $(TESTMPIRUN4) ./test_inq_format $(srcdir)
+	export PNETCDF_SAFE_MODE=1 && $(TESTMPIRUN4) ./cdf_type $(TESTOUTDIR)/testfile.nc
+	export PNETCDF_SAFE_MODE=1 && $(TESTMPIRUN4) ./dim_cdf12 $(TESTOUTDIR)/testfile.nc
+
+ptest2 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/cdf_format/Makefile.in b/test/cdf_format/Makefile.in
index 4e1300f..de43413 100644
--- a/test/cdf_format/Makefile.in
+++ b/test/cdf_format/Makefile.in
@@ -1,74 +1,1150 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2590 2016-10-31 21:37:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = $(am__EXEEXT_1) tst_open_cdf5$(EXEEXT) \
+	tst_corrupt$(EXEEXT)
+subdir = test/cdf_format
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = test_inq_format$(EXEEXT) cdf_type$(EXEEXT) \
+	dim_cdf12$(EXEEXT)
+cdf_type_SOURCES = cdf_type.c
+cdf_type_OBJECTS = cdf_type.$(OBJEXT)
+cdf_type_LDADD = $(LDADD)
+cdf_type_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+dim_cdf12_SOURCES = dim_cdf12.c
+dim_cdf12_OBJECTS = dim_cdf12.$(OBJEXT)
+dim_cdf12_LDADD = $(LDADD)
+dim_cdf12_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+test_inq_format_SOURCES = test_inq_format.c
+test_inq_format_OBJECTS = test_inq_format.$(OBJEXT)
+test_inq_format_LDADD = $(LDADD)
+test_inq_format_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_corrupt_SOURCES = tst_corrupt.c
+tst_corrupt_OBJECTS = tst_corrupt.$(OBJEXT)
+tst_corrupt_LDADD = $(LDADD)
+tst_corrupt_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_open_cdf5_SOURCES = tst_open_cdf5.c
+tst_open_cdf5_OBJECTS = tst_open_cdf5.$(OBJEXT)
+tst_open_cdf5_LDADD = $(LDADD)
+tst_open_cdf5_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = cdf_type.c dim_cdf12.c test_inq_format.c tst_corrupt.c \
+	tst_open_cdf5.c
+DIST_SOURCES = cdf_type.c dim_cdf12.c test_inq_format.c tst_corrupt.c \
+	tst_open_cdf5.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+ at DECL_MPI_OFFSET_TRUE@AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+TESTPROGRAMS = test_inq_format \
+               cdf_type \
+               dim_cdf12
+
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+CLEANFILES = testfile.nc core core.* *.gcda *.gcno *.gcov gmon.out
+EXTRA_DIST = seq_runs.sh test_cdf1.nc test_cdf2.nc test_cdf5.nc \
+             bad_begin.nc5 \
+             bad_xtype.nc1 bad_xtype.nc2 bad_xtype.nc5 \
+             bad_ndims.nc1 bad_ndims.nc2 bad_ndims.nc5 \
+             bad_dimid.nc1 bad_dimid.nc2 bad_dimid.nc5 \
+             bad_nattrs.nc1 bad_nattrs.nc2 bad_nattrs.nc5
+
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .lo .log .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/cdf_format/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/cdf_format/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+cdf_type$(EXEEXT): $(cdf_type_OBJECTS) $(cdf_type_DEPENDENCIES) $(EXTRA_cdf_type_DEPENDENCIES) 
+	@rm -f cdf_type$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(cdf_type_OBJECTS) $(cdf_type_LDADD) $(LIBS)
+
+dim_cdf12$(EXEEXT): $(dim_cdf12_OBJECTS) $(dim_cdf12_DEPENDENCIES) $(EXTRA_dim_cdf12_DEPENDENCIES) 
+	@rm -f dim_cdf12$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(dim_cdf12_OBJECTS) $(dim_cdf12_LDADD) $(LIBS)
+
+test_inq_format$(EXEEXT): $(test_inq_format_OBJECTS) $(test_inq_format_DEPENDENCIES) $(EXTRA_test_inq_format_DEPENDENCIES) 
+	@rm -f test_inq_format$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(test_inq_format_OBJECTS) $(test_inq_format_LDADD) $(LIBS)
+
+tst_corrupt$(EXEEXT): $(tst_corrupt_OBJECTS) $(tst_corrupt_DEPENDENCIES) $(EXTRA_tst_corrupt_DEPENDENCIES) 
+	@rm -f tst_corrupt$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_corrupt_OBJECTS) $(tst_corrupt_LDADD) $(LIBS)
+
+tst_open_cdf5$(EXEEXT): $(tst_open_cdf5_OBJECTS) $(tst_open_cdf5_DEPENDENCIES) $(EXTRA_tst_open_cdf5_DEPENDENCIES) 
+	@rm -f tst_open_cdf5$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_open_cdf5_OBJECTS) $(tst_open_cdf5_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cdf_type.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/dim_cdf12.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_inq_format.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_corrupt.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_open_cdf5.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
 
-include ../../macros.make
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
 
-INCLUDES  = -I../../src/lib -I$(srcdir)/../common
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
 
-SRCS    = test_inq_format.c \
-          cdf_type.c \
-          dim_cdf12.c
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
 
-OBJS    = $(SRCS:.c=.o)
-PROGS   = $(SRCS:.c=)
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 
-GARBAGE      = $(PROGS) testfile.nc
-PACKING_LIST = $(SRCS) Makefile.in depend \
-               test_cdf1.nc test_cdf2.nc test_cdf5.nc
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
 
-all: $(PROGS)
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
 
-$(OBJS): $(srcdir)/../common/testutils.h
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
 
-$(PROGS): ../common/libtestutils.a
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
 
-test_inq_format: test_inq_format.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
 
-cdf_type: cdf_type.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+dvi: dvi-am
 
-dim_cdf12: dim_cdf12.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+dvi-am:
 
-testing check verbose_testing: all
-	$(TEST_SEQRUN) ./test_inq_format $(srcdir)
-	$(TEST_SEQRUN) ./cdf_type $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./dim_cdf12 $(TEST_OUTDIR)/testfile.nc
+html: html-am
 
-# Some of these tests are designed to run on one process,
-# # Run them on 4 processes to see if they can handle well
-# Some of these tests are designed to run on 4 processes,
-# # Run them on 2, 4, and 6 processes to see if they can handle well
-TEST_MPIRUN_2  = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_6  = $(subst NP,6,$(TEST_MPIRUN))
-TEST_MPIRUN_8  = $(subst NP,8,$(TEST_MPIRUN))
-TEST_MPIRUN_10 = $(subst NP,10,$(TEST_MPIRUN))
+html-am:
 
-ptest4: $(PROGS)
-	$(TEST_MPIRUN_4) ./test_inq_format $(srcdir)
-	$(TEST_MPIRUN_4) ./cdf_type $(TEST_OUTDIR)/testfile.nc
-	$(TEST_MPIRUN_4) ./dim_cdf12 $(TEST_OUTDIR)/testfile.nc
+info: info-am
 
-ptest ptests: ptest4
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ at DECL_MPI_OFFSET_TRUE@   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+ at DECL_MPI_OFFSET_TRUE@   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@   # AM_FFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+ptest ptests ptest4: $(TESTPROGRAMS)
+	export PNETCDF_SAFE_MODE=0 && $(TESTMPIRUN4) ./test_inq_format $(srcdir)
+	export PNETCDF_SAFE_MODE=0 && $(TESTMPIRUN4) ./cdf_type $(TESTOUTDIR)/testfile.nc
+	export PNETCDF_SAFE_MODE=0 && $(TESTMPIRUN4) ./dim_cdf12 $(TESTOUTDIR)/testfile.nc
+	export PNETCDF_SAFE_MODE=1 && $(TESTMPIRUN4) ./test_inq_format $(srcdir)
+	export PNETCDF_SAFE_MODE=1 && $(TESTMPIRUN4) ./cdf_type $(TESTOUTDIR)/testfile.nc
+	export PNETCDF_SAFE_MODE=1 && $(TESTMPIRUN4) ./dim_cdf12 $(TESTOUTDIR)/testfile.nc
 
 ptest2 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
-include $(srcdir)/depend
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
-$(LIBRARY): ;
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/cdf_format/bad_begin.nc5 b/test/cdf_format/bad_begin.nc5
new file mode 100644
index 0000000..da0a0a2
Binary files /dev/null and b/test/cdf_format/bad_begin.nc5 differ
diff --git a/test/cdf_format/bad_dimid.nc1 b/test/cdf_format/bad_dimid.nc1
new file mode 100644
index 0000000..a93982b
Binary files /dev/null and b/test/cdf_format/bad_dimid.nc1 differ
diff --git a/test/cdf_format/bad_dimid.nc2 b/test/cdf_format/bad_dimid.nc2
new file mode 100644
index 0000000..cfbd276
Binary files /dev/null and b/test/cdf_format/bad_dimid.nc2 differ
diff --git a/test/cdf_format/bad_dimid.nc5 b/test/cdf_format/bad_dimid.nc5
new file mode 100644
index 0000000..0463ce1
Binary files /dev/null and b/test/cdf_format/bad_dimid.nc5 differ
diff --git a/test/cdf_format/bad_nattrs.nc1 b/test/cdf_format/bad_nattrs.nc1
new file mode 100644
index 0000000..11efd9d
Binary files /dev/null and b/test/cdf_format/bad_nattrs.nc1 differ
diff --git a/test/cdf_format/bad_nattrs.nc2 b/test/cdf_format/bad_nattrs.nc2
new file mode 100644
index 0000000..befe063
Binary files /dev/null and b/test/cdf_format/bad_nattrs.nc2 differ
diff --git a/test/cdf_format/bad_nattrs.nc5 b/test/cdf_format/bad_nattrs.nc5
new file mode 100644
index 0000000..3d549f6
Binary files /dev/null and b/test/cdf_format/bad_nattrs.nc5 differ
diff --git a/test/cdf_format/bad_ndims.nc1 b/test/cdf_format/bad_ndims.nc1
new file mode 100644
index 0000000..3c5694b
Binary files /dev/null and b/test/cdf_format/bad_ndims.nc1 differ
diff --git a/test/cdf_format/bad_ndims.nc2 b/test/cdf_format/bad_ndims.nc2
new file mode 100644
index 0000000..0f71530
Binary files /dev/null and b/test/cdf_format/bad_ndims.nc2 differ
diff --git a/test/cdf_format/bad_ndims.nc5 b/test/cdf_format/bad_ndims.nc5
new file mode 100644
index 0000000..78d047a
Binary files /dev/null and b/test/cdf_format/bad_ndims.nc5 differ
diff --git a/test/cdf_format/bad_xtype.nc1 b/test/cdf_format/bad_xtype.nc1
new file mode 100644
index 0000000..4639768
Binary files /dev/null and b/test/cdf_format/bad_xtype.nc1 differ
diff --git a/test/cdf_format/bad_xtype.nc2 b/test/cdf_format/bad_xtype.nc2
new file mode 100644
index 0000000..bffdeab
Binary files /dev/null and b/test/cdf_format/bad_xtype.nc2 differ
diff --git a/test/cdf_format/bad_xtype.nc5 b/test/cdf_format/bad_xtype.nc5
new file mode 100644
index 0000000..76d5d5d
Binary files /dev/null and b/test/cdf_format/bad_xtype.nc5 differ
diff --git a/test/cdf_format/cdf_type.c b/test/cdf_format/cdf_type.c
index 90f902f..7d854c3 100644
--- a/test/cdf_format/cdf_type.c
+++ b/test/cdf_format/cdf_type.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: cdf_type.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: cdf_type.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* This program tests if PnetCDF can detect CDF-5 data types that are not
  * available in CDF-1 and CDF-2 formats
@@ -16,8 +16,6 @@
 #include <pnetcdf.h>
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR) {printf("Error(%d) at line %d: %s\n",err,__LINE__,ncmpi_strerror(err)); nerrs++; }}
-
 /*----< test_attr_types() >---------------------------------------------------*/
 static
 int test_attr_types(char *filename,
@@ -32,18 +30,19 @@ int test_attr_types(char *filename,
     cmode = NC_CLOBBER|format;
 
     /* create a file in CDF-1 or CDF-2 format */
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
     for (i=0; i<5; i++) {
         char name[32];
         sprintf(name, "gattr_%d", i);
         err = ncmpi_put_att_int(ncid, NC_GLOBAL, name, xtype[i], 1, &attr);
         if (err != NC_ESTRICTCDF2) {
-            printf("Error (line=%d): expecting NC_ESTRICTCDF2 but got %s\n", __LINE__,nc_err_code_name(err));
+            printf("Error at line %d in %s: expecting NC_ESTRICTCDF2 but got %s\n",
+            __LINE__,__FILE__,ncmpi_strerrno(err));
             nerrs++;
         }
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -63,8 +62,8 @@ int test_var_types(char *filename,
     cmode = NC_CLOBBER|format;
 
     /* create a file in CDF-1 or CDF-2 format */
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim", NC_UNLIMITED, &dimid); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim", NC_UNLIMITED, &dimid); CHECK_ERR
     for (i=0; i<5; i++) {
         char name[32];
         sprintf(name, "var_%d", i);
@@ -74,7 +73,7 @@ int test_var_types(char *filename,
             nerrs++;
         }
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -91,7 +90,7 @@ int main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -124,6 +123,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return (nerrs) ? 2 : 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/cdf_format/depend b/test/cdf_format/depend
deleted file mode 100644
index 09cc529..0000000
--- a/test/cdf_format/depend
+++ /dev/null
@@ -1,3 +0,0 @@
-test_inq_format.o: test_inq_format.c
-cdf_type.o: cdf_type.c
-dim_cdf12.o: dim_cdf12.c
diff --git a/test/cdf_format/dim_cdf12.c b/test/cdf_format/dim_cdf12.c
index fae5417..2cdfbd6 100644
--- a/test/cdf_format/dim_cdf12.c
+++ b/test/cdf_format/dim_cdf12.c
@@ -4,12 +4,50 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id$ */
+/* $Id: dim_cdf12.c 3422 2017-09-25 05:42:52Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
- * This program is to test CDF-1, CDF-2 file formats using the allowable
- * maximal dimension size
+ * This program tests CDF-1, CDF-2 file formats using the allowable maximal
+ * dimension size. It also tests the following large-file support limitations.
+ *
+ * For CDF-1
+ *
+ * If there is no record variables defined in the file, only one fixed-size
+ * variable can exceed 2 GiB in size (it can be as large as the underlying file
+ * system permits.) It must be the last variable defined in the file, and the
+ * offset to the beginning of this variable must be less than about 2 GiB.
+ *
+ * The limit is really 2^31 - 4. If you were to specify a variable size of 2^31
+ * -3, for example, it would be rounded up to the nearest multiple of 4 bytes,
+ * which would be 2^31, which is larger than the largest signed integer, 2^31
+ * - 1.
+ *
+ * If you use the unlimited dimension, record variables may exceed 2 GiB in
+ * size, as long as the offset of the start of each record variable within a
+ * record is less than 2 GiB - 4.
+ *
+ *
+ *
+ * For CDF-2
+ *
+ * No fixed-size variable can require more than 2^32 - 4 bytes (i.e. 4GiB - 4
+ * bytes, or 4,294,967,292 bytes) of storage for its data, unless it is the
+ * last fixed-size variable and there are no record variables. When there are
+ * no record variables, the last fixed-size variable can be any size supported
+ * by the file system, e.g. terabytes.
+ *
+ * A 64-bit offset format netCDF file can have up to 2^32 - 1 fixed sized
+ * variables, each under 4GiB in size. If there are no record variables in the
+ * file the last fixed variable can be any size.
+ *
+ * No record variable can require more than 2^32 - 4 bytes of storage for each
+ * record's worth of data, unless it is the last record variable. A 64-bit
+ * offset format netCDF file can have up to 2^32 - 1 records, of up to 2^32 - 1
+ * variables, as long as the size of one record's data for each record variable
+ * except the last is less than 4 GiB - 4.
+ *
+ * Note also that all netCDF variables and records are padded to 4 byte boundaries.
  *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
@@ -22,33 +60,29 @@
 #include <pnetcdf.h>
 #include <testutils.h>
 
-#define FOUR_G 4294967296
-#define TWO_G  2147483648
-#define ONE_G  1073741824
-
-#define NZ 4
-#define NY 10
-#define NX TWO_G
-
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: err=%s (%s)\n", __LINE__,nc_err_code_name(err),ncmpi_strerror(err)); nerrs++;}
-
-#define ERR_EXPECT(exp) if (err!=exp) {printf("Error at line %d: expect error %s but got %s\n", __LINE__,nc_err_code_name(exp),nc_err_code_name(err)); nerrs++;}
-
 int main(int argc, char** argv)
 {
     char filename[256];
     int rank, nprocs, err, nerrs=0;
     int ncid, cmode, varid, dimid[3];
+    MPI_Info info=MPI_INFO_NULL;
 
     MPI_Init(&argc, &argv);
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
+    /* Note this test program must use the 512-byte alignment setting */
+    MPI_Info_create(&info);
+    /* use the 512-byte header align size */
+    MPI_Info_set(info, "nc_header_align_size", "512");
+    /* use the 512-byte fixed-size variable starting file offset alignment */
+    MPI_Info_set(info, "nc_var_align_size", "512");
+
     /* get command-line arguments */
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -64,123 +98,142 @@ int main(int argc, char** argv)
     /* create a new CDF-1 file ----------------------------------------------*/
     cmode = NC_CLOBBER;
 
-    /* max dimension size for CDF-2 file is 2^31-3 = 2147483647 - 3 */
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
+    /* max dimension size for CDF-1 file is 2^31-3 = 2147483647 - 3 */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
     err = ncmpi_def_dim(ncid, "Y", INT_MAX, &dimid[0]);
-    ERR_EXPECT(NC_EDIMSIZE)
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3, &dimid[0]); ERR
-    err = ncmpi_close(ncid); ERR
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_close(ncid); ERR
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3, &dimid[0]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, dimid, &varid); ERR
-    err = ncmpi_close(ncid); ERR
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_close(ncid); ERR
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3,  &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,          &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT,  1, &dimid[1], &varid); ERR
+    EXP_ERR(NC_EDIMSIZE)
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3, &dimid[0]); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* use the max dimension size to define a 1D variable */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, dimid, &varid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* use the max dimension size to define a 1D variable, followed by
+     * another variable to make the file size > 2147483647 */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3,  &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,          &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT,  1, &dimid[1], &varid); CHECK_ERR
+    /* for cdf-1, adding var1 after var0 will cause NC_EVARSIZE */
     err = ncmpi_close(ncid);
-    ERR_EXPECT(NC_EVARSIZE)
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX-1024,  &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,             &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT,  1, &dimid[1], &varid); ERR
-    err = ncmpi_close(ncid); ERR
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_close(ncid); ERR
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,         &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_SHORT, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_CHAR,  1, &dimid[1], &varid); ERR
+    EXP_ERR(NC_EVARSIZE)
+
+    /* use the max dimension size - 1024 to define a 1D variable, followed
+     * by another variable to make the file size < 2147483647 */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX-1024, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,            &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT,  1, &dimid[1], &varid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* define the first variable of type short that makes the file size >
+     * 2147483647. error should be reported in ncmpi_enddef() or
+     * ncmpi_close() */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,         &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_SHORT, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_CHAR,  1, &dimid[1], &varid); CHECK_ERR
     err = ncmpi_close(ncid);
-    ERR_EXPECT(NC_EVARSIZE)
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3-512-8, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,       &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT,  1, &dimid[1], &varid); ERR
-    err = ncmpi_close(ncid); ERR
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX/2+1, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,           &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_INT, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, &dimid[1], &varid); ERR
+    EXP_ERR(NC_EVARSIZE)
+
+    /* define two variables to make the file size just < 2147483647 */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX-3-512-8, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,       &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT,  1, &dimid[1], &varid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* define two variables to make the file size just > 2147483647 */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX/2+1, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,           &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_INT, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, &dimid[1], &varid); CHECK_ERR
     err = ncmpi_close(ncid);
-    ERR_EXPECT(NC_EVARSIZE)
+    EXP_ERR(NC_EVARSIZE)
 
     /* create a new CDF-2 file ----------------------------------------------*/
-    cmode = NC_CLOBBER;
     cmode = NC_CLOBBER | NC_64BIT_OFFSET;
 
     /* max dimension size for CDF-2 file is 2^32-3 = 4294967295 - 3 */
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
     err = ncmpi_def_dim(ncid, "Y", UINT_MAX, &dimid[0]);
-    ERR_EXPECT(NC_EDIMSIZE)
-    err = ncmpi_def_dim(ncid, "Y", UINT_MAX-3, &dimid[0]); ERR
-    err = ncmpi_close(ncid); ERR
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_close(ncid); ERR
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", UINT_MAX-3, &dimid[0]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, dimid, &varid); ERR
-    err = ncmpi_close(ncid); ERR
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_close(ncid); ERR
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", UINT_MAX-3, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,          &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT,  1, &dimid[1], &varid); ERR
-    err = ncmpi_close(ncid); ERR
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_close(ncid); ERR
-
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", UINT_MAX-3, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,          &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_SHORT, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT,   1, &dimid[1], &varid); ERR
+    EXP_ERR(NC_EDIMSIZE)
+    err = ncmpi_def_dim(ncid, "Y", UINT_MAX-3, &dimid[0]); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* use the max dimension size to define a 1D variable */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", UINT_MAX-3, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, dimid, &varid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* use the max dimension size to define a 1D variable, followed by
+     * another variable to make the file size > 4294967295 */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", UINT_MAX-3, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,          &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_CHAR, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT,  1, &dimid[1], &varid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* define the first variable of type short that makes the file size >
+     * 4294967295. error should be reported in ncmpi_enddef() or
+     * ncmpi_close() */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", UINT_MAX-3, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,          &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_SHORT, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT,   1, &dimid[1], &varid); CHECK_ERR
     err = ncmpi_close(ncid);
-    ERR_EXPECT(NC_EVARSIZE)
+    EXP_ERR(NC_EVARSIZE)
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,       &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_INT, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, &dimid[1], &varid); ERR
+    /* define 2 int 1D variables of dimension size > max */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,       &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_INT, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, &dimid[1], &varid); CHECK_ERR
     err = ncmpi_close(ncid);
-    ERR_EXPECT(NC_EVARSIZE)
+    EXP_ERR(NC_EVARSIZE)
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX/2+1, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,           &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_INT, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, &dimid[1], &varid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX/2+1, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,           &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_INT, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, &dimid[1], &varid); CHECK_ERR
     err = ncmpi_close(ncid);
-    ERR_EXPECT(NC_EVARSIZE)
+    EXP_ERR(NC_EVARSIZE)
+
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", INT_MAX/2, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 2,         &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_INT, 1, &dimid[0], &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, &dimid[1], &varid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, info, &ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Y", INT_MAX/2, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 2,         &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_INT, 1, &dimid[0], &varid); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, &dimid[1], &varid); ERR
-    err = ncmpi_close(ncid); ERR
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_close(ncid); ERR
+    MPI_Info_free(&info);
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -199,6 +252,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return (nerrs) ? 2 : 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/cdf_format/seq_runs.sh b/test/cdf_format/seq_runs.sh
new file mode 100755
index 0000000..035f066
--- /dev/null
+++ b/test/cdf_format/seq_runs.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+export PNETCDF_SAFE_MODE=0
+${TESTSEQRUN} ./test_inq_format $srcdir
+${TESTSEQRUN} ./cdf_type      ${TESTOUTDIR}/testfile.nc
+${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc
+${TESTSEQRUN} ./dim_cdf12     ${TESTOUTDIR}/testfile.nc
+${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc
+
+export PNETCDF_SAFE_MODE=1
+${TESTSEQRUN} ./test_inq_format $srcdir
+${TESTSEQRUN} ./cdf_type      ${TESTOUTDIR}/testfile.nc
+${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc
+${TESTSEQRUN} ./dim_cdf12     ${TESTOUTDIR}/testfile.nc
+${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc
+
+# the followings check files with corrupted header
+
+${TESTSEQRUN} ./tst_open_cdf5 ${srcdir}/bad_begin.nc5
+
+${TESTSEQRUN} ./tst_corrupt ${srcdir}
+
diff --git a/test/cdf_format/test_inq_format.c b/test/cdf_format/test_inq_format.c
index 4cf5311..7f5adf3 100644
--- a/test/cdf_format/test_inq_format.c
+++ b/test/cdf_format/test_inq_format.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: test_inq_format.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: test_inq_format.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* This program tests if PnetCDF can report correct file formats */
 
@@ -14,8 +14,6 @@
 #include <pnetcdf.h>
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR) {printf("Error(%d) at line %d: %s\n",err,__LINE__,ncmpi_strerror(err)); nerrs++; }}
-
 int main(int argc, char **argv) {
     char dir_name[256], filename[256];
     int err, rank, nerrs=0, format, ncid;
@@ -26,7 +24,7 @@ int main(int argc, char **argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s dir_name\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(dir_name, 256, "%s", argv[1]);
     else           strcpy(dir_name, ".");
@@ -41,55 +39,55 @@ int main(int argc, char **argv) {
 
     /* test CDF-1 -----------------------------------------------------------*/
     sprintf(filename,"%s/test_cdf1.nc",dir_name);
-    err = ncmpi_open(MPI_COMM_WORLD, filename, 0, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_inq_format(ncid, &format); ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, 0, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_inq_format(ncid, &format); CHECK_ERR
     if (format != NC_FORMAT_CLASSIC) {
-        printf("Error (line=%d): expecting CDF-1 format for file %s but got %d\n",
-               __LINE__,filename,format);
+        printf("Error at line %d in %s: expecting CDF-1 format for file %s but got %d\n",
+               __LINE__,__FILE__,filename,format);
         nerrs++;
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
   
-    err = ncmpi_inq_file_format(filename, &format); ERR
+    err = ncmpi_inq_file_format(filename, &format); CHECK_ERR
     if (format != NC_FORMAT_CLASSIC) {
-        printf("Error (line=%d): expecting CDF-1 format for file %s but got %d\n",
-               __LINE__,filename,format);
+        printf("Error at line %d in %s: expecting CDF-1 format for file %s but got %d\n",
+               __LINE__,__FILE__,filename,format);
         nerrs++;
     }
 
     /* test CDF-2 -----------------------------------------------------------*/
     sprintf(filename,"%s/test_cdf2.nc",dir_name);
-    err = ncmpi_open(MPI_COMM_WORLD, filename, 0, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_inq_format(ncid, &format); ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, 0, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_inq_format(ncid, &format); CHECK_ERR
     if (format != NC_FORMAT_CDF2) {
-        printf("Error (line=%d): expecting CDF-2 format for file %s but got %d\n",
-               __LINE__,filename,format);
+        printf("Error at line %d in %s: expecting CDF-2 format for file %s but got %d\n",
+               __LINE__,__FILE__,filename,format);
         nerrs++;
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
   
-    err = ncmpi_inq_file_format(filename, &format); ERR
+    err = ncmpi_inq_file_format(filename, &format); CHECK_ERR
     if (format != NC_FORMAT_CDF2) {
-        printf("Error (line=%d): expecting CDF-2 format for file %s but got %d\n",
-               __LINE__,filename,format);
+        printf("Error at line %d in %s: expecting CDF-2 format for file %s but got %d\n",
+               __LINE__,__FILE__,filename,format);
         nerrs++;
     }
 
     /* test CDF-5 -----------------------------------------------------------*/
     sprintf(filename,"%s/test_cdf5.nc",dir_name);
-    err = ncmpi_open(MPI_COMM_WORLD, filename, 0, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_inq_format(ncid, &format); ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, 0, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_inq_format(ncid, &format); CHECK_ERR
     if (format != NC_FORMAT_CDF5) {
-        printf("Error (line=%d): expecting CDF-5 format for file %s but got %d\n",
-               __LINE__,filename,format);
+        printf("Error at line %d in %s: expecting CDF-5 format for file %s but got %d\n",
+               __LINE__,__FILE__,filename,format);
         nerrs++;
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
   
-    err = ncmpi_inq_file_format(filename, &format); ERR
+    err = ncmpi_inq_file_format(filename, &format); CHECK_ERR
     if (format != NC_FORMAT_CDF5) {
-        printf("Error (line=%d): expecting CDF-5 format for file %s but got %d\n",
-               __LINE__,filename,format);
+        printf("Error at line %d in %s: expecting CDF-5 format for file %s but got %d\n",
+               __LINE__,__FILE__,filename,format);
         nerrs++;
     }
 
@@ -109,5 +107,5 @@ int main(int argc, char **argv) {
     }
 
     MPI_Finalize();
-    return (nerrs) ? 2 : 0;
+    return (nerrs > 0);
 }
diff --git a/test/cdf_format/tst_corrupt.c b/test/cdf_format/tst_corrupt.c
new file mode 100644
index 0000000..2d30781
--- /dev/null
+++ b/test/cdf_format/tst_corrupt.c
@@ -0,0 +1,145 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *  $Id: tst_corrupt.c 3427 2017-09-26 07:43:25Z wkliao $
+ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program reads CDF files with corrupted header and check if the
+ * expected error code can be returned.
+ *
+ * The compile and run commands are given below.
+ *
+ *    % mpicc -g -o tst_corrupt tst_corrupt.c -lpnetcdf
+ *
+ *    % mpiexec -l -n 1 tst_corrupt dir_name
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libgen.h> /* basename() */
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+int main(int argc, char** argv) {
+    char *bad_xtype[3] ={"bad_xtype.nc1",  "bad_xtype.nc2",  "bad_xtype.nc5"};
+    char *bad_ndims[3] ={"bad_ndims.nc1",  "bad_ndims.nc2",  "bad_ndims.nc5"};
+    char *bad_dimid[3] ={"bad_dimid.nc1",  "bad_dimid.nc2",  "bad_dimid.nc5"};
+    char *bad_nattrs[3]={"bad_nattrs.nc1", "bad_nattrs.nc2", "bad_nattrs.nc5"};
+
+    char filename[512], dirname[512];
+    int i, rank, nprocs, err, ncid, nerrs=0;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc != 2) {
+        if (!rank) printf("Usage: %s [directory name]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    snprintf(dirname, 512, "%s", argv[1]);
+    MPI_Bcast(dirname, 512, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str,
+        "*** TESTING C   %s for checking corrupted file header ",
+        basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    /* The 3 CDF files in bad_xtype[3] have been created on purpose to contain
+     * a corrupted header entry "nc_type" with an invalid value larger than
+     * the maximum allowed atomic data type. For CDF-1 and CDF-2, the maximum
+     * atomic data type is NC_DOUBLE and for CDF-5, the maximum is NC_UINT64.
+     * The corrupted entry is indicated below.
+     *
+     * CDF format specification:
+     *     var = name nelems [dimid ...] vatt_list nc_type vsize begin
+     *                                             ^^^^^^^
+     *                                             corrupted
+     */
+    for (i=0; i<3; i++) {
+        sprintf(filename, "%s/%s", dirname, bad_xtype[i]);
+        err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
+                         &ncid);
+        EXP_ERR(NC_EBADTYPE)
+    }
+
+    /* The 3 CDF files in bad_ndims[3] have been created on purpose to contain
+     * a corrupted header entry "number of dimensions" with a value larger than
+     * NC_MAX_DIMS. The corrupted entry is indicated below.
+     *
+     * CDF format specification:
+     *     dim_list = ABSENT | NC_DIMENSION  nelems  [dim ...]
+     *                                       ^^^^^^
+     *                                       corrupted
+     */
+    for (i=0; i<3; i++) {
+        sprintf(filename, "%s/%s", dirname, bad_ndims[i]);
+        err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
+                         &ncid);
+        EXP_ERR(NC_EMAXDIMS)
+    }
+
+    /* The 3 CDF files in bad_dimid[3] have been created on purpose to contain
+     * a corrupted header entry "dimension ID" of a variable that is beyond
+     * the number of dimensions defined in the file.
+     *
+     * CDF format specification:
+     *     var = name nelems [dimid ...] vatt_list nc_type vsize begin
+     *                        ^^^^^
+     *                        corrupted
+     */
+    for (i=0; i<3; i++) {
+        sprintf(filename, "%s/%s", dirname, bad_dimid[i]);
+        err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
+                         &ncid);
+        EXP_ERR(NC_EBADDIM)
+    }
+
+    /* The 3 CDF files in bad_nattrs[3] have been created on purpose to contain
+     * a corrupted header entry "number of attributes" with a value larger than
+     * NC_MAX_ATTRS. The corrupted entry is indicated below.
+     *
+     * CDF format specification:
+     *     att_list = ABSENT | NC_ATTRIBUTE  nelems  [attr ...]
+     *                                       ^^^^^^
+     *                                       corrupted
+     */
+    for (i=0; i<3; i++) {
+        sprintf(filename, "%s/%s", dirname, bad_nattrs[i]);
+        err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
+                         &ncid);
+        EXP_ERR(NC_EMAXATTS)
+    }
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+        if (malloc_size > 0)
+            ncmpi_inq_malloc_list();
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
+
diff --git a/test/cdf_format/tst_open_cdf5.c b/test/cdf_format/tst_open_cdf5.c
new file mode 100644
index 0000000..23638ed
--- /dev/null
+++ b/test/cdf_format/tst_open_cdf5.c
@@ -0,0 +1,103 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *  $Id: tst_open_cdf5.c 3423 2017-09-26 06:43:37Z wkliao $
+ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program tests if NC_ENOTNC can be returned when opening a CDF-5 file
+ * with corrupted header. In the corrupted file, bad_begin.nc5, the file
+ * starting offset of second variable "var_small" is incorrectly set to
+ * a value smaller than the end offset of its previous variable "var_big".
+ * Command "ncoffsets bad_begin.nc5" shows the followings.
+ *     ncoffsets bad_begin.nc5 
+ *     netcdf bad_begin.nc5 {
+ *     // file format: CDF-5
+ *
+ *     file header:
+ *             size   = 220 bytes
+ *             extent = 220 bytes
+ *
+ *     dimensions:
+ *             dim0 = 4294967295
+ *             dim1 = 10
+ *
+ *     fixed-size variables:
+ *             short  var_big(dim0):
+ *                    start file offset =         220
+ *                    end   file offset =  8589934810
+ *             short  var_small(dim1):
+ *                    start file offset =  4294967515
+ *                    end   file offset =  4294967535
+ *     }
+ *
+ * The compile and run commands are given below.
+ *
+ *    % mpicc -g -o tst_open_cdf5 tst_open_cdf5.c -lpnetcdf
+ *
+ *    % mpiexec -l -n 1 tst_open_cdf5
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <stdlib.h> /* setenv() */
+#include <libgen.h> /* basename() */
+#include <mpi.h>
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+#define FILE_NAME "bad_begin.nc5"
+
+int main(int argc, char** argv) {
+    char filename[256];
+    int nerrs=0, rank, nprocs, err, ncid;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        goto fn_exit;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, FILE_NAME);
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str,
+        "*** TESTING C   %s for checking begins in corrupted header",
+        basename(argv[0]));
+        printf("%-66s --- ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    /* turn off safe mode to suppress error message */
+    setenv("PNETCDF_SAFE_MODE", "0", 1);
+
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid);
+    EXP_ERR(NC_ENOTNC)
+
+    if (err == NC_NOERR) ncmpi_close(ncid);
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR && malloc_size > 0) /* this test is for running 1 process */
+        printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+               malloc_size);
+
+fn_exit:
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
+
diff --git a/test/common/Makefile.am b/test/common/Makefile.am
new file mode 100644
index 0000000..77e5280
--- /dev/null
+++ b/test/common/Makefile.am
@@ -0,0 +1,50 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .a .o .c .F90 .h
+
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+
+check_LTLIBRARIES = libtestutils.la
+
+libtestutils_la_SOURCES = testutils.c testutils.h
+
+# Must build the Fortran library separately, otherwise libtools will keep
+# using FCLINK to build C library even when --disable-fortran is used
+if HAS_FORTRAN
+check_LTLIBRARIES += libtestutilsf.la
+libtestutilsf_la_SOURCES = testutilsf.F90
+libtestutils_la_LIBADD = libtestutilsf.la
+CLEANFILES = testutilsf.mod
+endif
+
+if DECL_MPI_OFFSET
+   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+   # AM_CFLAGS  = -DHAVE_DECL_MPI_OFFSET
+   AM_FFLAGS  = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+   AM_FCFLAGS = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+# overwrite PPFCCOMPILE and LTPPFCCOMPILE to avoid using DEFS
+# IBM xlf compiler uses -WF,-D not -D
+# FCDEFS=`echo $(DEFS) | $(SED) 's/-D/-WF,-D/g'`
+# PPFCCOMPILE = $(FC) $(FCDEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+#         $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)
+# LTPPFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+#         $(LIBTOOLFLAGS) --mode=compile $(FC) $(FCDEFS) \
+#         $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+#         $(AM_FCFLAGS) $(FCFLAGS)
+
+# build check targets but not invoke
+tests-local: all $(check_LTLIBRARIES)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/common/Makefile.in b/test/common/Makefile.in
index 59911e1..80aa9a7 100644
--- a/test/common/Makefile.in
+++ b/test/common/Makefile.in
@@ -1,50 +1,750 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2590 2016-10-31 21:37:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
 
+# Must build the Fortran library separately, otherwise libtools will keep
+# using FCLINK to build C library even when --disable-fortran is used
+ at HAS_FORTRAN_TRUE@am__append_1 = libtestutilsf.la
+subdir = test/common
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at HAS_FORTRAN_TRUE@libtestutils_la_DEPENDENCIES = libtestutilsf.la
+am_libtestutils_la_OBJECTS = testutils.lo
+libtestutils_la_OBJECTS = $(am_libtestutils_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libtestutilsf_la_LIBADD =
+am__libtestutilsf_la_SOURCES_DIST = testutilsf.F90
+ at HAS_FORTRAN_TRUE@am_libtestutilsf_la_OBJECTS = testutilsf.lo
+libtestutilsf_la_OBJECTS = $(am_libtestutilsf_la_OBJECTS)
+ at HAS_FORTRAN_TRUE@am_libtestutilsf_la_rpath =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+PPFCCOMPILE = $(FC) $(FC_DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)
+LTPPFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(FC_DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_FCFLAGS) $(FCFLAGS)
+AM_V_PPFC = $(am__v_PPFC_ at AM_V@)
+am__v_PPFC_ = $(am__v_PPFC_ at AM_DEFAULT_V@)
+am__v_PPFC_0 = @echo "  PPFC    " $@;
+am__v_PPFC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libtestutils_la_SOURCES) $(libtestutilsf_la_SOURCES)
+DIST_SOURCES = $(libtestutils_la_SOURCES) \
+	$(am__libtestutilsf_la_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .a .o .c .F90 .h
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include \
+	-I$(top_builddir)/src/include
+check_LTLIBRARIES = libtestutils.la $(am__append_1)
+libtestutils_la_SOURCES = testutils.c testutils.h
+ at HAS_FORTRAN_TRUE@libtestutilsf_la_SOURCES = testutilsf.F90
+ at HAS_FORTRAN_TRUE@libtestutils_la_LIBADD = libtestutilsf.la
+ at HAS_FORTRAN_TRUE@CLEANFILES = testutilsf.mod
+ at DECL_MPI_OFFSET_TRUE@AM_FFLAGS = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@AM_FCFLAGS = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .a .o .c .F90 .h .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/common/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/common/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkLTLIBRARIES:
+	-test -z "$(check_LTLIBRARIES)" || rm -f $(check_LTLIBRARIES)
+	@list='$(check_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libtestutils.la: $(libtestutils_la_OBJECTS) $(libtestutils_la_DEPENDENCIES) $(EXTRA_libtestutils_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(LINK)  $(libtestutils_la_OBJECTS) $(libtestutils_la_LIBADD) $(LIBS)
+
+libtestutilsf.la: $(libtestutilsf_la_OBJECTS) $(libtestutilsf_la_DEPENDENCIES) $(EXTRA_libtestutilsf_la_DEPENDENCIES) 
+	$(AM_V_FCLD)$(FCLINK) $(am_libtestutilsf_la_rpath) $(libtestutilsf_la_OBJECTS) $(libtestutilsf_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testutils.Plo at am__quote@
+
+.F90.o:
+	$(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ $<
+
+.F90.obj:
+	$(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.F90.lo:
+	$(AM_V_PPFC)$(LTPPFCCOMPILE) -c -o $@ $<
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkLTLIBRARIES clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-include ../../macros.make
+mostlyclean: mostlyclean-am
 
-INCLUDES  = -I../../src/lib
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-C_SRCS   = testutils.c
+pdf: pdf-am
 
-F_SRCS   = testutilsf.F90
+pdf-am:
 
-HEADERS  = testutils.h
+ps: ps-am
 
-OBJS     = $(C_SRCS:.c=.o)
-ifeq (@has_fortran@, yes)
-OBJS    += $(F_SRCS:.F90=.o)
-endif
+ps-am:
 
-UTIL_LIB = libtestutils.a
+tests: tests-am
 
-GARBAGE      = $(UTIL_LIB) *.mod
-PACKING_LIST = $(C_SRCS) $(F_SRCS) $(HEADERS) Makefile.in
+tests-am: tests-local
 
-all: $(UTIL_LIB)
+uninstall-am:
 
-$(C_SRCS:.c=.o) : $(HEADERS)
+.MAKE: check-am install-am install-strip
 
-$(UTIL_LIB): $(OBJS)
-	$(AR) $(ARFLAGS) $@ $(OBJS)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkLTLIBRARIES clean-generic clean-libtool \
+	cscopelist-am ctags ctags-am distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
 
-testutils.o: testutils.c testutils.h
+.PRECIOUS: Makefile
 
-testutilsf.o: testutilsf.F90
 
-testing check verbose_testing: $(UTIL_LIB)
+ at DECL_MPI_OFFSET_TRUE@   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+ at DECL_MPI_OFFSET_TRUE@   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@   # AM_CFLAGS  = -DHAVE_DECL_MPI_OFFSET
 
-ptest ptests: $(UTIL_LIB)
+# overwrite PPFCCOMPILE and LTPPFCCOMPILE to avoid using DEFS
+# IBM xlf compiler uses -WF,-D not -D
+# FCDEFS=`echo $(DEFS) | $(SED) 's/-D/-WF,-D/g'`
+# PPFCCOMPILE = $(FC) $(FCDEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+#         $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)
+# LTPPFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+#         $(LIBTOOLFLAGS) --mode=compile $(FC) $(FCDEFS) \
+#         $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+#         $(AM_FCFLAGS) $(FCFLAGS)
 
-ptest2 ptest4 ptest6 ptest8 ptest10:
+# build check targets but not invoke
+tests-local: all $(check_LTLIBRARIES)
 
-include $(srcdir)/../../rules.make
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/common/testutils.h b/test/common/testutils.h
index 48876ec..0780bd0 100644
--- a/test/common/testutils.h
+++ b/test/common/testutils.h
@@ -2,16 +2,36 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: testutils.h 2675 2016-12-04 18:55:24Z wkliao $ */
+/* $Id: testutils.h 3414 2017-09-24 01:39:49Z wkliao $ */
 
 
 #ifndef _UTILS_H
 #define _UTILS_H
 
+#ifdef HAVE_CONFIG_H
+#include <config.h> /* output of 'configure' */
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
 
+#define CHECK_ERR { \
+    if (err != NC_NOERR) { \
+        nerrs++; \
+        printf("Error at line %d in %s: (%s)\n", \
+        __LINE__,__FILE__,ncmpi_strerrno(err)); \
+    } \
+}
+
+#define EXP_ERR(exp) { \
+    if (err != exp) { \
+        nerrs++; \
+        printf("Error at line %d in %s: expecting %s but got %s\n", \
+        __LINE__,__FILE__,ncmpi_strerrno(exp), ncmpi_strerrno(err)); \
+    } \
+}
+
 #ifndef PATH_MAX
 #define PATH_MAX 4096
 #endif
@@ -26,9 +46,11 @@ void parse_write_args(int argc, char **argv, int rank, params *p);
 
 #ifdef PNETCDF_DEBUG
 #define PASS_STR "\x1b[32mpass\x1b[0m\n"
+#define SKIP_STR "\x1b[32mskip\x1b[0m\n"
 #define FAIL_STR "\x1b[31mfail\x1b[0m with %d mismatches\n"
 #else
 #define PASS_STR "pass\n"
+#define SKIP_STR "skip\n"
 #define FAIL_STR "fail with %d mismatches\n"
 #endif
 
@@ -42,7 +64,7 @@ void parse_write_args(int argc, char **argv, int rank, params *p);
 
 extern char* nc_err_code_name(int err);
 
-#ifndef MPI_OFFSET
+#ifndef HAVE_DECL_MPI_OFFSET
 #define MPI_OFFSET MPI_LONG_LONG_INT
 #endif
 
diff --git a/test/common/testutilsf.F90 b/test/common/testutilsf.F90
index dc4a786..c6848c7 100644
--- a/test/common/testutilsf.F90
+++ b/test/common/testutilsf.F90
@@ -4,23 +4,33 @@
 !
 !     This is part of the PnetCDF package.
 !
-!     $Id: testutilsf.F90 2590 2016-10-31 21:37:02Z wkliao $
+!     $Id: testutilsf.F90 3341 2017-08-25 22:29:08Z wkliao $
 
       ! This function gets the executable name and output file name from the
       ! command line.
       integer function get_args(cmd, filename)
-#ifdef NAGf90Fortran
+#ifdef NAGFortran
           USE F90_UNIX_ENV, only : iargc, getarg
           implicit none
 #else
           implicit none
           integer iargc
 #endif
-          integer argc
+          integer argc, i
           character(len=*) cmd, filename
+          character(len=256) full_cmd
 
           get_args = 1
-          call getarg(0, cmd)
+          call getarg(0, full_cmd)
+
+          ! remove basename from executable name
+          i = INDEX(full_cmd, "/", .TRUE.)
+          if (i .EQ. 0) then
+              cmd(:) = full_cmd(:)
+          else
+              cmd(:) = full_cmd(i+1:)
+          endif
+
           argc = IARGC()
           if (argc .GT. 1) then
               print*,'Usage: ',trim(cmd),' [filename]'
diff --git a/test/fandc/Makefile.am b/test/fandc/Makefile.am
new file mode 100644
index 0000000..1c5bee7
--- /dev/null
+++ b/test/fandc/Makefile.am
@@ -0,0 +1,74 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c .f .f90
+
+AM_DEFAULT_SOURCE_EXT = .c
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+AM_FFLAGS    = -I$(top_builddir)/src/binding/f77
+AM_FCFLAGS   = $(FC_MODINC)$(top_builddir)/src/binding/f90
+AM_FCFLAGS  += $(FC_MODINC)$(srcdir)/../common
+AM_FCFLAGS  += -I$(top_builddir)/src/binding/f77 
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la -lm
+
+if DECL_MPI_OFFSET
+   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+   AM_CFLAGS   = -DHAVE_DECL_MPI_OFFSET
+   AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+   AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+TESTPROGRAMS = pnctest \
+               csnap
+
+if HAS_FORTRAN
+TESTPROGRAMS += pnf_test pnctestf fixedform
+pnf_test_SOURCES = pnf_test.f
+pnctestf_SOURCES = pnctestf.f
+fixedform_SOURCES = fixedform.f90
+fixedform_FCFLAGS = $(FFIXEDFORMFLAG) $(FC_MODINC)$(top_builddir)/src/binding/f90 $(FC_MODINC)$(srcdir)/../common -I$(top_builddir)/src/binding/f77
+if HAVE_F77_SUPPORT_FREEFORM
+TESTPROGRAMS += freeform
+freeform_SOURCES = freeform.f
+freeform_FFLAGS = $(FFREEFORMFLAG) -I$(top_builddir)/src/binding/f77
+endif
+endif
+
+check_PROGRAMS = $(TESTPROGRAMS)
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+# programs in this folder are just for testing compile error/warning messages,
+# not for running
+# TESTS = $(TESTPROGRAMS)
+
+EXTRA_DIST = README
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/fandc/Makefile.in b/test/fandc/Makefile.in
index 99fe701..fa56086 100644
--- a/test/fandc/Makefile.in
+++ b/test/fandc/Makefile.in
@@ -1,85 +1,856 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2590 2016-10-31 21:37:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at DECL_MPI_OFFSET_TRUE@am__append_1 = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@am__append_2 = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at HAS_FORTRAN_TRUE@am__append_3 = pnf_test pnctestf fixedform
+ at HAS_FORTRAN_TRUE@@HAVE_F77_SUPPORT_FREEFORM_TRUE at am__append_4 = freeform
+check_PROGRAMS = $(am__EXEEXT_3)
+subdir = test/fandc
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at HAS_FORTRAN_TRUE@am__EXEEXT_1 = pnf_test$(EXEEXT) pnctestf$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@	fixedform$(EXEEXT)
+ at HAS_FORTRAN_TRUE@@HAVE_F77_SUPPORT_FREEFORM_TRUE at am__EXEEXT_2 = freeform$(EXEEXT)
+am__EXEEXT_3 = pnctest$(EXEEXT) csnap$(EXEEXT) $(am__EXEEXT_1) \
+	$(am__EXEEXT_2)
+csnap_SOURCES = csnap.c
+csnap_OBJECTS = csnap.$(OBJEXT)
+csnap_LDADD = $(LDADD)
+csnap_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+am__fixedform_SOURCES_DIST = fixedform.f90
+ at HAS_FORTRAN_TRUE@am_fixedform_OBJECTS =  \
+ at HAS_FORTRAN_TRUE@	fixedform-fixedform.$(OBJEXT)
+fixedform_OBJECTS = $(am_fixedform_OBJECTS)
+fixedform_LDADD = $(LDADD)
+fixedform_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+fixedform_LINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(fixedform_FCFLAGS) \
+	$(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am__freeform_SOURCES_DIST = freeform.f
+ at HAS_FORTRAN_TRUE@@HAVE_F77_SUPPORT_FREEFORM_TRUE at am_freeform_OBJECTS = freeform-freeform.$(OBJEXT)
+freeform_OBJECTS = $(am_freeform_OBJECTS)
+freeform_LDADD = $(LDADD)
+freeform_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+freeform_LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(F77LD) $(freeform_FFLAGS) \
+	$(FFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+pnctest_SOURCES = pnctest.c
+pnctest_OBJECTS = pnctest.$(OBJEXT)
+pnctest_LDADD = $(LDADD)
+pnctest_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__pnctestf_SOURCES_DIST = pnctestf.f
+ at HAS_FORTRAN_TRUE@am_pnctestf_OBJECTS = pnctestf.$(OBJEXT)
+pnctestf_OBJECTS = $(am_pnctestf_OBJECTS)
+pnctestf_LDADD = $(LDADD)
+pnctestf_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__pnf_test_SOURCES_DIST = pnf_test.f
+ at HAS_FORTRAN_TRUE@am_pnf_test_OBJECTS = pnf_test.$(OBJEXT)
+pnf_test_OBJECTS = $(am_pnf_test_OBJECTS)
+pnf_test_LDADD = $(LDADD)
+pnf_test_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS)
+LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS)
+AM_V_F77 = $(am__v_F77_ at AM_V@)
+am__v_F77_ = $(am__v_F77_ at AM_DEFAULT_V@)
+am__v_F77_0 = @echo "  F77     " $@;
+am__v_F77_1 = 
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_F77LD = $(am__v_F77LD_ at AM_V@)
+am__v_F77LD_ = $(am__v_F77LD_ at AM_DEFAULT_V@)
+am__v_F77LD_0 = @echo "  F77LD   " $@;
+am__v_F77LD_1 = 
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+AM_V_FC = $(am__v_FC_ at AM_V@)
+am__v_FC_ = $(am__v_FC_ at AM_DEFAULT_V@)
+am__v_FC_0 = @echo "  FC      " $@;
+am__v_FC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+SOURCES = csnap.c $(fixedform_SOURCES) $(freeform_SOURCES) pnctest.c \
+	$(pnctestf_SOURCES) $(pnf_test_SOURCES)
+DIST_SOURCES = csnap.c $(am__fixedform_SOURCES_DIST) \
+	$(am__freeform_SOURCES_DIST) pnctest.c \
+	$(am__pnctestf_SOURCES_DIST) $(am__pnf_test_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c .f .f90
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77 $(am__append_1)
+AM_FCFLAGS = $(FC_MODINC)$(top_builddir)/src/binding/f90 \
+	$(FC_MODINC)$(srcdir)/../common \
+	-I$(top_builddir)/src/binding/f77 $(am__append_2)
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la -lm
+ at DECL_MPI_OFFSET_TRUE@AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+TESTPROGRAMS = pnctest csnap $(am__append_3) $(am__append_4)
+ at HAS_FORTRAN_TRUE@pnf_test_SOURCES = pnf_test.f
+ at HAS_FORTRAN_TRUE@pnctestf_SOURCES = pnctestf.f
+ at HAS_FORTRAN_TRUE@fixedform_SOURCES = fixedform.f90
+ at HAS_FORTRAN_TRUE@fixedform_FCFLAGS = $(FFIXEDFORMFLAG) $(FC_MODINC)$(top_builddir)/src/binding/f90 $(FC_MODINC)$(srcdir)/../common -I$(top_builddir)/src/binding/f77
+ at HAS_FORTRAN_TRUE@@HAVE_F77_SUPPORT_FREEFORM_TRUE at freeform_SOURCES = freeform.f
+ at HAS_FORTRAN_TRUE@@HAVE_F77_SUPPORT_FREEFORM_TRUE at freeform_FFLAGS = $(FFREEFORMFLAG) -I$(top_builddir)/src/binding/f77
 
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
 
-srcdir = @srcdir@
-VPATH  = @srcdir@
+# programs in this folder are just for testing compile error/warning messages,
+# not for running
+# TESTS = $(TESTPROGRAMS)
+EXTRA_DIST = README
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .f .f90 .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/fandc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/fandc/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+csnap$(EXEEXT): $(csnap_OBJECTS) $(csnap_DEPENDENCIES) $(EXTRA_csnap_DEPENDENCIES) 
+	@rm -f csnap$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(csnap_OBJECTS) $(csnap_LDADD) $(LIBS)
+
+fixedform$(EXEEXT): $(fixedform_OBJECTS) $(fixedform_DEPENDENCIES) $(EXTRA_fixedform_DEPENDENCIES) 
+	@rm -f fixedform$(EXEEXT)
+	$(AM_V_FCLD)$(fixedform_LINK) $(fixedform_OBJECTS) $(fixedform_LDADD) $(LIBS)
+
+freeform$(EXEEXT): $(freeform_OBJECTS) $(freeform_DEPENDENCIES) $(EXTRA_freeform_DEPENDENCIES) 
+	@rm -f freeform$(EXEEXT)
+	$(AM_V_F77LD)$(freeform_LINK) $(freeform_OBJECTS) $(freeform_LDADD) $(LIBS)
+
+pnctest$(EXEEXT): $(pnctest_OBJECTS) $(pnctest_DEPENDENCIES) $(EXTRA_pnctest_DEPENDENCIES) 
+	@rm -f pnctest$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(pnctest_OBJECTS) $(pnctest_LDADD) $(LIBS)
+
+pnctestf$(EXEEXT): $(pnctestf_OBJECTS) $(pnctestf_DEPENDENCIES) $(EXTRA_pnctestf_DEPENDENCIES) 
+	@rm -f pnctestf$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(pnctestf_OBJECTS) $(pnctestf_LDADD) $(LIBS)
+
+pnf_test$(EXEEXT): $(pnf_test_OBJECTS) $(pnf_test_DEPENDENCIES) $(EXTRA_pnf_test_DEPENDENCIES) 
+	@rm -f pnf_test$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(pnf_test_OBJECTS) $(pnf_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/csnap.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pnctest.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.f.o:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ $<
+
+.f.obj:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.f.lo:
+	$(AM_V_F77)$(LTF77COMPILE) -c -o $@ $<
+
+freeform-freeform.o: freeform.f
+	$(AM_V_F77)$(F77) $(freeform_FFLAGS) $(FFLAGS) -c -o freeform-freeform.o `test -f 'freeform.f' || echo '$(srcdir)/'`freeform.f
+
+freeform-freeform.obj: freeform.f
+	$(AM_V_F77)$(F77) $(freeform_FFLAGS) $(FFLAGS) -c -o freeform-freeform.obj `if test -f 'freeform.f'; then $(CYGPATH_W) 'freeform.f'; else $(CYGPATH_W) '$(srcdir)/freeform.f'; fi`
+
+.f90.o:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+	$(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+fixedform-fixedform.o: fixedform.f90
+	$(AM_V_FC)$(FC) $(fixedform_FCFLAGS) $(FCFLAGS) -c -o fixedform-fixedform.o $(FCFLAGS_f90) `test -f 'fixedform.f90' || echo '$(srcdir)/'`fixedform.f90
+
+fixedform-fixedform.obj: fixedform.f90
+	$(AM_V_FC)$(FC) $(fixedform_FCFLAGS) $(FCFLAGS) -c -o fixedform-fixedform.obj $(FCFLAGS_f90) `if test -f 'fixedform.f90'; then $(CYGPATH_W) 'fixedform.f90'; else $(CYGPATH_W) '$(srcdir)/fixedform.f90'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
 
-include ../../macros.make
+install-pdf: install-pdf-am
 
-INCLUDES  = -I../../src/lib -I$(srcdir)/../common
-FPPFLAGS += -I../../src/libf @FC_MODINC at ../../src/libf90
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+install-pdf-am:
 
-C_SRCS   = pnctest.c \
-           csnap.c
+install-ps: install-ps-am
 
-F77_SRCS = pnf_test.f \
-           pnctestf.f
+install-ps-am:
 
-ifeq (@F77_SUPPORT_FREEFORM@, yes)
-F77_SRCS += freeform.f
-endif
+installcheck-am:
 
-F90_SRCS = fixedform.f90
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-PROGS  = $(C_SRCS:.c=)
-OBJS   = $(C_SRCS:.c=.o)
-ifeq (@has_fortran@, yes)
-PROGS += $(F77_SRCS:.f=)   $(F90_SRCS:.f90=)
-OBJS  += $(F77_SRCS:.f=.o) $(F90_SRCS:.f90=.o)
-endif
+mostlyclean: mostlyclean-am
 
-GARBAGE      = $(PROGS) *.nc
-PACKING_LIST = $(C_SRCS) $(F77_SRCS) $(F90_SRCS) Makefile.in depend
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-all: $(PROGS)
+pdf: pdf-am
 
-$(C_SRCS:.c=.o): $(srcdir)/../common/testutils.h
+pdf-am:
 
-$(PROGS): ../common/libtestutils.a
+ps: ps-am
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+ps-am:
 
-pnctest: pnctest.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tests: tests-am
 
-csnap:  csnap.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS) -lm
+tests-am: tests-local
 
-pnctestf: pnctestf.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+uninstall-am:
 
-pnf_test:  pnf_test.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+.MAKE: check-am install-am install-strip
 
-# check F77 program to see if accept Fortran free form
-freeform.o: freeform.f
-	$(COMPILE.f) @FFREEFORMFLAG@ $<
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
 
-freeform: freeform.o
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-# check F90 program to see if accept Fortran fixed form
-fixedform.o: fixedform.f90
-	$(COMPILE.f90) @FFIXEDFORMFLAG@ $<
 
-fixedform: fixedform.o
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+ at DECL_MPI_OFFSET_TRUE@   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+ at DECL_MPI_OFFSET_TRUE@   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
 
-testing check verbose_testing:
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
 ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
-include $(srcdir)/depend
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/fandc/README b/test/fandc/README
new file mode 100644
index 0000000..86845e1
--- /dev/null
+++ b/test/fandc/README
@@ -0,0 +1,3 @@
+# programs in this folder are just for testing compile error/warning messages,
+# not for running
+
diff --git a/test/fandc/csnap.c b/test/fandc/csnap.c
index d4539f8..1d561f2 100644
--- a/test/fandc/csnap.c
+++ b/test/fandc/csnap.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: csnap.c 2728 2016-12-18 17:49:20Z wkliao $ */
+/* $Id: csnap.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 
 /******************************************************************************
@@ -22,7 +22,7 @@
  *****************************************************************************/
 
 #include <stdio.h>
-#include <stdlib.h> /* srand(), rand() */
+#include <stdlib.h> /* srandom(), random() */
 #include <string.h> /* strcpy() */
 #include <unistd.h>
 #include <math.h>  /* sqrt() */
@@ -32,8 +32,6 @@
 #include <pnetcdf.h>
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));nerrs++;}}
-
 /*** Field parameters ***/
 static int verbose, nerrs;
 
@@ -89,7 +87,7 @@ int main(int argc, char *argv[]) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -101,6 +99,12 @@ int main(int argc, char *argv[]) {
         printf("%-66s ------ ", cmd_str); fflush(stdout);
         free(cmd_str);
     }
+    if (filename[0] == '\0') {
+        printf(PASS_STR);
+        fprintf(stderr,"Error: invalid filename, Exiting ...\n");
+        MPI_Finalize();
+        return 1;
+    }
 
   verbose = 0;
   nerrs = 0;
@@ -197,8 +201,8 @@ int main(int argc, char *argv[]) {
         else       printf(PASS_STR);
     }
 
-  MPI_Finalize();
-  return 0;
+    MPI_Finalize();
+    return (nerrs > 0);
 }
 
 
@@ -245,39 +249,39 @@ void write_file(char *filename, double *t) {
     t1 = MPI_Wtime();
 
     err = ncmpi_create(comm_cart, filename, NC_CLOBBER, MPI_INFO_NULL,
-                        &file_id); ERR
+                        &file_id); CHECK_ERR
 
-/*  err = nc_set_fill(file_id,fillmode,&old_fillmode); ERR */
+/*  err = nc_set_fill(file_id,fillmode,&old_fillmode); CHECK_ERR */
 
-    err = ncmpi_def_dim(file_id,"level",    (MPI_Offset) totsiz_3d[0],&lev_id); ERR
-    err = ncmpi_def_dim(file_id,"latitude", (MPI_Offset) totsiz_3d[1],&lat_id); ERR
-    err = ncmpi_def_dim(file_id,"longitude",(MPI_Offset) totsiz_3d[2],&lon_id); ERR
+    err = ncmpi_def_dim(file_id,"level",    (MPI_Offset) totsiz_3d[0],&lev_id); CHECK_ERR
+    err = ncmpi_def_dim(file_id,"latitude", (MPI_Offset) totsiz_3d[1],&lat_id); CHECK_ERR
+    err = ncmpi_def_dim(file_id,"longitude",(MPI_Offset) totsiz_3d[2],&lon_id); CHECK_ERR
 
     dim_id[0] = lev_id; dim_id[1] = lat_id; dim_id[2] = lon_id;
 
-    err = ncmpi_def_var(file_id,"t",NC_DOUBLE,3,dim_id,&t_id); ERR
+    err = ncmpi_def_var(file_id,"t",NC_DOUBLE,3,dim_id,&t_id); CHECK_ERR
 
     if (! only_3d) {
-      err = ncmpi_def_var(file_id,"smf",NC_DOUBLE,2,&dim_id[1],&smf_id); ERR
+      err = ncmpi_def_var(file_id,"smf",NC_DOUBLE,2,&dim_id[1],&smf_id); CHECK_ERR
     }
 
-    err = ncmpi_enddef(file_id); ERR
+    err = ncmpi_enddef(file_id); CHECK_ERR
 
     t2 = MPI_Wtime();
 
-    err = ncmpi_put_vara_double_all(file_id,t_id,start_3d,count_3d,tt); ERR
+    err = ncmpi_put_vara_double_all(file_id,t_id,start_3d,count_3d,tt); CHECK_ERR
 
     if (! only_3d) {
-      err = ncmpi_begin_indep_data(file_id); ERR
+      err = ncmpi_begin_indep_data(file_id); CHECK_ERR
 
       if (has_2d) {
-        err = ncmpi_put_vara_double(file_id,smf_id,start_2d,count_2d,smf); ERR
+        err = ncmpi_put_vara_double(file_id,smf_id,start_2d,count_2d,smf); CHECK_ERR
       }
 
-      err = ncmpi_end_indep_data(file_id); ERR
+      err = ncmpi_end_indep_data(file_id); CHECK_ERR
     }
 
-    err = ncmpi_close(file_id); ERR
+    err = ncmpi_close(file_id); CHECK_ERR
 
     MPI_Barrier(comm_cart);
     t3 = MPI_Wtime();
@@ -340,36 +344,36 @@ void read_file(char *filename, double *t) {
     MPI_Barrier(comm_cart);
     t1 = MPI_Wtime();
 
-    err = ncmpi_open(comm_cart, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
+    err = ncmpi_open(comm_cart, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); CHECK_ERR
 
-    err = ncmpi_inq_varid(ncid,"t",&vid_t); ERR
+    err = ncmpi_inq_varid(ncid,"t",&vid_t); CHECK_ERR
     if (! only_3d) {
-        err = ncmpi_inq_varid(ncid,"smf",&vid_smf); ERR
+        err = ncmpi_inq_varid(ncid,"smf",&vid_smf); CHECK_ERR
     }
 
     t2 = MPI_Wtime();
 
-    err = ncmpi_get_vara_double_all(ncid,vid_t,start_3d,count_3d,buf); ERR
+    err = ncmpi_get_vara_double_all(ncid,vid_t,start_3d,count_3d,buf); CHECK_ERR
 
     dt1 = MPI_Wtime();
     if (ii == 1) compare_vec(tt,buf,3,locsiz_3d,1);
     dt1 = MPI_Wtime() - dt1;
 
     if (! only_3d) {
-      err = ncmpi_begin_indep_data(ncid); ERR
+      err = ncmpi_begin_indep_data(ncid); CHECK_ERR
 
       if (has_2d) {
-          err = ncmpi_get_vara_double(ncid,vid_smf,start_2d,count_2d,buf); ERR
+          err = ncmpi_get_vara_double(ncid,vid_smf,start_2d,count_2d,buf); CHECK_ERR
       }
 
       dt2 = MPI_Wtime();
       if (ii == 1) compare_vec(smf,buf,2,locsiz_2d,has_2d);
       dt2 = MPI_Wtime() - dt2;
 
-      err = ncmpi_end_indep_data(ncid); ERR
+      err = ncmpi_end_indep_data(ncid); CHECK_ERR
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     MPI_Barrier(comm_cart);
     t3 = MPI_Wtime();
@@ -402,19 +406,19 @@ void get_fields(double *tt, double *smf) {
 
   if (random_fields) {
     unsigned int seed = (INT_MAX / totpes) * mype;
-    srand(seed);
+    srandom(seed);
 
     for (k = 0; k < locsiz_3d[0]; k++)
       for (j = 0; j < locsiz_3d[1]; j++)
         for (i = 0; i < locsiz_3d[2]; i++) {
-            double tmp = rand();
+            double tmp = random();
             *tt++ = tmp / (RAND_MAX + 1.);
         }
 
     if (has_2d)
       for (j = 0; j < locsiz_2d[0]; j++)
         for (i = 0; i < locsiz_2d[1]; i++) {
-            double tmp = rand();
+            double tmp = random();
             *smf++ = tmp / (RAND_MAX + 1.);
         }
   }
diff --git a/test/fandc/depend b/test/fandc/depend
deleted file mode 100644
index 12bd79a..0000000
--- a/test/fandc/depend
+++ /dev/null
@@ -1,2 +0,0 @@
-pnf_test.o: pnf_test.f
-pnctestf.o: pnctestf.f
diff --git a/test/fandc/pnctest.c b/test/fandc/pnctest.c
index 9811e50..82c9f7e 100644
--- a/test/fandc/pnctest.c
+++ b/test/fandc/pnctest.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: pnctest.c 2258 2015-12-22 04:50:40Z wkliao $ */
+/* $Id: pnctest.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 #include <stdio.h>
 #include <mpi.h>
@@ -11,8 +11,6 @@
 
 /* Test program thanks to From: John Tannahill <tannahill1 at llnl.gov> */
 
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__,ncmpi_strerror(err)); nerrs++;}
-
 int main (int argc, char *argv[])
 {
   int dim_id[3], isperiodic[3] = { 0, 0, 0 };
@@ -32,21 +30,21 @@ int main (int argc, char *argv[])
   MPI_Cart_create (MPI_COMM_WORLD, 3, numpes, isperiodic, reorder, &comm_cart);
 
   err = ncmpi_create (comm_cart, "testfile.nc", NC_CLOBBER, MPI_INFO_NULL,
-                       &ncid); ERR
+                       &ncid); CHECK_ERR
 
-  err = ncmpi_def_dim (ncid, "level",     TOTSIZ_3D[0], &lev_id); ERR
-  err = ncmpi_def_dim (ncid, "latitude",  TOTSIZ_3D[1], &lat_id); ERR
-  err = ncmpi_def_dim (ncid, "longitude", TOTSIZ_3D[2], &lon_id); ERR
+  err = ncmpi_def_dim (ncid, "level",     TOTSIZ_3D[0], &lev_id); CHECK_ERR
+  err = ncmpi_def_dim (ncid, "latitude",  TOTSIZ_3D[1], &lat_id); CHECK_ERR
+  err = ncmpi_def_dim (ncid, "longitude", TOTSIZ_3D[2], &lon_id); CHECK_ERR
 
   dim_id[0] = lev_id;
   dim_id[1] = lat_id;
   dim_id[2] = lon_id;
 
-  err = ncmpi_def_var (ncid, "tt", NC_FLOAT, 3, dim_id, &tt_id); ERR
+  err = ncmpi_def_var (ncid, "tt", NC_FLOAT, 3, dim_id, &tt_id); CHECK_ERR
 
-  err = ncmpi_enddef (ncid); ERR
+  err = ncmpi_enddef (ncid); CHECK_ERR
 
-  err = ncmpi_close (ncid); ERR
+  err = ncmpi_close (ncid); CHECK_ERR
 
   MPI_Comm_free (&comm_cart);
 
@@ -65,6 +63,6 @@ int main (int argc, char *argv[])
         else       printf(PASS_STR);
     }
 
-  MPI_Finalize ( );
-  return 0;
+    MPI_Finalize();
+    return (nerrs > 0);
 }
diff --git a/test/fandc/pnctestf.f b/test/fandc/pnctestf.f
index 7d7d577..ff3a56a 100644
--- a/test/fandc/pnctestf.f
+++ b/test/fandc/pnctestf.f
@@ -2,7 +2,7 @@
 !   Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-!   $Id: pnctestf.f 2224 2015-12-16 06:10:36Z wkliao $
+!   $Id: pnctestf.f 3341 2017-08-25 22:29:08Z wkliao $
 !
       program Pnf_Test
 ! Test program thanks to From: John Tannahill <tannahill1 at llnl.gov> 
@@ -69,6 +69,4 @@
 
  10   format(" No Errors")
 
-      Stop
-
       end ! program Pnf_Test
diff --git a/test/fandc/pnf_test.f b/test/fandc/pnf_test.f
index 6de5120..f4a01dd 100644
--- a/test/fandc/pnf_test.f
+++ b/test/fandc/pnf_test.f
@@ -2,7 +2,7 @@
 !  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-!  $Id: pnf_test.f 2224 2015-12-16 06:10:36Z wkliao $
+!  $Id: pnf_test.f 3341 2017-08-25 22:29:08Z wkliao $
 !
 !=============================================================================
 !
@@ -222,7 +222,6 @@
 
       call MPI_Finalize  (ierr)
 
-
       Stop
 
       end ! program Pnf_Test
@@ -643,7 +642,7 @@
       integer ierr
       integer ii
               
-      real*4  delmax, delmin, delta
+      real*4  delmax(1), delmin(1), delta
       real*4  diff
               
       real*4  wr(5)
@@ -657,8 +656,8 @@
       ws(1) = 0.0d0      ! diff
       ws(2) = 0.0d0      ! sumsq
       ws(3) = int(locsiz)     ! locsiz
-      ws(4) = 0.0d0      ! delmax
-      ws(5) = 1.0d38     ! Huge (ws)  ! delmin
+      ws(4) = 0.0d0      ! delmax(1)
+      ws(5) = 1.0d38     ! Huge (ws)  ! delmin(1)
 
 
       do ii = 1, int(locsiz)
@@ -673,17 +672,17 @@
       call MPI_Allreduce
      &  (ws,    wr,     3, MPI_REAL, MPI_SUM, comm_cart, ierr)
       call MPI_Allreduce
-     &  (ws(4), delmax, 1, MPI_REAL, MPI_MAX, comm_cart, ierr)
+     &  (ws(4), delmax(1), 1, MPI_REAL, MPI_MAX, comm_cart, ierr)
       call MPI_Allreduce
-     &  (ws(5), delmin, 1, MPI_REAL, MPI_MIN, comm_cart, ierr)
+     &  (ws(5), delmin(1), 1, MPI_REAL, MPI_MIN, comm_cart, ierr)
 
 
       diff   = Sqrt (wr(1) / wr(2))         ! normalized error
-      delmax = Sqrt (wr(3) * delmax/wr(2))  ! normalized max difference
-      delmin = Sqrt (wr(3) * delmin/wr(2))  ! normalized min difference
+      delmax(1) = Sqrt (wr(3) * delmax(1)/wr(2))  ! normalized max difference
+      delmin(1) = Sqrt (wr(3) * delmin(1)/wr(2))  ! normalized min difference
 
 
-      if (mype .EQ. 0) Write (6,990) diff, delmax, delmin
+      if (mype .EQ. 0) Write (6,990) diff, delmax(1), delmin(1)
 
  990  format ("diff, delmax, delmin = ",
      &        e10.3, 1x, e10.3, 1x, e10.3)
diff --git a/test/header/Makefile.am b/test/header/Makefile.am
new file mode 100644
index 0000000..4e03a6b
--- /dev/null
+++ b/test/header/Makefile.am
@@ -0,0 +1,71 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+
+if DECL_MPI_OFFSET
+   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+   AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+   # AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+   # AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+TESTPROGRAMS = header_consistency
+
+check_PROGRAMS = $(TESTPROGRAMS)
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+# consistency check should be run on more than one process
+# TESTS = seq_runs.sh
+
+EXTRA_DIST = seq_runs.sh
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+TESTMPIRUN2  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest2: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptests: ptest2 ptest4
+ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/header/Makefile.in b/test/header/Makefile.in
index 7a5329f..b3c3787 100644
--- a/test/header/Makefile.in
+++ b/test/header/Makefile.in
@@ -1,61 +1,736 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2590 2016-10-31 21:37:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = test/header
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = header_consistency$(EXEEXT)
+header_consistency_SOURCES = header_consistency.c
+header_consistency_OBJECTS = header_consistency.$(OBJEXT)
+header_consistency_LDADD = $(LDADD)
+header_consistency_DEPENDENCIES =  \
+	$(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = header_consistency.c
+DIST_SOURCES = header_consistency.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+ at DECL_MPI_OFFSET_TRUE@AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+TESTPROGRAMS = header_consistency
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+# consistency check should be run on more than one process
+# TESTS = seq_runs.sh
+EXTRA_DIST = seq_runs.sh
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTMPIRUN2 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .lo .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/header/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/header/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+header_consistency$(EXEEXT): $(header_consistency_OBJECTS) $(header_consistency_DEPENDENCIES) $(EXTRA_header_consistency_DEPENDENCIES) 
+	@rm -f header_consistency$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(header_consistency_OBJECTS) $(header_consistency_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/header_consistency.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
 
-srcdir  = @srcdir@
-VPATH   = @srcdir@
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-include ../../macros.make
+pdf: pdf-am
 
-INCLUDES  = -I../../src/lib -I$(srcdir)/../common
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+pdf-am:
 
-SRCS      = header_consistency.c
+ps: ps-am
 
-OBJS      = $(SRCS:.c=.o)
-PROGS     = $(SRCS:.c=)
+ps-am:
 
-GARBAGE      = $(PROGS) *.nc
-PACKING_LIST = $(SRCS) Makefile.in
+tests: tests-am
 
-all: $(PROGS)
+tests-am: tests-local
 
-$(OBJS): $(srcdir)/../common/testutils.h
+uninstall-am:
 
-$(PROGS): ../common/libtestutils.a
+.MAKE: check-am install-am install-strip
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am tests-am tests-local uninstall uninstall-am
 
-header_consistency: header_consistency.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-testing check verbose_testing:
 
-TEST_MPIRUN_2  = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
+ at DECL_MPI_OFFSET_TRUE@   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+ at DECL_MPI_OFFSET_TRUE@   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@   # AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@   # AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
 
-ptest2: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_2) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
-ptest4: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_4) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
-ptest: ptest4
+ptest2: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
 ptests: ptest2 ptest4
 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/header/README b/test/header/README
new file mode 100644
index 0000000..ec4672c
--- /dev/null
+++ b/test/header/README
@@ -0,0 +1,5 @@
+header check
+1. fatal error:
+	mpiexec -n 4 test_check_header test.nc
+2. warning:
+	mpiexec -n 4 test_check_header1 test.nc
diff --git a/test/header/header_consistency.c b/test/header/header_consistency.c
index 7966ca4..2a00eaa 100644
--- a/test/header/header_consistency.c
+++ b/test/header/header_consistency.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: header_consistency.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: header_consistency.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* This program tests if PnetCDF can detect file header inconsistency and
  * overwrite the inconsistent header with root's.
@@ -17,26 +17,31 @@
 #include <pnetcdf.h>
 #include <testutils.h>
 
-#define ERR_EXP(e, exp) {if (e != exp) { printf("Error (line %d): expecting error code %s but got %s\n", __LINE__, nc_err_code_name(exp), nc_err_code_name(e)); nerrs++; }}
-#define ERR_EXP2(e, exp1, exp2) {if (e != exp1 && e != exp2 && e != NC_EFILE) { printf("Error (line %d): expecting error code %s or %s but got %s\n", __LINE__, nc_err_code_name(exp1), nc_err_code_name(exp2), nc_err_code_name(e)); nerrs++; }}
+#define EXP_ERR2(e, exp1, exp2) { \
+    if (e != exp1 && e != exp2 && e != NC_EFILE) { \
+        printf("Error at line %d in %s: expecting error code %s or %s but got %s\n", \
+               __LINE__, __FILE__, ncmpi_strerrno(exp1), ncmpi_strerrno(exp2), ncmpi_strerrno(e)); \
+        nerrs++; \
+    } \
+}
 
-#define CHECK_ERR(expect) { \
+#define EXP_SAFE_ERR(expect) { \
     if (safe_mode) { \
         if (err != NC_EMULTIDEFINE && err != expect) { \
-            printf("Error (line %d): expecting error code NC_EMULTIDEFINE or %s but got %s\n", __LINE__, nc_err_code_name(expect), nc_err_code_name(err)); \
+            printf("Error at line %d in %s: expecting error code NC_EMULTIDEFINE or %s but got %s\n", \
+                   __LINE__, __FILE__, ncmpi_strerrno(expect), ncmpi_strerrno(err)); \
             nerrs++; \
         } \
     } \
     else if (rank > 0) { \
         if (err != expect) { \
-            printf("Error (line %d): expecting error code %s but got %s\n", __LINE__, nc_err_code_name(expect), nc_err_code_name(err)); \
+            printf("Error at line %d in %s: expecting error code %s but got %s\n", \
+                   __LINE__, __FILE__, ncmpi_strerrno(expect), ncmpi_strerrno(err)); \
             nerrs++; \
         } \
     } \
 }
 
-#define ERR {if(err!=NC_NOERR) {printf("Error(%d) at line %d: %s\n",err,__LINE__,ncmpi_strerror(err)); nerrs++; }}
-
 /*----< test_open_mode() >----------------------------------------------------*/
 static
 int test_open_mode(char *filename, int safe_mode)
@@ -52,22 +57,27 @@ int test_open_mode(char *filename, int safe_mode)
     if (rank == 0) cmode = NC_CLOBBER;
     err = ncmpi_create(comm, filename, cmode, info, &ncid);
     if (safe_mode)
-        ERR_EXP(err, NC_EMULTIDEFINE_CMODE)
-    else {
-        if (rank > 0) ERR_EXP(err, NC_EMULTIDEFINE_CMODE)
-        err = ncmpi_close(ncid); ERR
-    }
+        /* all processes got the same error code */
+        EXP_ERR(NC_EMULTIDEFINE_CMODE)
+    else if (rank > 0)
+        /* all processes except root got the same error code */
+        EXP_ERR(NC_EMULTIDEFINE_CMODE)
+    /* In either case, file is created with multi-defined-cmode error or not */
+    err = ncmpi_close(ncid); CHECK_ERR
+
 
     /* Test inconsistent omode -----------------------------------------------*/
     omode = NC_WRITE;
     if (rank == 0) omode = NC_NOWRITE;
     err = ncmpi_open(comm, filename, omode, info, &ncid);
     if (safe_mode)
-        ERR_EXP(err, NC_EMULTIDEFINE_OMODE)
-    else {
-        if (rank > 0) ERR_EXP(err, NC_EMULTIDEFINE_OMODE)
-        err = ncmpi_close(ncid); ERR
-    }
+        /* all processes got the same error code */
+        EXP_ERR(NC_EMULTIDEFINE_OMODE)
+    else if (rank > 0)
+        /* all processes except root got the same error code */
+        EXP_ERR(NC_EMULTIDEFINE_OMODE)
+    /* In either case, file is opened with multi-defined-omode error or not */
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -84,41 +94,41 @@ int test_dim(char *filename, int safe_mode)
     cmode = NC_CLOBBER|NC_64BIT_OFFSET;
 
     /* Test inconsistency on dimension names ---------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
     if (rank == 0)
         err = ncmpi_def_dim(ncid, "y", 100, &dimid1);
     else
         err = ncmpi_def_dim(ncid, "xx", 100, &dimid1);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_DIM_NAME)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_DIM_NAME)
     else
-        ERR
-    err = ncmpi_enddef(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     if (safe_mode) {
         /* no processes should be able to see dim "y" */
         err = ncmpi_inq_dimid(ncid, "y", &dimid2);
-        CHECK_ERR(NC_EBADDIM)
+        EXP_SAFE_ERR(NC_EBADDIM)
 
         /* no process should be able to see dim "x" */
         err = ncmpi_inq_dimid(ncid, "xx", &dimid3);
-        CHECK_ERR(NC_EBADDIM)
+        EXP_SAFE_ERR(NC_EBADDIM)
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistency on dimension size ----------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
     if (rank == 0)
         err = ncmpi_def_dim(ncid, "x", 99, &dimid1);
     else
         err = ncmpi_def_dim(ncid, "x", 100, &dimid1);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_DIM_SIZE)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_DIM_SIZE)
     else
-        ERR
+        CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 
@@ -137,50 +147,50 @@ int test_attr(char *filename, int safe_mode)
     cmode = NC_CLOBBER|NC_64BIT_OFFSET;
 
     /* Test inconsistent global attribute name -------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
     int_attr = 1;
     sprintf(gattr, "gattr_name.%d",rank);
     err = ncmpi_put_att_int(ncid, NC_GLOBAL, gattr, NC_INT, 1, &int_attr);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_ATTR_NAME)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_ATTR_NAME)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent global attribute type -------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
     if (rank == 0)
         err = ncmpi_put_att_int(ncid, NC_GLOBAL, "gatt", NC_INT, 1, &int_attr);
     else
         err = ncmpi_put_att_float(ncid, NC_GLOBAL, "gatt", NC_FLOAT, 1, &flt_attr);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_ATTR_TYPE)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_ATTR_TYPE)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent global attribute length -----------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
     int intv[2]={1,2};
     if (rank == 0)
         err = ncmpi_put_att_int(ncid, NC_GLOBAL, "gatt", NC_INT, 2, intv);
     else
         err = ncmpi_put_att_int(ncid, NC_GLOBAL, "gatt", NC_INT, 1, intv);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_ATTR_LEN)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_ATTR_LEN)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent global attribute length -----------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
     if (rank == 0) intv[1]=3;
     err = ncmpi_put_att_int(ncid, NC_GLOBAL, "gatt", NC_INT, 2, intv);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_ATTR_VAL)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_ATTR_VAL)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -200,127 +210,127 @@ int test_var(char *filename, int safe_mode)
     cmode = NC_CLOBBER|NC_64BIT_OFFSET;
 
     /* Test inconsistent global attribute name -------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, dimid, &varid1); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, dimid, &varid1); CHECK_ERR
     int_attr = 1;
     sprintf(var_attr, "var_attr_name.%d",rank);
     err = ncmpi_put_att_int(ncid, varid1, var_attr, NC_INT, 1, &int_attr);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_ATTR_NAME)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_ATTR_NAME)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent global attribute type -------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, dimid, &varid1); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, dimid, &varid1); CHECK_ERR
     if (rank == 0)
         err = ncmpi_put_att_int(ncid, varid1, "var_att", NC_INT, 1, &int_attr);
     else
         err = ncmpi_put_att_float(ncid, varid1, "var_att", NC_FLOAT, 1, &flt_attr);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_ATTR_TYPE)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_ATTR_TYPE)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent global attribute length -----------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, dimid, &varid1); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, dimid, &varid1); CHECK_ERR
     int intv[2]={1,2};
     if (rank == 0)
         err = ncmpi_put_att_int(ncid, varid1, "var_att", NC_INT, 2, intv);
     else
         err = ncmpi_put_att_int(ncid, varid1, "var_att", NC_INT, 1, intv);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_ATTR_LEN)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_ATTR_LEN)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent global attribute length -----------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, dimid, &varid1); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 1, dimid, &varid1); CHECK_ERR
     if (rank == 0) intv[1]=3;
     err = ncmpi_put_att_int(ncid, varid1, "var_att", NC_INT, 2, intv);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_ATTR_VAL)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_ATTR_VAL)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent variable name ---------------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); CHECK_ERR
     sprintf(name, "var.%d",rank);
     err = ncmpi_def_var(ncid, name, NC_INT, 1, dimid, &varid1);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_VAR_NAME)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_VAR_NAME)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent variable ndims --------------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim0", 3, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "dim1", 2, &dimid[1]); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim0", 3, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", 2, &dimid[1]); CHECK_ERR
     if (rank == 0)
         err = ncmpi_def_var(ncid, "var", NC_FLOAT, 2, dimid, &varid1);
     else
         err = ncmpi_def_var(ncid, "var", NC_FLOAT, 1, dimid, &varid1);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_VAR_NDIMS)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_VAR_NDIMS)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent variable type ---------------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", NC_UNLIMITED, &dimid[0]); CHECK_ERR
     if (rank == 0)
         err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid, &varid1);
     else
         err = ncmpi_def_var(ncid, "var", NC_FLOAT, 1, dimid, &varid1);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_VAR_TYPE)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_VAR_TYPE)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent variable length -------------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim0", 5, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "dim1", 4, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "dim2", 3, &dimid[2]); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim0", 5, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", 4, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim2", 3, &dimid[2]); CHECK_ERR
     if (rank == 0)
         err = ncmpi_def_var(ncid, "var", NC_FLOAT, 2, dimid, &varid1);
     else
         err = ncmpi_def_var(ncid, "var", NC_FLOAT, 2, dimid+1, &varid1);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_VAR_DIMIDS)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_VAR_DIMIDS)
     else
-        ERR
-    err = ncmpi_close(ncid); ERR
+        CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Test inconsistent variable dimension IDs ------------------------------*/
-    err = ncmpi_create(comm, filename, cmode, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "Z", 3, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "Y", 3, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "X", 3, &dimid[2]); ERR
+    err = ncmpi_create(comm, filename, cmode, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Z", 3, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", 3, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 3, &dimid[2]); CHECK_ERR
     if (rank == 0)
         err = ncmpi_def_var(ncid, "var", NC_FLOAT, 2, dimid+1, &varid1);
     else
         err = ncmpi_def_var(ncid, "var", NC_FLOAT, 2, dimid, &varid1);
     if (safe_mode)
-        CHECK_ERR(NC_EMULTIDEFINE_VAR_DIMIDS)
+        EXP_SAFE_ERR(NC_EMULTIDEFINE_VAR_DIMIDS)
     else
-        ERR
+        CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -338,13 +348,13 @@ int main(int argc, char **argv)
     if (nprocs < 2) {
         if (!rank) printf("This program is for running 2 or more processes. Exiting ...\n");
         MPI_Finalize();
-        return 0;
+        return 1;
     }
 
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) filename = argv[1];
 
@@ -388,6 +398,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/header/seq_runs.sh b/test/header/seq_runs.sh
new file mode 100755
index 0000000..ee3d488
--- /dev/null
+++ b/test/header/seq_runs.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+set -e
+
+for j in 0 1 ; do { \
+    export PNETCDF_SAFE_MODE=$$j ; \
+    for i in $TESTPROGRAMS; do ( \
+        $TESTSEQRUN ./$i $TESTOUTDIR/testfile.nc ; \
+) ; done ; } ; done
diff --git a/test/largefile/Makefile.am b/test/largefile/Makefile.am
new file mode 100644
index 0000000..e6db368
--- /dev/null
+++ b/test/largefile/Makefile.am
@@ -0,0 +1,102 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c
+
+AM_DEFAULT_SOURCE_EXT = .c
+
+AM_CPPFLAGS  = -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+LDADD  = $(top_builddir)/src/libs/libpnetcdf.la
+LDADD += ../common/libtestutils.la
+
+AM_CFLAGS =
+if IS_BIGENDIAN
+   AM_CFLAGS += -DWORDS_BIGENDIAN
+endif
+
+if DECL_MPI_OFFSET
+   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+   AM_CFLAGS += -DHAVE_DECL_MPI_OFFSET
+   # AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+   # AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+TESTPROGRAMS = large_files \
+               large_var \
+               large_dims_vars_attrs \
+               high_dim_var \
+               tst_cdf5_begin
+
+check_PROGRAMS = $(TESTPROGRAMS)
+
+EXTRA_DIST = seq_runs.sh
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+TESTS =
+
+if RUN_LARGE_FILE_TEST
+TESTS += seq_runs.sh
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+# Some of these tests are designed to run on one processes,
+# Run them on 4 processes to see if they can handle well
+
+TESTMPIRUN2  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN6  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/6/g'`
+
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/testfile.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS) ; do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest2: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/testfile.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest6: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/testfile.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN6) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptests: ptest2 ptest4 ptest6
+else
+ptest ptest2 ptest4 ptest6 ptests:
+endif
+ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/largefile/Makefile.in b/test/largefile/Makefile.in
index 2b3c67b..e5d8bab 100644
--- a/test/largefile/Makefile.in
+++ b/test/largefile/Makefile.in
@@ -1,83 +1,1180 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2590 2016-10-31 21:37:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at IS_BIGENDIAN_TRUE@am__append_1 = -DWORDS_BIGENDIAN
+ at DECL_MPI_OFFSET_TRUE@am__append_2 = -DHAVE_DECL_MPI_OFFSET
+check_PROGRAMS = $(am__EXEEXT_1)
+ at RUN_LARGE_FILE_TEST_TRUE@am__append_3 = seq_runs.sh
+subdir = test/largefile
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = large_files$(EXEEXT) large_var$(EXEEXT) \
+	large_dims_vars_attrs$(EXEEXT) high_dim_var$(EXEEXT) \
+	tst_cdf5_begin$(EXEEXT)
+high_dim_var_SOURCES = high_dim_var.c
+high_dim_var_OBJECTS = high_dim_var.$(OBJEXT)
+high_dim_var_LDADD = $(LDADD)
+high_dim_var_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+large_dims_vars_attrs_SOURCES = large_dims_vars_attrs.c
+large_dims_vars_attrs_OBJECTS = large_dims_vars_attrs.$(OBJEXT)
+large_dims_vars_attrs_LDADD = $(LDADD)
+large_dims_vars_attrs_DEPENDENCIES =  \
+	$(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+large_files_SOURCES = large_files.c
+large_files_OBJECTS = large_files.$(OBJEXT)
+large_files_LDADD = $(LDADD)
+large_files_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+large_var_SOURCES = large_var.c
+large_var_OBJECTS = large_var.$(OBJEXT)
+large_var_LDADD = $(LDADD)
+large_var_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_cdf5_begin_SOURCES = tst_cdf5_begin.c
+tst_cdf5_begin_OBJECTS = tst_cdf5_begin.$(OBJEXT)
+tst_cdf5_begin_LDADD = $(LDADD)
+tst_cdf5_begin_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = high_dim_var.c large_dims_vars_attrs.c large_files.c \
+	large_var.c tst_cdf5_begin.c
+DIST_SOURCES = high_dim_var.c large_dims_vars_attrs.c large_files.c \
+	large_var.c tst_cdf5_begin.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(srcdir)/../common -I$(top_srcdir)/src/include \
+	-I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_CFLAGS = $(am__append_1) $(am__append_2)
+TESTPROGRAMS = large_files \
+               large_var \
+               large_dims_vars_attrs \
+               high_dim_var \
+               tst_cdf5_begin
 
-include ../../macros.make
+EXTRA_DIST = seq_runs.sh
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+TESTS = $(am__append_3)
 
-INCLUDES  = -I../../src/lib -I$(srcdir)/../common
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+ at RUN_LARGE_FILE_TEST_TRUE@TESTS_ENVIRONMENT =  \
+ at RUN_LARGE_FILE_TEST_TRUE@	TESTPROGRAMS="$(TESTPROGRAMS)" ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	export TESTPROGRAMS; \
+ at RUN_LARGE_FILE_TEST_TRUE@	TESTSEQRUN="$(TESTSEQRUN)" ; export \
+ at RUN_LARGE_FILE_TEST_TRUE@	TESTSEQRUN; \
+ at RUN_LARGE_FILE_TEST_TRUE@	TESTOUTDIR="$(TESTOUTDIR)" ; export \
+ at RUN_LARGE_FILE_TEST_TRUE@	TESTOUTDIR;
 
-ifeq (@is_bigendian@, yes)
-DEFS := $(DEFS) -DWORDS_BIGENDIAN
-endif
+# Some of these tests are designed to run on one processes,
+# Run them on 4 processes to see if they can handle well
+ at RUN_LARGE_FILE_TEST_TRUE@TESTMPIRUN2 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+ at RUN_LARGE_FILE_TEST_TRUE@TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+ at RUN_LARGE_FILE_TEST_TRUE@TESTMPIRUN6 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/6/g'`
+all: all-am
 
-SRCS    = large_files.c \
-          large_var.c
+.SUFFIXES:
+.SUFFIXES: .o .c .lo .log .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/largefile/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/largefile/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-OBJS    = $(SRCS:.c=.o)
-PROGS   = $(SRCS:.c=)
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-GARBAGE      = $(PROGS) *.nc
-PACKING_LIST = $(SRCS) Makefile.in
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 
-all: $(PROGS)
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 
-$(OBJS): $(srcdir)/../common/testutils.h
+high_dim_var$(EXEEXT): $(high_dim_var_OBJECTS) $(high_dim_var_DEPENDENCIES) $(EXTRA_high_dim_var_DEPENDENCIES) 
+	@rm -f high_dim_var$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(high_dim_var_OBJECTS) $(high_dim_var_LDADD) $(LIBS)
 
-$(PROGS): ../common/libtestutils.a
+large_dims_vars_attrs$(EXEEXT): $(large_dims_vars_attrs_OBJECTS) $(large_dims_vars_attrs_DEPENDENCIES) $(EXTRA_large_dims_vars_attrs_DEPENDENCIES) 
+	@rm -f large_dims_vars_attrs$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(large_dims_vars_attrs_OBJECTS) $(large_dims_vars_attrs_LDADD) $(LIBS)
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+large_files$(EXEEXT): $(large_files_OBJECTS) $(large_files_DEPENDENCIES) $(EXTRA_large_files_DEPENDENCIES) 
+	@rm -f large_files$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(large_files_OBJECTS) $(large_files_LDADD) $(LIBS)
 
-large_files: large_files.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+large_var$(EXEEXT): $(large_var_OBJECTS) $(large_var_DEPENDENCIES) $(EXTRA_large_var_DEPENDENCIES) 
+	@rm -f large_var$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(large_var_OBJECTS) $(large_var_LDADD) $(LIBS)
 
-large_var: large_var.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tst_cdf5_begin$(EXEEXT): $(tst_cdf5_begin_OBJECTS) $(tst_cdf5_begin_DEPENDENCIES) $(EXTRA_tst_cdf5_begin_DEPENDENCIES) 
+	@rm -f tst_cdf5_begin$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_cdf5_begin_OBJECTS) $(tst_cdf5_begin_LDADD) $(LIBS)
 
-testing check verbose_testing: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/testfile.nc
-	for i in $< ; do ( \
-	$(TEST_SEQRUN) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
 
-# Some of these tests are designed to run on one processes,
-# Run them on 4 processes to see if they can handle well
-TEST_MPIRUN_2  = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_6  = $(subst NP,6,$(TEST_MPIRUN))
-
-ptest4: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/testfile.nc
-	for i in $< ; do ( \
-	$(TEST_MPIRUN_4) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest2: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/testfile.nc
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_2) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest6: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/testfile.nc
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_6) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest: ptest4
-ptests: ptest2 ptest4 ptest6
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/high_dim_var.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/large_dims_vars_attrs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/large_files.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/large_var.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_cdf5_begin.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ at DECL_MPI_OFFSET_TRUE@   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+ at DECL_MPI_OFFSET_TRUE@   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@   # AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@   # AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+ at RUN_LARGE_FILE_TEST_TRUE@ptest ptest4: $(TESTPROGRAMS)
+ at RUN_LARGE_FILE_TEST_TRUE@	for j in 0 1 ; do { \
+ at RUN_LARGE_FILE_TEST_TRUE@	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/testfile.nc ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	export PNETCDF_SAFE_MODE=$$j ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	set -e ; for i in $(TESTPROGRAMS) ; do ( \
+ at RUN_LARGE_FILE_TEST_TRUE@	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	) ; done ; } ; done
+
+ at RUN_LARGE_FILE_TEST_TRUE@ptest2: $(TESTPROGRAMS)
+ at RUN_LARGE_FILE_TEST_TRUE@	for j in 0 1 ; do { \
+ at RUN_LARGE_FILE_TEST_TRUE@	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/testfile.nc ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	export PNETCDF_SAFE_MODE=$$j ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	set -e ; for i in $(TESTPROGRAMS); do ( \
+ at RUN_LARGE_FILE_TEST_TRUE@	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	) ; done ; } ; done
+
+ at RUN_LARGE_FILE_TEST_TRUE@ptest6: $(TESTPROGRAMS)
+ at RUN_LARGE_FILE_TEST_TRUE@	for j in 0 1 ; do { \
+ at RUN_LARGE_FILE_TEST_TRUE@	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/testfile.nc ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	export PNETCDF_SAFE_MODE=$$j ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	set -e ; for i in $(TESTPROGRAMS); do ( \
+ at RUN_LARGE_FILE_TEST_TRUE@	$(TESTMPIRUN6) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+ at RUN_LARGE_FILE_TEST_TRUE@	) ; done ; } ; done
+
+ at RUN_LARGE_FILE_TEST_TRUE@ptests: ptest2 ptest4 ptest6
+ at RUN_LARGE_FILE_TEST_FALSE@ptest ptest2 ptest4 ptest6 ptests:
 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/largefile/high_dim_var.c b/test/largefile/high_dim_var.c
new file mode 100644
index 0000000..4fc89da
--- /dev/null
+++ b/test/largefile/high_dim_var.c
@@ -0,0 +1,171 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *  $Id: high_dim_var.c 3414 2017-09-24 01:39:49Z wkliao $
+ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program tests vars APIs for variables with high dimensions.
+ * In particular, this is to test fix in r3164.
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libgen.h> /* basename() */
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+#define NVARS 2
+#define NDIMS 16
+#define DIMLEN 3
+#define NRECS 4
+
+int main(int argc, char** argv) {
+    char filename[256], name[32];
+    size_t nelms;
+    short *buffer;
+    int i, j, cmode, rank, nprocs, err, nerrs=0;
+    int ncid, fvarid[NVARS], rvarid[NVARS], dimids[NDIMS], rdimids[NDIMS];
+    MPI_Offset start[NDIMS], count[NDIMS], stride[NDIMS];
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    memset(filename, 0, 256);
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+    MPI_Bcast(filename, 256, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for vars APIs on high-dim variables ", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    cmode = NC_CLOBBER;
+    cmode |= NC_64BIT_DATA;
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL,
+                       &ncid); CHECK_ERR
+
+    /* define dimensions */
+    err = ncmpi_def_dim(ncid, "rdim", NC_UNLIMITED, &rdimids[0]); CHECK_ERR
+    for (i=0; i<NDIMS; i++) {
+        sprintf(name, "dim%d", i);
+        err = ncmpi_def_dim(ncid, name, DIMLEN, &dimids[i]); CHECK_ERR
+        if (i > 0) rdimids[i] = dimids[i];
+    }
+    for (i=0; i<NVARS; i++) {
+        sprintf(name, "fix_var%d", i);
+        err = ncmpi_def_var(ncid, name, NC_SHORT, NDIMS, dimids, &fvarid[i]); CHECK_ERR
+        sprintf(name, "rec_var%d", i);
+        err = ncmpi_def_var(ncid, name, NC_SHORT, NDIMS,rdimids, &rvarid[i]); CHECK_ERR
+    }
+
+    /* initialize the contents of fixed-size variables */
+    err = ncmpi_set_fill(ncid, NC_FILL, NULL); CHECK_ERR
+
+    err = ncmpi_enddef(ncid); CHECK_ERR
+    if (err != NC_NOERR) goto fn_exit;
+
+    nelms = (NRECS > DIMLEN) ? NRECS : DIMLEN;
+    for (i=1; i<NDIMS; i++) nelms *= DIMLEN;
+    buffer = (short*) malloc(nelms * sizeof(short));
+    if (buffer == NULL) {
+        printf("Error %s at line %d: fail to allocate buffer of size %zu\n",
+               argv[0], __LINE__, nelms * sizeof(int));
+        goto fn_exit;
+    }
+    for (i=0; i<nelms; i++) buffer[i] = -1;
+
+
+    /* initialize the contents of record variables */
+    for (i=0; i<NVARS; i++) {
+        for (j=0; j<NRECS; j++) {
+            err = ncmpi_fill_var_rec(ncid, rvarid[i], j); CHECK_ERR
+        }
+    }
+
+    for (i=0; i<nelms; i++) buffer[i] = i % 32768;
+
+    for (i=0; i<NDIMS; i++) {
+        start[i]  = 0;
+        count[i]  = 2;
+        stride[i] = 2;
+    }
+    /* only process 0 writes */
+    if (rank > 0) for (i=0; i<NDIMS; i++) count[i] = 0;
+
+    for (i=0; i<NVARS; i++) {
+        start[0] = 0;
+        err = ncmpi_put_vars_short_all(ncid, fvarid[i], start, count, stride,
+                                       buffer); CHECK_ERR
+        start[0] = 1;
+        err = ncmpi_put_vars_short_all(ncid, rvarid[i], start, count, stride,
+                                       buffer); CHECK_ERR
+    }
+
+    /* all processes read and verify */
+    if (rank > 0) for (i=0; i<NDIMS; i++) count[i]  = 2;
+    for (nelms=1,i=0; i<NDIMS; i++) nelms *= count[i];
+
+    for (i=0; i<NVARS; i++) {
+        for (j=0; j<nelms; j++) buffer[j] = -2;
+        start[0] = 0;
+        err = ncmpi_get_vars_short_all(ncid, fvarid[i], start, count, stride,
+                                       buffer); CHECK_ERR
+        for (j=0; j<nelms; j++) {
+            if (buffer[j] != j%32768) {
+                printf("Error at line %d: expect buffer[%d][%d]=%d but got %hd\n",
+                       __LINE__, i, j, j%32768, buffer[j]);
+                nerrs++;
+                break;
+            }
+        }
+        for (j=0; j<nelms; j++) buffer[j] = -2;
+        start[0] = 1;
+        err = ncmpi_get_vars_short_all(ncid, rvarid[i], start, count, stride,
+                                       buffer); CHECK_ERR
+        for (j=0; j<nelms; j++) {
+            if (buffer[j] != j%32768) {
+                printf("Error at line %d: expect buffer[%d][%d]=%d but got %hd\n",
+                       __LINE__, i, j, j%32768, buffer[j]);
+                nerrs++;
+                break;
+            }
+        }
+    }
+    free(buffer);
+
+fn_exit:
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
diff --git a/test/largefile/large_dims_vars_attrs.c b/test/largefile/large_dims_vars_attrs.c
new file mode 100644
index 0000000..c921492
--- /dev/null
+++ b/test/largefile/large_dims_vars_attrs.c
@@ -0,0 +1,135 @@
+/*********************************************************************
+ *
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *********************************************************************/
+/* $Id: large_dims_vars_attrs.c 3441 2017-10-17 20:56:58Z wkliao $ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program is to test
+ *
+ * large number of dimensions per variable
+ * large number of dimensions per file
+ * large number of attributes per file
+ * large number of variables per file
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h> /* strcpy() */
+#include <libgen.h> /* basename() */
+#include <mpi.h>
+#include <pnetcdf.h>
+#include <testutils.h>
+
+#define LARGE_NUM 10240
+
+int main(int argc, char** argv)
+{
+    char filename[256], str[32];
+    int i, rank, nprocs, err, nerrs=0;
+    int ncid, cmode, varid, *dimids;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    /* get command-line arguments */
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+    MPI_Bcast(filename, 256, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for large DIMS, VARS, ATTRS ", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    /* create a new file for writing ----------------------------------------*/
+    cmode = NC_CLOBBER;
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
+    CHECK_ERR
+
+    dimids = (int*) malloc(LARGE_NUM * sizeof(int));
+    for (i=0; i<LARGE_NUM; i++) {
+        sprintf(str, "dim%d", i);
+        err = ncmpi_def_dim(ncid, str, 1, &dimids[i]);
+        CHECK_ERR
+    }
+    err = ncmpi_def_var(ncid, "var", NC_INT, LARGE_NUM, dimids, &varid);
+    CHECK_ERR
+
+    for (i=0; i<LARGE_NUM; i++) {
+        sprintf(str, "attr%d", i);
+        err = ncmpi_put_att(ncid, varid, str, NC_INT, 1, &i);
+        CHECK_ERR
+    }
+
+    for (i=0; i<LARGE_NUM-1; i++) {
+        sprintf(str, "var%d", i);
+        err = ncmpi_def_var(ncid, str, NC_INT, 1, dimids, &varid);
+        CHECK_ERR
+    }
+
+    err = ncmpi_enddef(ncid);
+    CHECK_ERR
+
+    err = ncmpi_close(ncid);
+    CHECK_ERR
+
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
+                     &ncid); CHECK_ERR
+
+    for (i=0; i<LARGE_NUM; i++) {
+        MPI_Offset len;
+        err = ncmpi_inq_dim(ncid, i, str, &len);
+        CHECK_ERR
+    }
+
+    for (i=0; i<LARGE_NUM; i++) {
+        int buf;
+        sprintf(str, "attr%d", i);
+        err = ncmpi_get_att(ncid, 0, str, &buf);
+        CHECK_ERR
+    }
+
+    for (i=0; i<LARGE_NUM; i++) {
+        nc_type xtype;
+        int ndims, natts;
+        err = ncmpi_inq_var(ncid, i, str, &xtype, &ndims, dimids, &natts);
+        CHECK_ERR
+    }
+
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    free(dimids);
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
+
diff --git a/test/largefile/large_files.c b/test/largefile/large_files.c
index efa0d8a..fce91d8 100644
--- a/test/largefile/large_files.c
+++ b/test/largefile/large_files.c
@@ -11,7 +11,7 @@
   This program is an add-on test to check very large 64-bit offset
   files (8 GB, so make sure you have the disk space!).
 
-  $Id: large_files.c 2133 2015-09-26 19:16:01Z wkliao $
+  $Id: large_files.c 3341 2017-08-25 22:29:08Z wkliao $
 */
 
 #include <stdio.h>
@@ -190,5 +190,5 @@ main(int argc, char **argv) {
 
 fn_exit:
    MPI_Finalize();
-   return 0;
+   return (nerrs > 0);
 }
diff --git a/test/largefile/large_var.c b/test/largefile/large_var.c
index 923911e..5aac641 100644
--- a/test/largefile/large_var.c
+++ b/test/largefile/large_var.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: large_var.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: large_var.c 3422 2017-09-25 05:42:52Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -32,16 +32,14 @@
 #include <pnetcdf.h>
 #include <testutils.h>
 
-#define FOUR_G 4294967296
-#define TWO_G  2147483648
-#define ONE_G  1073741824
+#define FOUR_G 4294967296LL
+#define TWO_G  2147483648LL
+#define ONE_G  1073741824LL
 
 #define NZ 4
 #define NY 10
 #define NX FOUR_G
 
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: err=%s (%s)\n", __LINE__,nc_err_code_name(err),ncmpi_strerror(err)); exit(-1);}
-
 #ifndef WORDS_BIGENDIAN
 /* Endianness byte swap: done in-place */
 #define SWAP(x,y) {tmp = (x); (x) = (y); (y) = tmp;}
@@ -77,7 +75,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -93,27 +91,31 @@ int main(int argc, char** argv)
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* define dimensions Z, Y, and X */
     err = ncmpi_def_dim(ncid, "Z", NZ, &dimid[0]);
-    ERR
+    CHECK_ERR
     err = ncmpi_def_dim(ncid, "Y", NY, &dimid[1]);
-    ERR
+    CHECK_ERR
     err = ncmpi_def_dim(ncid, "X", NX, &dimid[2]);
-    ERR
+    CHECK_ERR
+
+    /* define a big 1D variable of ubyte type, so there are 2 big variables */
+    err = ncmpi_def_var(ncid, "big_1D", NC_UBYTE, 1, &dimid[2], &varid);
+    CHECK_ERR
 
-    /* define a 3D variable of integer type */
+    /* define a big 3D variable of integer type */
     err = ncmpi_def_var(ncid, "var", NC_INT, 3, dimid, &varid);
-    ERR
+    CHECK_ERR
 
     /* do not forget to exit define mode */
     err = ncmpi_enddef(ncid);
-    ERR
+    CHECK_ERR
 
-    /* get the beginning of file offset for the varaiable */
+    /* get the beginning of file offset for the variable */
     err = ncmpi_inq_varoffset(ncid, varid, &var_offset);
-    ERR
+    CHECK_ERR
 
     /* now we are in data mode */
     start[0] = 1;
@@ -128,7 +130,7 @@ int main(int argc, char** argv)
     for (i=0; i<bufsize; i++) buf[i] = rank*100 + i;
 
     err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf);
-    ERR
+    CHECK_ERR
 
     /* now test nonblocking put */
     /* rearrange buffer contents */
@@ -138,28 +140,28 @@ int main(int argc, char** argv)
     start[0] = NZ-1;
     count[2] = 5;
     err = ncmpi_iput_vara_int(ncid, varid, start, count, buf, &req[0]);
-    ERR
+    CHECK_ERR
 
     start[2] += 5;
     count[1]  = 1;
     err = ncmpi_iput_vara_int(ncid, varid, start, count, buf+10, &req[1]);
-    ERR
+    CHECK_ERR
 
     start[1]++;
     err = ncmpi_iput_vara_int(ncid, varid, start, count, buf+15, &req[2]);
-    ERR
+    CHECK_ERR
 
     err = ncmpi_wait_all(ncid, 3, req, st);
-    ERR
+    CHECK_ERR
 
     err = ncmpi_close(ncid);
-    ERR
+    CHECK_ERR
 
     /* open the same file and read back for validation */
     err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
-                     &ncid); ERR
+                     &ncid); CHECK_ERR
 
-    err = ncmpi_inq_varid(ncid, "var", &varid); ERR
+    err = ncmpi_inq_varid(ncid, "var", &varid); CHECK_ERR
 
     /* initialize the contents of the array to a different value */
     for (i=0; i<bufsize; i++) buf[i] = -1;
@@ -172,7 +174,7 @@ int main(int argc, char** argv)
     count[1] = 2;
     count[2] = 10;
 
-    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf); ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf); CHECK_ERR
 
     /* check if the contents of buf are expected */
     for (i=0; i<bufsize; i++) {
@@ -187,7 +189,7 @@ int main(int argc, char** argv)
     for (i=0; i<bufsize; i++) buf[i] = -1;
 
     start[0] = NZ-1;
-    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf); ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf); CHECK_ERR
 
     /* check if the contents of buf are expected */
     for (i=0; i<bufsize; i++) {
@@ -199,7 +201,7 @@ int main(int argc, char** argv)
         }
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* MPI file open the same file and read back for validation */
     err = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);
@@ -290,6 +292,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/largefile/seq_runs.sh b/test/largefile/seq_runs.sh
new file mode 100755
index 0000000..9584b59
--- /dev/null
+++ b/test/largefile/seq_runs.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+for j in 0 1 ; do { \
+    export PNETCDF_SAFE_MODE=$$j ; \
+    for i in ${TESTPROGRAMS}; do ( \
+        ${TESTSEQRUN} ./$i            ${TESTOUTDIR}/testfile.nc ; \
+        ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc ; \
+) ; done ; } ; done
diff --git a/test/largefile/tst_cdf5_begin.c b/test/largefile/tst_cdf5_begin.c
new file mode 100644
index 0000000..f6e5463
--- /dev/null
+++ b/test/largefile/tst_cdf5_begin.c
@@ -0,0 +1,110 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *  $Id: tst_cdf5_begin.c 3382 2017-09-17 02:49:07Z wkliao $
+ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program creates one big variable followed by a small variable. It
+ * writes some data to both variables and reads back to check the values.
+ *
+ * The compile and run commands are given below.
+ *
+ *    % mpicc -g -o tst_cdf5_begin tst_cdf5_begin.c -lpnetcdf
+ *
+ *    % mpiexec -l -n 1 tst_cdf5_begin
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libgen.h> /* basename() */
+#include <mpi.h>
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+/* When using NetCDF 4.4.1 ad prior to create a CDF-5 file and defining a small
+ * variable after a big variable (> 2^32-3 bytes), the file starting offset of
+ * the small variable (and all variables defined after the big variable) is
+ * calculated incorrectly. This test program detects this bug by checking the
+ * contents of the possible overlaps between the two variables.
+ */
+
+int main(int argc, char** argv) {
+    char filename[256];
+    int i, err, rank, nprocs, nerrs=0, ncid, dimid[2], varid[2];
+    short buf[10];
+    MPI_Offset start[1], count[1];
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        goto fn_exit;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for checking CDF-5 writes", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
+                       MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim0", NC_MAX_UINT, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", 10,          &dimid[1]); CHECK_ERR
+
+    /* define one small variable after one big variable */
+    err = ncmpi_def_var(ncid, "var_big",   NC_SHORT, 1, &dimid[0], &varid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_small", NC_SHORT, 1, &dimid[1], &varid[1]); CHECK_ERR
+    err = ncmpi_set_fill(ncid, NC_NOFILL, NULL); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
+
+    /* write to var_big in location overlapping with var_small when using
+     * netCDF 4.4.x or prior */
+    start[0] = NC_MAX_UINT/sizeof(short);
+    count[0] = 10;
+    for (i=0; i<10; i++) buf[i] = i;
+    err = ncmpi_put_vara_short_all(ncid, varid[0], start, count, buf); CHECK_ERR
+
+    /* write var_small */
+    for (i=0; i<10; i++) buf[i] = -1;
+    err = ncmpi_put_var_short_all(ncid, varid[1], buf); CHECK_ERR
+
+    /* read back var_big and check contents */
+    for (i=0; i<10; i++) buf[i] = -1;
+    err = ncmpi_get_vara_short_all(ncid, varid[0], start, count,buf); CHECK_ERR
+    for (i=0; i<10; i++) {
+        if (buf[i] != i) {
+            printf("Error at buf[%d] expect %d but got %hd\n",i,i,buf[i]);
+            nerrs++;
+        }
+    }
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR && malloc_size > 0) /* this test is for running 1 process */
+        printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+               malloc_size);
+
+fn_exit:
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
+
diff --git a/test/nc_test/Makefile.am b/test/nc_test/Makefile.am
new file mode 100644
index 0000000..6da4156
--- /dev/null
+++ b/test/nc_test/Makefile.am
@@ -0,0 +1,85 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c .h .m4
+
+AM_DEFAULT_SOURCE_EXT = .c
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la -lm
+
+if DECL_MPI_OFFSET
+   AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+endif
+
+M4_HFILES = tests.h.m4
+
+M4_SRCS   = test_get.m4 \
+            test_put.m4 \
+            test_iget.m4 \
+            test_iput.m4 \
+            test_read.m4 \
+            test_write.m4
+
+TESTPROGRAMS = t_nc \
+               tst_misc \
+               tst_norm \
+               tst_small \
+               tst_names \
+               tst_atts3 \
+               tst_atts \
+               tst_nofill
+
+nc_test_SOURCES = nc_test.c error.c util.c
+nodist_nc_test_SOURCES = tests.h $(M4_SRCS:.m4=.c)
+
+BUILT_SOURCES = tests.h
+
+$(M4_SRCS:.m4=.c): Makefile
+
+M4FLAGS += -I${top_srcdir}/m4
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< > $@
+
+tests.h: tests.h.m4 Makefile
+	$(M4) $(M4FLAGS) $< > $@
+
+check_PROGRAMS = $(TESTPROGRAMS) nc_test
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+CLEANFILES = tests.h $(M4_SRCS:.m4=.c) \
+             test.nc testfile.nc scratch.nc testfile.nc.2 \
+             testfile.nc.nofill testfile.nc.fill core core.* \
+             *.gcda *.gcno *.gcov gmon.out
+
+EXTRA_DIST = error.h $(M4_SRCS) $(M4_HFILES) README seq_runs.sh
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+# sequential runs only
+ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/nc_test/Makefile.in b/test/nc_test/Makefile.in
index b01298f..0c88221 100644
--- a/test/nc_test/Makefile.in
+++ b/test/nc_test/Makefile.in
@@ -1,135 +1,1218 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2614 2016-11-12 19:50:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at DECL_MPI_OFFSET_TRUE@am__append_1 = -DHAVE_DECL_MPI_OFFSET
+check_PROGRAMS = $(am__EXEEXT_1) nc_test$(EXEEXT)
+subdir = test/nc_test
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = t_nc$(EXEEXT) tst_misc$(EXEEXT) tst_norm$(EXEEXT) \
+	tst_small$(EXEEXT) tst_names$(EXEEXT) tst_atts3$(EXEEXT) \
+	tst_atts$(EXEEXT) tst_nofill$(EXEEXT)
+am_nc_test_OBJECTS = nc_test.$(OBJEXT) error.$(OBJEXT) util.$(OBJEXT)
+am__objects_1 = test_get.$(OBJEXT) test_put.$(OBJEXT) \
+	test_iget.$(OBJEXT) test_iput.$(OBJEXT) test_read.$(OBJEXT) \
+	test_write.$(OBJEXT)
+nodist_nc_test_OBJECTS = $(am__objects_1)
+nc_test_OBJECTS = $(am_nc_test_OBJECTS) $(nodist_nc_test_OBJECTS)
+nc_test_LDADD = $(LDADD)
+nc_test_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+t_nc_SOURCES = t_nc.c
+t_nc_OBJECTS = t_nc.$(OBJEXT)
+t_nc_LDADD = $(LDADD)
+t_nc_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_atts_SOURCES = tst_atts.c
+tst_atts_OBJECTS = tst_atts.$(OBJEXT)
+tst_atts_LDADD = $(LDADD)
+tst_atts_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_atts3_SOURCES = tst_atts3.c
+tst_atts3_OBJECTS = tst_atts3.$(OBJEXT)
+tst_atts3_LDADD = $(LDADD)
+tst_atts3_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_misc_SOURCES = tst_misc.c
+tst_misc_OBJECTS = tst_misc.$(OBJEXT)
+tst_misc_LDADD = $(LDADD)
+tst_misc_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_names_SOURCES = tst_names.c
+tst_names_OBJECTS = tst_names.$(OBJEXT)
+tst_names_LDADD = $(LDADD)
+tst_names_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_nofill_SOURCES = tst_nofill.c
+tst_nofill_OBJECTS = tst_nofill.$(OBJEXT)
+tst_nofill_LDADD = $(LDADD)
+tst_nofill_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_norm_SOURCES = tst_norm.c
+tst_norm_OBJECTS = tst_norm.$(OBJEXT)
+tst_norm_LDADD = $(LDADD)
+tst_norm_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_small_SOURCES = tst_small.c
+tst_small_OBJECTS = tst_small.$(OBJEXT)
+tst_small_LDADD = $(LDADD)
+tst_small_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(nc_test_SOURCES) $(nodist_nc_test_SOURCES) t_nc.c \
+	tst_atts.c tst_atts3.c tst_misc.c tst_names.c tst_nofill.c \
+	tst_norm.c tst_small.c
+DIST_SOURCES = $(nc_test_SOURCES) t_nc.c tst_atts.c tst_atts3.c \
+	tst_misc.c tst_names.c tst_nofill.c tst_norm.c tst_small.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c .h .m4
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include $(am__append_1)
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la -lm
+M4_HFILES = tests.h.m4
+M4_SRCS = test_get.m4 \
+            test_put.m4 \
+            test_iget.m4 \
+            test_iput.m4 \
+            test_read.m4 \
+            test_write.m4
 
-include ../../macros.make
+TESTPROGRAMS = t_nc \
+               tst_misc \
+               tst_norm \
+               tst_small \
+               tst_names \
+               tst_atts3 \
+               tst_atts \
+               tst_nofill
 
-INCLUDES  = -I. -I../../src/lib -I$(srcdir) -I$(srcdir)/../common
-LDFLAGS  := -L../common $(LDFLAGS)
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) -lm @LCOV_LIB@
+nc_test_SOURCES = nc_test.c error.c util.c
+nodist_nc_test_SOURCES = tests.h $(M4_SRCS:.m4=.c)
+BUILT_SOURCES = tests.h
 
-SRCS      = error.c \
-            util.c
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+CLEANFILES = tests.h $(M4_SRCS:.m4=.c) \
+             test.nc testfile.nc scratch.nc testfile.nc.2 \
+             testfile.nc.nofill testfile.nc.fill core core.* \
+             *.gcda *.gcno *.gcov gmon.out
 
-PROG_SRCS = nc_test.c \
-            t_nc.c \
-            tst_misc.c \
-            tst_norm.c \
-            tst_small.c \
-            tst_names.c \
-            tst_atts3.c \
-            tst_atts.c \
-            tst_nofill.c
+EXTRA_DIST = error.h $(M4_SRCS) $(M4_HFILES) README seq_runs.sh
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
-M4_HEADERS = tests.h.m4
+.SUFFIXES:
+.SUFFIXES: .o .c .h .m4 .lo .log .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/nc_test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/nc_test/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-M4_SRCS   = test_get.m4 \
-            test_put.m4 \
-            test_iget.m4 \
-            test_iput.m4 \
-            test_read.m4 \
-            test_write.m4
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+nc_test$(EXEEXT): $(nc_test_OBJECTS) $(nc_test_DEPENDENCIES) $(EXTRA_nc_test_DEPENDENCIES) 
+	@rm -f nc_test$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nc_test_OBJECTS) $(nc_test_LDADD) $(LIBS)
+
+t_nc$(EXEEXT): $(t_nc_OBJECTS) $(t_nc_DEPENDENCIES) $(EXTRA_t_nc_DEPENDENCIES) 
+	@rm -f t_nc$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(t_nc_OBJECTS) $(t_nc_LDADD) $(LIBS)
+
+tst_atts$(EXEEXT): $(tst_atts_OBJECTS) $(tst_atts_DEPENDENCIES) $(EXTRA_tst_atts_DEPENDENCIES) 
+	@rm -f tst_atts$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_atts_OBJECTS) $(tst_atts_LDADD) $(LIBS)
+
+tst_atts3$(EXEEXT): $(tst_atts3_OBJECTS) $(tst_atts3_DEPENDENCIES) $(EXTRA_tst_atts3_DEPENDENCIES) 
+	@rm -f tst_atts3$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_atts3_OBJECTS) $(tst_atts3_LDADD) $(LIBS)
+
+tst_misc$(EXEEXT): $(tst_misc_OBJECTS) $(tst_misc_DEPENDENCIES) $(EXTRA_tst_misc_DEPENDENCIES) 
+	@rm -f tst_misc$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_misc_OBJECTS) $(tst_misc_LDADD) $(LIBS)
+
+tst_names$(EXEEXT): $(tst_names_OBJECTS) $(tst_names_DEPENDENCIES) $(EXTRA_tst_names_DEPENDENCIES) 
+	@rm -f tst_names$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_names_OBJECTS) $(tst_names_LDADD) $(LIBS)
+
+tst_nofill$(EXEEXT): $(tst_nofill_OBJECTS) $(tst_nofill_DEPENDENCIES) $(EXTRA_tst_nofill_DEPENDENCIES) 
+	@rm -f tst_nofill$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_nofill_OBJECTS) $(tst_nofill_LDADD) $(LIBS)
+
+tst_norm$(EXEEXT): $(tst_norm_OBJECTS) $(tst_norm_DEPENDENCIES) $(EXTRA_tst_norm_DEPENDENCIES) 
+	@rm -f tst_norm$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_norm_OBJECTS) $(tst_norm_LDADD) $(LIBS)
+
+tst_small$(EXEEXT): $(tst_small_OBJECTS) $(tst_small_DEPENDENCIES) $(EXTRA_tst_small_DEPENDENCIES) 
+	@rm -f tst_small$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_small_OBJECTS) $(tst_small_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/error.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nc_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/t_nc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_get.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_iget.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_iput.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_put.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_read.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_write.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_atts.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_atts3.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_misc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_names.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_nofill.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_norm.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_small.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/util.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile
+installdirs:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: all check check-am install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
+
+.PRECIOUS: Makefile
+
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< > $@
+
+tests.h: tests.h.m4 Makefile
+	$(M4) $(M4FLAGS) $< > $@
 
-HEADERS   = error.h
-
-OBJS      = $(SRCS:.c=.o) $(M4_SRCS:.m4=.o)
-
-PROGS     = $(PROG_SRCS:.c=)
-
-GARBAGE   = $(PROGS) $(M4_SRCS:.m4=.c) tests.h \
-            test.nc testfile.nc scratch.nc testfile.nc.2 \
-            testfile.nc.nofill testfile.nc.fill
-
-PACKING_LIST = $(SRCS) $(M4_SRCS) $(M4_HEADERS) $(HEADERS) $(PROG_SRCS) \
-               Makefile.in depend README
-
-all: $(PROGS)
-
-$(PROGS): ../common/libtestutils.a
-
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
-
-tests.h: tests.h.m4
-	$(M4) $(M4FLAGS) $< >$@
-
-nc_test: nc_test.o $(OBJS) $(LIBRARY)
-	$(LINK.c) $< $(OBJS) $(LDFLAGS) $(LIBS)
-
-t_nc: t_nc.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-tst_misc: tst_misc.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-tst_norm: tst_norm.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-tst_small: tst_small.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-tst_names: tst_names.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-tst_atts3: tst_atts3.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-tst_atts: tst_atts.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-tst_nofill: tst_nofill.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-# This simple testing target ensures that the test files are present
-check testing: all
-	$(RM) -f $(TEST_OUTDIR)/scratch.nc
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc
-	$(RM) -f $(TEST_OUTDIR)/tooth-fairy.nc
-	$(TEST_SEQRUN) ./nc_test -c    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -d       $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -c -2 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -2 -d    $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -c -5 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -5 -d    $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./t_nc             $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_misc         $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_norm         $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_small        $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_names        $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_atts3        $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_atts         $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_nofill       $(TEST_OUTDIR)/testfile.nc
-
-verbose_testing: all
-	$(RM) -f $(TEST_OUTDIR)/scratch.nc
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc
-	$(RM) -f $(TEST_OUTDIR)/tooth-fairy.nc
-	$(TEST_SEQRUN) ./nc_test -c -v    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -v -d       $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -c -v -2 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -v -2 -d    $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -c -v -5 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nc_test -v -5 -d    $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./t_nc                $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_misc            $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_norm            $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_small           $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_names           $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_atts3           $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_atts            $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) ./tst_nofill          $(TEST_OUTDIR)/testfile.nc
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
+# sequential runs only
 ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
-include $(srcdir)/depend
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/nc_test/depend b/test/nc_test/depend
deleted file mode 100644
index b3a4b9f..0000000
--- a/test/nc_test/depend
+++ /dev/null
@@ -1,33 +0,0 @@
-error.o: error.c
-test_read.o: test_read.c tests.h ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h error.h ../../src/lib/ncconfig.h
-test_write.o: test_write.c tests.h ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h error.h ../../src/lib/ncconfig.h
-util.o: util.c tests.h ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h error.h ../../src/lib/ncconfig.h
-test_get.o: test_get.c tests.h ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h error.h ../../src/lib/ncconfig.h
-test_put.o: test_put.c tests.h ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h error.h ../../src/lib/ncconfig.h
-test_iget.o: test_iget.c tests.h ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h error.h ../../src/lib/ncconfig.h
-test_iput.o: test_iput.c tests.h ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h error.h ../../src/lib/ncconfig.h
-nc_test.o: nc_test.c tests.h ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h error.h ../../src/lib/ncconfig.h
-t_nc.o: t_nc.c ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h
-tst_misc.o: tst_misc.c ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h
-tst_norm.o: tst_norm.c ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h
-tst_small.o: tst_small.c ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h
-tst_names.o: tst_names.c ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h
-tst_atts3.o: tst_atts3.c ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h
-tst_atts.o: tst_atts.c ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h
-tst_nofill.o: tst_nofill.c ../../src/lib/pnetcdf.h \
-  $(srcdir)/../common/testutils.h
diff --git a/test/nc_test/nc_test.c b/test/nc_test/nc_test.c
index dde1d16..993d2a0 100644
--- a/test/nc_test/nc_test.c
+++ b/test/nc_test/nc_test.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: nc_test.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: nc_test.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 #include <libgen.h> /* basename() */
@@ -148,7 +148,7 @@ main(int argc, char *argv[])
     strcpy(testfile, "test.nc");    /* read-only testfile */
     strcpy(scratch, "scratch.nc");  /* writable scratch file */
 
-    while ((c = getopt(argc, argv, "c25hrvn:d:")) != EOF)
+    while ((c = getopt(argc, argv, "c25hrn:d:v")) != -1)
       switch(c) {
 	case 'c':		/* Create file test.nc */
 	  create_file = 1;
@@ -159,7 +159,7 @@ main(int argc, char *argv[])
 	case 'v':		/* verbose mode */
 	  verbose = 1;
 	  break;
-	case 'n':		/* verbose mode */
+	case 'n':		/* max. number of messages per test */
 	  max_nmpt = (int)strtol(optarg,NULL,10);
 	  break;
 	case '2':
@@ -167,6 +167,7 @@ main(int argc, char *argv[])
 	  break;
 	case '5':
 	  cdf_format = 5;
+	  break;
 	case 'd':
           sprintf(testfile, "%s/test.nc", optarg);
           sprintf(scratch, "%s/scratch.nc", optarg);
diff --git a/test/nc_test/seq_runs.sh b/test/nc_test/seq_runs.sh
new file mode 100755
index 0000000..1d7b042
--- /dev/null
+++ b/test/nc_test/seq_runs.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+for j in 0 1 ; do { \
+    export PNETCDF_SAFE_MODE=$$j ; \
+    for i in ${TESTPROGRAMS}; do ( \
+        ${TESTSEQRUN} ./$i            ${TESTOUTDIR}/testfile.nc ; \
+        ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc ; \
+) ; done ; } ; done
+
+rm -f ${TESTOUTDIR}/scratch.nc
+rm -f ${TESTOUTDIR}/testfile.nc
+rm -f ${TESTOUTDIR}/tooth-fairy.nc
+
+${TESTSEQRUN} ./nc_test    -c -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nc_test       -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}    -q ${TESTOUTDIR}/test.nc
+
+${TESTSEQRUN} ./nc_test -2 -c -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nc_test -2    -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}    -q ${TESTOUTDIR}/test.nc
+
+${TESTSEQRUN} ./nc_test -5 -c -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nc_test -5    -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}    -q ${TESTOUTDIR}/test.nc
+
diff --git a/test/nc_test/t_nc.c b/test/nc_test/t_nc.c
index 987df98..245a8d4 100644
--- a/test/nc_test/t_nc.c
+++ b/test/nc_test/t_nc.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: t_nc.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: t_nc.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* This program is based on the test program t_nc.c of the netCDF package */
 
@@ -57,7 +57,7 @@ static struct {
 	char mnem[NC_MAX_NAME];
 	nc_type type;
 	int ndims;
-	int dims[NC_MAX_VAR_DIMS];
+	int *dims;
 	int num_attrs;
 } vdesc[1];
 
@@ -452,6 +452,9 @@ int t_nc(char *filename, int cmode)
 	for(ii = 0; ii < cdesc->num_vars; ii++, tvp++ ) 
 	{
 		int jj;
+		err = ncmpi_inq_varndims(id, ii, &vdesc->ndims); ERR
+                vdesc->dims = (int*) malloc(vdesc->ndims * sizeof(int));
+
 		err = ncmpi_inq_var(id, ii,
 			vdesc->mnem,
 			&(vdesc->type),
@@ -551,6 +554,7 @@ int t_nc(char *filename, int cmode)
 		buf[adesc->len] = 0;
 		assert( strcmp(tvp->fieldnam, buf) == 0);
 		}
+                free(vdesc->dims);
 	}
 
 	/* (void) printf("fill_seq "); */
@@ -619,7 +623,7 @@ int main(int argc, char *argv[])
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -661,6 +665,6 @@ int main(int argc, char *argv[])
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nc_test/test_get.m4 b/test/nc_test/test_get.m4
index 1e81e56..27847ee 100644
--- a/test/nc_test/test_get.m4
+++ b/test/nc_test/test_get.m4
@@ -10,7 +10,7 @@ dnl
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: test_get.m4 2672 2016-12-03 19:23:53Z wkliao $ */
+/* $Id: test_get.m4 3341 2017-08-25 22:29:08Z wkliao $ */
 
 dnl
 dnl The command-line m4 macro "PNETCDF" is to differentiate PnetCDF and netCDF
@@ -181,8 +181,9 @@ ifelse(`$1',`uchar',`ifdef(`PNETCDF',,``#'endif')')
             IF (err != 0) error("error in toMixedBase");
             /* when file is created the variable contents are generated by
              * hash functions */
-            expect = hash4(cdf_format, var_type[i], var_rank[i], index,
-                           NCT_ITYPE($1));
+            if (canConvert)
+                expect = hash4(cdf_format, var_type[i], var_rank[i], index,
+                               NCT_ITYPE($1));
             err = GetVar1($1)(ncid, i, index, value);
             if (canConvert) {
                 if (inRange3(cdf_format, expect,var_type[i], NCT_ITYPE($1))) {
@@ -283,17 +284,19 @@ TestFunc(var)_$1(VarArgs)
 
         canConvert = (var_type[i] == NC_CHAR) CheckText($1);
 
-        allInExtRange = allInIntRange = 1;
-        for (j = 0; j < var_nels[i]; j++) {
-            err = toMixedBase(j, var_rank[i], var_shape[i], index);
-            IF (err != 0) error("error in toMixedBase");
-            expect[j] = hash4(cdf_format, var_type[i], var_rank[i], index,
-                              NCT_ITYPE($1));
-            if (inRange3(cdf_format, expect[j],var_type[i], NCT_ITYPE($1))) {
-                IfCheckTextChar($1, var_type[i])
-                    allInIntRange &= CheckRange($1,expect[j]);
-            } else
-                allInExtRange = 0;
+        if (canConvert) {
+            allInExtRange = allInIntRange = 1;
+            for (j = 0; j < var_nels[i]; j++) {
+                err = toMixedBase(j, var_rank[i], var_shape[i], index);
+                IF (err != 0) error("error in toMixedBase");
+                expect[j] = hash4(cdf_format, var_type[i], var_rank[i], index,
+                                  NCT_ITYPE($1));
+                if (inRange3(cdf_format, expect[j],var_type[i], NCT_ITYPE($1))) {
+                    IfCheckTextChar($1, var_type[i])
+                        allInIntRange &= CheckRange($1,expect[j]);
+                } else
+                    allInExtRange = 0;
+            }
         }
         err = GetVar($1)(ncid, i, value);
         if (canConvert) {
@@ -540,20 +543,22 @@ ifelse(`$1',`uchar',`ifdef(`PNETCDF',,``#'endif')')
                 }
                 nels *= edge[j];
             }
-            allInExtRange = allInIntRange = 1;
-            for (j = 0; j < nels; j++) {
-                int d;
-                err = toMixedBase(j, var_rank[i], edge, index);
-                IF (err != 0) error("error in toMixedBase");
-                for (d = 0; d < var_rank[i]; d++)
-                    index[d] += start[d];
-                expect[j] = hash4(cdf_format, var_type[i], var_rank[i], index,
-                                  NCT_ITYPE($1));
-                if (inRange3(cdf_format, expect[j],var_type[i],NCT_ITYPE($1))) {
-		    IfCheckTextChar($1, var_type[i])
-                        allInIntRange &= CheckRange($1,expect[j]);
-                } else
-                    allInExtRange = 0;
+            if (canConvert) {
+                allInExtRange = allInIntRange = 1;
+                for (j = 0; j < nels; j++) {
+                    int d;
+                    err = toMixedBase(j, var_rank[i], edge, index);
+                    IF (err != 0) error("error in toMixedBase");
+                    for (d = 0; d < var_rank[i]; d++)
+                        index[d] += start[d];
+                    expect[j] = hash4(cdf_format, var_type[i], var_rank[i], index,
+                                      NCT_ITYPE($1));
+                    if (inRange3(cdf_format, expect[j],var_type[i],NCT_ITYPE($1))) {
+		        IfCheckTextChar($1, var_type[i])
+                            allInIntRange &= CheckRange($1,expect[j]);
+                    } else
+                        allInExtRange = 0;
+                }
             }
             err = GetVara($1)(ncid, i, start, edge, value);
             if (canConvert) {
@@ -837,19 +842,21 @@ ifelse(`$1',`uchar',`ifdef(`PNETCDF',,``#'endif')')
                     }
                 }
 */
-                allInExtRange = allInIntRange = 1;
-                for (j = 0; j < nels; j++) {
-                    err = toMixedBase(j, var_rank[i], count, index2);
-                    IF (err != 0) error("error in toMixedBase");
-                    for (d = 0; d < var_rank[i]; d++)
-                        index2[d] = index[d] + index2[d] * (IntType)stride[d];
-                    expect[j] = hash4(cdf_format, var_type[i], var_rank[i],
-                                      index2, NCT_ITYPE($1));
-                    if (inRange3(cdf_format, expect[j],var_type[i],NCT_ITYPE($1))) {
-		        IfCheckTextChar($1, var_type[i])
-                            allInIntRange &= CheckRange($1,expect[j]);
-                    } else
-                        allInExtRange = 0;
+                if (canConvert) {
+                    allInExtRange = allInIntRange = 1;
+                    for (j = 0; j < nels; j++) {
+                        err = toMixedBase(j, var_rank[i], count, index2);
+                        IF (err != 0) error("error in toMixedBase");
+                        for (d = 0; d < var_rank[i]; d++)
+                            index2[d] = index[d] + index2[d] * (IntType)stride[d];
+                        expect[j] = hash4(cdf_format, var_type[i], var_rank[i],
+                                          index2, NCT_ITYPE($1));
+                        if (inRange3(cdf_format, expect[j],var_type[i],NCT_ITYPE($1))) {
+		            IfCheckTextChar($1, var_type[i])
+                                allInIntRange &= CheckRange($1,expect[j]);
+                        } else
+                            allInExtRange = 0;
+                    }
                 }
                 err = GetVars($1)(ncid, i, index, count, stride, value);
                 if (canConvert) {
@@ -1141,19 +1148,21 @@ ifelse(`$1',`uchar',`ifdef(`PNETCDF',,``#'endif')')
                     for (; jj > 0; jj--)
                         imap[jj-1] = imap[jj] * (PTRDType)count[jj];
                 }
-                allInExtRange = allInIntRange = 1;
-                for (j = 0; j < nels; j++) {
-                    err = toMixedBase(j, var_rank[i], count, index2);
-                    IF (err != 0) error("error in toMixedBase");
-                    for (d = 0; d < var_rank[i]; d++)
-                        index2[d] = index[d] + index2[d] * (IntType)stride[d];
-                    expect[j] = hash4(cdf_format, var_type[i], var_rank[i],
-                                      index2, NCT_ITYPE($1));
-                    if (inRange3(cdf_format, expect[j],var_type[i],NCT_ITYPE($1))) {
-		        IfCheckTextChar($1, var_type[i])
-                            allInIntRange &= CheckRange($1,expect[j]);
-                    } else
-                        allInExtRange = 0;
+                if (canConvert) {
+                    allInExtRange = allInIntRange = 1;
+                    for (j = 0; j < nels; j++) {
+                        err = toMixedBase(j, var_rank[i], count, index2);
+                        IF (err != 0) error("error in toMixedBase");
+                        for (d = 0; d < var_rank[i]; d++)
+                            index2[d] = index[d] + index2[d] * (IntType)stride[d];
+                        expect[j] = hash4(cdf_format, var_type[i], var_rank[i],
+                                          index2, NCT_ITYPE($1));
+                        if (inRange3(cdf_format, expect[j],var_type[i],NCT_ITYPE($1))) {
+		            IfCheckTextChar($1, var_type[i])
+                                allInIntRange &= CheckRange($1,expect[j]);
+                        } else
+                            allInExtRange = 0;
+                    }
                 }
                 err = GetVarm($1)(ncid,i,index,count,stride,imap,value);
                 if (canConvert) {
diff --git a/test/nc_test/test_iput.m4 b/test/nc_test/test_iput.m4
index d928384..35f556a 100644
--- a/test/nc_test/test_iput.m4
+++ b/test/nc_test/test_iput.m4
@@ -10,7 +10,7 @@ dnl
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: test_iput.m4 2616 2016-11-14 09:19:14Z wkliao $ */
+/* $Id: test_iput.m4 3341 2017-08-25 22:29:08Z wkliao $ */
 
 dnl
 dnl The command-line m4 macro "PNETCDF" is to differentiate PnetCDF and netCDF
@@ -78,7 +78,8 @@ hash2nc(const nc_type var_type, int var_rank, MPI_Offset *index)
     double max;
 
     switch (var_type) {
-        case NC_CHAR:   min = X_CHAR_MIN;   max = X_CHAR_MAX;   break;
+        /* no type conversion will happen for NC_CHAR, use in-memory limits */
+        case NC_CHAR:   min = CHAR_MIN;     max = CHAR_MAX;     break;
         case NC_BYTE:   min = X_BYTE_MIN;   max = X_BYTE_MAX;   break;
         case NC_SHORT:  min = X_SHORT_MIN;  max = X_SHORT_MAX;  break;
         case NC_INT:    min = X_INT_MIN;    max = X_INT_MAX;    break;
@@ -329,8 +330,9 @@ ifdef(`PNETCDF',`dnl
         for (j = 0; j < var_nels[i]; j++) {
             err = toMixedBase(j, var_rank[i], var_shape[i], index);
             IF (err != 0) error("error in toMixedBase");
-            value[0] = hash_$1(cdf_format, var_type[i], var_rank[i], index,
-                               NCT_ITYPE($1));
+            if (canConvert)
+                value[0] = hash_$1(cdf_format, var_type[i], var_rank[i], index,
+                                   NCT_ITYPE($1));
             err = iPutVar1($1)(ncid, i, index, value, &reqid);
             if (canConvert) {
                 if (CheckRange3($1, value[0], var_type[i])) {
@@ -546,14 +548,16 @@ TestFunc(var)_$1(VarArgs)
 
         canConvert = (var_type[i] == NC_CHAR) CheckText($1);
 
-        for (allInExtRange = 1, j = 0; j < var_nels[i]; j++) {
-            err = toMixedBase(j, var_rank[i], var_shape[i], index);
-            IF (err != 0) error("error in toMixedBase");
-            value[j]= hash_$1(cdf_format, var_type[i], var_rank[i], index,
-                              NCT_ITYPE($1));
-            IfCheckTextChar($1, var_type[i])
-                allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                          var_type[i], NCT_ITYPE($1));
+        if (canConvert) {
+            for (allInExtRange = 1, j = 0; j < var_nels[i]; j++) {
+                err = toMixedBase(j, var_rank[i], var_shape[i], index);
+                IF (err != 0) error("error in toMixedBase");
+                value[j]= hash_$1(cdf_format, var_type[i], var_rank[i], index,
+                                  NCT_ITYPE($1));
+                IfCheckTextChar($1, var_type[i])
+                    allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                              var_type[i], NCT_ITYPE($1));
+            }
         }
         err = iPutVar($1)(ncid, i, value, &reqid);
         if (canConvert) {
@@ -617,14 +621,16 @@ TestFunc(var)_$1(VarArgs)
 
         canConvert = (var_type[i] == NC_CHAR) CheckText($1);
 
-        for (allInExtRange = 1, j = 0; j < var_nels[i]; j++) {
-            err = toMixedBase(j, var_rank[i], var_shape[i], index);
-            IF (err != 0) error("error in toMixedBase");
-            value[j]= hash_$1(cdf_format, var_type[i], var_rank[i], index,
-                              NCT_ITYPE($1));
-            IfCheckTextChar($1, var_type[i])
-                allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                          var_type[i], NCT_ITYPE($1));
+        if (canConvert) {
+            for (allInExtRange = 1, j = 0; j < var_nels[i]; j++) {
+                err = toMixedBase(j, var_rank[i], var_shape[i], index);
+                IF (err != 0) error("error in toMixedBase");
+                value[j]= hash_$1(cdf_format, var_type[i], var_rank[i], index,
+                                  NCT_ITYPE($1));
+                IfCheckTextChar($1, var_type[i])
+                    allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                              var_type[i], NCT_ITYPE($1));
+            }
         }
         err = iPutVar($1)(ncid, i, value, &reqid);
         if (canConvert) {
@@ -1040,17 +1046,19 @@ ifdef(`PNETCDF',`dnl
                 }
                 nels *= edge[j];
             }
-            for (allInExtRange = 1, j = 0; j < nels; j++) {
-                int d;
-                err = toMixedBase(j, var_rank[i], edge, index);
-                IF (err != 0) error("error in toMixedBase");
-                for (d = 0; d < var_rank[i]; d++)
-                    index[d] += start[d];
-                value[j]= hash_$1(cdf_format, var_type[i], var_rank[i], index,
-                                  NCT_ITYPE($1));
-                IfCheckTextChar($1, var_type[i])
-                    allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                              var_type[i], NCT_ITYPE($1));
+            if (canConvert) {
+                for (allInExtRange = 1, j = 0; j < nels; j++) {
+                    int d;
+                    err = toMixedBase(j, var_rank[i], edge, index);
+                    IF (err != 0) error("error in toMixedBase");
+                    for (d = 0; d < var_rank[i]; d++)
+                        index[d] += start[d];
+                    value[j]= hash_$1(cdf_format, var_type[i], var_rank[i], index,
+                                      NCT_ITYPE($1));
+                    IfCheckTextChar($1, var_type[i])
+                        allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                                  var_type[i], NCT_ITYPE($1));
+                }
             }
             err = iPutVara($1)(ncid, i, start, edge, value, &reqid);
             if (canConvert) {
@@ -1524,17 +1532,19 @@ ifdef(`PNETCDF',`dnl
                     }
                 }
 */
-                for (allInExtRange = 1, j = 0; j < nels; j++) {
-                    int d;
-                    err = toMixedBase(j, var_rank[i], count, index2);
-                    IF (err != 0) error("error in toMixedBase");
-                    for (d = 0; d < var_rank[i]; d++)
-                        index2[d] = index[d] + index2[d] * stride[d];
-                    value[j] = hash_$1(cdf_format, var_type[i], var_rank[i],
-                                       index2, NCT_ITYPE($1));
-                    IfCheckTextChar($1, var_type[i])
-                        allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                                  var_type[i], NCT_ITYPE($1));
+                if (canConvert) {
+                    for (allInExtRange = 1, j = 0; j < nels; j++) {
+                        int d;
+                        err = toMixedBase(j, var_rank[i], count, index2);
+                        IF (err != 0) error("error in toMixedBase");
+                        for (d = 0; d < var_rank[i]; d++)
+                            index2[d] = index[d] + index2[d] * stride[d];
+                        value[j] = hash_$1(cdf_format, var_type[i], var_rank[i],
+                                           index2, NCT_ITYPE($1));
+                        IfCheckTextChar($1, var_type[i])
+                            allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                                      var_type[i], NCT_ITYPE($1));
+                    }
                 }
                 err = iPutVars($1)(ncid, i, index, count, stride, value, &reqid);
                 if (canConvert) {
@@ -2023,17 +2033,19 @@ ifdef(`PNETCDF',`dnl
                     for (; j > 0; j--)
                         imap[j-1] = imap[j] * count[j];
                 }
-                for (allInExtRange = 1, j = 0; j < nels; j++) {
-                    int d;
-                    err = toMixedBase(j, var_rank[i], count, index2);
-                    IF (err != 0) error("error in toMixedBase");
-                    for (d = 0; d < var_rank[i]; d++)
-                        index2[d] = index[d] + index2[d] * stride[d];
-                    value[j] = hash_$1(cdf_format, var_type[i], var_rank[i],
-                                       index2, NCT_ITYPE($1));
-                    IfCheckTextChar($1, var_type[i])
-                        allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                                  var_type[i], NCT_ITYPE($1));
+                if (canConvert) {
+                    for (allInExtRange = 1, j = 0; j < nels; j++) {
+                        int d;
+                        err = toMixedBase(j, var_rank[i], count, index2);
+                        IF (err != 0) error("error in toMixedBase");
+                        for (d = 0; d < var_rank[i]; d++)
+                            index2[d] = index[d] + index2[d] * stride[d];
+                        value[j] = hash_$1(cdf_format, var_type[i], var_rank[i],
+                                           index2, NCT_ITYPE($1));
+                        IfCheckTextChar($1, var_type[i])
+                            allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                                      var_type[i], NCT_ITYPE($1));
+                    }
                 }
                 err = iPutVarm($1)(ncid, i, index, count, stride, imap, value, &reqid);
                 if (canConvert) {
diff --git a/test/nc_test/test_put.m4 b/test/nc_test/test_put.m4
index d586b91..b61ac8d 100644
--- a/test/nc_test/test_put.m4
+++ b/test/nc_test/test_put.m4
@@ -10,7 +10,7 @@ dnl
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: test_put.m4 2672 2016-12-03 19:23:53Z wkliao $ */
+/* $Id: test_put.m4 3341 2017-08-25 22:29:08Z wkliao $ */
 
 dnl
 dnl The command-line m4 macro "PNETCDF" is to differentiate PnetCDF and netCDF
@@ -450,8 +450,9 @@ ifdef(`PNETCDF',`dnl
         for (j = 0; j < var_nels[i]; j++) {
             err = toMixedBase(j, var_rank[i], var_shape[i], index);
             IF (err != 0) error("error in toMixedBase");
-            value[0] = hash_$1(cdf_format, var_type[i], var_rank[i], index,
-                               NCT_ITYPE($1));
+            if (canConvert)
+                value[0] = hash_$1(cdf_format, var_type[i], var_rank[i], index,
+                                   NCT_ITYPE($1));
             err = PutVar1($1)(ncid, i, index, value);
             if (canConvert) {
                 if (CheckRange3($1, value[0], var_type[i])) {
@@ -553,14 +554,16 @@ TestFunc(var)_$1(VarArgs)
 
         canConvert = (var_type[i] == NC_CHAR) CheckText($1);
 
-        for (allInExtRange = 1, j = 0; j < var_nels[i]; j++) {
-            err = toMixedBase(j, var_rank[i], var_shape[i], index);
-            IF (err != 0) error("error in toMixedBase");
-            value[j]= hash_$1(cdf_format,var_type[i], var_rank[i], index,
-                              NCT_ITYPE($1));
-            IfCheckTextChar($1, var_type[i])
-                allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                          var_type[i], NCT_ITYPE($1));
+        if (canConvert) {
+            for (allInExtRange = 1, j = 0; j < var_nels[i]; j++) {
+                err = toMixedBase(j, var_rank[i], var_shape[i], index);
+                IF (err != 0) error("error in toMixedBase");
+                value[j]= hash_$1(cdf_format,var_type[i], var_rank[i], index,
+                                  NCT_ITYPE($1));
+                IfCheckTextChar($1, var_type[i])
+                    allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                              var_type[i], NCT_ITYPE($1));
+            }
         }
         err = PutVar($1)(ncid, i, value);
         if (canConvert) {
@@ -595,14 +598,16 @@ TestFunc(var)_$1(VarArgs)
 
         canConvert = (var_type[i] == NC_CHAR) CheckText($1);
 
-        for (allInExtRange = 1, j = 0; j < var_nels[i]; j++) {
-            err = toMixedBase(j, var_rank[i], var_shape[i], index);
-            IF (err != 0) error("error in toMixedBase");
-            value[j]= hash_$1(cdf_format,var_type[i], var_rank[i], index,
-                              NCT_ITYPE($1));
-            IfCheckTextChar($1, var_type[i])
-                allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                          var_type[i], NCT_ITYPE($1));
+        if (canConvert) {
+            for (allInExtRange = 1, j = 0; j < var_nels[i]; j++) {
+                err = toMixedBase(j, var_rank[i], var_shape[i], index);
+                IF (err != 0) error("error in toMixedBase");
+                value[j]= hash_$1(cdf_format,var_type[i], var_rank[i], index,
+                                  NCT_ITYPE($1));
+                IfCheckTextChar($1, var_type[i])
+                    allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                              var_type[i], NCT_ITYPE($1));
+            }
         }
         err = PutVar($1)(ncid, i, value);
         if (canConvert) {
@@ -816,16 +821,18 @@ ifdef(`PNETCDF',`dnl
                 nels *= edge[j];
             }
 
-            for (allInExtRange = 1, j = 0; j < nels; j++) {
-                err = toMixedBase(j, var_rank[i], edge, index);
-                IF (err != 0) error("error in toMixedBase");
-                for (d = 0; d < var_rank[i]; d++)
-                    index[d] += start[d];
-                value[j]= hash_$1(cdf_format,var_type[i], var_rank[i], index,
-                                  NCT_ITYPE($1));
-                IfCheckTextChar($1, var_type[i])
-                    allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                              var_type[i], NCT_ITYPE($1));
+            if (canConvert) {
+                for (allInExtRange = 1, j = 0; j < nels; j++) {
+                    err = toMixedBase(j, var_rank[i], edge, index);
+                    IF (err != 0) error("error in toMixedBase");
+                    for (d = 0; d < var_rank[i]; d++)
+                        index[d] += start[d];
+                    value[j]= hash_$1(cdf_format,var_type[i], var_rank[i], index,
+                                      NCT_ITYPE($1));
+                    IfCheckTextChar($1, var_type[i])
+                        allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                                  var_type[i], NCT_ITYPE($1));
+                }
             }
             err = PutVara($1)(ncid, i, start, edge, value);
             if (canConvert) {
@@ -1065,16 +1072,18 @@ ifdef(`PNETCDF',`dnl
                     }
                 }
 */
-                for (allInExtRange = 1, j = 0; j < nels; j++) {
-                    err = toMixedBase(j, var_rank[i], count, index2);
-                    IF (err != 0) error("error in toMixedBase");
-                    for (d = 0; d < var_rank[i]; d++)
-                        index2[d] = index[d] + index2[d] * (IntType)stride[d];
-                    value[j] = hash_$1(cdf_format,var_type[i], var_rank[i],
-                                       index2, NCT_ITYPE($1));
-                    IfCheckTextChar($1, var_type[i])
-                        allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                                  var_type[i], NCT_ITYPE($1));
+                if (canConvert) {
+                    for (allInExtRange = 1, j = 0; j < nels; j++) {
+                        err = toMixedBase(j, var_rank[i], count, index2);
+                        IF (err != 0) error("error in toMixedBase");
+                        for (d = 0; d < var_rank[i]; d++)
+                            index2[d] = index[d] + index2[d] * (IntType)stride[d];
+                        value[j] = hash_$1(cdf_format,var_type[i], var_rank[i],
+                                           index2, NCT_ITYPE($1));
+                        IfCheckTextChar($1, var_type[i])
+                            allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                                      var_type[i], NCT_ITYPE($1));
+                    }
                 }
                 err = PutVars($1)(ncid, i, index, count, stride, value);
                 if (canConvert) {
@@ -1323,16 +1332,18 @@ ifdef(`PNETCDF',`dnl
                     for (; jj > 0; jj--)
                         imap[jj-1] = imap[jj] * (PTRDType)count[jj];
                 }
-                for (allInExtRange = 1, j = 0; j < nels; j++) {
-                    err = toMixedBase(j, var_rank[i], count, index2);
-                    IF (err != 0) error("error in toMixedBase");
-                    for (d = 0; d < var_rank[i]; d++)
-                        index2[d] = index[d] + index2[d] * (IntType)stride[d];
-                    value[j] = hash_$1(cdf_format,var_type[i], var_rank[i],
-                                       index2, NCT_ITYPE($1));
-                    IfCheckTextChar($1, var_type[i])
-                        allInExtRange &= inRange3(cdf_format, (double)value[j],
-                                                  var_type[i], NCT_ITYPE($1));
+                if (canConvert) {
+                    for (allInExtRange = 1, j = 0; j < nels; j++) {
+                        err = toMixedBase(j, var_rank[i], count, index2);
+                        IF (err != 0) error("error in toMixedBase");
+                        for (d = 0; d < var_rank[i]; d++)
+                            index2[d] = index[d] + index2[d] * (IntType)stride[d];
+                        value[j] = hash_$1(cdf_format,var_type[i], var_rank[i],
+                                           index2, NCT_ITYPE($1));
+                        IfCheckTextChar($1, var_type[i])
+                            allInExtRange &= inRange3(cdf_format, (double)value[j],
+                                                      var_type[i], NCT_ITYPE($1));
+                    }
                 }
                 err = PutVarm($1)(ncid,i,index,count,stride,imap,value);
                 if (canConvert) {
diff --git a/test/nc_test/test_read.m4 b/test/nc_test/test_read.m4
index ef517e8..5123092 100644
--- a/test/nc_test/test_read.m4
+++ b/test/nc_test/test_read.m4
@@ -10,7 +10,7 @@ dnl
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: test_read.m4 2672 2016-12-03 19:23:53Z wkliao $ */
+/* $Id: test_read.m4 3419 2017-09-24 18:56:39Z wkliao $ */
 
 dnl
 dnl The command-line m4 macro "PNETCDF" is to differentiate PnetCDF and netCDF
@@ -73,7 +73,7 @@ TestFunc(strerror)(void)
         {NC_ENOTINDEFINE, "NetCDF: Operation not allowed in data mode"},
         {NC_EINDEFINE, "NetCDF: Operation not allowed in define mode"},
         {NC_EINVALCOORDS, "NetCDF: Index exceeds dimension bound"},
-        {NC_EMAXDIMS, "NetCDF: NC_MAX_DIMS exceeded"},
+        {NC_EMAXDIMS, "NetCDF: NC_MAX_DIMS or NC_MAX_VAR_DIMS exceeded"},
         {NC_ENAMEINUSE, "NetCDF: String match to name in use"},
         {NC_ENOTATT, "NetCDF: Attribute not found"},
         {NC_EMAXATTS, "NetCDF: NC_MAX_ATTRS exceeded"},
@@ -83,7 +83,7 @@ TestFunc(strerror)(void)
         {NC_EMAXVARS, "NetCDF: NC_MAX_VARS exceeded"},
         {NC_ENOTVAR, "NetCDF: Variable not found"},
         {NC_EGLOBAL, "NetCDF: Action prohibited on NC_GLOBAL varid"},
-        {NC_ENOTNC, "NetCDF: Unknown file format"},
+        {NC_ENOTNC, "NetCDF: Unknown file format (file format violates CDF specification)"},
         {NC_ESTS, "NetCDF: In Fortran, string too short"},
         {NC_EMAXNAME, "NetCDF: NC_MAX_NAME exceeded"},
         {NC_EUNLIMIT, "NetCDF: NC_UNLIMITED size already in use"},
@@ -109,7 +109,7 @@ TestFunc(strerror)(void)
     for (i=0; i<LEN_OF(ncerrs); i++) {
         const char *message = APIFunc(strerror)(ncerrs[i].status);
         IF (strcmp(message, ncerrs[i].msg) != 0)
-            error("APIFunc(strerror)(%d) should return `%s', not `%s'",
+            error("APIFunc(strerror)(%d) should return \"%s\", not \"%s\"",
                   ncerrs[i].status, ncerrs[i].msg, message);
         ELSE_NOK
     }
@@ -142,17 +142,24 @@ ifdef(`PNETCDF', ``#'if 1', ``#'if 0')
     /* Try to open a nonexistent file */
     err = FileOpen("tooth-fairy.nc", NC_NOWRITE, &ncid); /* should fail */
 
-    /* on some systems, opening an nonexisting file will actually create the
-     * file. In this case, we print the error messages on screen and move on
-     * to the next test, instead of aborting the entire test.
+    /* on some systems (such as Lustre), opening an nonexisting file will
+     * actually create the file. In this case, we print the error messages on
+     * screen and move on to the next test, instead of aborting the entire test.
+     * The created file will be of zero-length and PnetCDF should complain it
+     * is not an NC file, i.e. NC_ENOTNC.
      */
-    IF (err == NC_NOERR)
+    IF (err == NC_NOERR) {
         error("opening a nonexistent file expects to fail, but got NC_NOERR\n");
+    }
 ifdef(`PNETCDF',
-    `else IF (err != NC_ENOENT && err != NC_EFILE)
+    `else IF (err == NC_ENOTNC) {
+        error("opening a nonexistent file actually creates the file, indicating an MPI-IO internal error\n");
+    }
+    else IF (err != NC_ENOENT && err != NC_EFILE) {
         /* older version of OpenMPI and MPICH may return MPI_ERR_IO instead of
          * MPI_ERR_NO_SUCH_FILE */
-        error("expecting NC_ENOENT or NC_EFILE but got %s", nc_err_code_name(err));
+        error("expecting NC_ENOENT or NC_EFILE but got %s, indicating an MPI-IO internal error", nc_err_code_name(err));
+    }
     else {
         nok++;
     }', `
@@ -580,7 +587,7 @@ TestFunc(inq_dimid)(void)
         ELSE_NOK
         err = APIFunc(inq_dimid)(ncid, dim_name[i], &dimid);
         IF (err != NC_NOERR)
-            error("inq_dimid: %s", APIFunc(strerror)(err));
+            error("inq_dimid for dim_name[%d]=%s : %s",i,dim_name[i], APIFunc(strerror)(err));
         else IF (dimid != i)
             error("expected %d, got %d", i, dimid);
         ELSE_NOK
diff --git a/test/nc_test/test_write.m4 b/test/nc_test/test_write.m4
index c7d31ca..1010933 100644
--- a/test/nc_test/test_write.m4
+++ b/test/nc_test/test_write.m4
@@ -10,7 +10,7 @@ dnl
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: test_write.m4 2687 2016-12-08 18:32:13Z wkliao $ */
+/* $Id: test_write.m4 3437 2017-10-11 20:26:33Z wkliao $ */
 
 dnl
 dnl The command-line m4 macro "PNETCDF" is to differentiate PnetCDF and netCDF
@@ -22,7 +22,11 @@ dnl
 #include <sys/types.h>  /* open() */
 #include <sys/stat.h>   /* open() */
 #include <fcntl.h>      /* open() */
+#ifdef _MSC_VER
+#include <io.h>
+#else
 #include <unistd.h>     /* read() */
+#endif
 
 #include "tests.h"
 #include "math.h"
@@ -208,8 +212,8 @@ ifdef(`PNETCDF', `
 
 ifdef(`PNETCDF', `
     err = ncmpi_end_indep_data(ncid);
-    IF (err != NC_ENOTINDEP)
-        error("expecting NC_ENOTINDEP but got %s", nc_err_code_name(err));')dnl
+    IF (err != NC_EINDEFINE)
+        error("expecting NC_EINDEFINE but got %s", nc_err_code_name(err));')dnl
 
     err = APIFunc(redef)(ncid);
     IF (err != NC_EINDEFINE)
@@ -1594,7 +1598,7 @@ TestFunc(rename_var)(VarArgs)
             error("expecting NC_ENAMEINUSE but got %s", nc_err_code_name(err));
         ELSE_NOK
         strcpy(name, "new_");
-        strcat(name, var_name[i]);
+        strncat(name, var_name[i], sizeof(name) - strlen(name) - 1);
         err = APIFunc(rename_var)(ncid, i, name);
         IF (err != NC_NOERR)
             error("rename_var: %s", APIFunc(strerror)(err));
@@ -1613,7 +1617,7 @@ TestFunc(rename_var)(VarArgs)
         error("enddef: %s", APIFunc(strerror)(err));
     for (i = 0; i < numVars; i++) {
         strcpy(name, "even_longer_");
-        strcat(name, var_name[i]);
+        strncat(name, var_name[i], sizeof(name) - strlen(name) - 1);
         err = APIFunc(rename_var)(ncid, i, name);
         IF (err != NC_ENOTINDEFINE)
             error("expecting NC_ENOTINDEFINE but got %s", nc_err_code_name(err));
@@ -1930,7 +1934,7 @@ TestFunc(rename_att)(AttVarArgs)
                 error("expecting NC_ENOTATT but got %s", nc_err_code_name(err));
             ELSE_NOK
             strcpy(newname, "new_");
-            strcat(newname, attname);
+            strncat(newname, attname, sizeof(newname) - strlen(newname) - 1);
             err = APIFunc(rename_att)(ncid, varid, attname, newname);
             IF (err != NC_NOERR)
                 error("rename_att: %s", APIFunc(strerror)(err));
@@ -1958,7 +1962,7 @@ TestFunc(rename_att)(AttVarArgs)
             atttype = ATT_TYPE(i,j);
             attlength = ATT_LEN(i,j);
             strcpy(newname, "new_");
-            strcat(newname, attname);
+            strncat(newname, attname, sizeof(newname) - strlen(newname) - 1);
             err = APIFunc(inq_attname)(ncid, varid, j, name);
             IF (err != NC_NOERR)
                 error("inq_attname: %s", APIFunc(strerror)(err));
@@ -2005,9 +2009,9 @@ TestFunc(rename_att)(AttVarArgs)
         for (j = 0; j < NATTS(i); j++) {
             attname = ATT_NAME(i,j);
             strcpy(oldname, "new_");
-            strcat(oldname, attname);
+            strncat(oldname, attname, sizeof(oldname) - strlen(oldname) - 1);
             strcpy(newname, "even_longer_");
-            strcat(newname, attname);
+            strncat(newname, attname, sizeof(newname) - strlen(newname) - 1);
             err = APIFunc(rename_att)(ncid, varid, oldname, newname);
             IF (err != NC_ENOTINDEFINE)
                 error("expecting NC_ENOTINDEFINE but got %s", nc_err_code_name(err));
@@ -2230,10 +2234,12 @@ TestFunc(set_fill)(VarArgs)
     IF (err != NC_NOERR)
         error("enddef: %s", APIFunc(strerror)(err));
     err = APIFunc(set_fill)(ncid, NC_FILL, &old_fillmode);
-ifdef(`PNETCDF',
-    `IF (err != NC_ENOTINDEFINE)
-        error("expecting NC_ENOTINDEFINE but got %s", nc_err_code_name(err));',
-    `IF (err)
+ifdef(`PNETCDF',`
+    IF (err != NC_ENOTINDEFINE)
+        error("expecting NC_ENOTINDEFINE but got %s", nc_err_code_name(err));
+    IF (old_fillmode != NC_NOFILL)
+        error("Unexpected old fill mode: %d", old_fillmode);',`
+    IF (err)
         error("nc_set_fill: %s", nc_strerror(err));
     IF (old_fillmode != NC_FILL)
         error("Unexpected old fill mode: %d", old_fillmode);')dnl
@@ -2302,6 +2308,14 @@ ifdef(`PNETCDF', `
     def_dims(ncid);
     Def_Vars(ncid, numVars);
 
+#ifdef NO_NC_GLOBAL_FILLVALUE
+    /* See r3403 and RELEASE_NOTES 1.9.0 */
+    /* expect NC_EGLOBAL when try to put _FillValue to NC_GLOBAL */
+    err = APIFunc(put_att_int)(ncid, NC_GLOBAL, _FillValue, NC_INT, 1, &i);
+    IF (err != NC_EGLOBAL)
+        error("redef: expect NC_EGLOBAL but got %s", nc_err_code_name(err));
+#endif
+
     /* set _FillValue = 42 for all vars */
     fill = 42;
     text = 42;
@@ -2317,6 +2331,13 @@ ifdef(`PNETCDF', `
         }
     }
 
+ifdef(`PNETCDF',`
+    err = APIFunc(set_fill)(ncid, NC_FILL, &old_fillmode);
+    IF (err)
+        error("set_fill: %s", APIFunc(strerror)(err));
+    IF (old_fillmode != NC_NOFILL)
+        error("Unexpected old fill mode: %d", old_fillmode);')dnl
+
     /* data mode. write records */
     err = APIFunc(enddef)(ncid);
     IF (err != NC_NOERR)
@@ -2352,9 +2373,50 @@ ifdef(`PNETCDF', `
             ELSE_NOK
         }
     }
+    /* enter redef mode and add a new variable, check NC_ELATEFILL */
+    err = APIFunc(redef)(ncid);
+    IF (err != NC_NOERR)
+        error("redef: %s", APIFunc(strerror)(err));
+
+    /* it is not allowed to define fill value when variable already exists */
+    err = APIFunc(def_var_fill)(ncid, 0, 0, &value);
+    IF (err != NC_ELATEFILL)
+        error("redef: expect NC_ELATEFILL but got %s", nc_err_code_name(err));
+    err = APIFunc(def_var)(ncid, "new_var", NC_INT, 0, NULL, &varid);
+    IF (err != NC_NOERR)
+        error("redef: %s", APIFunc(strerror)(err));
+    err = APIFunc(def_var_fill)(ncid, varid, 0, &value);
+    IF (err != NC_NOERR)
+        error("def_var_fill: %s", APIFunc(strerror)(err));
+
     err = APIFunc(close)(ncid);
     IF (err != NC_NOERR)
         error("close: %s", APIFunc(strerror)(err));
+
+    /* test NC_ELATEFILL for the case of re-opening the file */
+    err = FileOpen(scratch, NC_WRITE, &ncid);
+    IF (err != NC_NOERR)
+        error("open: %s", APIFunc(strerror)(err));
+
+    err = APIFunc(redef)(ncid);
+    IF (err != NC_NOERR)
+        error("redef: %s", APIFunc(strerror)(err));
+
+    for (i = 0; i < numVars; i++) {
+        if (var_type[i] == NC_CHAR) {
+            err = APIFunc(put_att_text)(ncid, i, "_FillValue", 1, &text);
+            IF (err != NC_ELATEFILL)
+                error("put_att_text: expect NC_ELATEFILL but got %d", APIFunc(strerrno)(err));
+        } else {
+            err = APIFunc(put_att_double)(ncid, i, "_FillValue",var_type[i],1,&fill);
+            IF (err != NC_ELATEFILL)
+                error("put_att_double: expect NC_ELATEFILL but got %d", APIFunc(strerrno)(err));
+        }
+    }
+    err = APIFunc(close)(ncid);
+    IF (err != NC_NOERR)
+        error("close: %s", APIFunc(strerror)(err));
+
     err = FileDelete(scratch, info);
     IF (err != NC_NOERR)
         error("remove of %s failed", scratch);
@@ -2392,7 +2454,7 @@ APIFunc(get_file_version)(char *path, int *version)
 
    if (read_len != MAGIC_NUM_LEN) {
        printf("Error: reading NC magic string unexpected short read\n");
-       return 0;
+       return NC_ENOTNC;
    }
 
    if (strncmp(magic, "CDF", MAGIC_NUM_LEN-1)==0) {
diff --git a/test/nc_test/tests.h.m4 b/test/nc_test/tests.h.m4
index 8f6a85f..15c5812 100644
--- a/test/nc_test/tests.h.m4
+++ b/test/nc_test/tests.h.m4
@@ -10,7 +10,14 @@ dnl
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: tests.h.m4 2649 2016-11-23 17:46:44Z wkliao $ */
+/* $Id: tests.h.m4 3341 2017-08-25 22:29:08Z wkliao $ */
+
+#ifndef TESTS_H
+#define TESTS_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h> /* output of 'configure' */
+#endif
 
 define(`IntType', `ifdef(`PNETCDF',`MPI_Offset',`size_t')')dnl
 define(`TestFunc',`ifdef(`PNETCDF',`test_ncmpi_put_$1',`test_nc_put_$1')')dnl
@@ -30,8 +37,6 @@ define(`APIFunc',` ifdef(`PNETCDF',`ncmpi_$1',`nc_$1')')dnl
 #include <testutils.h>
 #include "error.h"
 
-#include <ncconfig.h> /* output of 'configure' */
-
 #if defined(_CRAY) && !defined(_CRAYIEEE)
 #define CRAYFLOAT 1 /* CRAY Floating point */
 #elif defined(_SX) && defined(_FLOAT2)	/* NEC SUPER-UX in CRAY mode */
@@ -240,38 +245,9 @@ nv=1*11+5*11+5*4+5*4*4=11+55+20+80 = 166 (if NTYPES==11)
 extern "C" {
 #endif
 
-
     /* Non-standard internal types */
 
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
 typedef char text;
-typedef signed char schar;
-#if !defined(HAVE_UCHAR) && !defined(__osf__) && !defined(_AIX)
-typedef unsigned char uchar;
-#endif
-
-#ifndef HAVE_USHORT
-typedef unsigned short int  ushort;
-#endif
-
-#ifndef HAVE_UINT
-typedef unsigned int  uint;
-#endif
-
-#ifndef HAVE_INT64
-typedef long long  int64;
-#endif
-
-#ifndef HAVE_UINT64
-typedef unsigned long long  uint64;
-#endif
-
-typedef long long longlong;
-typedef unsigned long long ulonglong;
-
 
     /* Global variables - filenames */
 
@@ -518,3 +494,5 @@ foreach(`itype',(ITYPE_LIST),`CHECK_ATTS(itype)
 #ifdef __cplusplus
 }
 #endif
+#
+#endif
diff --git a/test/nc_test/tst_atts.c b/test/nc_test/tst_atts.c
index d687fd5..e42ff25 100644
--- a/test/nc_test/tst_atts.c
+++ b/test/nc_test/tst_atts.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: tst_atts.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: tst_atts.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* This program is based on the test program tst_atts.c of the netCDF package */
 
@@ -2203,7 +2203,7 @@ int main(int argc, char *argv[])
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -2243,6 +2243,6 @@ int main(int argc, char *argv[])
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nc_test/tst_atts3.c b/test/nc_test/tst_atts3.c
index ddaf7c6..3656223 100644
--- a/test/nc_test/tst_atts3.c
+++ b/test/nc_test/tst_atts3.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: tst_atts3.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: tst_atts3.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* This program is based on the test program tst_atts3.c of the netCDF package */
 
@@ -769,7 +769,7 @@ int main(int argc, char *argv[])
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -809,6 +809,6 @@ int main(int argc, char *argv[])
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nc_test/tst_misc.c b/test/nc_test/tst_misc.c
index 2d7c1cc..2cf759b 100644
--- a/test/nc_test/tst_misc.c
+++ b/test/nc_test/tst_misc.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: tst_misc.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: tst_misc.c 3383 2017-09-17 18:26:44Z wkliao $ */
 
 /* This program is based on the test program tst_misc.c of the netCDF package */
 
@@ -28,7 +28,7 @@ int
 main(int argc, char **argv) 
 {
     char *cmd_str, filename[256];
-    int rank, nprocs, err, nerrs=0;
+    int rank, nprocs, err, nerrs=0, ncid;
 
     MPI_Init(&argc, &argv);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
@@ -37,7 +37,7 @@ main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (rank > 0) goto fn_exit;
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
@@ -53,10 +53,9 @@ main(int argc, char **argv)
 */
    {
 #define DATA_LEN 32    
-     int ncid,openstat;
       char dummy_data[DATA_LEN];
+      int i, openstat;
       FILE *file;
-      int i, nerrs=0;
 
       /* Appease valgrind by initializing our data. */
       for (i = 0; i < DATA_LEN; i++)
@@ -83,6 +82,10 @@ main(int argc, char **argv)
       }
    }
 
+   err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL,
+                      &ncid); CHECK_ERR
+   err = ncmpi_close(ncid); CHECK_ERR
+
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
     err = ncmpi_inq_malloc_size(&malloc_size);
@@ -101,5 +104,5 @@ fn_exit:
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/nc_test/tst_names.c b/test/nc_test/tst_names.c
index 63e4462..fb527e4 100644
--- a/test/nc_test/tst_names.c
+++ b/test/nc_test/tst_names.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: tst_names.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: tst_names.c 3440 2017-10-15 18:46:02Z wkliao $ */
 
 /* This program is based on the test program tst_names.c of the netCDF package */
 
@@ -199,9 +199,12 @@ main(int argc, char **argv)
        "x\xED\xAE\x80\xED\xB0\x80",
        "x\xED\xAE\x80\xED\xBF\xBF",
        "x\xED\xAF\xBF\xED\xB0\x80",
-       "x\xED\xAF\xBF\xED\xBF\xBF",
+       "x\xED\xAF\xBF\xED\xBF\xBF"
+#if 0
+       /* The two below is legal since UTF8PROC_VERSION_MAJOR 2 */
        "x\xEF\xBF\xBE",		/* other illegal code positions */
        "x\xEF\xBF\xBF"
+#endif
    };
    int i, j;
 #define NUM_BAD (sizeof notvalid / sizeof notvalid[0])
@@ -230,7 +233,7 @@ main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -325,5 +328,5 @@ main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/nc_test/tst_nofill.c b/test/nc_test/tst_nofill.c
index 9e25447..6952745 100644
--- a/test/nc_test/tst_nofill.c
+++ b/test/nc_test/tst_nofill.c
@@ -9,7 +9,7 @@
   when invoked with the blksize argument between 2091953 and 2150032,
   inclusive, and succeeds for other blksizes.
 
-  $Id: tst_nofill.c 2744 2016-12-28 16:25:22Z wkliao $
+  $Id: tst_nofill.c 3341 2017-08-25 22:29:08Z wkliao $
 */
 
 #include <stdio.h>
@@ -359,7 +359,7 @@ main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -482,5 +482,5 @@ main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/nc_test/tst_norm.c b/test/nc_test/tst_norm.c
index 3183fff..e0f63b7 100644
--- a/test/nc_test/tst_norm.c
+++ b/test/nc_test/tst_norm.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: tst_norm.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: tst_norm.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* This program is based on the test program tst_norm.c of the netCDF package */
 
@@ -178,7 +178,7 @@ main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -216,5 +216,5 @@ main(int argc, char **argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/nc_test/tst_small.c b/test/nc_test/tst_small.c
index 9899e2b..68457b5 100644
--- a/test/nc_test/tst_small.c
+++ b/test/nc_test/tst_small.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: tst_small.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: tst_small.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* This program is based on the test program tst_small.c of the netCDF package */
 
@@ -423,7 +423,7 @@ int main(int argc, char *argv[])
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -495,6 +495,6 @@ int main(int argc, char *argv[])
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nc_test/util.c b/test/nc_test/util.c
index 5837f50..2fb37c6 100644
--- a/test/nc_test/util.c
+++ b/test/nc_test/util.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: util.c 2672 2016-12-03 19:23:53Z wkliao $
+ *  $Id: util.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 #include <math.h> /* floor() */
@@ -24,7 +24,8 @@ int
 inRange(const double value, const nc_type xtype)
 {
     switch (xtype) {
-        case NC_CHAR:   return value >= X_CHAR_MIN   && value <= X_CHAR_MAX;
+        /* for NC_CHAR, no type conversion will happen. Thus no NC_ERANGE */
+        case NC_CHAR:   return value >= CHAR_MIN     && value <= CHAR_MAX;
         case NC_BYTE:   return value >= X_BYTE_MIN   && value <= X_BYTE_MAX;
         case NC_SHORT:  return value >= X_SHORT_MIN  && value <= X_SHORT_MAX;
         case NC_INT:    return value >= X_INT_MIN    && value <= X_INT_MAX;
@@ -66,7 +67,8 @@ inRange_float(const double value, const nc_type xtype)
     double min, max;
 
     switch (xtype) {
-        case NC_CHAR:   min = X_CHAR_MIN;   max = X_CHAR_MAX;  break;
+        /* for NC_CHAR, no type conversion will happen. Thus no NC_ERANGE */
+        case NC_CHAR:   min = CHAR_MIN;     max = CHAR_MAX;    break;
         case NC_BYTE:   min = X_BYTE_MIN;   max = X_BYTE_MAX;  break;
         case NC_SHORT:  min = X_SHORT_MIN;  max = X_SHORT_MAX; break;
         case NC_INT:    min = X_INT_MIN;    max = X_INT_MAX;   break;
@@ -231,7 +233,7 @@ MPI_Offset roll( MPI_Offset n )
      * We don't use RAND_MAX here because not all compilation
      * environments define it (e.g. gcc(1) under SunOS 4.1.4).
      */
-    r = (MPI_Offset)(((rand() % 32768) / 32767.0) * (n - 1) + 0.5);
+    r = (MPI_Offset)(((random() % 32768) / 32767.0) * (n - 1) + 0.5);
     while (r >= n);
 
     return r;
@@ -306,7 +308,7 @@ int nc2dbl ( const nc_type xtype, const void *p, double *result)
     if ( ! p ) return 2;
     if ( ! result ) return 3;
     switch (xtype) {
-        case NC_CHAR:   *result = *((signed char *)    p); break;
+        case NC_CHAR:   *result = *((char *)           p); break;
         case NC_BYTE:   *result = *((signed char *)    p); break;
         case NC_UBYTE:  *result = *((unsigned char *)  p); break;
         case NC_SHORT:  *result = *((short *)          p); break;
@@ -341,6 +343,9 @@ int dbl2nc ( const double d, const nc_type xtype, void *p)
     if (p == NULL) return 1;
     switch (xtype) {
         case NC_CHAR:
+#if 1
+            *((char*)p) = (char)d;
+#else
             r = floor(0.5+d);
             /* d is obtained from hash() which may be set to X_CHAR_MIN (0)
              * or X_CHAR_MAX (255). When in-memory data type char is signed
@@ -354,6 +359,7 @@ int dbl2nc ( const double d, const nc_type xtype, void *p)
 #else
             *((char   *) p) = (char)r;
 #endif
+#endif
             break;
         case NC_BYTE:
             r = floor(0.5+d);
@@ -429,12 +435,14 @@ hash(const nc_type     xtype,
     double result = 0.0;
 
     /* If vector then elements 0 & 1 are min & max. Elements 2 & 3 are */
-    /* just < min & > max (except for NC_CHAR & NC_DOUBLE) */
+    /* just < min & > max (except for NC_DOUBLE) */
     if (abs(rank) == 1 && *index <= 3) {
         switch (*index) {
             case 0:
                 switch (xtype) {  /* test if can get/put MIN value */
-                    case NC_CHAR:   return X_CHAR_MIN;
+                    /* for NC_CHAR, no type conversion will happen. Thus the
+                     * any value between CHAR_MIN to CHAR_MAX is fine. */
+                    case NC_CHAR:   return CHAR_MIN;
                     case NC_BYTE:   return X_BYTE_MIN;
                     case NC_SHORT:  return X_SHORT_MIN;
                     case NC_INT:    return X_INT_MIN;
@@ -450,7 +458,9 @@ hash(const nc_type     xtype,
                 }
             case 1:
                 switch (xtype) {  /* test if can get/put MAX value */
-                    case NC_CHAR:   return X_CHAR_MAX;
+                    /* for NC_CHAR, no type conversion will happen. Thus the
+                     * any value between CHAR_MIN to CHAR_MAX is fine. */
+                    case NC_CHAR:   return CHAR_MAX;
                     case NC_BYTE:   return X_BYTE_MAX;
                     case NC_SHORT:  return X_SHORT_MAX;
                     case NC_INT:    return X_INT_MAX;
@@ -467,6 +477,8 @@ hash(const nc_type     xtype,
                 }
             case 2:
                 switch (xtype) {  /* test if can detect out-of-boundary value */
+                    /* for NC_CHAR, no type conversion will happen. Thus the
+                     * any value between CHAR_MIN to CHAR_MAX is fine. */
                     case NC_CHAR:   return 'A';
                     case NC_BYTE:   return X_BYTE_MIN-1.0;
                     case NC_SHORT:  return X_SHORT_MIN-1.0;
@@ -482,6 +494,8 @@ hash(const nc_type     xtype,
                 }
             case 3:
                 switch (xtype) {  /* test if can detect out-of-boundary value */
+                    /* for NC_CHAR, no type conversion will happen. Thus the
+                     * any value between CHAR_MIN to CHAR_MAX is fine. */
                     case NC_CHAR:   return 'Z';
                     case NC_BYTE:   return X_BYTE_MAX  +1.0;
                     case NC_SHORT:  return X_SHORT_MAX +1.0;
@@ -793,6 +807,7 @@ put_vars(int ncid, int numVars)
             err = toMixedBase(j, var_rank[i], var_shape[i], index);
             IF (err != NC_NOERR) error("toMixedBase");
             if (var_name[i][0] == 'c') { /* var_type[i] is NC_CHAR */
+                assert(var_type[i] == NC_CHAR);
                 text[j] = hash(var_type[i], var_rank[i], index);
             } else {
                 value[j] = hash(var_type[i], var_rank[i], index);
@@ -920,8 +935,8 @@ check_vars(int ncid, int numVars)
                 IF (err != NC_NOERR)
                     error("ncmpi_get_var1_text_all: %s", ncmpi_strerror(err));
                 IF (text != (char)expect) {
-                    error("Var %s (varid=%d) value read 0x%02x not that expected 0x%02x ",
-                          var_name[i], i, text, (char)expect);
+                    error("Var %s (varid=%d) value[%d] read %d not that expected %d ",
+                          var_name[i], i, j, text, (char)expect);
                     print_n_size_t(var_rank[i], index);
                 } else {
                     nok++;
diff --git a/test/nf90_test/Makefile.am b/test/nf90_test/Makefile.am
new file mode 100644
index 0000000..91d5cd7
--- /dev/null
+++ b/test/nf90_test/Makefile.am
@@ -0,0 +1,77 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .F90 .c
+
+AM_CPPFLAGS  = -I$(top_builddir)/src/include
+AM_CPPFLAGS += -I$(top_srcdir)/src/include
+AM_DEFAULT_SOURCE_EXT = .F90
+AM_CFLAGS = -I$(top_srcdir)/src/binding/f77 -I$(top_builddir)/src/binding/f77
+AM_FCFLAGS = -I$(top_builddir)/src/binding/f77 $(FC_MODINC)$(top_builddir)/src/binding/f90 $(FC_MODINC)../common
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la
+
+if RELAX_COORD_BOUND
+   AM_FCFLAGS += $(FC_DEFINE)RELAX_COORD_BOUND
+endif
+if DECL_MPI_OFFSET
+   AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+M4SRCS      = test_get.m4 \
+              test_put.m4  \
+              test_iget.m4 \
+              test_iput.m4
+
+M4SRCS_F90  = $(M4SRCS:.m4=.F90)
+
+F90_SRCS    = nf90_test.F90 \
+              nf90_error.F90 \
+              test_read.F90 \
+              test_write.F90 \
+              util.F90
+
+TESTPROGRAMS = nf90_test
+
+nf90_test_SOURCES = $(F90_SRCS) fortlib.c
+nodist_nf90_test_SOURCES = $(M4SRCS_F90)
+
+$(M4SRCS_F90): Makefile
+
+M4FLAGS += -I${top_srcdir}/m4
+
+.m4.F90:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+check_PROGRAMS = $(TESTPROGRAMS)
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+CLEANFILES = $(M4SRCS_F90) scratch.nc test.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+EXTRA_DIST = $(M4SRCS) README seq_runs.sh
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+# sequential runs only
+ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/nf90_test/Makefile.in b/test/nf90_test/Makefile.in
index 75a7eec..c12aa0a 100644
--- a/test/nf90_test/Makefile.in
+++ b/test/nf90_test/Makefile.in
@@ -1,96 +1,1146 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2614 2016-11-12 19:50:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at RELAX_COORD_BOUND_TRUE@am__append_1 = $(FC_DEFINE)RELAX_COORD_BOUND
+ at DECL_MPI_OFFSET_TRUE@am__append_2 = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = test/nf90_test
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES = tests.inc
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = nf90_test$(EXEEXT)
+am__objects_1 = nf90_test.$(OBJEXT) nf90_error.$(OBJEXT) \
+	test_read.$(OBJEXT) test_write.$(OBJEXT) util.$(OBJEXT)
+am_nf90_test_OBJECTS = $(am__objects_1) fortlib.$(OBJEXT)
+am__objects_2 = test_get.$(OBJEXT) test_put.$(OBJEXT) \
+	test_iget.$(OBJEXT) test_iput.$(OBJEXT)
+am__objects_3 = $(am__objects_2)
+nodist_nf90_test_OBJECTS = $(am__objects_3)
+nf90_test_OBJECTS = $(am_nf90_test_OBJECTS) \
+	$(nodist_nf90_test_OBJECTS)
+nf90_test_LDADD = $(LDADD)
+nf90_test_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+PPFCCOMPILE = $(FC) $(FC_DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS)
+LTPPFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(FC_DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_FCFLAGS) $(FCFLAGS)
+AM_V_PPFC = $(am__v_PPFC_ at AM_V@)
+am__v_PPFC_ = $(am__v_PPFC_ at AM_DEFAULT_V@)
+am__v_PPFC_0 = @echo "  PPFC    " $@;
+am__v_PPFC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(nf90_test_SOURCES) $(nodist_nf90_test_SOURCES)
+DIST_SOURCES = $(nf90_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/tests.inc.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
-
-include ../../macros.make
-
-INCLUDES  = -I../../src/lib -I../../src/libf
-INCLUDES += -I$(srcdir) -I$(srcdir)/../../src/libf
-INCLUDES += @FC_MODINC at ../../src/libf90
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
-
-ifeq (@RELAX_COORD_BOUND@, 1)
-FPPFLAGS := $(FPPFLAGS) @FC_DEFINE at RELAX_COORD_BOUND
-endif
-
-M4SRCS      = test_get.m4 \
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .F90 .c
+AM_CPPFLAGS = -I$(top_builddir)/src/include \
+	-I$(top_srcdir)/src/include
+AM_DEFAULT_SOURCE_EXT = .F90
+AM_CFLAGS = -I$(top_srcdir)/src/binding/f77 -I$(top_builddir)/src/binding/f77
+AM_FCFLAGS = -I$(top_builddir)/src/binding/f77 \
+	$(FC_MODINC)$(top_builddir)/src/binding/f90 \
+	$(FC_MODINC)../common $(am__append_1) $(am__append_2)
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la
+M4SRCS = test_get.m4 \
               test_put.m4  \
               test_iget.m4 \
               test_iput.m4
 
-M4SRCS_F90  = $(M4SRCS:.m4=.F90)
-
-F90_SRCS    = nf90_error.F90 \
-              nf90_test.F90 \
+M4SRCS_F90 = $(M4SRCS:.m4=.F90)
+F90_SRCS = nf90_test.F90 \
+              nf90_error.F90 \
               test_read.F90 \
               test_write.F90 \
               util.F90
 
-C_SRCS      = fortlib.c
+TESTPROGRAMS = nf90_test
+nf90_test_SOURCES = $(F90_SRCS) fortlib.c
+nodist_nf90_test_SOURCES = $(M4SRCS_F90)
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+CLEANFILES = $(M4SRCS_F90) scratch.nc test.nc core core.* *.gcda *.gcno *.gcov gmon.out
+EXTRA_DIST = $(M4SRCS) README seq_runs.sh
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .F90 .c .lo .log .m4 .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/nf90_test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/nf90_test/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tests.inc: $(top_builddir)/config.status $(srcdir)/tests.inc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+nf90_test$(EXEEXT): $(nf90_test_OBJECTS) $(nf90_test_DEPENDENCIES) $(EXTRA_nf90_test_DEPENDENCIES) 
+	@rm -f nf90_test$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(nf90_test_OBJECTS) $(nf90_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fortlib.Po at am__quote@
+
+.F90.o:
+	$(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ $<
+
+.F90.obj:
+	$(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.F90.lo:
+	$(AM_V_PPFC)$(LTPPFCCOMPILE) -c -o $@ $<
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-HEADERS     = tests.inc
+pdf: pdf-am
 
-C_OBJS   = $(C_SRCS:.c=.o)
-F90_OBJS = $(F90_SRCS:.F90=.o) $(M4SRCS_F90:.F90=.o)
-OBJS     = $(C_OBJS) $(F90_OBJS)
+pdf-am:
 
-PROGS    = nf90_test
+ps: ps-am
 
-GARBAGE  = $(PROGS) $(M4SRCS_F90) \
-           scratch.nc test.nc
+ps-am:
 
-PACKING_LIST = $(C_SRCS) $(F90_SRCS) $(M4SRCS) $(HEADERS) depend Makefile.in README
+tests: tests-am
 
-all: $(PROGS)
+tests-am: tests-local
 
-$(C_OBJS): $(srcdir)/../common/testutils.h
+uninstall-am:
 
-$(PROGS): ../common/libtestutils.a
+.MAKE: check-am install-am install-strip
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
 
-nf90_test: $(OBJS) $(LIBRARY)
-	$(LINK.F90) $(OBJS) $(LDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-tags: $(F90_SRCS) $(C_SRCS) FORCE
-	ctags -t $(F90_SRCS) $(C_SRCS) ../fortran/*.c ../libsrc/*.c
 
-# This simple testing target ensures that the test files are present
-testing check: all
-	$(RM) -f $(TEST_OUTDIR)/scratch.nc $(TEST_OUTDIR)/test.nc
-	$(TEST_SEQRUN) ./nf90_test -c    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test       -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -c -2 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -2    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -c -5 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -5    -d $(TEST_OUTDIR)
+$(M4SRCS_F90): Makefile
 
-verbose_testing: all
-	$(RM) -f $(TEST_OUTDIR)/scratch.nc $(TEST_OUTDIR)/test.nc
-	$(TEST_SEQRUN) ./nf90_test -v -c    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -v       -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -v -c -2 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -v -2    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -v -c -5 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf90_test -v -5    -d $(TEST_OUTDIR)
+.m4.F90:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
 
-#test.nc: 
-#	(cd ../nc_test && $(MAKE) $(MFLAGS) nc_test && ./nc_test -c)
-#	cp ../nc_test/test.nc .
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
+# sequential runs only
 ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
-include $(srcdir)/depend
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/nf90_test/depend b/test/nf90_test/depend
deleted file mode 100644
index ace6d17..0000000
--- a/test/nf90_test/depend
+++ /dev/null
@@ -1,28 +0,0 @@
-fortlib.o: fortlib.c
-nf90_error.o: ../../src/libf/pnetcdf.inc
-nf90_error.o: nf90_error.F90
-nf90_error.o: tests.inc
-nf90_test.o: ../../src/libf/pnetcdf.inc
-nf90_test.o: nf90_test.F90
-nf90_test.o: tests.inc
-test_get.o: ../../src/libf/pnetcdf.inc
-test_get.o: test_get.F90
-test_get.o: tests.inc
-test_put.o: ../../src/libf/pnetcdf.inc
-test_put.o: test_put.F90
-test_put.o: tests.inc
-test_iget.o: ../../src/libf/pnetcdf.inc
-test_iget.o: test_iget.F90
-test_iget.o: tests.inc
-test_iput.o: ../../src/libf/pnetcdf.inc
-test_iput.o: test_iput.F90
-test_iput.o: tests.inc
-test_read.o: ../../src/libf/pnetcdf.inc
-test_read.o: test_read.F90
-test_read.o: tests.inc
-test_write.o: ../../src/libf/pnetcdf.inc
-test_write.o: test_write.F90
-test_write.o: tests.inc
-util.o: ../../src/libf/pnetcdf.inc
-util.o: tests.inc
-util.o: util.F90
diff --git a/test/nf90_test/fortlib.c b/test/nf90_test/fortlib.c
index 6d2303d..b5d0bd3 100644
--- a/test/nf90_test/fortlib.c
+++ b/test/nf90_test/fortlib.c
@@ -1,5 +1,5 @@
 /*
- * $Id: fortlib.c 1468 2013-10-26 16:53:18Z wkliao $
+ * $Id: fortlib.c 3341 2017-08-25 22:29:08Z wkliao $
  *
  * This file contains support functions for FORTRAN code.  For example,
  * under HP-UX A.09.05, the U77 library doesn't contain the exit()
@@ -83,9 +83,8 @@ FORTRAN_API void FORT_CALL ud_abort_(int *v1) {
 * environments define it (e.g. gcc(1) under SunOS 4.1.3).
 */
 FORTRAN_API double FORT_CALL ud_rand_(int *seed) {
-	if (*seed != 0)
-		srand(*seed);
-	return (rand() % 32768 )/ 32767.0;
+	if (*seed != 0) srandom(*seed);
+	return (double)(random() % 32768 ) / 32767.0;
 }
 
 #ifdef F77_NAME_UPPER
diff --git a/test/nf90_test/nf90_test.F90 b/test/nf90_test/nf90_test.F90
index e905bb7..cb6430f 100644
--- a/test/nf90_test/nf90_test.F90
+++ b/test/nf90_test/nf90_test.F90
@@ -2,7 +2,7 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: nf90_test.F90 2131 2015-09-25 22:33:12Z wkliao $
+! $Id: nf90_test.F90 3341 2017-08-25 22:29:08Z wkliao $
 !
 
 !
@@ -47,7 +47,7 @@
 
         subroutine report_test
         implicit        none
-        character*128   msg
+        character*1024  msg
 #include "tests.inc"
 
         write(msg,"(A,I1)") '*** TESTING F90 '//trim(PROGNAME)// &
@@ -82,7 +82,7 @@
             print *, '  ### ', nfails, ' FAILURES TESTING ', name,  &
                      '! Stop ... ###'
             call report_test
-            stop
+            stop 2
         end if
         end
 
@@ -108,7 +108,7 @@
 !       DIGITAL Visual Fortran needs DFPORT for iargc
         USE DFPORT
         implicit        none
-#elif defined(NAGf90Fortran)
+#elif defined(NAGFortran)
         USE F90_UNIX_ENV, only : iargc, getarg
         implicit none
 #else
diff --git a/test/nf90_test/seq_runs.sh b/test/nf90_test/seq_runs.sh
new file mode 100755
index 0000000..d5d7a73
--- /dev/null
+++ b/test/nf90_test/seq_runs.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+rm -f ${TESTOUTDIR}/scratch.nc ${TESTOUTDIR}/test.nc
+
+${TESTSEQRUN} ./nf90_test -c    -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nf90_test       -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}      -q ${TESTOUTDIR}/test.nc
+
+${TESTSEQRUN} ./nf90_test -c -2 -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nf90_test -2    -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}      -q ${TESTOUTDIR}/test.nc
+
+${TESTSEQRUN} ./nf90_test -c -5 -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nf90_test -5    -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}      -q ${TESTOUTDIR}/test.nc
+
+
diff --git a/test/nf90_test/test_read.F90 b/test/nf90_test/test_read.F90
index 4d3f7c3..e397cb4 100644
--- a/test/nf90_test/test_read.F90
+++ b/test/nf90_test/test_read.F90
@@ -2,7 +2,7 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: test_read.F90 2474 2016-09-05 23:13:05Z wkliao $
+! $Id: test_read.F90 3419 2017-09-24 18:56:39Z wkliao $
 !
 
 ! Test nf90mpi_strerror.
@@ -58,7 +58,7 @@
         data msg(6)  / 'NetCDF: Operation not allowed in data mode' /
         data msg(7)  / 'NetCDF: Operation not allowed in define mode' /
         data msg(8)  / 'NetCDF: Index exceeds dimension bound' /
-        data msg(9)  / 'NetCDF: NC_MAX_DIMS exceeded' /
+        data msg(9)  / 'NetCDF: NC_MAX_DIMS or NC_MAX_VAR_DIMS exceeded' /
         data msg(10) / 'NetCDF: String match to name in use' /
         data msg(11) / 'NetCDF: Attribute not found' /
         data msg(12) / 'NetCDF: NC_MAX_ATTRS exceeded' /
@@ -69,7 +69,7 @@
         data msg(16) / 'NetCDF: NC_MAX_VARS exceeded' /
         data msg(17) / 'NetCDF: Variable not found' /
         data msg(18) / 'NetCDF: Action prohibited on NC_GLOBAL varid' /
-        data msg(19) / 'NetCDF: Unknown file format' /
+        data msg(19) / 'NetCDF: Unknown file format (file format violates CDF specification)' /
         data msg(20) / 'NetCDF: In Fortran, string too short' /
         data msg(21) / 'NetCDF: NC_MAX_NAME exceeded' /
         data msg(22) / 'NetCDF: NC_UNLIMITED size already in use' /
diff --git a/test/nf90_test/test_write.F90 b/test/nf90_test/test_write.F90
index d879c46..6778993 100644
--- a/test/nf90_test/test_write.F90
+++ b/test/nf90_test/test_write.F90
@@ -2,7 +2,7 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: test_write.F90 2011 2015-02-14 19:48:35Z wkliao $
+! $Id: test_write.F90 3437 2017-10-11 20:26:33Z wkliao $
 !
 
 ! Test nf90mpi_create
@@ -182,8 +182,8 @@
         if (err .ne. NF90_EINDEFINE) &
             call errore('nf90mpi_put_var... in define mode: ', err)
         err = nf90mpi_end_indep_data(ncid)
-        if (err .ne. NF90_ENOTINDEP) &
-          call errore('nf90mpi_end_indep_data... not in indep mode: ', err)
+        if (err .ne. NF90_EINDEFINE) &
+          call errore('nf90mpi_end_indep_data... in define mode: ', err)
         err = nf90mpi_redef(ncid)
         if (err .ne. NF90_EINDEFINE) then
             call errore('nf90mpi_redef in define mode: ', err)
@@ -1586,6 +1586,13 @@
             call errore('nf90mpi_create: ', err)
             return
         end if
+
+!       enable fill mode for the entire file. Putting _FillValue does
+!       not automatically enable or disable the fill mode.
+        err = nf90mpi_set_fill(ncid, NF90_FILL, old_fillmode)
+        if (err .ne. NF90_NOERR) &
+            call errore('nf90mpi_set_fill: ', err)
+
         call def_dims(ncid)
         call def_vars(ncid)
 
diff --git a/test/nf90_test/tests.inc b/test/nf90_test/tests.inc.in
similarity index 97%
rename from test/nf90_test/tests.inc
rename to test/nf90_test/tests.inc.in
index 296fb3f..5fc9fd4 100644
--- a/test/nf90_test/tests.inc
+++ b/test/nf90_test/tests.inc.in
@@ -2,7 +2,7 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-!  $Id: tests.inc 2137 2015-10-07 23:53:04Z wkliao $ 
+!  $Id: tests.inc.in 3341 2017-08-25 22:29:08Z wkliao $ 
 !
 
       integer, parameter :: INT1_KIND = selected_int_kind(2)
@@ -24,8 +24,9 @@
 
 #define NO_NETCDF_2 1
 
-#include "../libf/nfconfig.inc"
-
+#define NF_INT1_T @NF_INT1_T@
+#define NF_INT2_T @NF_INT2_T@
+#define NF_INT8_T @NF_INT8_T@
 
 !/* Parameters of test data */
 
diff --git a/test/nf90_test/util.F90 b/test/nf90_test/util.F90
index f961d81..1e581dc 100644
--- a/test/nf90_test/util.F90
+++ b/test/nf90_test/util.F90
@@ -2,7 +2,7 @@
 !  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: util.F90 2284 2015-12-30 20:27:18Z wkliao $
+! $Id: util.F90 3341 2017-08-25 22:29:08Z wkliao $
 !
 
       SUBROUTINE PRINT_NOK(NOK)
@@ -861,12 +861,13 @@
         double precision hash
         logical inrange
 
-        integer(kind=MPI_OFFSET_KIND)                 start(MAX_RANK)
-        integer(kind=MPI_OFFSET_KIND)                 index(MAX_RANK)
-        integer                 err             !/* netCDF status */
+        integer(kind=MPI_OFFSET_KIND) start(MAX_RANK)
+        integer(kind=MPI_OFFSET_KIND) index(MAX_RANK)
+        integer                 err   !/* netCDF status */
         integer                 i
         integer                 j
         doubleprecision         value(MAX_NELS)
+        doubleprecision         value1
         character*(MAX_NELS+2)  text
         logical                 allInRange
 
@@ -903,14 +904,23 @@
 !                */
                 text(var_nels(i)+1:var_nels(i)+1) = char(1)
                 text(var_nels(i)+2:var_nels(i)+2) = char(0)
-                err = nf90mpi_put_var(ncid, i, text, start, &
+                if (var_rank(i) .EQ. 0) then  ! scalar
+                    err = nf90mpi_put_var(ncid, i, text(1:1))
+                else
+                    err = nf90mpi_put_var(ncid, i, text, start, &
                                           var_shape(:,i))
+                endif
                 if (err .ne. NF90_NOERR) then
                     call errore('nf90mpi_put_var: ', err)
                 end if
             else
-                err = nf90mpi_put_var(ncid, i, value, start, &
-                                            var_shape(:,i))
+                if (var_rank(i) .EQ. 0) then  ! scalar
+                    value1 = value(1)
+                    err = nf90mpi_put_var(ncid, i, value1)
+                else
+                    err = nf90mpi_put_var(ncid, i, value, start, &
+                                          var_shape(:,i))
+                endif
                 if (allInRange) then
                     if (err .ne. NF90_NOERR) then
                         call errore('nf90mpi_put_var: ', err)
diff --git a/test/nf_test/Makefile.am b/test/nf_test/Makefile.am
new file mode 100644
index 0000000..fbecbb7
--- /dev/null
+++ b/test/nf_test/Makefile.am
@@ -0,0 +1,86 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .F
+
+AM_CPPFLAGS  = -I$(top_builddir)/src/include
+AM_CPPFLAGS += -I$(top_srcdir)/src/include
+AM_DEFAULT_SOURCE_EXT = .F
+AM_CFLAGS = -I$(top_builddir)/src/binding/f77 -I$(top_srcdir)/src/binding/f77
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la
+
+M4FLAGS += -I${top_srcdir}/m4
+
+if HAVE_F77_GNU_INT
+   M4FFLAGS += -DHAVE_F77_GNU_INT
+endif
+if HAVE_F77_INT1
+   M4FFLAGS += -DHAVE_F77_INT1
+endif
+if HAVE_F77_INT2
+   M4FFLAGS += -DHAVE_F77_INT2
+endif
+if HAVE_F77_INT8
+   M4FFLAGS += -DHAVE_F77_INT8
+endif
+if RELAX_COORD_BOUND
+   AM_FFLAGS += $(FC_DEFINE)RELAX_COORD_BOUND
+endif
+
+M4SRCS = test_get.m4 \
+         test_put.m4  \
+         test_iget.m4 \
+         test_iput.m4
+
+.m4.F:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+F_SRCS = nf_test.F \
+         nf_error.F \
+         test_read.F \
+         test_write.F \
+         util.F
+
+HFILES = tests.inc.in
+
+TESTPROGRAMS = nf_test
+check_PROGRAMS = $(TESTPROGRAMS)
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+nf_test_SOURCES = $(F_SRCS) fortlib.c
+nodist_nf_test_SOURCES = $(M4SRCS:.m4=.F)
+
+$(M4SRCS:.m4=.F): Makefile
+
+CLEANFILES = $(M4SRCS:.m4=.F) scratch.nc test.nc core core.* \
+             *.gcda *.gcno *.gcov gmon.out
+
+EXTRA_DIST = $(M4SRCS) $(HFILES) README seq_runs.sh
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+# sequential runs only
+ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/nf_test/Makefile.in b/test/nf_test/Makefile.in
index 8bd3b80..381de88 100644
--- a/test/nf_test/Makefile.in
+++ b/test/nf_test/Makefile.in
@@ -1,109 +1,1150 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2650 2016-11-24 02:55:40Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at HAVE_F77_GNU_INT_TRUE@am__append_1 = -DHAVE_F77_GNU_INT
+ at HAVE_F77_INT1_TRUE@am__append_2 = -DHAVE_F77_INT1
+ at HAVE_F77_INT2_TRUE@am__append_3 = -DHAVE_F77_INT2
+ at HAVE_F77_INT8_TRUE@am__append_4 = -DHAVE_F77_INT8
+ at RELAX_COORD_BOUND_TRUE@am__append_5 = $(FC_DEFINE)RELAX_COORD_BOUND
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = test/nf_test
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES = tests.inc
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = nf_test$(EXEEXT)
+am__objects_1 = nf_test.$(OBJEXT) nf_error.$(OBJEXT) \
+	test_read.$(OBJEXT) test_write.$(OBJEXT) util.$(OBJEXT)
+am_nf_test_OBJECTS = $(am__objects_1) fortlib.$(OBJEXT)
+am__objects_2 = test_get.$(OBJEXT) test_put.$(OBJEXT) \
+	test_iget.$(OBJEXT) test_iput.$(OBJEXT)
+nodist_nf_test_OBJECTS = $(am__objects_2)
+nf_test_OBJECTS = $(am_nf_test_OBJECTS) $(nodist_nf_test_OBJECTS)
+nf_test_LDADD = $(LDADD)
+nf_test_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+PPF77COMPILE = $(F77) $(FC_DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)
+LTPPF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(F77) $(FC_DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_FFLAGS) $(FFLAGS)
+AM_V_PPF77 = $(am__v_PPF77_ at AM_V@)
+am__v_PPF77_ = $(am__v_PPF77_ at AM_DEFAULT_V@)
+am__v_PPF77_0 = @echo "  PPF77   " $@;
+am__v_PPF77_1 = 
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_F77LD = $(am__v_F77LD_ at AM_V@)
+am__v_F77LD_ = $(am__v_F77LD_ at AM_DEFAULT_V@)
+am__v_F77LD_0 = @echo "  F77LD   " $@;
+am__v_F77LD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(nf_test_SOURCES) $(nodist_nf_test_SOURCES)
+DIST_SOURCES = $(nf_test_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/tests.inc.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@ $(am__append_1) $(am__append_2) $(am__append_3) \
+	$(am__append_4)
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .F
+AM_CPPFLAGS = -I$(top_builddir)/src/include \
+	-I$(top_srcdir)/src/include
+AM_DEFAULT_SOURCE_EXT = .F
+AM_CFLAGS = -I$(top_builddir)/src/binding/f77 -I$(top_srcdir)/src/binding/f77
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77 $(am__append_5)
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la
+M4SRCS = test_get.m4 \
+         test_put.m4  \
+         test_iget.m4 \
+         test_iput.m4
+
+F_SRCS = nf_test.F \
+         nf_error.F \
+         test_read.F \
+         test_write.F \
+         util.F
+
+HFILES = tests.inc.in
+TESTPROGRAMS = nf_test
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+nf_test_SOURCES = $(F_SRCS) fortlib.c
+nodist_nf_test_SOURCES = $(M4SRCS:.m4=.F)
+CLEANFILES = $(M4SRCS:.m4=.F) scratch.nc test.nc core core.* \
+             *.gcda *.gcno *.gcov gmon.out
+
+EXTRA_DIST = $(M4SRCS) $(HFILES) README seq_runs.sh
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .F .c .f .lo .log .m4 .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/nf_test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/nf_test/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+tests.inc: $(top_builddir)/config.status $(srcdir)/tests.inc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+nf_test$(EXEEXT): $(nf_test_OBJECTS) $(nf_test_DEPENDENCIES) $(EXTRA_nf_test_DEPENDENCIES) 
+	@rm -f nf_test$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(nf_test_OBJECTS) $(nf_test_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fortlib.Po at am__quote@
+
+.F.o:
+	$(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ $<
+
+.F.obj:
+	$(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.F.lo:
+	$(AM_V_PPF77)$(LTPPF77COMPILE) -c -o $@ $<
+.F.f:
+	$(F77COMPILE) -F $<
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
 
-include ../../macros.make
+install-pdf: install-pdf-am
 
-INCLUDES  = -I. -I../../src/lib -I../../src/libf
-INCLUDES += -I$(srcdir)/../../src/libf
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+install-pdf-am:
 
-ifeq (@HAVE_F77_GNU_INT@, yes)
-M4FFLAGS += -DHAVE_F77_GNU_INT
-endif
-ifeq (@HAVE_F77_INT1@, yes)
-M4FFLAGS += -DHAVE_F77_INT1
-endif
-ifeq (@HAVE_F77_INT2@, yes)
-M4FFLAGS += -DHAVE_F77_INT2
-endif
-ifeq (@HAVE_F77_INT8@, yes)
-M4FFLAGS += -DHAVE_F77_INT8
-endif
-ifeq (@RELAX_COORD_BOUND@, 1)
-FPPFLAGS := $(FPPFLAGS) @FC_DEFINE at RELAX_COORD_BOUND
-endif
+install-ps: install-ps-am
 
-M4SRCS    = test_get.m4 \
-            test_put.m4  \
-            test_iget.m4 \
-            test_iput.m4
+install-ps-am:
 
-M4SRCS_F  = $(M4SRCS:.m4=.F)
+installcheck-am:
 
-F_SRCS    = nf_error.F \
-            nf_test.F \
-            test_read.F \
-            test_write.F \
-            util.F
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-C_SRCS    = fortlib.c
+mostlyclean: mostlyclean-am
 
-HEADERS   = tests.inc.in
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-C_OBJS  = $(C_SRCS:.c=.o)
-F_OBJS  = $(F_SRCS:.F=.o) $(M4SRCS_F:.F=.o)
-OBJS    = $(C_OBJS) $(F_OBJS)
+pdf: pdf-am
 
-PROGS  = nf_test
+pdf-am:
 
-GARBAGE = $(PROGS) $(M4SRCS_F) \
-          scratch.nc test.nc
+ps: ps-am
 
-DIST_GARBAGE = tests.inc
+ps-am:
 
-PACKING_LIST = $(C_SRCS) $(F_SRCS) $(M4SRCS) $(HEADERS) depend Makefile.in README
+tests: tests-am
 
-all: $(PROGS)
+tests-am: tests-local
 
-$(C_OBJS): $(srcdir)/../common/testutils.h
+uninstall-am:
 
-$(PROGS): ../common/libtestutils.a
+.MAKE: check-am install-am install-strip
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
 
-nf_test: $(OBJS) $(LIBRARY)
-	$(LINK.F90) $(OBJS) $(LDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-tags: $(F_SRCS) $(C_SRCS) FORCE
-	ctags -t $(F_SRCS) $(C_SRCS) ../fortran/*.c ../libsrc/*.c
 
-# This simple testing target ensures that the test files are present
-testing check: all
-	$(RM) -f $(TEST_OUTDIR)/scratch.nc $(TEST_OUTDIR)/test.nc
-	$(TEST_SEQRUN) ./nf_test -c    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test       -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -c -2 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -2    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -c -5 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -5    -d $(TEST_OUTDIR)
+.m4.F:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
 
-verbose_testing: all
-	$(RM) -f $(TEST_OUTDIR)/scratch.nc $(TEST_OUTDIR)/test.nc
-	$(TEST_SEQRUN) ./nf_test -v -c    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -v       -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -v -c -2 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -v -2    -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -v -c -5 -d $(TEST_OUTDIR)
-	$(TEST_SEQRUN) ./nf_test -v -5    -d $(TEST_OUTDIR)
+$(M4SRCS:.m4=.F): Makefile
 
-#test.nc: 
-#	(cd ../nc_test && $(MAKE) $(MFLAGS) nc_test && ./nc_test -c)
-#	cp ../nc_test/test.nc .
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
+# sequential runs only
 ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
-include $(srcdir)/depend
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/nf_test/depend b/test/nf_test/depend
deleted file mode 100644
index be7d2a9..0000000
--- a/test/nf_test/depend
+++ /dev/null
@@ -1,31 +0,0 @@
-fortlib.o: fortlib.c
-lib.o: ../../src/libf/pnetcdf.inc
-lib.o: lib.F
-lib.o: tests.inc
-nf_error.o: ../../src/libf/pnetcdf.inc
-nf_error.o: nf_error.F
-nf_error.o: tests.inc
-nf_test.o: ../../src/libf/pnetcdf.inc
-nf_test.o: nf_test.F
-nf_test.o: tests.inc
-test_get.o: ../../src/libf/pnetcdf.inc
-test_get.o: test_get.F
-test_get.o: tests.inc
-test_put.o: ../../src/libf/pnetcdf.inc
-test_put.o: test_put.F
-test_put.o: tests.inc
-test_iget.o: ../../src/libf/pnetcdf.inc
-test_iget.o: test_iget.F
-test_iget.o: tests.inc
-test_iput.o: ../../src/libf/pnetcdf.inc
-test_iput.o: test_iput.F
-test_iput.o: tests.inc
-test_read.o: ../../src/libf/pnetcdf.inc
-test_read.o: test_read.F
-test_read.o: tests.inc
-test_write.o: ../../src/libf/pnetcdf.inc
-test_write.o: test_write.F
-test_write.o: tests.inc
-util.o: ../../src/libf/pnetcdf.inc
-util.o: tests.inc
-util.o: util.F
diff --git a/test/nf_test/fortlib.c b/test/nf_test/fortlib.c
index 6d2303d..b5d0bd3 100644
--- a/test/nf_test/fortlib.c
+++ b/test/nf_test/fortlib.c
@@ -1,5 +1,5 @@
 /*
- * $Id: fortlib.c 1468 2013-10-26 16:53:18Z wkliao $
+ * $Id: fortlib.c 3341 2017-08-25 22:29:08Z wkliao $
  *
  * This file contains support functions for FORTRAN code.  For example,
  * under HP-UX A.09.05, the U77 library doesn't contain the exit()
@@ -83,9 +83,8 @@ FORTRAN_API void FORT_CALL ud_abort_(int *v1) {
 * environments define it (e.g. gcc(1) under SunOS 4.1.3).
 */
 FORTRAN_API double FORT_CALL ud_rand_(int *seed) {
-	if (*seed != 0)
-		srand(*seed);
-	return (rand() % 32768 )/ 32767.0;
+	if (*seed != 0) srandom(*seed);
+	return (double)(random() % 32768 ) / 32767.0;
 }
 
 #ifdef F77_NAME_UPPER
diff --git a/test/nf_test/nf_test.F b/test/nf_test/nf_test.F
index d563032..4ce6948 100644
--- a/test/nf_test/nf_test.F
+++ b/test/nf_test/nf_test.F
@@ -1,30 +1,17 @@
-#if 0
-/*********************************************************************
- *   Copyright 1996, UCAR/Unidata
- *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
- *   $Id: nf_test.F 2224 2015-12-16 06:10:36Z wkliao $
- *********************************************************************/
-
-/*
- * Test driver for netCDF-3 interface.  This program performs tests against
- * the netCDF-3 specification for all user-level functions in an
- * implementation of the netCDF library.
- *
- * Unless invoked with "-r" (readonly) option, must be invoked from a
- * directory in which the invoker has write permission.
- *
- * Files:
- * The read-only tests read files:
- *     test.nc (see below)
- *     test_get.F (used merely as an example of a non-netCDF file)
- * 
- * The write tests 
- *     read test.nc (see below) 
- *     write scratch.nc (deleted after each test)
- * 
- * The file test.nc is created by running nc_test with the -c (create) option.
- */
-#endif
+!  Copyright (C) 2003, Northwestern University and Argonne National
+!  Laboratory
+!  See COPYRIGHT notice in top-level directory.
+!
+! $Id: nf_test.F 3480 2017-10-25 21:00:10Z wkliao $
+
+C Copyright 1996-2006, UCAR/Unidata
+C See COPYRIGHT file for copying and redistribution conditions.
+
+C Test driver for netCDF-3 interface.  This program performs tests
+C against
+C the netCDF-3 specification for all user-level functions in an
+C implementation of the netCDF library.
+
 
         subroutine usage()
         implicit        none
@@ -51,7 +38,7 @@
 
         subroutine report_test
         implicit        none
-        character*128   msg
+        character*1024   msg
 #include "tests.inc"
 
         integer MY_LEN_TRIM
@@ -90,7 +77,7 @@
             print *, '  ### ', nfails, ' FAILURES TESTING ', name, 
      +               '! Stop ... ###'
             call report_test
-            stop
+            stop 2
         end if
         end
 
@@ -114,7 +101,7 @@
 !       DIGITAL Visual Fortran needs DFPORT for iargc
         USE DFPORT
         implicit        none
-#elif defined(NAGf90Fortran)
+#elif defined(NAGFortran)
         USE F90_UNIX_ENV, only : iargc, getarg
         implicit none
 #else
diff --git a/test/nf_test/seq_runs.sh b/test/nf_test/seq_runs.sh
new file mode 100755
index 0000000..fd838d7
--- /dev/null
+++ b/test/nf_test/seq_runs.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+rm -f ${TESTOUTDIR}/scratch.nc ${TESTOUTDIR}/test.nc
+${TESTSEQRUN} ./nf_test -c    -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nf_test       -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}    -q ${TESTOUTDIR}/test.nc
+
+${TESTSEQRUN} ./nf_test -c -2 -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nf_test -2    -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}    -q ${TESTOUTDIR}/test.nc
+
+${TESTSEQRUN} ./nf_test -c -5 -d ${TESTOUTDIR}
+${TESTSEQRUN} ./nf_test -5    -d ${TESTOUTDIR}
+${TESTSEQRUN} ${VALIDATOR}    -q ${TESTOUTDIR}/test.nc
+
+
diff --git a/test/nf_test/test_read.F b/test/nf_test/test_read.F
index b79ce82..a0a1e64 100644
--- a/test/nf_test/test_read.F
+++ b/test/nf_test/test_read.F
@@ -1,7 +1,7 @@
 C*********************************************************************
 C   Copyright 1996, UCAR/Unidata
 C   See netcdf/COPYRIGHT file for copying and redistribution conditions.
-C   $Id: test_read.F 2474 2016-09-05 23:13:05Z wkliao $
+C   $Id: test_read.F 3419 2017-09-24 18:56:39Z wkliao $
 C*********************************************************************
 
 C Test nfmpi_strerror.
@@ -59,7 +59,8 @@ C
         data msg(6)  / 'NetCDF: Operation not allowed in data mode' /
         data msg(7)  / 'NetCDF: Operation not allowed in define mode' /
         data msg(8)  / 'NetCDF: Index exceeds dimension bound' /
-        data msg(9)  / 'NetCDF: NC_MAX_DIMS exceeded' /
+        data msg(9)
+     +  / 'NetCDF: NC_MAX_DIMS or NC_MAX_VAR_DIMS exceeded' /
         data msg(10) / 'NetCDF: String match to name in use' /
         data msg(11) / 'NetCDF: Attribute not found' /
         data msg(12) / 'NetCDF: NC_MAX_ATTRS exceeded' /
@@ -70,7 +71,12 @@ C
         data msg(16) / 'NetCDF: NC_MAX_VARS exceeded' /
         data msg(17) / 'NetCDF: Variable not found' /
         data msg(18) / 'NetCDF: Action prohibited on NC_GLOBAL varid' /
-        data msg(19) / 'NetCDF: Unknown file format' /
+
+        character*68 ENOTNC_str
+        parameter(ENOTNC_str='NetCDF: Unknown file format (file '//
+     +                       'format violates CDF specification)')
+        data msg(19) / ENOTNC_str /
+
         data msg(20) / 'NetCDF: In Fortran, string too short' /
         data msg(21) / 'NetCDF: NC_MAX_NAME exceeded' /
         data msg(22) / 'NetCDF: NC_UNLIMITED size already in use' /
diff --git a/test/nf_test/test_write.F b/test/nf_test/test_write.F
index 92ced17..910b31d 100644
--- a/test/nf_test/test_write.F
+++ b/test/nf_test/test_write.F
@@ -1,7 +1,7 @@
 C********************************************************************
 C   Copyright 1996, UCAR/Unidata
 C   See netcdf/COPYRIGHT file for copying and redistribution conditions.
-C   $Id: test_write.F 2224 2015-12-16 06:10:36Z wkliao $
+C   $Id: test_write.F 3437 2017-10-11 20:26:33Z wkliao $
 C********************************************************************
 
 
@@ -176,8 +176,8 @@ c       should not enter indep mode in define mode
         if (err .ne. NF_EINDEFINE)
      +      call errore('nfmpi_put_var... in define mode: ', err)
         err = nfmpi_end_indep_data(ncid)
-        if (err .ne. NF_ENOTINDEP)
-     +    call errore('nfmpi_end_indep_data... not in indep mode: ',err)
+        if (err .ne. NF_EINDEFINE)
+     +    call errore('nfmpi_end_indep_data... in define mode: ',err)
         err = nfmpi_redef(ncid)
         if (err .ne. NF_EINDEFINE) then
             call errore('nfmpi_redef in define mode: ', err)
@@ -244,6 +244,8 @@ C           /* check scratch file written as expected */
             call errori('Unexpected dim length: ', intlen)
         end if
         err = nfmpi_begin_indep_data(ncid)
+        if (err .ne. NF_NOERR)
+     +      call errore('nfmpi_begin_indep_data: ', err)
         err = nfmpi_get_var1_double(ncid, vid, start, var)
         if (err .ne. NF_NOERR)
      +      call errore('nfmpi_get_var1_double: ', err)
@@ -252,6 +254,8 @@ C           /* check scratch file written as expected */
      +          'nfmpi_get_var1_double: unexpected value in netCDF '
      +          , ncid)
         err = nfmpi_end_indep_data(ncid)
+        if (err .ne. NF_NOERR)
+     +      call errore('nfmpi_end_indep_data: ', err)
         err = nfmpi_close(ncid)
         if (err .ne. NF_NOERR)
      +      call errore('nfmpi_close: ', err)
@@ -1574,6 +1578,13 @@ C       /* close scratch & create again for test using attribute _FillValue */
             call errore('nfmpi_create: ', err)
             return
         end if
+
+C       enable fill mode for the entire file. Putting _FillValue does
+C       not automatically enable or disable the fill mode.
+        err = nfmpi_set_fill(ncid, NF_FILL, old_fillmode)
+        if (err .ne. NF_NOERR)
+     +      call errore('nfmpi_set_fill: ', err)
+
         call def_dims(ncid)
         call def_vars(ncid)
 
diff --git a/test/nf_test/tests.inc.in b/test/nf_test/tests.inc.in
index 50c0222..5fc66ba 100644
--- a/test/nf_test/tests.inc.in
+++ b/test/nf_test/tests.inc.in
@@ -2,7 +2,7 @@
 !  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-!  $Id: tests.inc.in 2615 2016-11-13 23:58:41Z wkliao $
+!  $Id: tests.inc.in 3341 2017-08-25 22:29:08Z wkliao $
 !
 ! @configure_input@
 !
@@ -22,8 +22,9 @@
 
 #define NO_NETCDF_2 1
 
-#include "nfconfig.inc"
-
+#define NF_INT1_T @NF_INT1_T@
+#define NF_INT2_T @NF_INT2_T@
+#define NF_INT8_T @NF_INT8_T@
 
 !/* Parameters of test data */
 
diff --git a/test/nonblocking/Makefile.am b/test/nonblocking/Makefile.am
new file mode 100644
index 0000000..2bb4759
--- /dev/null
+++ b/test/nonblocking/Makefile.am
@@ -0,0 +1,132 @@
+#
+# Copyright (C) 2012, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c .f .F .f90
+
+AM_DEFAULT_SOURCE_EXT = .c
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+AM_FFLAGS    = -I$(top_builddir)/src/binding/f77
+AM_FCFLAGS   = $(FC_MODINC)$(top_builddir)/src/binding/f90
+AM_FCFLAGS  += $(FC_MODINC)$(srcdir)/../common
+AM_FCFLAGS  += -I$(top_builddir)/src/binding/f77
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la -lm
+
+if DECL_MPI_OFFSET
+   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+   AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+   AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+   AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+TESTPROGRAMS = test_bput \
+               interleaved \
+               i_varn_int64 \
+               flexible_bput \
+               wait_after_indep \
+               req_all \
+               i_varn_indef
+
+M4_SRCS  = bput_varn.m4 \
+           column_wise.m4
+
+TESTPROGRAMS += $(M4_SRCS:.m4=)
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+M4FLAGS += -I${top_srcdir}/m4
+
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# # and 'make install'. This means you cannot build a specific target (e.g.,
+# # 'make foo') in a clean tree if it depends on a built source."
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+
+nodist_bput_varn_SOURCES = bput_varn.c
+nodist_column_wise_SOURCES = column_wise.c
+
+if HAS_FORTRAN
+   TESTPROGRAMS += mcoll_testf77 \
+                   test_bputf77
+
+   mcoll_testf77_SOURCES = mcoll_testf77.f
+   test_bputf77_SOURCES = test_bputf77.f
+if HAVE_MPI_MOD
+   TESTPROGRAMS += mcoll_testf \
+                   test_bputf
+   mcoll_testf_SOURCES = mcoll_testf.f90
+   test_bputf_SOURCES = test_bputf.f90
+endif
+endif
+
+check_PROGRAMS = $(TESTPROGRAMS) mcoll_perf
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+CLEANFILES = $(M4_SRCS:.m4=.c) *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+EXTRA_DIST = $(M4_SRCS) seq_runs.sh
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+# Some of these tests are designed to run on one process,
+# # Run them on 4 processes to see if they can handle well
+# Some of these tests are designed to run on 4 processes,
+# # Run them on 2, 4, and 6 processes to see if they can handle well
+
+TESTMPIRUN2  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN6  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/6/g'`
+
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/redef1.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest2 : $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/redef1.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest6 : $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/redef1.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN6) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptests: ptest2 ptest4 ptest6
+ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/nonblocking/Makefile.in b/test/nonblocking/Makefile.in
index b5299b0..f307972 100644
--- a/test/nonblocking/Makefile.in
+++ b/test/nonblocking/Makefile.in
@@ -1,149 +1,1357 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2648 2016-11-23 00:42:47Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at DECL_MPI_OFFSET_TRUE@am__append_1 = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@am__append_2 = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at HAS_FORTRAN_TRUE@am__append_3 = mcoll_testf77 \
+ at HAS_FORTRAN_TRUE@                   test_bputf77
 
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__append_4 = mcoll_testf \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@                   test_bputf
+
+check_PROGRAMS = $(am__EXEEXT_4) mcoll_perf$(EXEEXT)
+subdir = test/nonblocking
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = bput_varn$(EXEEXT) column_wise$(EXEEXT)
+ at HAS_FORTRAN_TRUE@am__EXEEXT_2 = mcoll_testf77$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@	test_bputf77$(EXEEXT)
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__EXEEXT_3 =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	mcoll_testf$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	test_bputf$(EXEEXT)
+am__EXEEXT_4 = test_bput$(EXEEXT) interleaved$(EXEEXT) \
+	i_varn_int64$(EXEEXT) flexible_bput$(EXEEXT) \
+	wait_after_indep$(EXEEXT) req_all$(EXEEXT) \
+	i_varn_indef$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) \
+	$(am__EXEEXT_3)
+nodist_bput_varn_OBJECTS = bput_varn.$(OBJEXT)
+bput_varn_OBJECTS = $(nodist_bput_varn_OBJECTS)
+bput_varn_LDADD = $(LDADD)
+bput_varn_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+nodist_column_wise_OBJECTS = column_wise.$(OBJEXT)
+column_wise_OBJECTS = $(nodist_column_wise_OBJECTS)
+column_wise_LDADD = $(LDADD)
+column_wise_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+flexible_bput_SOURCES = flexible_bput.c
+flexible_bput_OBJECTS = flexible_bput.$(OBJEXT)
+flexible_bput_LDADD = $(LDADD)
+flexible_bput_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+i_varn_indef_SOURCES = i_varn_indef.c
+i_varn_indef_OBJECTS = i_varn_indef.$(OBJEXT)
+i_varn_indef_LDADD = $(LDADD)
+i_varn_indef_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+i_varn_int64_SOURCES = i_varn_int64.c
+i_varn_int64_OBJECTS = i_varn_int64.$(OBJEXT)
+i_varn_int64_LDADD = $(LDADD)
+i_varn_int64_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+interleaved_SOURCES = interleaved.c
+interleaved_OBJECTS = interleaved.$(OBJEXT)
+interleaved_LDADD = $(LDADD)
+interleaved_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+mcoll_perf_SOURCES = mcoll_perf.c
+mcoll_perf_OBJECTS = mcoll_perf.$(OBJEXT)
+mcoll_perf_LDADD = $(LDADD)
+mcoll_perf_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__mcoll_testf_SOURCES_DIST = mcoll_testf.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am_mcoll_testf_OBJECTS =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	mcoll_testf.$(OBJEXT)
+mcoll_testf_OBJECTS = $(am_mcoll_testf_OBJECTS)
+mcoll_testf_LDADD = $(LDADD)
+mcoll_testf_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__mcoll_testf77_SOURCES_DIST = mcoll_testf77.f
+ at HAS_FORTRAN_TRUE@am_mcoll_testf77_OBJECTS = mcoll_testf77.$(OBJEXT)
+mcoll_testf77_OBJECTS = $(am_mcoll_testf77_OBJECTS)
+mcoll_testf77_LDADD = $(LDADD)
+mcoll_testf77_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+req_all_SOURCES = req_all.c
+req_all_OBJECTS = req_all.$(OBJEXT)
+req_all_LDADD = $(LDADD)
+req_all_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+test_bput_SOURCES = test_bput.c
+test_bput_OBJECTS = test_bput.$(OBJEXT)
+test_bput_LDADD = $(LDADD)
+test_bput_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__test_bputf_SOURCES_DIST = test_bputf.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am_test_bputf_OBJECTS =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	test_bputf.$(OBJEXT)
+test_bputf_OBJECTS = $(am_test_bputf_OBJECTS)
+test_bputf_LDADD = $(LDADD)
+test_bputf_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__test_bputf77_SOURCES_DIST = test_bputf77.f
+ at HAS_FORTRAN_TRUE@am_test_bputf77_OBJECTS = test_bputf77.$(OBJEXT)
+test_bputf77_OBJECTS = $(am_test_bputf77_OBJECTS)
+test_bputf77_LDADD = $(LDADD)
+test_bputf77_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+wait_after_indep_SOURCES = wait_after_indep.c
+wait_after_indep_OBJECTS = wait_after_indep.$(OBJEXT)
+wait_after_indep_LDADD = $(LDADD)
+wait_after_indep_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS)
+LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS)
+AM_V_F77 = $(am__v_F77_ at AM_V@)
+am__v_F77_ = $(am__v_F77_ at AM_DEFAULT_V@)
+am__v_F77_0 = @echo "  F77     " $@;
+am__v_F77_1 = 
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_F77LD = $(am__v_F77LD_ at AM_V@)
+am__v_F77LD_ = $(am__v_F77LD_ at AM_DEFAULT_V@)
+am__v_F77LD_0 = @echo "  F77LD   " $@;
+am__v_F77LD_1 = 
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+AM_V_FC = $(am__v_FC_ at AM_V@)
+am__v_FC_ = $(am__v_FC_ at AM_DEFAULT_V@)
+am__v_FC_0 = @echo "  FC      " $@;
+am__v_FC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+SOURCES = $(nodist_bput_varn_SOURCES) $(nodist_column_wise_SOURCES) \
+	flexible_bput.c i_varn_indef.c i_varn_int64.c interleaved.c \
+	mcoll_perf.c $(mcoll_testf_SOURCES) $(mcoll_testf77_SOURCES) \
+	req_all.c test_bput.c $(test_bputf_SOURCES) \
+	$(test_bputf77_SOURCES) wait_after_indep.c
+DIST_SOURCES = flexible_bput.c i_varn_indef.c i_varn_int64.c \
+	interleaved.c mcoll_perf.c $(am__mcoll_testf_SOURCES_DIST) \
+	$(am__mcoll_testf77_SOURCES_DIST) req_all.c test_bput.c \
+	$(am__test_bputf_SOURCES_DIST) \
+	$(am__test_bputf77_SOURCES_DIST) wait_after_indep.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ -I${top_srcdir}/m4
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c .f .F .f90
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77 $(am__append_1)
+AM_FCFLAGS = $(FC_MODINC)$(top_builddir)/src/binding/f90 \
+	$(FC_MODINC)$(srcdir)/../common \
+	-I$(top_builddir)/src/binding/f77 $(am__append_2)
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la -lm
+ at DECL_MPI_OFFSET_TRUE@AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+TESTPROGRAMS = test_bput interleaved i_varn_int64 flexible_bput \
+	wait_after_indep req_all i_varn_indef $(M4_SRCS:.m4=) \
+	$(am__append_3) $(am__append_4)
+M4_SRCS = bput_varn.m4 \
+           column_wise.m4
 
-include ../../macros.make
 
-INCLUDES  = -I../../src/lib -I$(srcdir)/../common
-FPPFLAGS += -I../../src/libf @FC_MODINC at ../../src/libf90 @FC_MODINC at ../common
-LDFLAGS  := -L../common $(LDFLAGS)
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+# automake says "... BUILT_SOURCES is honored only by 'make all', 'make check',
+# # and 'make install'. This means you cannot build a specific target (e.g.,
+# # 'make foo') in a clean tree if it depends on a built source."
+BUILT_SOURCES = $(M4_SRCS:.m4=.c)
+nodist_bput_varn_SOURCES = bput_varn.c
+nodist_column_wise_SOURCES = column_wise.c
+ at HAS_FORTRAN_TRUE@mcoll_testf77_SOURCES = mcoll_testf77.f
+ at HAS_FORTRAN_TRUE@test_bputf77_SOURCES = test_bputf77.f
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at mcoll_testf_SOURCES = mcoll_testf.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at test_bputf_SOURCES = test_bputf.f90
 
-M4_SRCS  = bput_varn.m4 \
-           column_wise.m4
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+CLEANFILES = $(M4_SRCS:.m4=.c) *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+EXTRA_DIST = $(M4_SRCS) seq_runs.sh
 
-C_SRCS   = mcoll_perf.c \
-           test_bput.c \
-           interleaved.c \
-           i_varn_int64.c \
-           flexible_bput.c \
-           wait_after_indep.c \
-           req_all.c \
-           i_varn_indef.c
+# Some of these tests are designed to run on one process,
+# # Run them on 4 processes to see if they can handle well
+# Some of these tests are designed to run on 4 processes,
+# # Run them on 2, 4, and 6 processes to see if they can handle well
+TESTMPIRUN2 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN6 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/6/g'`
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
 
-F77_SRCS = mcoll_testf77.f \
-           test_bputf77.f
+.SUFFIXES:
+.SUFFIXES: .o .c .f .F .f90 .lo .log .m4 .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/nonblocking/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/nonblocking/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
 
-F90_SRCS = mcoll_testf.f90 \
-           test_bputf.f90
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
 
-PROGS     = $(C_SRCS:.c=) $(M4_SRCS:.m4=)
-OBJS      = $(C_SRCS:.c=.o) $(M4_SRCS:.m4=.o)
-ifeq (@has_fortran@, yes)
-PROGS     += $(F77_SRCS:.f=)
-OBJS      += $(F77_SRCS:.f=.o)
-ifeq (@mpi_mod@, yes)
-PROGS     += $(F90_SRCS:.f90=)
-OBJS      += $(F90_SRCS:.f90=.o)
-endif
-endif
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
 
-GARBAGE      = $(PROGS) $(M4_SRCS:.m4=.c) *.nc
-PACKING_LIST = $(M4_SRCS) $(C_SRCS) $(F77_SRCS) $(F90_SRCS) \
-               Makefile.in README depend
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
 
-all: $(PROGS)
+bput_varn$(EXEEXT): $(bput_varn_OBJECTS) $(bput_varn_DEPENDENCIES) $(EXTRA_bput_varn_DEPENDENCIES) 
+	@rm -f bput_varn$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(bput_varn_OBJECTS) $(bput_varn_LDADD) $(LIBS)
 
-$(OBJS): $(srcdir)/../common/testutils.h
+column_wise$(EXEEXT): $(column_wise_OBJECTS) $(column_wise_DEPENDENCIES) $(EXTRA_column_wise_DEPENDENCIES) 
+	@rm -f column_wise$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(column_wise_OBJECTS) $(column_wise_LDADD) $(LIBS)
 
-$(PROGS): ../common/libtestutils.a
+flexible_bput$(EXEEXT): $(flexible_bput_OBJECTS) $(flexible_bput_DEPENDENCIES) $(EXTRA_flexible_bput_DEPENDENCIES) 
+	@rm -f flexible_bput$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(flexible_bput_OBJECTS) $(flexible_bput_LDADD) $(LIBS)
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+i_varn_indef$(EXEEXT): $(i_varn_indef_OBJECTS) $(i_varn_indef_DEPENDENCIES) $(EXTRA_i_varn_indef_DEPENDENCIES) 
+	@rm -f i_varn_indef$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(i_varn_indef_OBJECTS) $(i_varn_indef_LDADD) $(LIBS)
 
-mcoll_perf: mcoll_perf.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+i_varn_int64$(EXEEXT): $(i_varn_int64_OBJECTS) $(i_varn_int64_DEPENDENCIES) $(EXTRA_i_varn_int64_DEPENDENCIES) 
+	@rm -f i_varn_int64$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(i_varn_int64_OBJECTS) $(i_varn_int64_LDADD) $(LIBS)
 
-test_bput: test_bput.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+interleaved$(EXEEXT): $(interleaved_OBJECTS) $(interleaved_DEPENDENCIES) $(EXTRA_interleaved_DEPENDENCIES) 
+	@rm -f interleaved$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(interleaved_OBJECTS) $(interleaved_LDADD) $(LIBS)
 
-i_varn_int64: i_varn_int64.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mcoll_perf$(EXEEXT): $(mcoll_perf_OBJECTS) $(mcoll_perf_DEPENDENCIES) $(EXTRA_mcoll_perf_DEPENDENCIES) 
+	@rm -f mcoll_perf$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mcoll_perf_OBJECTS) $(mcoll_perf_LDADD) $(LIBS)
 
-bput_varn.c: bput_varn.m4
-	$(M4) $(M4FLAGS) $< >$@
+mcoll_testf$(EXEEXT): $(mcoll_testf_OBJECTS) $(mcoll_testf_DEPENDENCIES) $(EXTRA_mcoll_testf_DEPENDENCIES) 
+	@rm -f mcoll_testf$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(mcoll_testf_OBJECTS) $(mcoll_testf_LDADD) $(LIBS)
 
-bput_varn: bput_varn.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mcoll_testf77$(EXEEXT): $(mcoll_testf77_OBJECTS) $(mcoll_testf77_DEPENDENCIES) $(EXTRA_mcoll_testf77_DEPENDENCIES) 
+	@rm -f mcoll_testf77$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(mcoll_testf77_OBJECTS) $(mcoll_testf77_LDADD) $(LIBS)
 
-interleaved: interleaved.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+req_all$(EXEEXT): $(req_all_OBJECTS) $(req_all_DEPENDENCIES) $(EXTRA_req_all_DEPENDENCIES) 
+	@rm -f req_all$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(req_all_OBJECTS) $(req_all_LDADD) $(LIBS)
 
-flexible_bput: flexible_bput.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+test_bput$(EXEEXT): $(test_bput_OBJECTS) $(test_bput_DEPENDENCIES) $(EXTRA_test_bput_DEPENDENCIES) 
+	@rm -f test_bput$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(test_bput_OBJECTS) $(test_bput_LDADD) $(LIBS)
 
-wait_after_indep: wait_after_indep.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+test_bputf$(EXEEXT): $(test_bputf_OBJECTS) $(test_bputf_DEPENDENCIES) $(EXTRA_test_bputf_DEPENDENCIES) 
+	@rm -f test_bputf$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(test_bputf_OBJECTS) $(test_bputf_LDADD) $(LIBS)
 
-column_wise.c: column_wise.m4
-	$(M4) $(M4FLAGS) $< >$@
+test_bputf77$(EXEEXT): $(test_bputf77_OBJECTS) $(test_bputf77_DEPENDENCIES) $(EXTRA_test_bputf77_DEPENDENCIES) 
+	@rm -f test_bputf77$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(test_bputf77_OBJECTS) $(test_bputf77_LDADD) $(LIBS)
 
-column_wise: column_wise.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+wait_after_indep$(EXEEXT): $(wait_after_indep_OBJECTS) $(wait_after_indep_DEPENDENCIES) $(EXTRA_wait_after_indep_DEPENDENCIES) 
+	@rm -f wait_after_indep$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(wait_after_indep_OBJECTS) $(wait_after_indep_LDADD) $(LIBS)
 
-req_all: req_all.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
 
-i_varn_indef: i_varn_indef.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+distclean-compile:
+	-rm -f *.tab.c
 
-mcoll_testf77: mcoll_testf77.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/bput_varn.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/column_wise.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flexible_bput.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/i_varn_indef.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/i_varn_int64.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/interleaved.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mcoll_perf.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/req_all.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_bput.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wait_after_indep.Po at am__quote@
 
-mcoll_testf: mcoll_testf.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
 
-test_bputf: test_bputf.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
-test_bputf77: test_bputf77.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
 
-check testing verbose_check verbose_testing: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc*
-	for i in $(PROGS); do ( \
-	$(TEST_SEQRUN) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
+.f.o:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ $<
+
+.f.obj:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.f.lo:
+	$(AM_V_F77)$(LTF77COMPILE) -c -o $@ $<
+
+.f90.o:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+	$(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile
+installdirs:
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+tests: tests-am
+
+tests-am: tests-local
+
+uninstall-am:
+
+.MAKE: all check check-am install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
+
+.PRECIOUS: Makefile
+
+
+ at DECL_MPI_OFFSET_TRUE@   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+ at DECL_MPI_OFFSET_TRUE@   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/redef1.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest2 : $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/redef1.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest6 : $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	$(RM) -f $(TESTOUTDIR)/testfile.nc $(TESTOUTDIR)/redef1.nc ; \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN6) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
-# Some of these tests are designed to run on one process,
-# # Run them on 4 processes to see if they can handle well
-# Some of these tests are designed to run on 4 processes,
-# # Run them on 2, 4, and 6 processes to see if they can handle well
-TEST_MPIRUN_2  = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_6  = $(subst NP,6,$(TEST_MPIRUN))
-
-ptest4: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/redef1.nc
-	for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_4) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest2 : $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/redef1.nc
-	for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_2) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest6 : $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/redef1.nc
-	for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_6) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest: ptest4
 ptests: ptest2 ptest4 ptest6
 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
-include $(srcdir)/depend
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/nonblocking/bput_varn.m4 b/test/nonblocking/bput_varn.m4
index cfe1639..d6f49da 100644
--- a/test/nonblocking/bput_varn.m4
+++ b/test/nonblocking/bput_varn.m4
@@ -8,7 +8,7 @@ dnl
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: bput_varn.m4 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: bput_varn.m4 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests nonblocking buffered write varn APIs, including
@@ -60,7 +60,10 @@ dnl
  *    }
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-#include <ncconfig.h> /* output of 'configure' */
+#ifdef HAVE_CONFIG_H
+#include <config.h> /* output of 'configure' */
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h> /* strcpy() */
@@ -77,43 +80,17 @@ dnl
 #define NY 4
 #define NX 10
 
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h> /* ushort, uint */
-#endif
-
 typedef char text;
-typedef signed char schar;
-#ifndef HAVE_UCHAR 
-typedef unsigned char uchar;
-#endif
-#ifndef HAVE_USHORT
-typedef unsigned short ushort;
-#endif
-#ifndef HAVE_UINT
-typedef unsigned int uint;
-#endif
-#ifndef HAVE_LONGLONG
-typedef long long longlong;
-#endif
-#ifndef HAVE_ULONGLONG
-typedef unsigned long long ulonglong;
-#endif
 
 include(`foreach.m4')dnl
 include(`utils.m4')dnl
 
-#define ERR \
-    if (err != NC_NOERR) { \
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); \
-        nerrs++; \
-    }
-
 #define ERRS(n,a) { \
     int _i; \
     for (_i=0; _i<(n); _i++) { \
         if ((a)[_i] != NC_NOERR) { \
-            printf("Error at line=%d: err[%d] %s\n", __LINE__, _i, \
-                   ncmpi_strerror((a)[_i])); \
+            printf("Error at line %d in %s: err[%d] %s\n", __LINE__, __FILE__, _i, \
+                   ncmpi_strerrno((a)[_i])); \
             nerrs++; \
         } \
     } \
@@ -123,44 +100,47 @@ static int
 check_num_pending_reqs(int ncid, int expected, int lineno)
 /* check if PnetCDF can reports expected number of pending requests */
 {
-    int err, n_pendings;
+    int err, nerrs=0, n_pendings;
     err = ncmpi_inq_nreqs(ncid, &n_pendings);
-    if (err != NC_NOERR)
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+    CHECK_ERR
     if (n_pendings != expected) {
-        printf("Error at line %d: expect %d pending requests but got %d\n",
-               lineno, expected, n_pendings);
-        return 1;
+        printf("Error at line %d in %s: expect %d pending requests but got %d\n",
+               lineno, __FILE__, expected, n_pendings);
+        nerrs++;
     }
-    return 0;
+    return nerrs;
 }
 
 static
-void check_attached_buffer_usage(int ncid,
-                                 MPI_Offset expected_size,
-                                 MPI_Offset expected_usage,
-                                 int lineno)
+int check_attached_buffer_usage(int ncid,
+                                MPI_Offset expected_size,
+                                MPI_Offset expected_usage,
+                                int lineno)
 /* check attached buf usage */
 {
-    int err, rank;
+    int err, nerrs=0, rank;
     MPI_Offset usage, buf_size;
 
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
-    if (rank >= 4) return;
+    if (rank >= 4) return nerrs;
 
     err = ncmpi_inq_buffer_size(ncid, &buf_size);
-    if (err != NC_NOERR)
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
-    if (expected_size != buf_size)
-        printf("Error at line %d: expect buffer size %lld but got %lld\n",
-               lineno, expected_size, buf_size);
+    CHECK_ERR
+    if (expected_size != buf_size) {
+        printf("Error at line %d in %s: expect buffer size %lld but got %lld\n",
+               lineno, __FILE__,expected_size, buf_size);
+        nerrs++;
+    }
 
     err = ncmpi_inq_buffer_usage(ncid, &usage);
-    if (err != NC_NOERR)
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
-    if (expected_usage != usage)
-        printf("Error at line %d: expect buffer usage %lld but got %lld\n",
-               lineno, expected_usage, usage);
+    CHECK_ERR
+    if (expected_usage != usage) {
+        printf("Error at line %d in %s: expect buffer usage %lld but got %lld\n",
+               lineno, __FILE__,expected_usage, usage);
+        nerrs++;
+    }
+
+    return nerrs;
 }
 
 /* swap two rows, a and b, of a 2D array */
@@ -176,9 +156,9 @@ void permute(MPI_Offset *a, MPI_Offset *b)
 
 define(`TEST_BPUT_VARN',`dnl
 static
-void clear_file_contents_$1(int ncid, int *varid)
+int clear_file_contents_$1(int ncid, int *varid)
 {
-    int i, err, rank;
+    int i, err, nerrs=0, rank;
     $1 *w_buffer = ($1*) malloc(NY*NX * sizeof($1));
     for (i=0; i<NY*NX; i++) w_buffer[i] = 99;
 
@@ -186,17 +166,17 @@ void clear_file_contents_$1(int ncid, int *varid)
 
     for (i=0; i<4; i++) {
         err = ncmpi_put_var_$1_all(ncid, varid[i], w_buffer);
-        if (err != NC_NOERR)
-            printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+        CHECK_ERR
     }
     free(w_buffer);
+    return nerrs;
 }
 
 static
 int check_contents_for_fail_$1(int ncid, int *varid)
 {
     /* all processes read entire variables back and check contents */
-    int i, j, err, nprocs;
+    int i, j, err, nerrs=0, nprocs;
     $1 expected[4][NY*NX] =
                             {{13, 13, 13, 11, 11, 10, 10, 12, 11, 11,
                               10, 12, 12, 12, 13, 11, 11, 12, 12, 12,
@@ -223,8 +203,7 @@ int check_contents_for_fail_$1(int ncid, int *varid)
     for (i=0; i<4; i++) {
         for (j=0; j<NY*NX; j++) r_buffer[j] = 99;
         err = ncmpi_get_var_$1_all(ncid, varid[i], r_buffer);
-        if (err != NC_NOERR)
-            printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+        CHECK_ERR
 
         /* check if the contents of buf are expected */
         for (j=0; j<NY*NX; j++) {
@@ -232,13 +211,12 @@ int check_contents_for_fail_$1(int ncid, int *varid)
             if (r_buffer[j] != expected[i][j]) {
                 printf("Expected read buf[%d][%d]=IFMT($1), but got IFMT($1)\n",
                        i,j,expected[i][j],r_buffer[j]);
-                free(r_buffer);
-                return 1;
+                nerrs++;
             }
         }
     }
     free(r_buffer);
-    return 0;
+    return nerrs;
 }
 
 static int
@@ -291,16 +269,16 @@ test_bput_varn_$1(char *filename, int cdf)
     else if (cdf == NC_FORMAT_CDF5)
         cmode |= NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* create a global array of size NY * NX */
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_TYPE($1), NDIMS, dimid, &varid[0]); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_TYPE($1), NDIMS, dimid, &varid[1]); ERR
-    err = ncmpi_def_var(ncid, "var2", NC_TYPE($1), NDIMS, dimid, &varid[2]); ERR
-    err = ncmpi_def_var(ncid, "var3", NC_TYPE($1), NDIMS, dimid, &varid[3]); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_TYPE($1), NDIMS, dimid, &varid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_TYPE($1), NDIMS, dimid, &varid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var2", NC_TYPE($1), NDIMS, dimid, &varid[2]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var3", NC_TYPE($1), NDIMS, dimid, &varid[3]); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* allocate space for starts and counts */
     starts[0] = (MPI_Offset**) malloc(4 * 6 * sizeof(MPI_Offset*));
@@ -334,11 +312,7 @@ test_bput_varn_$1(char *filename, int cdf)
 
     /* test error code: NC_ENULLABUF */
     err = ncmpi_bput_varn_$1(ncid, varid[0], 1, NULL, NULL, NULL, &reqs[0]);
-    if (err != NC_ENULLABUF) {
-        printf("Error at line %d: expecting error code NC_ENULLABUF but got %s\n",
-               __LINE__, nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_ENULLABUF)
 
     /* only rank 0, 1, 2, and 3 do I/O:
      * each of ranks 0 to 3 write 4 nonblocking requests */
@@ -367,40 +341,38 @@ test_bput_varn_$1(char *filename, int cdf)
 
     /* give PnetCDF a space to buffer the nonblocking requests */
     if (bufsize > 0) {
-        err = ncmpi_buffer_attach(ncid, bufsize); ERR
+        err = ncmpi_buffer_attach(ncid, bufsize); CHECK_ERR
     }
 
     /* test error code: NC_ENULLSTART */
     err = ncmpi_bput_varn_$1(ncid, varid[0], 1, NULL, NULL, NULL, &reqs[0]);
-    if (rank < 4 && err != NC_ENULLSTART) {
-        printf("Error at line %d: expecting error code NC_ENULLSTART but got %s\n",
-               __LINE__, nc_err_code_name(err));
-        nerrs++;
-    }
+    if (rank < 4) EXP_ERR(NC_ENULLSTART)
+    else if (bufsize == 0) EXP_ERR(NC_ENULLABUF)
+    else CHECK_ERR
 
     /* write using varn API, one bput call per variable */
-    clear_file_contents_$1(ncid, varid);
+    nerrs += clear_file_contents_$1(ncid, varid);
     for (i=0; i<nreqs; i++) {
         err = ncmpi_bput_varn_$1(ncid, varid[i], my_nsegs[i], starts[i],
                                  counts[i], buffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (buffer[i][j] != ($1)rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=IFMT($1)\n",
-                       i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
-    check_attached_buffer_usage(ncid, bufsize, bufsize, __LINE__);
+    nerrs += check_attached_buffer_usage(ncid, bufsize, bufsize, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
     ERRS(nreqs, sts)
 
-    check_attached_buffer_usage(ncid, bufsize, 0, __LINE__);
+    nerrs += check_attached_buffer_usage(ncid, bufsize, 0, __LINE__);
 
     /* all processes read entire variables back and check contents */
     nerrs += check_contents_for_fail_$1(ncid, varid);
@@ -414,28 +386,28 @@ test_bput_varn_$1(char *filename, int cdf)
     }
 
     /* write using varn API, one bput call per variable */
-    clear_file_contents_$1(ncid, varid);
+    nerrs += clear_file_contents_$1(ncid, varid);
     for (i=0; i<nreqs; i++) {
         err = ncmpi_bput_varn_$1(ncid, varid[i], my_nsegs[i], starts[i],
                                  counts[i], buffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (buffer[i][j] != ($1)rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=IFMT($1)\n",
-                       i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
-    check_attached_buffer_usage(ncid, bufsize, bufsize, __LINE__);
+    nerrs += check_attached_buffer_usage(ncid, bufsize, bufsize, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
     ERRS(nreqs, sts)
 
-    check_attached_buffer_usage(ncid, bufsize, 0, __LINE__);
+    nerrs += check_attached_buffer_usage(ncid, bufsize, 0, __LINE__);
 
     /* all processes read entire variables back and check contents */
     nerrs += check_contents_for_fail_$1(ncid, varid);
@@ -443,7 +415,7 @@ test_bput_varn_$1(char *filename, int cdf)
     for (i=0; i<nreqs; i++) free(buffer[i]);
 
     /* test flexible API, using a noncontiguous buftype */
-    clear_file_contents_$1(ncid, varid);
+    nerrs += clear_file_contents_$1(ncid, varid);
     for (i=0; i<nreqs; i++) {
         MPI_Datatype buftype;
         MPI_Type_vector(req_lens[i], 1, 2, ITYPE2MPI($1), &buftype);
@@ -453,21 +425,21 @@ test_bput_varn_$1(char *filename, int cdf)
 
         err = ncmpi_bput_varn(ncid, varid[i], my_nsegs[i], starts[i],
                               counts[i], buffer[i], 1, buftype, &reqs[i]);
-        ERR
+        CHECK_ERR
         MPI_Type_free(&buftype);
     }
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]*2; j++) {
             if (buffer[i][j] != ($1)rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=IFMT($1)\n",
-                       i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
-    check_attached_buffer_usage(ncid, bufsize, bufsize, __LINE__);
+    nerrs += check_attached_buffer_usage(ncid, bufsize, bufsize, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
     ERRS(nreqs, sts)
 
@@ -475,13 +447,13 @@ test_bput_varn_$1(char *filename, int cdf)
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]*2; j++) {
             if (buffer[i][j] != ($1)rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=IFMT($1)\n",
-                       i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
     }
-    check_attached_buffer_usage(ncid, bufsize, 0, __LINE__);
+    nerrs += check_attached_buffer_usage(ncid, bufsize, 0, __LINE__);
 
     /* all processes read entire variables back and check contents */
     nerrs += check_contents_for_fail_$1(ncid, varid);
@@ -494,7 +466,7 @@ test_bput_varn_$1(char *filename, int cdf)
 
     /* test flexible API, using a noncontiguous buftype, one bput call per
      * variable */
-    clear_file_contents_$1(ncid, varid);
+    nerrs += clear_file_contents_$1(ncid, varid);
     for (i=0; i<nreqs; i++) {
         MPI_Datatype buftype;
         MPI_Type_vector(req_lens[i], 1, 2, ITYPE2MPI($1), &buftype);
@@ -503,21 +475,21 @@ test_bput_varn_$1(char *filename, int cdf)
 
         err = ncmpi_bput_varn(ncid, varid[i], my_nsegs[i], starts[i],
                               counts[i], buffer[i], 1, buftype, &reqs[i]);
-        ERR
+        CHECK_ERR
         MPI_Type_free(&buftype);
     }
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]*2; j++) {
             if (buffer[i][j] != ($1)rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=IFMT($1)\n",
-                       i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
-    check_attached_buffer_usage(ncid, bufsize, bufsize, __LINE__);
+    nerrs += check_attached_buffer_usage(ncid, bufsize, bufsize, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
     ERRS(nreqs, sts)
 
@@ -525,31 +497,27 @@ test_bput_varn_$1(char *filename, int cdf)
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]*2; j++) {
             if (buffer[i][j] != ($1)rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=IFMT($1)\n",
-                       i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
     }
-    check_attached_buffer_usage(ncid, bufsize, 0, __LINE__);
+    nerrs += check_attached_buffer_usage(ncid, bufsize, 0, __LINE__);
 
     /* all processes read entire variables back and check contents */
     nerrs += check_contents_for_fail_$1(ncid, varid);
 
     /* free the buffer space for bput */
     if (bufsize > 0) {
-        err = ncmpi_buffer_detach(ncid); ERR
+        err = ncmpi_buffer_detach(ncid); CHECK_ERR
     }
 
     /* test error code: NC_ENULLABUF */
-    err = ncmpi_inq_buffer_usage(ncid, NULL);
-    if (err != NC_ENULLABUF) {
-        printf("expecting error code NC_ENULLABUF but got %s\n",
-               nc_err_code_name(err));
-        nerrs++;
-    }
+    err = ncmpi_inq_buffer_usage(ncid, &bufsize);
+    EXP_ERR(NC_ENULLABUF)
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     for (i=0; i<nreqs; i++) free(buffer[i]);
     free(starts[0][0]);
@@ -584,7 +552,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -630,6 +598,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nonblocking/column_wise.m4 b/test/nonblocking/column_wise.m4
index 19812a0..82b60ef 100644
--- a/test/nonblocking/column_wise.m4
+++ b/test/nonblocking/column_wise.m4
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: column_wise.m4 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: column_wise.m4 3422 2017-09-25 05:42:52Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests a number of nonblocking API calls, each writes a single
@@ -14,7 +14,7 @@
  * If simply concatenating fileviews of all the nonblocking calls will result
  * in a fileview that violates the MPI-IO requirement on the fileview of which
  * flattened file offsets must be monotonically non-decreasing. PnetCDF handles
- * this case by breaking down each nonblocking call into a lsit of offset-length
+ * this case by breaking down each nonblocking call into a list of offset-length
  * pairs, merging the pairs across multiple nonblocking calls, and sorting
  * them into an increasing order. The sorted pairs are used to construct a
  * fileview that meets the monotonically non-decreasing offset requirement,
@@ -59,7 +59,10 @@
  *    }
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-#include <ncconfig.h> /* output of 'configure' */
+#ifdef HAVE_CONFIG_H
+#include <config.h> /* output of 'configure' */
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h> /* strcpy() */
@@ -73,33 +76,11 @@
 #define NY 10
 #define NX 4
 
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h> /* ushort, uint */
-#endif
-
 typedef char text;
-typedef signed char schar;
-#ifndef HAVE_UCHAR
-typedef unsigned char uchar;
-#endif
-#ifndef HAVE_USHORT
-typedef unsigned short ushort;
-#endif
-#ifndef HAVE_UINT
-typedef unsigned int uint;
-#endif
-#ifndef HAVE_LONGLONG
-typedef long long longlong;
-#endif
-#ifndef HAVE_ULONGLONG
-typedef unsigned long long ulonglong;
-#endif
 
 include(`foreach.m4')dnl
 include(`utils.m4')dnl
 
-#define ERR {if(err!=NC_NOERR){nerrs++; printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}}
-
 define(`TEST_COLUMN_WISE',`dnl
 static
 int test_column_wise_$1(char *filename, int cdf)
@@ -118,17 +99,17 @@ int test_column_wise_$1(char *filename, int cdf)
     else if (cdf == NC_FORMAT_CDF5)
         cmode |= NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* the global array is NY * (NX * nprocs) */
     G_NX  = NX * nprocs;
     myOff = NX * rank;
     myNX  = NX;
 
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", G_NX, &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 2, dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", G_NX, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 2, dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* First, fill the entire array with zeros, using a blocking I/O.
        Every process writes a subarray of size NY * myNX */
@@ -156,7 +137,7 @@ int test_column_wise_$1(char *filename, int cdf)
     num_reqs = 0;
     for (i=0; i<myNX; i++) {
         err = ncmpi_iput_vara_$1(ncid, varid, start, count, buf[i],
-                                 &reqs[num_reqs++]); ERR
+                                 &reqs[num_reqs++]); CHECK_ERR
         start[1] += nprocs;
     }
 
@@ -172,14 +153,14 @@ int test_column_wise_$1(char *filename, int cdf)
      * changed to use a number > NC_BYTE_SWAP_BUFFER_SIZE/sizeof(int), say
      * 1025
      */
-    err = ncmpi_cancel(ncid, num_reqs, reqs, sts); ERR
+    err = ncmpi_cancel(ncid, num_reqs, reqs, sts); CHECK_ERR
 
     /* check if write buffer contents have been altered after cancelling */
     for (i=0; i<myNX; i++) {
         for (j=0; j<NY; j++) {
             if (buf[i][j] != ($1)rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=IFMT($1)\n",
-                       i,j,buf[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,buf[i][j]);
                 nerrs++;
             }
         }
@@ -190,7 +171,7 @@ int test_column_wise_$1(char *filename, int cdf)
     num_reqs = 0;
     for (i=0; i<myNX; i++) {
         err = ncmpi_iput_vara_$1(ncid, varid, start, count, buf[i],
-                                 &reqs[num_reqs++]); ERR
+                                 &reqs[num_reqs++]); CHECK_ERR
         start[1] += nprocs;
     }
 
@@ -201,14 +182,14 @@ int test_column_wise_$1(char *filename, int cdf)
         reqs[2*i+1] = tmp;
     }
 
-    err = ncmpi_wait_all(ncid, num_reqs, reqs, sts); ERR
+    err = ncmpi_wait_all(ncid, num_reqs, reqs, sts); CHECK_ERR
 
     /* check if write buffer contents have been altered after wait */
     for (i=0; i<myNX; i++) {
         for (j=0; j<NY; j++) {
             if (buf[i][j] != ($1)rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=IFMT($1)\n",
-                       i,j,buf[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,buf[i][j]);
                 nerrs++;
             }
         }
@@ -217,16 +198,23 @@ int test_column_wise_$1(char *filename, int cdf)
     /* check status of all requests */
     for (i=0; i<num_reqs; i++) {
         if (reqs[i] != NC_REQ_NULL) { /* add in PnetCDF v1.7.0 */
-            printf("Error: request ID %d fails to be set to NC_REQ_NULL\n",i);
+            printf("Error at line %d in %s: request ID %d fails to be set to NC_REQ_NULL\n",__LINE__,__FILE__,i);
             nerrs++;
         }
         if (sts[i] != NC_NOERR) {
-            printf("Error: nonblocking write fails on request %d (%s)\n",
-                   i, ncmpi_strerror(sts[i]));
+            printf("Error at line %d in %s: nonblocking write fails on request %d (%s)\n",
+                   __LINE__,__FILE__,i, ncmpi_strerror(sts[i]));
             nerrs++;
         }
     }
 
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid);
+    CHECK_ERR
+
+    err = ncmpi_inq_varid(ncid, "var", &varid); CHECK_ERR
+
     /* read back using the same access pattern */
     for (i=0; i<myNX; i++)
         for (j=0; j<NY; j++) buf[i][j] = ($1)99;
@@ -238,27 +226,27 @@ int test_column_wise_$1(char *filename, int cdf)
     num_reqs = 0;
     for (i=0; i<myNX; i++) {
         err = ncmpi_iget_vara_$1(ncid, varid, start, count, buf[i],
-                                 &reqs[num_reqs++]); ERR
+                                 &reqs[num_reqs++]); CHECK_ERR
         start[1] += nprocs;
     }
     /* this test is to see if cancelling free up all the internal malloc */
-    err = ncmpi_cancel(ncid, num_reqs, reqs, sts); ERR
+    err = ncmpi_cancel(ncid, num_reqs, reqs, sts); CHECK_ERR
 
     /* post iget requests again */
     start[1] = rank;
     num_reqs = 0;
     for (i=0; i<myNX; i++) {
         err = ncmpi_iget_vara_$1(ncid, varid, start, count, buf[i],
-                                 &reqs[num_reqs++]); ERR
+                                 &reqs[num_reqs++]); CHECK_ERR
         start[1] += nprocs;
     }
-    err = ncmpi_wait_all(ncid, num_reqs, reqs, sts); ERR
+    err = ncmpi_wait_all(ncid, num_reqs, reqs, sts); CHECK_ERR
 
     /* check status of all requests */
     for (i=0; i<num_reqs; i++)
         if (sts[i] != NC_NOERR) {
-            printf("Error: nonblocking write fails on request %d (%s)\n",
-                   i, ncmpi_strerror(sts[i]));
+            printf("Error at line %d in %s: nonblocking write fails on request %d (%s)\n",
+                   __LINE__,__FILE__,i, ncmpi_strerror(sts[i]));
             nerrs++;
         }
 
@@ -266,14 +254,14 @@ int test_column_wise_$1(char *filename, int cdf)
         for (j=0; j<NY; j++) {
             $1 expected = ($1)rank+10;
             if (buf[i][j] != expected) {
-                printf("Error: expect buf[%d][%d]=IFMT($1) but got IFMT($1)\n",
-                       i,j,expected,buf[i][j]);
+                printf("Error at line %d in %s: expect buf[%d][%d]=IFMT($1) but got IFMT($1)\n",
+                       __LINE__,__FILE__,i,j,expected,buf[i][j]);
                 nerrs++;
             }
         }
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     free(sts);
     free(reqs);
@@ -309,7 +297,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -355,6 +343,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nonblocking/depend b/test/nonblocking/depend
deleted file mode 100644
index 4b00744..0000000
--- a/test/nonblocking/depend
+++ /dev/null
@@ -1,14 +0,0 @@
-mcoll_perf.c.o: mcoll_perf.c
-mcoll_testf77:  mcoll_testf77.f
-mcoll_testf.o:  mcoll_testf.f90
-test_bput.o:    test_bput.c
-test_bputf.o:   test_bputf.f90
-test_bputf77.o: test_bputf77.f
-interleaved.o:  interleaved.c
-i_varn_int64.o: i_varn_int64.c
-bput_varn.o: bput_varn.c
-flexible_bput.o: flexible_bput.c
-wait_after_indep.o: wait_after_indep.c
-column_wise.o: column_wise.c
-req_all.o: req_all.c
-i_varn_indef.o: i_varn_indef.c
diff --git a/test/nonblocking/flexible_bput.c b/test/nonblocking/flexible_bput.c
index dda12b0..a86c406 100644
--- a/test/nonblocking/flexible_bput.c
+++ b/test/nonblocking/flexible_bput.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: flexible_bput.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: flexible_bput.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -58,8 +58,6 @@
 #define NX 4
 #define GHOST 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 #define INIT_PUT_BUF(buf) \
     for (i=0; i<array_of_sizes[0]; i++) { \
         for (j=0; j<array_of_sizes[1]; j++) { \
@@ -77,15 +75,15 @@
             if (i < GHOST || GHOST+array_of_subsizes[0] <= i || \
                 j < GHOST || GHOST+array_of_subsizes[1] <= j) { \
                 if (buf[i][j] != -1) { \
-                    printf("Error: put buffer altered buffer[%d][%d]=%f\n", \
-                           i,j,(double)buf[i][j]); \
+                    printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%f\n", \
+                           __LINE__,__FILE__,i,j,(double)buf[i][j]); \
                     nerrs++; \
                 } \
             } \
             else { \
                 if (buf[i][j] != (i-GHOST)*array_of_subsizes[1]+(j-GHOST)) { \
-                    printf("Error: put buffer altered buffer[%d][%d]=%f\n", \
-                           i,j,(double)buf[i][j]); \
+                    printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%f\n", \
+                           __LINE__,__FILE__,i,j,(double)buf[i][j]); \
                     nerrs++; \
                 } \
             } \
@@ -103,15 +101,15 @@
             if (i < GHOST || GHOST+array_of_subsizes[0] <= i || \
                 j < GHOST || GHOST+array_of_subsizes[1] <= j) { \
                 if (buf[i][j] != -2) { \
-                    printf("Unexpected get buffer[%d][%d]=%f\n", \
-                           i,j,(double)buf[i][j]); \
+                    printf("Error at line %d in %s: unexpected get buffer[%d][%d]=%f\n", \
+                           __LINE__,__FILE__,i,j,(double)buf[i][j]); \
                     nerrs++; \
                 } \
             } \
             else { \
                 if (buf[i][j] != (i-GHOST)*array_of_subsizes[1]+(j-GHOST)) { \
-                    printf("Unexpected get buffer[%d][%d]=%f\n", \
-                           i,j,(double)buf[i][j]); \
+                    printf("Error at line %d in %s: unexpected get buffer[%d][%d]=%f\n", \
+                           __LINE__,__FILE__,i,j,(double)buf[i][j]); \
                     nerrs++; \
                 } \
             } \
@@ -136,7 +134,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -152,15 +150,15 @@ int main(int argc, char** argv)
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* define 2 dimensions */
-    err = ncmpi_def_dim(ncid, "Y", NY,        &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX*nprocs, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY,        &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX*nprocs, &dimid[1]); CHECK_ERR
 
     /* define a variable of size NY * (NX * nprocs) */
-    err = ncmpi_def_var(ncid, "var", NC_DOUBLE, 2, dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_var(ncid, "var", NC_DOUBLE, 2, dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
      start[0] = 0;  start[1] = NX * rank;
      count[0] = NY; count[1] = NX;
@@ -184,21 +182,21 @@ int main(int argc, char** argv)
 
     MPI_Offset bufsize = sizeof(double);
     for (i=0; i<2; i++) bufsize *= count[i];
-    err = ncmpi_buffer_attach(ncid, bufsize); ERR
+    err = ncmpi_buffer_attach(ncid, bufsize); CHECK_ERR
 
     err = ncmpi_bput_varm(ncid, varid, start, count, stride, imap, buf_int,
                           1, subarray, &req);
-    ERR
+    CHECK_ERR
     /* check if the contents of put buffer are altered */
     CHECK_PUT_BUF(buf_int)
 
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
-    err = status; ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
+    err = status; CHECK_ERR
 
     /* check the contents of put buffer are altered */
     CHECK_PUT_BUF(buf_int)
 
-    err = ncmpi_buffer_detach(ncid); ERR
+    err = ncmpi_buffer_detach(ncid); CHECK_ERR
 
     /* read back using a blocking get_varm flexible API ---------------------*/
     /* initiate get buffer contents */
@@ -207,7 +205,7 @@ int main(int argc, char** argv)
     /* calling a blocking flexible API */
     err = ncmpi_get_varm_all(ncid, varid, start, count, stride, imap, buf_int,
                              1, subarray);
-    ERR
+    CHECK_ERR
 
     /* check the contents of get buffer */
     CHECK_GET_BUF(buf_int)
@@ -224,22 +222,22 @@ int main(int argc, char** argv)
     /* initiate put buffer contents */
     INIT_PUT_BUF(buf_dbl)
 
-    err = ncmpi_buffer_attach(ncid, bufsize); ERR
+    err = ncmpi_buffer_attach(ncid, bufsize); CHECK_ERR
 
     err = ncmpi_bput_varm(ncid, varid, start, count, stride, imap, buf_dbl,
                           1, subarray, &req);
-    ERR
+    CHECK_ERR
 
     /* check the contents of put buffer are altered */
     CHECK_PUT_BUF(buf_dbl)
 
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
-    err = status; ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
+    err = status; CHECK_ERR
 
     /* check the contents of put buffer are altered */
     CHECK_PUT_BUF(buf_dbl)
 
-    err = ncmpi_buffer_detach(ncid); ERR
+    err = ncmpi_buffer_detach(ncid); CHECK_ERR
 
     /* read back using a blocking get_varm flexible API ---------------------*/
     /* initiate get buffer contents */
@@ -248,14 +246,14 @@ int main(int argc, char** argv)
     /* calling a blocking flexible API */
     err = ncmpi_get_varm_all(ncid, varid, start, count, stride, imap, buf_dbl,
                              1, subarray);
-    ERR
+    CHECK_ERR
 
     /* check the contents of get buffer */
     CHECK_GET_BUF(buf_dbl)
 
     MPI_Type_free(&subarray);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -274,6 +272,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nonblocking/i_varn_indef.c b/test/nonblocking/i_varn_indef.c
index 1d90aef..cdca8ba 100644
--- a/test/nonblocking/i_varn_indef.c
+++ b/test/nonblocking/i_varn_indef.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: i_varn_indef.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: i_varn_indef.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests posting nonblocking varn APIs, including
@@ -70,27 +70,21 @@
 #define NX 10
 #define NDIMS 2
 
-#define ERR \
-    if (err != NC_NOERR) { \
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); \
-        nerrs++; \
-    }
-
 #define ERRS(n,a) { \
     int _i; \
     for (_i=0; _i<(n); _i++) { \
         if ((a)[_i] != NC_NOERR) { \
-            printf("Error at line=%d: err[%d] %s\n", __LINE__, _i, \
-                   ncmpi_strerror((a)[_i])); \
+            printf("Error at line %d in %s: err[%d] %s\n", __LINE__, __FILE__, _i, \
+                   ncmpi_strerrno((a)[_i])); \
             nerrs++; \
         } \
     } \
 }
 
 static
-void clear_file_contents(int ncid, int *varid)
+int clear_file_contents(int ncid, int *varid)
 {
-    int i, err, rank;
+    int i, err, nerrs=0, rank;
     long long *w_buffer = (long long*) malloc(NY*NX * sizeof(long long));
     for (i=0; i<NY*NX; i++) w_buffer[i] = -1;
 
@@ -98,16 +92,17 @@ void clear_file_contents(int ncid, int *varid)
 
     for (i=0; i<4; i++) {
         err = ncmpi_put_var_longlong_all(ncid, varid[i], w_buffer);
-        if (err != NC_NOERR) printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+        CHECK_ERR
     }
     free(w_buffer);
+    return nerrs;
 }
 
 static
 int check_contents_for_fail(int ncid, int *varid, int lineno)
 {
     /* all processes read entire variables back and check contents */
-    int i, j, err, nprocs;
+    int i, j, err, nerrs=0, nprocs;
     long long expected[4][NY*NX] = {{13, 13, 13, 11, 11, 10, 10, 12, 11, 11,
                                      10, 12, 12, 12, 13, 11, 11, 12, 12, 12,
                                      11, 11, 12, 13, 13, 13, 10, 10, 11, 11,
@@ -133,36 +128,35 @@ int check_contents_for_fail(int ncid, int *varid, int lineno)
     for (i=0; i<4; i++) {
         for (j=0; j<NY*NX; j++) r_buffer[j] = -1;
         err = ncmpi_get_var_longlong_all(ncid, varid[i], r_buffer);
-        if (err != NC_NOERR) printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+        CHECK_ERR
 
         /* check if the contents of buf are expected */
         for (j=0; j<NY*NX; j++) {
             if (expected[i][j] >= nprocs) continue;
             if (r_buffer[j] != expected[i][j]) {
-                printf("Error from line %d: Expected read buf[%d][%d]=%lld, but got %lld\n",
-                       lineno,i,j,expected[i][j],r_buffer[j]);
-                free(r_buffer);
-                return 1;
+                printf("Error at line %d in %s: Expected read buf[%d][%d]=%lld, but got %lld\n",
+                       lineno,__FILE__,i,j,expected[i][j],r_buffer[j]);
+                nerrs++;
             }
         }
     }
     free(r_buffer);
-    return 0;
+    return nerrs;
 }
 
 static int
 check_num_pending_reqs(int ncid, int expected, int lineno)
 /* check if PnetCDF can reports expected number of pending requests */
 {
-    int err, n_pendings;
+    int err, nerrs=0, n_pendings;
     err = ncmpi_inq_nreqs(ncid, &n_pendings);
-    if (err != NC_NOERR) printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+    CHECK_ERR
     if (n_pendings != expected) {
-        printf("Error at line %d: expect %d pending requests but got %d\n",
-               lineno, expected, n_pendings);
-        return 1;
+        printf("Error at line %d in %s: expect %d pending requests but got %d\n",
+               lineno, __FILE__, expected, n_pendings);
+        nerrs++;
     }
-    return 0;
+    return nerrs;
 }
 
 /* swap two rows, a and b, of a 2D array */
@@ -223,7 +217,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -304,20 +298,20 @@ int main(int argc, char** argv)
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* create a global array of size NY * NX */
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); CHECK_ERR
 
     /* post write requests while still in define mode */
     for (i=0; i<4; i++) {
         err = ncmpi_def_var(ncid, varname[i], NC_INT64, NDIMS, dimid, &varid[i]);
-        ERR
+        CHECK_ERR
 
         err = ncmpi_iput_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], buffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
 
     /* test error code: NC_ENULLSTART */
@@ -329,20 +323,22 @@ int main(int argc, char** argv)
         nerrs++;
     }
 
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* clear the file contents using a blocking API, before commit the
      * nonblocking requests posted in define mode */
-    clear_file_contents(ncid, varid);
+    nerrs += clear_file_contents(ncid, varid);
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (buffer[i][j] != rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=%lld\n", i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%lld\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
@@ -351,7 +347,7 @@ int main(int argc, char** argv)
     /* all processes read entire variables back and check contents */
     nerrs += check_contents_for_fail(ncid, varid, __LINE__);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* try with buffer being a single contiguous space ----------------------*/
     for (i=0; i<nreqs; i++) bufsize += req_lens[i];
@@ -363,35 +359,37 @@ int main(int argc, char** argv)
     /* create a new file for writing */
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* create a global array of size NY * NX */
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); CHECK_ERR
 
     /* post write requests while still in define mode */
     for (i=0; i<4; i++) {
         err = ncmpi_def_var(ncid, varname[i], NC_INT64, NDIMS, dimid, &varid[i]);
-        ERR
+        CHECK_ERR
 
         err = ncmpi_iput_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], cbuffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* clear the file contents using a blocking API, before commit the
      * nonblocking requests posted in define mode */
-    clear_file_contents(ncid, varid);
+    nerrs += clear_file_contents(ncid, varid);
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (cbuffer[i][j] != rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=%lld\n", i,j,cbuffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%lld\n",
+                       __LINE__,__FILE__,i,j,cbuffer[i][j]);
                 nerrs++;
             }
         }
@@ -400,7 +398,7 @@ int main(int argc, char** argv)
     /* all processes read entire variables back and check contents */
     nerrs += check_contents_for_fail(ncid, varid, __LINE__);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* permute write order: so starts[*] are not in an increasing order:
      * swap segment 0 with segment 2 and swap segment 1 with segment 3
@@ -413,20 +411,20 @@ int main(int argc, char** argv)
     /* create a new file for writing */
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* create a global array of size NY * NX */
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); CHECK_ERR
 
     /* write requests request while still in define mode */
     for (i=0; i<4; i++) {
         err = ncmpi_def_var(ncid, varname[i], NC_INT64, NDIMS, dimid, &varid[i]);
-        ERR
+        CHECK_ERR
 
         err = ncmpi_iput_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], buffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
 
     /* post read requests while still in define mode */
@@ -434,23 +432,25 @@ int main(int argc, char** argv)
         for (j=0; j<req_lens[i]; j++) cbuffer[i][j] = -1;
         err = ncmpi_iget_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], cbuffer[i], &reqs[4+i]);
-        ERR
+        CHECK_ERR
     }
 
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* clear the file contents using a blocking API, before commit the
      * nonblocking requests posted in define mode */
-    clear_file_contents(ncid, varid);
+    nerrs += clear_file_contents(ncid, varid);
     nerrs += check_num_pending_reqs(ncid, nreqs*2, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (buffer[i][j] != rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=%lld\n", i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%lld\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
@@ -461,15 +461,16 @@ int main(int argc, char** argv)
     /* commit read requests */
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs+4, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (cbuffer[i][j] != rank+10) {
-                printf("Error at line %d: expecting cbuffer[%d][%d]=%d but got %lld\n",
-                       __LINE__,i,j,rank+10,cbuffer[i][j]);
+                printf("Error at line %d in %s: expecting cbuffer[%d][%d]=%d but got %lld\n",
+                       __LINE__,__FILE__,i,j,rank+10,cbuffer[i][j]);
                 nerrs++;
             }
         }
@@ -490,26 +491,26 @@ int main(int argc, char** argv)
     /* create a new file for writing */
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* create a global array of size NY * NX */
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); CHECK_ERR
 
     /* write requests request while still in define mode */
     for (i=0; i<4; i++) {
         err = ncmpi_def_var(ncid, varname[i], NC_INT64, NDIMS, dimid, &varid[i]);
-        ERR
+        CHECK_ERR
 
         err = ncmpi_iput_varn(ncid, varid[i], my_nsegs[i], starts[i], counts[i],
-                              buffer[i], 1, buftype[i], &reqs[i]); ERR
-        ERR
+                              buffer[i], 1, buftype[i], &reqs[i]);
+        CHECK_ERR
     }
     /* test flexible get API, using a noncontiguous buftype */
     for (i=0; i<nreqs; i++) {
         err = ncmpi_iget_varn(ncid, varid[i], my_nsegs[i], starts[i], counts[i],
                               rbuffer[i], 1, buftype[i], &reqs[i+4]);
-        ERR
+        CHECK_ERR
     }
 
     for (i=0; i<nreqs; i++) MPI_Type_free(&buftype[i]);
@@ -526,16 +527,17 @@ int main(int argc, char** argv)
     for (i=0; i<nreqs; i++) {
         err = ncmpi_iget_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], cbuffer[i], &reqs[i+8]);
-        ERR
+        CHECK_ERR
     }
 
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* clear the file contents using a blocking API, before commit the
      * nonblocking requests posted in define mode */
-    clear_file_contents(ncid, varid);
+    nerrs += clear_file_contents(ncid, varid);
     nerrs += check_num_pending_reqs(ncid, nreqs*3, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* all processes read entire variables back and check contents */
@@ -544,18 +546,19 @@ int main(int argc, char** argv)
     /* flush nonblocking 1st batch read requests */
     nerrs += check_num_pending_reqs(ncid, nreqs*2, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs+4, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]*2; j++) {
             if (j%2 && rbuffer[i][j] != -1) {
-                printf("Error at line %d: expecting rbuffer[%d][%d]=-1 but got %lld\n",
-                       __LINE__,i,j,rbuffer[i][j]);
+                printf("Error at line %d in %s: expecting rbuffer[%d][%d]=-1 but got %lld\n",
+                       __LINE__,__FILE__,i,j,rbuffer[i][j]);
                 nerrs++;
             }
             if (j%2 == 0 && rbuffer[i][j] != rank+10) {
-                printf("Error at line %d: expecting rbuffer[%d][%d]=%d but got %lld\n",
-                       __LINE__,i,j,rank+10,rbuffer[i][j]);
+                printf("Error at line %d in %s: expecting rbuffer[%d][%d]=%d but got %lld\n",
+                       __LINE__,__FILE__,i,j,rank+10,rbuffer[i][j]);
                 nerrs++;
             }
         }
@@ -564,20 +567,21 @@ int main(int argc, char** argv)
     /* flush nonblocking 2nd batch read requests */
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs+8, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (cbuffer[i][j] != rank+10) {
-                printf("Error at line %d: expecting buffer[%d][%d]=%d but got %lld\n",
-                       __LINE__,i,j,rank+10,cbuffer[i][j]);
+                printf("Error at line %d in %s: expecting buffer[%d][%d]=%d but got %lld\n",
+                       __LINE__,__FILE__,i,j,rank+10,cbuffer[i][j]);
                 nerrs++;
             }
         }
     }
 
     err = ncmpi_close(ncid);
-    ERR
+    CHECK_ERR
 
     if (bufsize>0) free(cbuffer[0]);
     for (i=0; i<nreqs; i++) free(buffer[i]);
@@ -604,6 +608,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nonblocking/i_varn_int64.c b/test/nonblocking/i_varn_int64.c
index 71933ff..d7a48d1 100644
--- a/test/nonblocking/i_varn_int64.c
+++ b/test/nonblocking/i_varn_int64.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: i_varn_int64.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: i_varn_int64.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests nonblocking varn APIs, including
@@ -72,31 +72,25 @@
 
 #define FATAL_ERR \
     if (err != NC_NOERR) { \
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); \
+        printf("Error at line %d in %s: %s\n", __LINE__, __FILE__, ncmpi_strerrno(err)); \
         exit(1); \
     }
 
-#define ERR \
-    if (err != NC_NOERR) { \
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); \
-        nerrs++; \
-    }
-
 #define ERRS(n,a) { \
     int _i; \
     for (_i=0; _i<(n); _i++) { \
         if ((a)[_i] != NC_NOERR) { \
-            printf("Error at line=%d: err[%d] %s\n", __LINE__, _i, \
-                   ncmpi_strerror((a)[_i])); \
+            printf("Error at line %d in %s: err[%d] %s\n", __LINE__, __FILE__, _i, \
+                   ncmpi_strerrno((a)[_i])); \
             nerrs++; \
         } \
     } \
 }
 
 static
-void clear_file_contents(int ncid, int *varid)
+int clear_file_contents(int ncid, int *varid)
 {
-    int i, err, rank;
+    int i, err, rank, nerrs=0;
     long long *w_buffer = (long long*) malloc(NY*NX * sizeof(long long));
     for (i=0; i<NY*NX; i++) w_buffer[i] = -1;
 
@@ -104,16 +98,17 @@ void clear_file_contents(int ncid, int *varid)
 
     for (i=0; i<4; i++) {
         err = ncmpi_put_var_longlong_all(ncid, varid[i], w_buffer);
-        if (err != NC_NOERR) printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+        CHECK_ERR
     }
     free(w_buffer);
+    return nerrs;
 }
 
 static
 int check_contents_for_fail(int ncid, int *varid)
 {
     /* all processes read entire variables back and check contents */
-    int i, j, err, nprocs;
+    int i, j, nerrs=0, err, nprocs;
     long long expected[4][NY*NX] = {{13, 13, 13, 11, 11, 10, 10, 12, 11, 11,
                                      10, 12, 12, 12, 13, 11, 11, 12, 12, 12,
                                      11, 11, 12, 13, 13, 13, 10, 10, 11, 11,
@@ -139,36 +134,35 @@ int check_contents_for_fail(int ncid, int *varid)
     for (i=0; i<4; i++) {
         for (j=0; j<NY*NX; j++) r_buffer[j] = -1;
         err = ncmpi_get_var_longlong_all(ncid, varid[i], r_buffer);
-        if (err != NC_NOERR) printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+        CHECK_ERR
 
         /* check if the contents of buf are expected */
         for (j=0; j<NY*NX; j++) {
             if (expected[i][j] >= nprocs) continue;
             if (r_buffer[j] != expected[i][j]) {
-                printf("Expected read buf[%d][%d]=%lld, but got %lld\n",
-                       i,j,expected[i][j],r_buffer[j]);
-                free(r_buffer);
-                return 1;
+                printf("Error at line %d in %s: xxpect read buf[%d][%d]=%lld, but got %lld\n",
+                       __LINE__,__FILE__,i,j,expected[i][j],r_buffer[j]);
+                nerrs++;
             }
         }
     }
     free(r_buffer);
-    return 0;
+    return nerrs;
 }
 
 static int
 check_num_pending_reqs(int ncid, int expected, int lineno)
 /* check if PnetCDF can reports expected number of pending requests */
 {
-    int err, n_pendings;
+    int err, nerrs=0, n_pendings;
     err = ncmpi_inq_nreqs(ncid, &n_pendings);
-    if (err != NC_NOERR) printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));
+    CHECK_ERR
     if (n_pendings != expected) {
-        printf("Error at line %d: expect %d pending requests but got %d\n",
-               lineno, expected, n_pendings);
-        return 1;
+        printf("Error at line %d in %s: expect %d pending requests but got %d\n",
+               lineno, __FILE__, expected, n_pendings);
+        nerrs++;
     }
-    return 0;
+    return nerrs;
 }
 
 /* swap two rows, a and b, of a 2D array */
@@ -228,7 +222,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -252,13 +246,13 @@ int main(int argc, char** argv)
     FATAL_ERR
 
     /* create a global array of size NY * NX */
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_INT64, NDIMS, dimid, &varid[0]); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT64, NDIMS, dimid, &varid[1]); ERR
-    err = ncmpi_def_var(ncid, "var2", NC_INT64, NDIMS, dimid, &varid[2]); ERR
-    err = ncmpi_def_var(ncid, "var3", NC_INT64, NDIMS, dimid, &varid[3]); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_INT64, NDIMS, dimid, &varid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT64, NDIMS, dimid, &varid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var2", NC_INT64, NDIMS, dimid, &varid[2]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var3", NC_INT64, NDIMS, dimid, &varid[3]); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* allocate space for starts and counts */
     starts[0] = (MPI_Offset**) malloc(4 * 6 * sizeof(MPI_Offset*));
@@ -320,21 +314,23 @@ int main(int argc, char** argv)
     }
 
     /* write using varn API */
-    clear_file_contents(ncid, varid);
+    nerrs += clear_file_contents(ncid, varid);
     for (i=0; i<nreqs; i++) {
         err = ncmpi_iput_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], buffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (buffer[i][j] != rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=%lld\n", i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%lld\n",
+                __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
@@ -352,21 +348,23 @@ int main(int argc, char** argv)
     }
 
     /* write usning varn API */
-    clear_file_contents(ncid, varid);
+    nerrs += clear_file_contents(ncid, varid);
     for (i=0; i<nreqs; i++) {
         err = ncmpi_iput_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], cbuffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (cbuffer[i][j] != rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=%lld\n", i,j,cbuffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%lld\n",
+                __LINE__,__FILE__,i,j,cbuffer[i][j]);
                 nerrs++;
             }
         }
@@ -384,21 +382,23 @@ int main(int argc, char** argv)
     }
 
     /* write usning varn API */
-    clear_file_contents(ncid, varid);
+    nerrs += clear_file_contents(ncid, varid);
     for (i=0; i<nreqs; i++) {
         err = ncmpi_iput_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], buffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (buffer[i][j] != rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=%lld\n", i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%lld\n",
+                __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
@@ -412,18 +412,19 @@ int main(int argc, char** argv)
         for (j=0; j<req_lens[i]; j++) buffer[i][j] = -1;
         err = ncmpi_iget_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], buffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if read buffer contents are expected */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (buffer[i][j] != rank+10) {
-                printf("Error at line %d: expecting buffer[%d][%d]=%d but got %lld\n",
-                       __LINE__,i,j,rank+10,buffer[i][j]);
+                printf("Error at line %d in %s: expecting buffer[%d][%d]=%d but got %lld\n",
+                       __LINE__,__FILE__,i,j,rank+10,buffer[i][j]);
                 nerrs++;
             }
         }
@@ -432,7 +433,7 @@ int main(int argc, char** argv)
     for (i=0; i<nreqs; i++) free(buffer[i]);
 
     /* test flexible put API, using a noncontiguous buftype */
-    clear_file_contents(ncid, varid);
+    nerrs += clear_file_contents(ncid, varid);
     for (i=0; i<nreqs; i++) {
         MPI_Datatype buftype;
         MPI_Type_vector(req_lens[i], 1, 2, MPI_LONG_LONG, &buftype);
@@ -442,18 +443,20 @@ int main(int argc, char** argv)
 
         err = ncmpi_iput_varn(ncid, varid[i], my_nsegs[i], starts[i],
                               counts[i], buffer[i], 1, buftype, &reqs[i]);
-        ERR
+        CHECK_ERR
         MPI_Type_free(&buftype);
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if write buffer contents have been altered */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]*2; j++) {
             if (buffer[i][j] != rank+10) {
-                printf("Error: put buffer altered buffer[%d][%d]=%lld\n", i,j,buffer[i][j]);
+                printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%lld\n",
+                __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
         }
@@ -470,24 +473,25 @@ int main(int argc, char** argv)
         for (j=0; j<req_lens[i]*2; j++) buffer[i][j] = -1;
         err = ncmpi_iget_varn(ncid, varid[i], my_nsegs[i], starts[i],
                               counts[i], buffer[i], 1, buftype, &reqs[i]);
-        ERR
+        CHECK_ERR
         MPI_Type_free(&buftype);
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if read buffer contents are expected */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]*2; j++) {
             if (j%2 && buffer[i][j] != -1) {
-                printf("Error at line %d: expecting buffer[%d][%d]=-1 but got %lld\n",
-                       __LINE__,i,j,buffer[i][j]);
+                printf("Error at line %d in %s: expecting buffer[%d][%d]=-1 but got %lld\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j]);
                 nerrs++;
             }
             if (j%2 == 0 && buffer[i][j] != rank+10) {
-                printf("Error at line %d: expecting buffer[%d][%d]=%d but got %lld\n",
-                       __LINE__,i,j,rank+10,buffer[i][j]);
+                printf("Error at line %d in %s: expecting buffer[%d][%d]=%d but got %lld\n",
+                       __LINE__,__FILE__,i,j,rank+10,buffer[i][j]);
                 nerrs++;
             }
         }
@@ -506,25 +510,26 @@ int main(int argc, char** argv)
         for (j=0; j<req_lens[i]; j++) buffer[i][j] = -1;
         err = ncmpi_iget_varn_longlong(ncid, varid[i], my_nsegs[i], starts[i],
                                        counts[i], cbuffer[i], &reqs[i]);
-        ERR
+        CHECK_ERR
     }
     nerrs += check_num_pending_reqs(ncid, nreqs, __LINE__);
     err = ncmpi_wait_all(ncid, nreqs, reqs, sts);
+    CHECK_ERR
     ERRS(nreqs, sts)
 
     /* check if read buffer contents are expected */
     for (i=0; i<nreqs; i++) {
         for (j=0; j<req_lens[i]; j++) {
             if (cbuffer[i][j] != rank+10) {
-                printf("Error at line %d: expecting buffer[%d][%d]=%d but got %lld\n",
-                       __LINE__,i,j,rank+10,cbuffer[i][j]);
+                printf("Error at line %d in %s: expecting buffer[%d][%d]=%d but got %lld\n",
+                       __LINE__,__FILE__,i,j,rank+10,cbuffer[i][j]);
                 nerrs++;
             }
         }
     }
 
     err = ncmpi_close(ncid);
-    ERR
+    CHECK_ERR
 
     if (bufsize>0) free(cbuffer[0]);
     for (i=0; i<nreqs; i++) free(buffer[i]);
@@ -550,6 +555,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nonblocking/interleaved.c b/test/nonblocking/interleaved.c
index 4f7660c..558d7e9 100644
--- a/test/nonblocking/interleaved.c
+++ b/test/nonblocking/interleaved.c
@@ -4,16 +4,25 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: interleaved.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: interleaved.c 3477 2017-10-23 16:24:59Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This program tests nonblocking APIs for handling interleaved file types.
- * It makes 3 calls to ncmpi_iput_vara_int(), where the first 2 interleaved and
- * the third one does not.
- * It first defines a netCDF variable of size 10 x 20.
- * First  write: a subarray of size 3 x 5 at the start offsets of 6 x 8
- * Second write: a subarray of size 2 x 5 at the start offsets of 6 x 13
- * Third  write: a subarray of size 1 x 5 at the start offsets of 8 x 13
+ * In the first case, 
+ *    It first defines a netCDF variable of size 10 x 18.
+ *    3 calls to ncmpi_iput_vara_int(), where the first one interleaves with
+ *    the second and third writes and its access region covers both of the
+ *    two writes. The 2nd and 3rd writes do not interleave with each other.
+ *
+ * In the second case,
+ *    It first defines a netCDF variable of size 10 x 18.
+ *    4 calls to ncmpi_iput_vara_int(),
+ *    First  write: a subarray of size 8 x 2 at the start offsets of 0 x 3
+ *    Second write: a subarray of size 3 x 5 at the start offsets of 6 x 7
+ *    Third  write: a subarray of size 2 x 5 at the start offsets of 6 x 12
+ *    Fourth write: a subarray of size 1 x 5 at the start offsets of 8 x 12
+ *    Note the first write interleaves with the second and third writes and
+ *    the fourth write does not interleave with any other writes.
  *
  * % mpiexec -n 1 ./interleaved
  * % ncmpidump testfile.nc
@@ -21,25 +30,38 @@
  * // file format: CDF-5 (big variables)
  * dimensions:
  * 	Y = 10 ;
- * 	X = 20 ;
+ * 	X = 18 ;
  * variables:
- * 	int var(Y, X) ;
+ * 	int var0(Y, X) ;
+ * 	int var1(Y, X) ;
+ *
  * data:
  *
- *  var =
- *   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, -1, -1,
- *   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ;
+ *  var0 =
+ *    -1, -1, -1, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 52, 53, -1, -1, -1, 60, 61, 62, 63, 64, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 54, 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 56, 57, -1, -1, 70, 71, 72, 73, 74, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 58, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 60, 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 62, 63, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 64, 65, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ;
+ * }
+ *  var1 =
+ *    -1, -1, -1, 50, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 52, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 54, 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 56, 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 58, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 60, 61, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ *    -1, -1, -1, 62, 63, -1, -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
+ *    -1, -1, -1, 64, 65, -1, -1, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, -1,
+ *    -1, -1, -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
+ *    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 ;
  * }
  *
-
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
 #include <stdio.h>
@@ -52,13 +74,12 @@
 #include <testutils.h>
 
 #define NY 10
-#define NX 20
+#define NX 18
 
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__,ncmpi_strerror(err)); exit(-1);}
-
-#define CHECK_CONTENTS(exp) { \
+#define CHECK_CONTENTS(buf, exp) { \
     if (buf[i] != (exp)) { \
-        printf("Error: put buffer[%d] altered to %d, expect %d\n",i,buf[i],(exp)); \
+        printf("Error at line %d in %s: put buffer[%d] altered to %d, expect %d\n", \
+        __LINE__,__FILE__,i,buf[i],(exp)); \
         nerrs++; \
     } \
 }
@@ -66,7 +87,9 @@ int main(int argc, char** argv)
 {
     char filename[256];
     int i, j, rank, nprocs, err, nerrs=0, expected;
-    int ncid, cmode, varid, dimid[2], req[3], st[3], *buf;
+    int ncid, cmode, varid[2], dimid[2], req[4], st[4], *buf;
+    int *buf0, *buf1, *buf2;
+    size_t len;
     MPI_Offset start[2], count[2];
     MPI_Info info;
 
@@ -81,7 +104,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -101,84 +124,169 @@ int main(int argc, char** argv)
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
-    err = ncmpi_create(MPI_COMM_SELF, filename, cmode, info, &ncid);
-    ERR
+    err = ncmpi_create(MPI_COMM_SELF, filename, cmode, info, &ncid); CHECK_ERR
 
     MPI_Info_free(&info);
 
     /* define dimensions Y and X */
-    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]);
-    ERR
-    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]);
-    ERR
+    err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]); CHECK_ERR
+
+    /* define 2D variables of integer type */
+    err = ncmpi_def_var(ncid, "var0", NC_INT, 2, dimid, &varid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 2, dimid, &varid[1]); CHECK_ERR
 
-    /* define a 2D variable of integer type */
-    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimid, &varid);
-    ERR
+    /* enable fill mode */
+    err = ncmpi_set_fill(ncid, NC_FILL, NULL); CHECK_ERR
 
     /* do not forget to exit define mode */
-    err = ncmpi_enddef(ncid);
-    ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* now we are in data mode */
     buf = (int*) malloc(NY*NX * sizeof(int));
+
+    /* fill the entire variable var0 with -1s */
     for (i=0; i<NY*NX; i++) buf[i] = -1;
+    err = ncmpi_put_var_int_all(ncid, varid[0], buf); CHECK_ERR
+
+    /* write 8 x 2 elements so this only interleaves the next two
+     * iput requests */
+    start[0] = 0; start[1] = 3;
+    count[0] = 8; count[1] = 2;
+    len = (size_t)(count[0] * count[1]);
+    buf0 = (int*) malloc(len * sizeof(int));
+    for (i=0; i<len; i++) buf0[i] = 50+i;
+    err = ncmpi_iput_vara_int(ncid, varid[0], start, count, buf0, &req[0]);
+    CHECK_ERR
+    for (i=0; i<len; i++) CHECK_CONTENTS(buf0, 50 + i)
+
+    /* write 1 x 3 elements */
+    start[0] = 1; start[1] = 8;
+    count[0] = 1; count[1] = 5;
+    len = (size_t)(count[0] * count[1]);
+    buf1 = (int*) malloc(len * sizeof(int));
+    for (i=0; i<len; i++) buf1[i] = 60+i;
+    err = ncmpi_iput_vara_int(ncid, varid[0], start, count, buf1, &req[1]);
+    CHECK_ERR
+    for (i=0; i<len; i++) CHECK_CONTENTS(buf1, 60 + i)
+
+    /* write 1 x 3 elements */
+    start[0] = 3; start[1] = 7;
+    count[0] = 1; count[1] = 5;
+    len = (size_t)(count[0] * count[1]);
+    buf2 = (int*) malloc(len * sizeof(int));
+    for (i=0; i<len; i++) buf2[i] = 70+i;
+    err = ncmpi_iput_vara_int(ncid, varid[0], start, count, buf2, &req[2]);
+    CHECK_ERR
+    for (i=0; i<len; i++) CHECK_CONTENTS(buf2, 70 + i)
+
+    err = ncmpi_wait_all(ncid, 3, req, st); CHECK_ERR
+    free(buf0); free(buf1); free(buf2);
 
-    /* fill the entire array with -1s */
-    err = ncmpi_put_var_int_all(ncid, varid, buf); ERR
+    /* fill the entire variable var1 with -1s */
+    for (i=0; i<NY*NX; i++) buf[i] = -1;
+    err = ncmpi_put_var_int_all(ncid, varid[1], buf); CHECK_ERR
+
+    /* write 8 x 2 elements so this only interleaves the next two iput
+     * requests */
+    start[0] = 0; start[1] = 3;
+    count[0] = 8; count[1] = 2;
+    len = (size_t)(count[0] * count[1]);
+    buf0 = (int*) malloc(len * sizeof(int));
+    for (i=0; i<count[0]*count[1]; i++) buf0[i] = 50+i;
+    err = ncmpi_iput_vara_int(ncid, varid[1], start, count, buf0, &req[0]);
+    CHECK_ERR
 
     /* rearrange buffer contents, as buf is 2D */
     for (i=0;  i<5;  i++) buf[i] = 10 + i;
     for (i=5;  i<10; i++) buf[i] = 10 + i +  5;
     for (i=10; i<15; i++) buf[i] = 10 + i + 10;
-    start[0] = 6; start[1] = 8;
+    start[0] = 6; start[1] = 7;
     count[0] = 3; count[1] = 5;
-    err = ncmpi_iput_vara_int(ncid, varid, start, count, buf, &req[0]);
-    ERR
+    err = ncmpi_iput_vara_int(ncid, varid[1], start, count, buf, &req[1]);
+    CHECK_ERR
 
     for (i=15; i<20; i++) buf[i] = 10 + i - 10;
     for (i=20; i<25; i++) buf[i] = 10 + i -  5;
-    start[0] = 6; start[1] = 13;
+    start[0] = 6; start[1] = 12;
     count[0] = 2; count[1] = 5;
-    err = ncmpi_iput_vara_int(ncid, varid, start, count, buf+15, &req[1]);
-    ERR
+    err = ncmpi_iput_vara_int(ncid, varid[1], start, count, buf+15, &req[2]);
+    CHECK_ERR
 
     for (i=25; i<30; i++) buf[i] = 10 + i;
-    start[0] = 8; start[1] = 13;
+    start[0] = 8; start[1] = 12;
     count[0] = 1; count[1] = 5;
-    err = ncmpi_iput_vara_int(ncid, varid, start, count, buf+25, &req[2]);
-    ERR
+    err = ncmpi_iput_vara_int(ncid, varid[1], start, count, buf+25, &req[3]);
+    CHECK_ERR
 
-    err = ncmpi_wait_all(ncid, 3, req, st);
-    ERR
+    err = ncmpi_wait_all(ncid, 4, req, st); CHECK_ERR
 
     /* check if write buffer contents have been altered */
-    for (i=0;  i<5;  i++) CHECK_CONTENTS(10 + i)
-    for (i=5;  i<10; i++) CHECK_CONTENTS(10 + i +  5)
-    for (i=10; i<15; i++) CHECK_CONTENTS(10 + i + 10)
-    for (i=15; i<20; i++) CHECK_CONTENTS(10 + i - 10)
-    for (i=20; i<25; i++) CHECK_CONTENTS(10 + i -  5)
-    for (i=25; i<30; i++) CHECK_CONTENTS(10 + i)
+    for (i=0;  i<16; i++) CHECK_CONTENTS(buf0, 50 + i)
+    for (i=0;  i<5;  i++) CHECK_CONTENTS(buf, 10 + i)
+    for (i=5;  i<10; i++) CHECK_CONTENTS(buf, 10 + i +  5)
+    for (i=10; i<15; i++) CHECK_CONTENTS(buf, 10 + i + 10)
+    for (i=15; i<20; i++) CHECK_CONTENTS(buf, 10 + i - 10)
+    for (i=20; i<25; i++) CHECK_CONTENTS(buf, 10 + i -  5)
+    for (i=25; i<30; i++) CHECK_CONTENTS(buf, 10 + i)
 
-    err = ncmpi_close(ncid);
-    ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    free(buf0);
 
     /* open the same file and read back for validate */
     err = ncmpi_open(MPI_COMM_SELF, filename, NC_NOWRITE, MPI_INFO_NULL,
-                     &ncid); ERR
+                     &ncid); CHECK_ERR
+
+    err = ncmpi_inq_varid(ncid, "var0", &varid[0]); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "var1", &varid[1]); CHECK_ERR
 
-    err = ncmpi_inq_varid(ncid, "var", &varid); ERR
+    /* read the entire array */
+    for (i=0; i<NY*NX; i++) buf[i] = -1;
+    err = ncmpi_get_var_int_all(ncid, varid[0], buf); CHECK_ERR
+
+    /* check if the contents of buf are expected */
+    expected = 50;
+    for (j=0; j<8; j++) {
+        for (i=3; i<5; i++) {
+            if (buf[j*NX+i] != expected) {
+                printf("%d: Unexpected read buf[%d][%d]=%d, should be %d\n",
+                       rank, j, i, buf[j*NX+i], expected);
+                nerrs++;
+            }
+            expected++;
+        }
+    }
+    expected = 60;
+    j = 1;
+    for (i=8; i<13; i++) {
+        if (buf[j*NX+i] != expected) {
+            printf("%d: Unexpected read buf[%d][%d]=%d, should be %d\n",
+                   rank, j, i, buf[j*NX+i], expected);
+            nerrs++;
+        }
+        expected++;
+    }
+    expected = 70;
+    j = 3;
+    for (i=7; i<12; i++) {
+        if (buf[j*NX+i] != expected) {
+            printf("%d: Unexpected read buf[%d][%d]=%d, should be %d\n",
+                   rank, j, i, buf[j*NX+i], expected);
+            nerrs++;
+        }
+        expected++;
+    }
 
     /* initialize the contents of the array to a different value */
     for (i=0; i<NY*NX; i++) buf[i] = -1;
 
     /* read the entire array */
-    err = ncmpi_get_var_int_all(ncid, varid, buf); ERR
+    err = ncmpi_get_var_int_all(ncid, varid[1], buf); CHECK_ERR
 
     /* check if the contents of buf are expected */
     expected = 10;
     for (j=6; j<9; j++) {
-        for (i=8; i<18; i++) {
+        for (i=7; i<17; i++) {
             if (buf[j*NX+i] != expected) {
                 printf("%d: Unexpected read buf[%d]=%d, should be %d\n",
                        rank, i, buf[j*NX+i], expected);
@@ -187,8 +295,19 @@ int main(int argc, char** argv)
             expected++;
         }
     }
+    expected = 50;
+    for (j=0; j<8; j++) {
+        for (i=3; i<5; i++) {
+            if (buf[j*NX+i] != expected) {
+                printf("%d: Unexpected read buf[%d][%d]=%d, should be %d\n",
+                       rank, j, i, buf[j*NX+i], expected);
+                nerrs++;
+            }
+            expected++;
+        }
+    }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     free(buf);
 
@@ -206,6 +325,6 @@ fn_exit:
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nonblocking/mcoll_perf.c b/test/nonblocking/mcoll_perf.c
index 73153bb..8198f97 100644
--- a/test/nonblocking/mcoll_perf.c
+++ b/test/nonblocking/mcoll_perf.c
@@ -3,7 +3,7 @@
  *  (C) 2001 by Argonne National Laboratory.
  *      See COPYRIGHT in top-level directory.
  *
- *  $Id: mcoll_perf.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: mcoll_perf.c 3443 2017-10-17 23:36:32Z wkliao $
  */
 #include <stdio.h>
 #include <stdlib.h>
@@ -18,20 +18,14 @@
 /* The file name is taken as a command-line argument. */
 
 static int verbose;
-static int nerrs;
 
 /* Measures the I/O bandwidth for writing/reading a 3D
    block-distributed array to a file corresponding to the global array
    in row-major (C) order.
    Note that the file access pattern is noncontiguous.
   
-   Array size 128^3. For other array sizes, change array_of_gsizes below.*/
-#define HANDLE_ERROR                                      \
-    if (status != NC_NOERR) {                             \
-        printf("Error: func=%s line=%d err=%s\n",         \
-               __func__,__LINE__,ncmpi_strerror(status)); \
-        nerrs++;                                        \
-    }
+   Array size 128^3. For other array sizes, change array_of_gsizes below.
+*/
 
 #define HANDLE_DIFF(str) {                                       \
     int doStop, isDiff = (str[0] == '\0') ? 0 : 1;               \
@@ -47,14 +41,14 @@ static int nerrs;
     int   pos, len = attlen1 * sizeof(type);                                 \
     type *b1 = (type *)malloc(len);                                          \
     type *b2 = (type *)malloc(len);                                          \
-    status = func(ncid1, NC_GLOBAL, name1, b1);                              \
-    HANDLE_ERROR                                                             \
-    status = func(ncid2, NC_GLOBAL, name2, b2);                              \
-    HANDLE_ERROR                                                             \
+    err = func(ncid1, NC_GLOBAL, name1, b1);                                 \
+    CHECK_ERR                                                                \
+    err = func(ncid2, NC_GLOBAL, name2, b2);                                 \
+    CHECK_ERR                                                                \
     if ((pos = memcmp(b1, b2, len)) != 0) {                                  \
         printf("P%d: diff at line %d (attribute[%d] %s: %s buf1 != buf2 at position %d)\n", \
                rank,__LINE__,i,name1,#nctype,pos);                           \
-        nerrs++;                                                           \
+        nerrs++;                                                             \
     }                                                                        \
     free(b1);                                                                \
     free(b2);                                                                \
@@ -65,14 +59,14 @@ static int nerrs;
     int   pos, len = attlen1 * sizeof(type);                                 \
     type *b1 = (type *)malloc(len);                                          \
     type *b2 = (type *)malloc(len);                                          \
-    status = func(ncid1, i, name1, b1);                                      \
-    HANDLE_ERROR                                                             \
-    status = func(ncid2, i, name2, b2);                                      \
-    HANDLE_ERROR                                                             \
+    err = func(ncid1, i, name1, b1);                                         \
+    CHECK_ERR                                                                \
+    err = func(ncid2, i, name2, b2);                                         \
+    CHECK_ERR                                                                \
     if ((pos = memcmp(b1, b2, len)) != 0) {                                  \
         printf("P%d: diff at line %d (variable[%d] %s: attribute[%d] %s: %s buf1 != buf2 at position %d)\n", \
                rank,__LINE__,i,name,j,name1,#nctype,pos);                    \
-        nerrs++;                                                           \
+        nerrs++;                                                             \
     }                                                                        \
     free(b1);                                                                \
     free(b2);                                                                \
@@ -84,14 +78,14 @@ static int nerrs;
     int   pos, len = varsize * sizeof(type);                                 \
     type *b1 = (type *)malloc(len);                                          \
     type *b2 = (type *)malloc(len);                                          \
-    status = func(ncid1, i, start, shape, b1);                               \
-    HANDLE_ERROR                                                             \
-    status = func(ncid2, i, start, shape, b2);                               \
-    HANDLE_ERROR                                                             \
+    err = func(ncid1, i, start, shape, b1);                                  \
+    CHECK_ERR                                                                \
+    err = func(ncid2, i, start, shape, b2);                                  \
+    CHECK_ERR                                                                \
     if ((pos = memcmp(b1, b2, len)) != 0) {                                  \
         printf("P%d: diff at line %d variable[%d] %s: %s buf1 != buf2 at position %d)\n", \
                rank,__LINE__,i,name,#nctype,pos);                            \
-        nerrs++;                                                           \
+        nerrs++;                                                             \
     }                                                                        \
     free(b1);                                                                \
     free(b2);                                                                \
@@ -100,13 +94,14 @@ static int nerrs;
 
 
 static
-int ncmpi_diff(char *filename1, char *filename2) {
-    int i, j, status, rank, nprocs;
-    int ncid1, ndims1, nvars1, natts1, unlimdimid1, dimids1[NC_MAX_DIMS];
-    int ncid2, ndims2, nvars2, natts2, unlimdimid2, dimids2[NC_MAX_DIMS];
+int ncmpi_diff(char *filename1, char *filename2)
+{
+    int i, j, err, rank, nprocs, nerrs=0;
+    int ncid1, ndims1, nvars1, natts1, unlimdimid1, *dimids1;
+    int ncid2, ndims2, nvars2, natts2, unlimdimid2, *dimids2;
     char str[512], name1[NC_MAX_NAME], name2[NC_MAX_NAME], name[NC_MAX_NAME];
-    MPI_Offset shape[NC_MAX_VAR_DIMS], varsize, start[NC_MAX_VAR_DIMS];
-    MPI_Offset attlen1, dimlen1, attlen2, dimlen2;
+    MPI_Offset *shape, *start;
+    MPI_Offset varsize, attlen1, dimlen1, attlen2, dimlen2;
     nc_type type1, type2;
     MPI_Comm comm=MPI_COMM_WORLD;
 
@@ -114,19 +109,19 @@ int ncmpi_diff(char *filename1, char *filename2) {
     MPI_Comm_rank(comm, &rank);
 
     str[0] = '\0';
-    status = ncmpi_open(comm, filename1, NC_NOWRITE, MPI_INFO_NULL, &ncid1);
-    HANDLE_ERROR
-    status = ncmpi_open(comm, filename2, NC_NOWRITE, MPI_INFO_NULL, &ncid2);
-    HANDLE_ERROR
+    err = ncmpi_open(comm, filename1, NC_NOWRITE, MPI_INFO_NULL, &ncid1);
+    CHECK_ERR
+    err = ncmpi_open(comm, filename2, NC_NOWRITE, MPI_INFO_NULL, &ncid2);
+    CHECK_ERR
 
     /**
      * Inquire the dataset definitions of input dataset AND
      * Add dataset definitions for output dataset.
      */
-    status = ncmpi_inq(ncid1, &ndims1, &nvars1, &natts1, &unlimdimid1);
-    HANDLE_ERROR
-    status = ncmpi_inq(ncid2, &ndims2, &nvars2, &natts2, &unlimdimid2);
-    HANDLE_ERROR
+    err = ncmpi_inq(ncid1, &ndims1, &nvars1, &natts1, &unlimdimid1);
+    CHECK_ERR
+    err = ncmpi_inq(ncid2, &ndims2, &nvars2, &natts2, &unlimdimid2);
+    CHECK_ERR
     if (ndims1 != ndims2)
         sprintf(str,"ndims1(%d) != ndims2(%d)",ndims1, ndims2);
     HANDLE_DIFF(str)
@@ -139,18 +134,18 @@ int ncmpi_diff(char *filename1, char *filename2) {
 
     /* Inquire global attributes, assume CHAR attributes. */
     for (i=0; i<natts1; i++) {
-        status = ncmpi_inq_attname(ncid1, NC_GLOBAL, i, name1);
-        HANDLE_ERROR
-        status = ncmpi_inq_attname(ncid1, NC_GLOBAL, i, name2);
-        HANDLE_ERROR
+        err = ncmpi_inq_attname(ncid1, NC_GLOBAL, i, name1);
+        CHECK_ERR
+        err = ncmpi_inq_attname(ncid1, NC_GLOBAL, i, name2);
+        CHECK_ERR
         if (strcmp(name1, name2) != 0)
             sprintf(str,"attribute[%d] name1(%s) != name2(%s)",i,name1,name2);
         HANDLE_DIFF(str)
 
-        status = ncmpi_inq_att(ncid1, NC_GLOBAL, name1, &type1, &attlen1);
-        HANDLE_ERROR
-        status = ncmpi_inq_att(ncid2, NC_GLOBAL, name2, &type2, &attlen2);
-        HANDLE_ERROR
+        err = ncmpi_inq_att(ncid1, NC_GLOBAL, name1, &type1, &attlen1);
+        CHECK_ERR
+        err = ncmpi_inq_att(ncid2, NC_GLOBAL, name2, &type2, &attlen2);
+        CHECK_ERR
         if (type1 != type2)
             sprintf(str,"attribute[%d] %s: type1(%d) != type2(%d)",i,name1,type1,type2);
         HANDLE_DIFF(str)
@@ -169,10 +164,10 @@ int ncmpi_diff(char *filename1, char *filename2) {
 
     /* Inquire dimension */
     for (i=0; i<ndims1; i++) {
-        status = ncmpi_inq_dim(ncid1, i, name1, &dimlen1);
-        HANDLE_ERROR
-        status = ncmpi_inq_dim(ncid2, i, name2, &dimlen2);
-        HANDLE_ERROR
+        err = ncmpi_inq_dim(ncid1, i, name1, &dimlen1);
+        CHECK_ERR
+        err = ncmpi_inq_dim(ncid2, i, name2, &dimlen2);
+        CHECK_ERR
         if (dimlen1 != dimlen2)
             sprintf(str,"dimension[%d] %s: dimlen1(%lld) != dimlen2(%lld)",i,name1,dimlen1,dimlen2);
         HANDLE_DIFF(str)
@@ -180,10 +175,17 @@ int ncmpi_diff(char *filename1, char *filename2) {
 
     /* Inquire variables */
     for (i=0; i<nvars1; i++) {
-        status = ncmpi_inq_var(ncid1, i, name1, &type1, &ndims1, dimids1, &natts1);
-        HANDLE_ERROR
-        status = ncmpi_inq_var(ncid2, i, name2, &type2, &ndims2, dimids2, &natts2);
-        HANDLE_ERROR
+        err = ncmpi_inq_varndims(ncid1, i, &ndims1);
+        CHECK_ERR
+        err = ncmpi_inq_varndims(ncid2, i, &ndims2);
+        CHECK_ERR
+        dimids1 = (int*) malloc(ndims1 * sizeof(int));
+        dimids2 = (int*) malloc(ndims2 * sizeof(int));
+
+        err = ncmpi_inq_var(ncid1, i, name1, &type1, &ndims1, dimids1, &natts1);
+        CHECK_ERR
+        err = ncmpi_inq_var(ncid2, i, name2, &type2, &ndims2, dimids2, &natts2);
+        CHECK_ERR
         if (strcmp(name1, name2) != 0)
             sprintf(str,"variable[%d]: name1(%s) != name2(%s)",i,name1,name2);
         HANDLE_DIFF(str)
@@ -206,18 +208,18 @@ int ncmpi_diff(char *filename1, char *filename2) {
 
         /* var attributes, assume CHAR attributes */
         for (j=0; j<natts1; j++) {
-            status = ncmpi_inq_attname(ncid1, i, j, name1);
-            HANDLE_ERROR
-            status = ncmpi_inq_attname(ncid2, i, j, name2);
-            HANDLE_ERROR
+            err = ncmpi_inq_attname(ncid1, i, j, name1);
+            CHECK_ERR
+            err = ncmpi_inq_attname(ncid2, i, j, name2);
+            CHECK_ERR
             if (strcmp(name1, name2) != 0)
                 sprintf(str,"variable[%d] %s: attr name[%d] (%s) != (%s)",i,name,j,name1,name2);
             HANDLE_DIFF(str)
 
-            status = ncmpi_inq_att(ncid1, i, name1, &type1, &attlen1);
-            HANDLE_ERROR
-            status = ncmpi_inq_att(ncid2, i, name2, &type2, &attlen2);
-            HANDLE_ERROR
+            err = ncmpi_inq_att(ncid1, i, name1, &type1, &attlen1);
+            CHECK_ERR
+            err = ncmpi_inq_att(ncid2, i, name2, &type2, &attlen2);
+            CHECK_ERR
             if (type1 != type2)
                 sprintf(str,"variable[%d] %s: attr type[%d] (%d) != (%d)",i,name,j,type1,type2);
             HANDLE_DIFF(str)
@@ -234,6 +236,8 @@ int ncmpi_diff(char *filename1, char *filename2) {
                 default: ; /* TODO: handle unexpected types */
             }
         }
+        free(dimids1);
+        free(dimids2);
     }
 
     /**
@@ -250,17 +254,20 @@ int ncmpi_diff(char *filename1, char *filename2) {
      *  Data Mode API: collective
      */
 
-    for (i=0; i<NC_MAX_VAR_DIMS; i++)
-        start[i] = 0;
-
     for (i=0; i<nvars1; i++) {
+        err = ncmpi_inq_varndims(ncid1, i, &ndims1);
+        CHECK_ERR
+        shape = (MPI_Offset*) calloc(ndims1 * 2, sizeof(MPI_Offset));
+        start = shape + ndims1;
+        dimids1 = (int*) malloc(ndims1 * sizeof(int));
+
         varsize = 1;
-        status = ncmpi_inq_var(ncid1, i, name1, &type1, &ndims1, dimids1, &natts1);
-        HANDLE_ERROR
+        err = ncmpi_inq_var(ncid1, i, name1, &type1, &ndims1, dimids1, &natts1);
+        CHECK_ERR
         strcpy(name,name1);
         for (j=0; j<ndims1; j++) {
-            status = ncmpi_inq_dim(ncid1, dimids1[j], name2, shape + j);
-            HANDLE_ERROR
+            err = ncmpi_inq_dim(ncid1, dimids1[j], name2, shape + j);
+            CHECK_ERR
             /* name2 will be discarded */
             if (j == 0) {
                 shape[j] /= nprocs;
@@ -276,14 +283,16 @@ int ncmpi_diff(char *filename1, char *filename2) {
             case NC_DOUBLE: CHECK_VAR_DIFF(double, ncmpi_get_vara_double_all, NC_DOUBLE)
             default: ; /* TODO: handle unexpected types */
         }
+        free(shape);
+        free(dimids1);
     }
 
-    status = ncmpi_close(ncid1);
-    HANDLE_ERROR
-    status = ncmpi_close(ncid2);
-    HANDLE_ERROR
+    err = ncmpi_close(ncid1);
+    CHECK_ERR
+    err = ncmpi_close(ncid2);
+    CHECK_ERR
 
-    return NC_NOERR;
+    return nerrs;
 }
 
 
@@ -293,7 +302,7 @@ int main(int argc, char **argv)
     int nprocs, **buf, rank;
     MPI_Offset bufcount;
     int array_of_psizes[3];
-    int status;
+    int err, nerrs=0;
     MPI_Offset array_of_starts[3], stride[3];
     char fbasename[256], filename[256];
     char filename1[256], filename2[256], filename3[256];
@@ -310,6 +319,7 @@ int main(int argc, char **argv)
     int *reqs;
     int *sts;
     int *buf_var;
+    int nvars2;
 /*
     int buf_var[32] ={1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2,
                       3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4};
@@ -319,12 +329,11 @@ int main(int argc, char **argv)
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
 
-    nerrs = 0;
     verbose = 0;
     if (argc > 2) {
         if (!rank) printf("Usage: %s [file base name]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        nerrs++; goto fn_exit;
     }
     if (argc == 2) snprintf(fbasename, 256, "%s", argv[1]);
     else           strcpy(fbasename, "testfile");
@@ -345,27 +354,27 @@ int main(int argc, char **argv)
     buf = (int **)malloc(nvars*sizeof(int*));
     if (buf == NULL){
         printf("buf malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     bufcounts = (MPI_Offset *)malloc(nvars*sizeof(MPI_Offset));
     if (bufcounts == NULL){
         printf("bufcounts malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     starts = (MPI_Offset **)malloc(nvars*sizeof(MPI_Offset *));
     if (starts== NULL){
         printf("starts malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     counts = (MPI_Offset **)malloc(nvars*sizeof(MPI_Offset *));
     if (counts == NULL){
         printf("counts malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     datatype_list = (MPI_Datatype*)malloc(nvars*sizeof(MPI_Datatype));
     if (datatype_list == NULL){
         printf("counts malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     
     reqs = (int *)malloc(nvars*sizeof(int));
@@ -375,12 +384,12 @@ int main(int argc, char **argv)
         starts[i] = (MPI_Offset *)malloc(ndims*sizeof(MPI_Offset));
         if (starts[i] == NULL){
             printf("starts[%d] malloc error\n", i);
-            return 0;
+            nerrs++; goto fn_exit;
         }
         counts[i] = (MPI_Offset *)malloc(ndims*sizeof(MPI_Offset));
         if (counts[i] == NULL){
             printf("counts[%d] malloc error\n", i);
-            return 0;
+            nerrs++; goto fn_exit;
         }
     }
   
@@ -416,7 +425,7 @@ int main(int argc, char **argv)
     buf[0] = (int *) malloc(bufcount * nvars * sizeof(int));
     if (buf[0] == NULL) {
         printf("buf[i]malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     for (i=1; i<nvars; i++) buf[i] = buf[i-1] + bufcount;
 
@@ -428,11 +437,11 @@ int main(int argc, char **argv)
     for (i=0; i<bufcount*nprocs; i++)
         buf_var[i] = rank + 1;  
 
-    int nvars2 = (nvars > nprocs) ? nvars : nprocs;
+    nvars2 = (nvars > nprocs) ? nvars : nprocs;
     varid = (int *)malloc(nvars2*sizeof(int));
     if (varid == NULL){
         printf("varid malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     MPI_Info_create(&info);
 /*
@@ -452,100 +461,100 @@ int main(int argc, char **argv)
         else 
             strcpy(filename3, filename);
 
-        status = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_OFFSET,
-                              info, &ncid);
-        HANDLE_ERROR
+        err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_OFFSET,
+                           info, &ncid);
+        CHECK_ERR
         /* define dimensions */
         for (i=0; i<ndims; i++){
             sprintf(dimname, "dim0_%d", i);
-            status = ncmpi_def_dim(ncid, dimname, array_of_gsizes[i], &dimids0[i]);
-            HANDLE_ERROR
+            err = ncmpi_def_dim(ncid, dimname, array_of_gsizes[i], &dimids0[i]);
+            CHECK_ERR
         }
         sprintf(dimname, "dim1_%d", 0);
-        status = ncmpi_def_dim(ncid, dimname, NC_UNLIMITED, &dimids1[0]);
-        HANDLE_ERROR
+        err = ncmpi_def_dim(ncid, dimname, NC_UNLIMITED, &dimids1[0]);
+        CHECK_ERR
         for (i=1; i<ndims; i++){
             sprintf(dimname, "dim1_%d", i);
-            status = ncmpi_def_dim(ncid, dimname, array_of_gsizes[i], &dimids1[i]);
-            HANDLE_ERROR
+            err = ncmpi_def_dim(ncid, dimname, array_of_gsizes[i], &dimids1[i]);
+            CHECK_ERR
         } 
 
         /* define variables */
         if (k<7){
             for (i=0; i<2; i++){
                 sprintf(varname, "var0_%d", i);
-                status = ncmpi_def_var(ncid, varname, NC_INT, ndims, dimids0, &varid[i]);
-                HANDLE_ERROR
+                err = ncmpi_def_var(ncid, varname, NC_INT, ndims, dimids0, &varid[i]);
+                CHECK_ERR
             }
             for (i=2; i<nvars; i++){
                 sprintf(varname, "var1_%d", i);
-                status = ncmpi_def_var(ncid, varname, NC_INT, ndims, dimids1, &varid[i]);
-                HANDLE_ERROR
+                err = ncmpi_def_var(ncid, varname, NC_INT, ndims, dimids1, &varid[i]);
+                CHECK_ERR
             }
         } else {
             for (i=0; i<nprocs; i++){
                 sprintf(varname, "var0_%d", i);
-                status = ncmpi_def_var(ncid, varname, NC_INT, ndims, dimids0, &varid[i]);
-                HANDLE_ERROR
+                err = ncmpi_def_var(ncid, varname, NC_INT, ndims, dimids0, &varid[i]);
+                CHECK_ERR
             }
         }
 
-        status = ncmpi_enddef(ncid);
-        HANDLE_ERROR
+        err = ncmpi_enddef(ncid);
+        CHECK_ERR
 
         if (k == 0) {
             if (rank == 0 && verbose)
                 printf("*** Testing to write 2 non-record variables and 2 record variables by using ncmpi_put_vara_all() ...");
             for (i=0; i<nvars; i++){
-                status = ncmpi_put_vara_all(ncid, varid[i], starts[i], counts[i], buf[i], bufcounts[i], MPI_INT);
-                HANDLE_ERROR
+                err = ncmpi_put_vara_all(ncid, varid[i], starts[i], counts[i], buf[i], bufcounts[i], MPI_INT);
+                CHECK_ERR
             }
         }
 
         if (k == 1) {
             if (rank == 0 && verbose)
                 printf("*** Testing to write 2 non-record variables and 2 record variables by using ncmpi_put_vara() ...");
-            status = ncmpi_begin_indep_data(ncid);
-            HANDLE_ERROR
+            err = ncmpi_begin_indep_data(ncid);
+            CHECK_ERR
             for (i=0; i<nvars; i++){
-                status = ncmpi_put_vara(ncid, varid[i], starts[i], counts[i], buf[i], bufcounts[i], MPI_INT);
-                HANDLE_ERROR
+                err = ncmpi_put_vara(ncid, varid[i], starts[i], counts[i], buf[i], bufcounts[i], MPI_INT);
+                CHECK_ERR
             }
-            status = ncmpi_end_indep_data(ncid);
-            HANDLE_ERROR
+            err = ncmpi_end_indep_data(ncid);
+            CHECK_ERR
         } 
 
         if (k == 2) {
             if (rank == 0 && verbose)
                 printf("*** Testing to write 2 non-record variables and 2 record variables by using ncmpi_mput_vara_all() ...");
-            status = ncmpi_mput_vara_all(ncid, nvars, varid, starts, counts, (void**)buf, bufcounts, datatype_list);
-            HANDLE_ERROR
+            err = ncmpi_mput_vara_all(ncid, nvars, varid, starts, counts, (void**)buf, bufcounts, datatype_list);
+            CHECK_ERR
         }
 
         if (k == 3) {
             if (rank == 0 && verbose)
                 printf("*** Testing to write 2 non-record variables and 2 record variables by using ncmpi_iput_vara() and ncmpi_wait() ...");
-            status = ncmpi_begin_indep_data(ncid);
-            HANDLE_ERROR
+            err = ncmpi_begin_indep_data(ncid);
+            CHECK_ERR
             for (i=0; i<nvars; i++){
-                status = ncmpi_iput_vara(ncid, varid[i], starts[i], counts[i], buf[i], bufcounts[i], MPI_INT, &reqs[i]);
-                HANDLE_ERROR
-                status = ncmpi_wait(ncid, 1, &reqs[i], &sts[i]);
-                HANDLE_ERROR
+                err = ncmpi_iput_vara(ncid, varid[i], starts[i], counts[i], buf[i], bufcounts[i], MPI_INT, &reqs[i]);
+                CHECK_ERR
+                err = ncmpi_wait(ncid, 1, &reqs[i], &sts[i]);
+                CHECK_ERR
             }
-            status = ncmpi_end_indep_data(ncid);
-            HANDLE_ERROR
+            err = ncmpi_end_indep_data(ncid);
+            CHECK_ERR
         }
 
         if (k == 4) {
             if (rank == 0 && verbose)
                 printf("*** Testing to write 2 non-record variables and 2 record variables by using ncmpi_iput_vara() and ncmpi_wait_all() ...");
             for (i=0; i<nvars; i++){
-                status = ncmpi_iput_vara(ncid, varid[i], starts[i], counts[i], buf[i], bufcounts[i], MPI_INT, &reqs[i]);
-                HANDLE_ERROR
+                err = ncmpi_iput_vara(ncid, varid[i], starts[i], counts[i], buf[i], bufcounts[i], MPI_INT, &reqs[i]);
+                CHECK_ERR
             }
-            status = ncmpi_wait_all(ncid, nvars, reqs, sts);
-            HANDLE_ERROR
+            err = ncmpi_wait_all(ncid, nvars, reqs, sts);
+            CHECK_ERR
         } 
 
         if (k == 5) {
@@ -554,16 +563,16 @@ int main(int argc, char **argv)
             stride[0] = 1;
             stride[1] = 1;
             stride[2] = 1;
-            status = ncmpi_begin_indep_data(ncid);
-            HANDLE_ERROR
+            err = ncmpi_begin_indep_data(ncid);
+            CHECK_ERR
             for (i=0; i<nvars; i++){
-                status = ncmpi_iput_vars(ncid, varid[i], starts[i], counts[i], stride, buf[i], bufcounts[i], MPI_INT, &reqs[i]);
-                HANDLE_ERROR
-                status = ncmpi_wait(ncid, 1, &reqs[i], &sts[i]);
-                HANDLE_ERROR
+                err = ncmpi_iput_vars(ncid, varid[i], starts[i], counts[i], stride, buf[i], bufcounts[i], MPI_INT, &reqs[i]);
+                CHECK_ERR
+                err = ncmpi_wait(ncid, 1, &reqs[i], &sts[i]);
+                CHECK_ERR
             }
-            status = ncmpi_end_indep_data(ncid);
-            HANDLE_ERROR
+            err = ncmpi_end_indep_data(ncid);
+            CHECK_ERR
         } 
 
         if (k == 6) {
@@ -573,57 +582,57 @@ int main(int argc, char **argv)
             stride[1] = 1;
             stride[2] = 1;
             for (i=0; i<nvars; i++){
-                status = ncmpi_iput_vars(ncid, varid[i], starts[i], counts[i], stride, buf[i], bufcounts[i], MPI_INT, &reqs[i]);
-                HANDLE_ERROR
+                err = ncmpi_iput_vars(ncid, varid[i], starts[i], counts[i], stride, buf[i], bufcounts[i], MPI_INT, &reqs[i]);
+                CHECK_ERR
             }
-            status = ncmpi_wait_all(ncid, nvars, reqs, sts);
-            HANDLE_ERROR
+            err = ncmpi_wait_all(ncid, nvars, reqs, sts);
+            CHECK_ERR
         } 
         if (k == 7) {
             if (rank == 0 && verbose)
                 printf("*** Testing to write %d non-record variable(s) by using ncmpi_put_var() ...", nprocs);
-            status = ncmpi_begin_indep_data(ncid);
-            HANDLE_ERROR
-            status = ncmpi_put_var(ncid, varid[rank], buf_var, bufcount*nprocs, MPI_INT);
-            HANDLE_ERROR
-            status = ncmpi_end_indep_data(ncid);
-            HANDLE_ERROR
+            err = ncmpi_begin_indep_data(ncid);
+            CHECK_ERR
+            err = ncmpi_put_var(ncid, varid[rank], buf_var, bufcount*nprocs, MPI_INT);
+            CHECK_ERR
+            err = ncmpi_end_indep_data(ncid);
+            CHECK_ERR
         }
         if (k == 8) {
             if (rank == 0 && verbose)
                 printf("*** Testing to write %d non-record variable(s) by using ncmpi_iput_var() and ncmpi_wait() ...", nprocs);
             i = 0;
-            status = ncmpi_iput_var(ncid, varid[rank], buf_var, bufcount*nprocs, MPI_INT, &reqs[i]);
-            HANDLE_ERROR
-            status = ncmpi_begin_indep_data(ncid);
-            HANDLE_ERROR
-            status = ncmpi_wait(ncid, 1, &reqs[i], &sts[i]);
-            HANDLE_ERROR
-            status = ncmpi_end_indep_data(ncid);
-            HANDLE_ERROR
+            err = ncmpi_iput_var(ncid, varid[rank], buf_var, bufcount*nprocs, MPI_INT, &reqs[i]);
+            CHECK_ERR
+            err = ncmpi_begin_indep_data(ncid);
+            CHECK_ERR
+            err = ncmpi_wait(ncid, 1, &reqs[i], &sts[i]);
+            CHECK_ERR
+            err = ncmpi_end_indep_data(ncid);
+            CHECK_ERR
         }
         if (k == 9) {
             if (rank == 0 && verbose)
                 printf("*** Testing to write %d non-record variable(s) by using ncmpi_iput_var() and ncmpi_wait_all() ...", nprocs);
-            status = ncmpi_iput_var(ncid, varid[rank], buf_var, bufcount*nprocs, MPI_INT, &reqs[0]);
-            HANDLE_ERROR
-            status = ncmpi_wait_all(ncid, 1, &reqs[0], &sts[0]);
-            HANDLE_ERROR
+            err = ncmpi_iput_var(ncid, varid[rank], buf_var, bufcount*nprocs, MPI_INT, &reqs[0]);
+            CHECK_ERR
+            err = ncmpi_wait_all(ncid, 1, &reqs[0], &sts[0]);
+            CHECK_ERR
         }
 
-        status = ncmpi_close(ncid);
-        HANDLE_ERROR
+        err = ncmpi_close(ncid);
+        CHECK_ERR
 
-        if (status == NC_NOERR){
+        if (err == NC_NOERR){
             if ((k>0)&&(k<7)){
-            status = ncmpi_diff(filename1, filename3);
-            if (rank == 0 && status == NC_NOERR && verbose)
+            err = ncmpi_diff(filename1, filename3);
+            if (rank == 0 && err == NC_NOERR && verbose)
                 printf("\t OK\n");                                       
             } else if (k>7){
 /*
 printf("filename2=%s filename3=%s\n",filename2, filename3);
-                status = ncmpi_diff(filename2, filename3);
-                if (rank == 0 && status == NC_NOERR && verbose)
+                err = ncmpi_diff(filename2, filename3);
+                if (rank == 0 && err == NC_NOERR && verbose)
                     printf("\t OK\n");                                       
 */
             } else {
@@ -668,7 +677,7 @@ printf("filename2=%s filename3=%s\n",filename2, filename3);
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
-    int err = ncmpi_inq_malloc_size(&malloc_size);
+    err = ncmpi_inq_malloc_size(&malloc_size);
     if (err == NC_NOERR) {
         MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
         if (rank == 0 && sum_size > 0)
@@ -676,12 +685,14 @@ printf("filename2=%s filename3=%s\n",filename2, filename3);
                    sum_size);
     }
 
+ncmpi_inq_malloc_list();
     MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
     if (rank == 0) {
         if (nerrs) printf(FAIL_STR,nerrs);
         else       printf(PASS_STR);
     }
 
+fn_exit:
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/nonblocking/mcoll_testf.f90 b/test/nonblocking/mcoll_testf.f90
index 24dfa57..65694d7 100644
--- a/test/nonblocking/mcoll_testf.f90
+++ b/test/nonblocking/mcoll_testf.f90
@@ -12,7 +12,7 @@
 ! 
 ! i=longitude, j=latitude, k=level
 !
-! $Id: mcoll_testf.f90 2512 2016-09-29 01:29:37Z wkliao $
+! $Id: mcoll_testf.f90 3341 2017-08-25 22:29:08Z wkliao $
 !
 !=============================================================================
 
@@ -151,7 +151,7 @@
                       TOTSIZ_3D, wrt_l)
       if (ierr .NE. NF90_NOERR) then
           write(6,*) trim(nf90mpi_strerror(ierr))
-          goto 999
+          stop 2
       endif
 !!!   Write (6,*) wrt_l(1), wrt_l(2)
 
diff --git a/test/nonblocking/mcoll_testf77.f b/test/nonblocking/mcoll_testf77.f
index bda23af..c48a43e 100644
--- a/test/nonblocking/mcoll_testf77.f
+++ b/test/nonblocking/mcoll_testf77.f
@@ -13,7 +13,7 @@
 ! 
 ! i=longitude, j=latitude, k=level
 !
-! $Id: mcoll_testf77.f 2512 2016-09-29 01:29:37Z wkliao $
+! $Id: mcoll_testf77.f 3341 2017-08-25 22:29:08Z wkliao $
 !
 !=============================================================================
 
@@ -174,7 +174,7 @@
      +                TOTSIZ_3D, wrt_l)
       if (ierr .NE. NF_NOERR) then
           write(6,*) nfmpi_strerror(ierr)
-          goto 999
+          stop 2
       endif
 !!!   Write (6,*) wrt_l(1), wrt_l(2)
 
@@ -265,7 +265,7 @@
 
       if (locsiz .gt. MAX_LOC_SIZE) then
          print *, 'locsiz = ', locsiz, ' larger than MAX_LOC_SIZE'
-         stop
+         stop 2
       endif
 !     ----------------
 !     Begin execution.
diff --git a/test/nonblocking/req_all.c b/test/nonblocking/req_all.c
index 7583b65..3f2fa7f 100644
--- a/test/nonblocking/req_all.c
+++ b/test/nonblocking/req_all.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: req_all.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: req_all.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example shows how to use NC_REQ_ALL in nonblocking I/O operations.
@@ -65,8 +65,6 @@
 #define NY 8
 #define NX 2
 
-#define ERR {if(err!=NC_NOERR) {printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 int main(int argc, char** argv)
 {
     char filename[256];
@@ -83,7 +81,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -98,7 +96,7 @@ int main(int argc, char** argv)
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER;
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); CHECK_ERR
 
     /* the global array is NY * (NX * nprocs) */
     global_ny = NY;
@@ -111,17 +109,17 @@ int main(int argc, char** argv)
         }
 
     /* define dimensions x and y */
-    err = ncmpi_def_dim(ncid, "Y", global_ny, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", global_nx, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "Y", global_ny, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", global_nx, &dimid[1]); CHECK_ERR
 
     /* define a 2D variable of integer type */
-    err = ncmpi_def_var(ncid, "var_int", NC_INT, 2, dimid, &varid[0]); ERR
+    err = ncmpi_def_var(ncid, "var_int", NC_INT, 2, dimid, &varid[0]); CHECK_ERR
 
     /* define a 2D variable of float type */
-    err = ncmpi_def_var(ncid, "var_flt", NC_FLOAT, 2, dimid, &varid[1]); ERR
+    err = ncmpi_def_var(ncid, "var_flt", NC_FLOAT, 2, dimid, &varid[1]); CHECK_ERR
 
     /* do not forget to exit define mode */
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* now we are in data mode */
     start[0] = 0;
@@ -129,28 +127,28 @@ int main(int argc, char** argv)
     count[0] = NY;
     count[1] = NX;
 
-    err = ncmpi_iput_vara_int(ncid, varid[0], start, count, &buf_int[0][0], NULL); ERR
-    err = ncmpi_iput_vara_float(ncid, varid[1], start, count, &buf_flt[0][0], NULL); ERR
+    err = ncmpi_iput_vara_int(ncid, varid[0], start, count, &buf_int[0][0], NULL); CHECK_ERR
+    err = ncmpi_iput_vara_float(ncid, varid[1], start, count, &buf_flt[0][0], NULL); CHECK_ERR
 
-    err = ncmpi_wait_all(ncid, NC_REQ_ALL, NULL, NULL); ERR
+    err = ncmpi_wait_all(ncid, NC_REQ_ALL, NULL, NULL); CHECK_ERR
 
     /* check if write buffer contents have been altered */
     for (i=0; i<NY; i++)
         for (j=0; j<NX; j++) {
              if (buf_int[i][j] != rank+10) {
-                 printf("Error at line %d: expecting buffer[%d][%d]=%d but got %d\n",
-                       __LINE__,i,j,rank+10,buf_int[i][j]);
+                 printf("Error at line %d in %s: expecting buffer[%d][%d]=%d but got %d\n",
+                       __LINE__,__FILE__,i,j,rank+10,buf_int[i][j]);
                  nerrs++;
              }
              if (buf_flt[i][j] != 10.5 + rank) {
-                 printf("Error at line %d: expecting buffer[%d][%d]=%f but got %f\n",
-                       __LINE__,i,j,10.5+rank,buf_flt[i][j]);
+                 printf("Error at line %d in %s: expecting buffer[%d][%d]=%f but got %f\n",
+                       __LINE__,__FILE__,i,j,10.5+rank,buf_flt[i][j]);
                  nerrs++;
              }
         }
 
     err = ncmpi_close(ncid);
-    ERR
+    CHECK_ERR
 
     /* check if there is any PnetCDF internal malloc residue */
     MPI_Offset malloc_size, sum_size;
@@ -169,6 +167,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/nonblocking/seq_runs.sh b/test/nonblocking/seq_runs.sh
new file mode 100755
index 0000000..293f8c9
--- /dev/null
+++ b/test/nonblocking/seq_runs.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# "set -x" expands variables and prints a little + sign before the line
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+for j in 0 1 ; do { \
+    export PNETCDF_SAFE_MODE=$$j ; \
+    for i in ${TESTPROGRAMS}; do ( \
+        ${TESTSEQRUN} ./$i            ${TESTOUTDIR}/testfile.nc ; \
+        ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc ; \
+) ; done ; } ; done
+
+
+${TESTSEQRUN} ./mcoll_perf ${TESTOUTDIR}/testfile
+# seq is not available on FreeBSD otherwise we can use: for j in `seq 0 9`
+for j in 0 1 2 3 4 5 6 7 8 9 ; do { \
+    ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.2.4.$j.nc ; \
+} ; done
diff --git a/test/nonblocking/test_bput.c b/test/nonblocking/test_bput.c
index 8df28c6..315e5a7 100644
--- a/test/nonblocking/test_bput.c
+++ b/test/nonblocking/test_bput.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/*  $Id: test_bput.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/*  $Id: test_bput.c 3422 2017-09-25 05:42:52Z wkliao $ */
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -17,8 +17,6 @@
 
 #define FILE_NAME "testfile.nc"
 
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: err=%d %s\n", __LINE__, err, ncmpi_strerror(err)); nerrs++;}
-
 /*----< main() >------------------------------------------------------------*/
 int main(int argc, char **argv) {
     int i, j, ncid, dimid[2], varid, err, nerrs=0, rank, nprocs;
@@ -40,7 +38,7 @@ int main(int argc, char **argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -55,14 +53,14 @@ int main(int argc, char **argv) {
     MPI_Info_create(&info);
     /* MPI_Info_set(info, "romio_pvfs2_posix_write","enable"); */
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER | NC_64BIT_DATA, info, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER | NC_64BIT_DATA, info, &ncid); CHECK_ERR
     MPI_Info_free(&info);
 
     /* define a variable of a 6 x 4 integer array in the nc file */
-    err = ncmpi_def_dim(ncid, "Y", 6, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 4, &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var", NC_INT64, 2, dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", 6, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 4, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT64, 2, dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* set the contents of the write buffer var, a 4 x 6 float array
           50, 51, 52, 53, 54, 55,
@@ -74,7 +72,7 @@ int main(int argc, char **argv) {
 
     /* bufsize must be max of data type converted before and after */
     bufsize = 4*6*sizeof(long long);
-    err = ncmpi_buffer_attach(ncid, bufsize); ERR
+    err = ncmpi_buffer_attach(ncid, bufsize); CHECK_ERR
 
     /* write var to the NC variable in the matrix transposed way */
     count[0]  = 6; count[1]  = 2;
@@ -86,42 +84,41 @@ int main(int argc, char **argv) {
 
     /* write the first two columns of the NC variable in the matrix transposed way */
     start[0]  = 0; start[1]  = 0;
-    err = ncmpi_bput_varm_float(ncid, varid, start, count, stride, imap, &var[0][0], &req[0]); ERR
+    err = ncmpi_bput_varm_float(ncid, varid, start, count, stride, imap, &var[0][0], &req[0]); CHECK_ERR
 
     /* check if write buffer contents have been altered */
     for (j=0; j<4; j++)
         for (i=0; i<6; i++) {
             if (var[j][i] != 50.5 + j*6+i) {
-                printf("Error: put buffer[%d][%d]=%f altered, should be %f\n",
-                       j,i,var[j][i],50.5+j*6+i);
+                printf("Error at line %d in %s: put buffer[%d][%d]=%f altered, should be %f\n",
+                       __LINE__,__FILE__,j,i,var[j][i],50.5+j*6+i);
                 nerrs++;
             }
         }
 
     /* write the second two columns of the NC variable in the matrix transposed way */
     start[0]  = 0; start[1]  = 2;
-    err = ncmpi_bput_varm_float(ncid, varid, start, count, stride, imap, &var[2][0], &req[1]); ERR
+    err = ncmpi_bput_varm_float(ncid, varid, start, count, stride, imap, &var[2][0], &req[1]); CHECK_ERR
 
     /* check if write buffer contents have been altered */
     for (j=0; j<4; j++)
         for (i=0; i<6; i++) {
             if (var[j][i] != 50.5 + j*6+i) {
-                printf("Error: put buffer[%d][%d]=%f altered, should be %f\n",
-                       j,i,var[j][i],50.5+j*6+i);
+                printf("Error at line %d in %s: put buffer[%d][%d]=%f altered, should be %f\n",
+                       __LINE__,__FILE__,j,i,var[j][i],50.5+j*6+i);
                 nerrs++;
             }
         }
 
-    err = ncmpi_wait_all(ncid, 2, req, status); ERR
+    err = ncmpi_wait_all(ncid, 2, req, status); CHECK_ERR
 
     /* check each bput status */
-    for (i=0; i<2; i++)
-        if (status[i] != NC_NOERR) {
-            printf("Error at line %d: err=%d %s\n", __LINE__, status[i], ncmpi_strerror(err));
-            nerrs++;
-        }
+    for (i=0; i<2; i++) {
+        err = status[i];
+        CHECK_ERR
+    }
 
-    err = ncmpi_buffer_detach(ncid); ERR
+    err = ncmpi_buffer_detach(ncid); CHECK_ERR
 
     /* the output from command "ncmpidump -v var test.nc" should be:
            var =
@@ -137,15 +134,15 @@ int main(int argc, char **argv) {
     for (j=0; j<4; j++) {
         for (i=0; i<6; i++) {
             if (var[j][i] != 50.5+j*6+i) {
-                /* this error is a pntecdf internal error, if occurs */
-                printf("Error: put buffer[%d][%d]=%f altered, should be %f\n",
-                       j,i,var[j][i],50.5+j*6+i);
+                /* this error is a pnetcdf internal error, if occurs */
+                printf("Error at line %d in %s: put buffer[%d][%d]=%f altered, should be %f\n",
+                       __LINE__,__FILE__,j,i,var[j][i],50.5+j*6+i);
                 nerrs++;
                 break;
             }
         }
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -164,7 +161,6 @@ int main(int argc, char **argv) {
     }
 
     MPI_Finalize();
-
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/test/nonblocking/test_bputf.f90 b/test/nonblocking/test_bputf.f90
index 93f6b84..f3daa16 100644
--- a/test/nonblocking/test_bputf.f90
+++ b/test/nonblocking/test_bputf.f90
@@ -2,10 +2,23 @@
 !   Copyright (C) 2012, Northwestern University
 !   See COPYRIGHT notice in top-level directory.
 !
-!   $Id: test_bputf.f90 2131 2015-09-25 22:33:12Z wkliao $
+!   $Id: test_bputf.f90 3422 2017-09-25 05:42:52Z wkliao $
+
+      subroutine check(err, message)
+          use mpi
+          use pnetcdf
+          implicit none
+          integer err
+          character(len=*) message
+
+          ! It is a good idea to check returned value for possible error
+          if (err .NE. NF90_NOERR) then
+              write(6,*) trim(message), trim(nf90mpi_strerror(err))
+              call MPI_Abort(MPI_COMM_WORLD, -1, err)
+          end if
+      end subroutine check
 
       program main
-
       use mpi
       use pnetcdf
       implicit none
@@ -47,27 +60,22 @@
       cmode = IOR(NF90_CLOBBER, NF90_64BIT_DATA)
       err = nf90mpi_create(MPI_COMM_WORLD, filename, cmode,  &
                            info, ncid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_create ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_create ')
 
       call MPI_Info_free(info, ierr)
 
       ! define a variable of a 4 x 6 integer array in the nc file
       err = nf90mpi_def_dim(ncid, 'X', 4_MPI_OFFSET_KIND, dimid(1))
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_def_dim ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_def_dim ')
 
       err = nf90mpi_def_dim(ncid, 'Y', 6_MPI_OFFSET_KIND, dimid(2))
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_def_dim ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_def_dim ')
 
       err = nf90mpi_def_var(ncid, 'var', NF90_INT64, dimid, varid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_def_var ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_def_var ')
 
       err = nf90mpi_enddef(ncid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_enddef ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_enddef ')
 
       ! set the contents of write buffer var, a 6 x 4 real array
       !     50, 56, 62, 68,
@@ -85,8 +93,7 @@
       ! bufsize must be max of data type converted before and after
       bufsize = 4*6*8
       err = nf90mpi_buffer_attach(ncid, bufsize)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_buffer_attach ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_buffer_attach ')
 
       ! write var to the NC variable in the matrix transposed way
       count(1)  = 2
@@ -106,20 +113,17 @@
       start(2)  = 1
       err = nf90mpi_bput_var(ncid, varid, var(1:,1:), req(1), start, count, &
                              stride, imap)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_bput_var', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_bput_var ')
 
       ! write the second two columns of the NC variable in the matrix transposed way
       start(1)  = 3
       start(2)  = 1
       err = nf90mpi_bput_var(ncid, varid, var(1:,3:), req(2), start, count, &
                              stride, imap)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_bput_var', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_bput_var ')
 
       err = nf90mpi_wait_all(ncid, 2, req, status)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_wait_all ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_wait_all ')
 
       ! check each bput status
       do i = 1, 2
@@ -129,8 +133,7 @@
       enddo
 
       err = nf90mpi_buffer_detach(ncid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_buffer_detach ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_buffer_detach ')
 
       ! the output from command "ncmpidump -v var test.nc" should be:
       !      var =
@@ -149,7 +152,7 @@
             do i = 1, 6
                if (var(i,j) .NE. (j-1)*6+(i-1) + 50) then
 ! #ifdef PRINT_ERR_ON_SCREEN
-!                  ! this error is a pntecdf internal error, if occurs */
+!                  ! this error is a pnetcdf internal error, if occurs */
 !                  print*, &
 !                  'Error: nf90mpi_bput_var write buffer has been altered at j=', &
 !                  j,' i=',i,' var=',var(i,j)
@@ -161,8 +164,7 @@
       endif
 
       err = nf90mpi_close(ncid)
-      if (err < NF90_NOERR) print*,'Error at nf90mpi_close ', &
-                                   nf90mpi_strerror(err)
+      call check(err, 'Error at nf90mpi_close ')
 
       if (rank .EQ. 0) then
           msg = '*** TESTING F90 '//trim(cmd)//' for bput_var'
diff --git a/test/nonblocking/test_bputf77.f b/test/nonblocking/test_bputf77.f
index 42c0f20..d500e92 100644
--- a/test/nonblocking/test_bputf77.f
+++ b/test/nonblocking/test_bputf77.f
@@ -2,10 +2,10 @@
 !   Copyright (C) 2012, Northwestern University and Argonne National Lab
 !   See COPYRIGHT notice in top-level directory.
 !
-!   $Id: test_bputf77.f 2224 2015-12-16 06:10:36Z wkliao $
+!   $Id: test_bputf77.f 3422 2017-09-25 05:42:52Z wkliao $
 !
 
-       INTEGER FUNCTION XTRIM(STRING)
+      INTEGER FUNCTION XTRIM(STRING)
            CHARACTER*(*) STRING
            INTEGER I, N
            N = LEN(STRING)
@@ -13,10 +13,23 @@
               IF (STRING(I:I) .NE. ' ') GOTO 10
            ENDDO
  10        XTRIM = I
-       END ! FUNCTION XTRIM
+      END ! FUNCTION XTRIM
+
+      subroutine check(err, message)
+          implicit none
+          include "mpif.h"
+          include "pnetcdf.inc"
+          integer err
+          character message*(*)
+
+          ! It is a good idea to check returned value for possible error
+          if (err .NE. NF_NOERR) then
+              write(6,*) message//' '//nfmpi_strerror(err)
+              call MPI_Abort(MPI_COMM_WORLD, -1, err)
+          endif
+      end ! subroutine check
 
       program main
-
       implicit none
       include "mpif.h"
       include "pnetcdf.inc"
@@ -59,29 +72,24 @@
       cmode = IOR(NF_CLOBBER, NF_64BIT_DATA)
       err = nfmpi_create(MPI_COMM_WORLD, 'testfile.nc', cmode,
      +                   info, ncid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_create ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_create ')
 
       call MPI_Info_free(info, ierr)
 
       ! define a variable of a 4 x 6 integer array in the nc file
       dim_size = 4
       err = nfmpi_def_dim(ncid, 'X', dim_size, dimid(1))
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_def_dim ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_def_dim ')
 
       dim_size = 6
       err = nfmpi_def_dim(ncid, 'Y', dim_size, dimid(2))
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_def_dim ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_def_dim ')
 
       err = nfmpi_def_var(ncid, 'var', NF_INT64, 2, dimid, varid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_def_var ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_def_var ')
 
       err = nfmpi_enddef(ncid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_enddef ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_enddef ')
 
       ! set the contents of write buffer var, a 6 x 4 real array
       !     50, 56, 62, 68,
@@ -99,8 +107,7 @@
       ! bufsize must be max of data type converted before and after
       bufsize = 4*6*8
       err = nfmpi_buffer_attach(ncid, bufsize)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_buffer_attach ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_buffer_attach ')
 
       ! write var to the NC variable in the matrix transposed way
       count(1)  = 2
@@ -120,20 +127,17 @@
       start(2)  = 1
       err = nfmpi_bput_varm_real(ncid, varid, start, count, stride,
      +                           imap, var(1,1), req(1))
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_bput_varm_real ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_bput_varm_real ')
 
       ! write the second two columns of the NC variable in the matrix transposed way
       start(1)  = 3
       start(2)  = 1
       err = nfmpi_bput_varm_real(ncid, varid, start, count, stride,
      +                           imap, var(1,3), req(2))
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_bput_varm_real ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_bput_varm_real ')
 
       err = nfmpi_wait_all(ncid, 2, req, status)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_wait_all ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_wait_all ')
 
       ! check each bput status
       do i = 1, 2
@@ -143,8 +147,7 @@
       enddo
 
       err = nfmpi_buffer_detach(ncid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_buffer_detach ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_buffer_detach ')
 
       ! the output from command "ncmpidump -v var test.nc" should be:
       !      var =
@@ -163,7 +166,7 @@
             do i = 1, 6
                if (var(i,j) .NE. (j-1)*6+(i-1) + 50) then
 ! #ifdef PRINT_ERR_ON_SCREEN
-!                  ! this error is a pntecdf internal error, if occurs */
+!                  ! this error is a pnetcdf internal error, if occurs */
 !                  print*, &
 !                  'Error: bput_varm write buffer has been altered at j=', &
 !                  j,' i=',i,' var=',var(i,j)
@@ -175,8 +178,7 @@
       endif
 
       err = nfmpi_close(ncid)
-      if (err .NE. NF_NOERR) print*,'Error at nfmpi_close ',
-     +                           nfmpi_strerror(err)
+      call check(err, 'Error at nfmpi_close ')
 
       if (rank .EQ. 0) then
          msg = '*** TESTING F77 '//cmd(1:XTRIM(cmd))//
diff --git a/test/nonblocking/wait_after_indep.c b/test/nonblocking/wait_after_indep.c
index c97a7b6..5a048e8 100644
--- a/test/nonblocking/wait_after_indep.c
+++ b/test/nonblocking/wait_after_indep.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: wait_after_indep.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: wait_after_indep.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -26,12 +26,6 @@
 #define NX 10
 #define NDIMS 2
 
-#define ERR \
-    if (err != NC_NOERR) { \
-        printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); \
-        nerrs++; \
-    }
-
 int main(int argc, char** argv)
 {
     char filename[256];
@@ -47,7 +41,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -62,52 +56,52 @@ int main(int argc, char** argv)
 
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
                        MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX*nprocs,    &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var", NC_UBYTE, NDIMS, dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX*nprocs,    &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_UBYTE, NDIMS, dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     for (i=0; i<NY; i++) for (j=0; j<NX; j++) buffer[i][j] = rank+10;
 
      start[0] = 0;     start[1] = NX*rank;
      count[0] = NY/2;  count[1] = NX/2;
     stride[0] = 2;    stride[1] = 2;
-    err = ncmpi_buffer_attach(ncid, NY*NX); ERR
+    err = ncmpi_buffer_attach(ncid, NY*NX); CHECK_ERR
 
-    err = ncmpi_begin_indep_data(ncid); ERR
+    err = ncmpi_begin_indep_data(ncid); CHECK_ERR
     err = ncmpi_bput_vars_uchar(ncid, varid, start, count, stride,
                                 &buffer[0][0], &req);
-    ERR
+    CHECK_ERR
 
     /* check if write buffer contents have been altered */
     for (i=0; i<NY; i++)
         for (j=0; j<NX; j++) {
             if (buffer[i][j] != rank+10) {
-                printf("Error: put buffer[%d][%d]=%hhu altered, should be %d\n",
-                       i,j,buffer[i][j],rank+10);
+                printf("Error at line %d in %s: put buffer[%d][%d]=%hhu altered, should be %d\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j],rank+10);
                 nerrs++;
             }
         }
 
-    err = ncmpi_end_indep_data(ncid); ERR
+    err = ncmpi_end_indep_data(ncid); CHECK_ERR
 
     /* calling wait API after exiting independent data mode on purpose */
-    err = ncmpi_wait_all(ncid, 1, &req, &st); ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &st); CHECK_ERR
 
     /* check if write buffer contents have been altered */
     for (i=0; i<NY; i++)
         for (j=0; j<NX; j++) {
             if (buffer[i][j] != rank+10) {
-                printf("Error: put buffer[%d][%d]=%hhu altered, should be %d\n",
-                       i,j,buffer[i][j],rank+10);
+                printf("Error at line %d in %s: put buffer[%d][%d]=%hhu altered, should be %d\n",
+                       __LINE__,__FILE__,i,j,buffer[i][j],rank+10);
                 nerrs++;
             }
         }
 
-    err = ncmpi_buffer_detach(ncid); ERR
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_buffer_detach(ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -126,6 +120,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/subfile/Makefile.am b/test/subfile/Makefile.am
new file mode 100644
index 0000000..9440ecb
--- /dev/null
+++ b/test/subfile/Makefile.am
@@ -0,0 +1,67 @@
+#
+# Copyright (C) 2013, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c
+
+AM_DEFAULT_SOURCE_EXT = .c
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+
+if DECL_MPI_OFFSET
+   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+   AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+   # AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+   # AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+TESTPROGRAMS = test_subfile
+
+check_PROGRAMS = $(TESTPROGRAMS)
+
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+
+EXTRA_DIST = README seq_runs.sh
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+TESTMPIRUN2  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i -f $(TESTOUTDIR)/testfile.nc -s 2 ; \
+	) ; done ; } ; done
+
+ptest2: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i -f $(TESTOUTDIR)/testfile.nc -s 2 ; \
+	) ; done ; } ; done
+
+ptests: ptest2 ptest4
+ptest6 ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/subfile/Makefile.in b/test/subfile/Makefile.in
index e1de7a0..4734801 100644
--- a/test/subfile/Makefile.in
+++ b/test/subfile/Makefile.in
@@ -1,76 +1,1101 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2013, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2590 2016-10-31 21:37:02Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = $(am__EXEEXT_1)
+subdir = test/subfile
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = test_subfile$(EXEEXT)
+test_subfile_SOURCES = test_subfile.c
+test_subfile_OBJECTS = test_subfile.$(OBJEXT)
+test_subfile_LDADD = $(LDADD)
+test_subfile_DEPENDENCIES = $(top_builddir)/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = test_subfile.c
+DIST_SOURCES = test_subfile.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver README
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include
+LDADD = $(top_builddir)/src/libs/libpnetcdf.la ../common/libtestutils.la
+ at DECL_MPI_OFFSET_TRUE@AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+TESTPROGRAMS = test_subfile
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+CLEANFILES = *.nc core core.* *.gcda *.gcno *.gcov gmon.out
+EXTRA_DIST = README seq_runs.sh
+TESTMPIRUN2 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .lo .log .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/subfile/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/subfile/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+test_subfile$(EXEEXT): $(test_subfile_OBJECTS) $(test_subfile_DEPENDENCIES) $(EXTRA_test_subfile_DEPENDENCIES) 
+	@rm -f test_subfile$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(test_subfile_OBJECTS) $(test_subfile_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_subfile.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-include ../../macros.make
+mostlyclean: mostlyclean-am
 
-INCLUDES  = -I../../src/lib -I$(srcdir)/../common
-FPPFLAGS += -I../../src/libf @FC_MODINC at ../../src/libf90
-F90FLAGS += @FC_MODOUT at .
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-C_SRCS   = test_subfile.c
+pdf: pdf-am
 
-CXX_SRCS = 
+pdf-am:
 
-F77_SRCS = 
+ps: ps-am
 
-PROGS    = $(C_SRCS:.c=)
-OBJS     = $(C_SRCS:.c=.o)
-ifeq (@has_mpicxx@, yes)
-PROGS   += $(CXX_SRCS:.cpp=)
-OBJS    += $(CXX_SRCS:.cpp=.o)
-endif
+ps-am:
 
-ifeq (@has_fortran@, yes)
-PROGS   += $(F77_SRCS:.f=)
-OBJS    += $(F77_SRCS:.f=.o)
-endif
+tests: tests-am
 
-GARBAGE      = $(PROGS) *.nc
-PACKING_LIST = $(C_SRCS) $(F77_SRCS) $(CXX_SRCS) Makefile.in depend README
+tests-am: tests-local
 
-all: $(PROGS)
+uninstall-am:
 
-$(C_SRCS:.c=.o) $(CXX_SRCS:.cpp=.o): $(srcdir)/../common/testutils.h
+.MAKE: check-am install-am install-strip
 
-$(PROGS): ../common/libtestutils.a
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
 
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
+.PRECIOUS: Makefile
 
-test_subfile: test_subfile.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
 
-testing check verbose_testing:
+ at DECL_MPI_OFFSET_TRUE@   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+ at DECL_MPI_OFFSET_TRUE@   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@   # AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@   # AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
 
-TEST_MPIRUN_2 = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4 = $(subst NP,4,$(TEST_MPIRUN))
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
-ptest2: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_2) ./$$i -f $(TEST_OUTDIR)/testfile.nc -s 2 \
-	; ) ; done
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i -f $(TESTOUTDIR)/testfile.nc -s 2 ; \
+	) ; done ; } ; done
 
-ptest4: $(PROGS)
-	@for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_4) ./$$i -f $(TEST_OUTDIR)/testfile.nc -s 2 \
-	; ) ; done
+ptest2: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e ; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i -f $(TESTOUTDIR)/testfile.nc -s 2 ; \
+	) ; done ; } ; done
 
-ptest: ptest4
 ptests: ptest2 ptest4
 ptest6 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
-include $(srcdir)/depend
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/subfile/depend b/test/subfile/depend
deleted file mode 100644
index f0c4e46..0000000
--- a/test/subfile/depend
+++ /dev/null
@@ -1,2 +0,0 @@
-test_subfile.o: test_subfile.c
-
diff --git a/test/subfile/seq_runs.sh b/test/subfile/seq_runs.sh
new file mode 100755
index 0000000..42849c3
--- /dev/null
+++ b/test/subfile/seq_runs.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+for j in 0 1 ; do { \
+    export PNETCDF_SAFE_MODE=$$j ; \
+    for i in $TESTPROGRAMS; do { \
+        ${TESTSEQRUN} ./$i         -f ${TESTOUTDIR}/testfile.nc -s 2 ; \
+        ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc ; \
+} ; done ; } ; done
+
+${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc.subfile_0.nc
diff --git a/test/subfile/test_subfile.c b/test/subfile/test_subfile.c
index f19bbc9..fa9ab46 100644
--- a/test/subfile/test_subfile.c
+++ b/test/subfile/test_subfile.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  */
-/* $Id: test_subfile.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: test_subfile.c 3385 2017-09-18 01:26:03Z wkliao $ */
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -15,8 +15,6 @@
 
 #include <testutils.h>
 
-#define MAXLINE 128
-
 /* The file name is taken as a command-line argument. */
 
 /* Measures the I/O bandwidth for writing/reading a 3D
@@ -24,13 +22,8 @@
    in row-major (C) order.
    Note that the file access pattern is noncontiguous.
 
-   Array size 128^3. For other array sizes, change array_of_gsizes below.*/
-#define TEST_HANDLE_ERR(status)                         \
-        if ((status) != NC_NOERR) {                     \
-            printf("Error at line %d (%s)\n", __LINE__, \
-                   ncmpi_strerror((status)) );          \
-            nerrs++;                                     \
-        }                                               \
+   Array size 128^3. For other array sizes, change array_of_gsizes below.
+*/
 
 int main(int argc, char **argv)
 {
@@ -41,9 +34,9 @@ int main(int argc, char **argv)
     int nprocs, len, **buf, rank;
     MPI_Offset bufcount;
     int array_of_psizes[3];
-    int status;
+    int err;
     MPI_Offset array_of_starts[3];
-    char *fbasename = NULL, *fbasename1 = NULL, filename[256];
+    char *fbasename=NULL;
     char dimname[20], varname[20];
     int ncid, dimids0[3], rank_dim[3], *varid=NULL;
     MPI_Info info=MPI_INFO_NULL, info_used=MPI_INFO_NULL;
@@ -51,7 +44,7 @@ int main(int argc, char **argv)
     MPI_Offset *bufcount_list;
     int ndims=3, nvars=1, ngatts, unlimdimid;
     MPI_Datatype *datatype_list;
-    int length = 128; /* 8MB per proc */
+    int length = 8;
     double stim, write_tim, new_write_tim, write_bw;
     double read_tim, new_read_tim, read_bw;
     double open_tim, new_open_tim;
@@ -67,8 +60,8 @@ int main(int argc, char **argv)
 
     /* process 0 takes the file name as a command-line argument and
        broadcasts it to other processes */
-    if (!rank) {
-	while ((opt = getopt(argc, argv, "f:s:rp:n:l:")) != EOF) {
+    if (rank == 0) {
+	while ((opt = getopt(argc, argv, "f:s:p:n:l:r")) != EOF) {
 	    switch (opt) {
 	    case 'f': fbasename = optarg;
 		break;
@@ -88,30 +81,29 @@ int main(int argc, char **argv)
 	}
 	if (fbasename == NULL) {
 	    fprintf(stderr, "\n*#  Usage: test_subfile -f pathname -s num_sf -p par_dim_id \n\n");
-	    MPI_Abort(MPI_COMM_WORLD, 1);
+	    nerrs++;
 	}
-
-	fbasename1 = (char *) malloc (MAXLINE);
-	sprintf(fbasename1, "%s", fbasename);
-	len = strlen(fbasename1);
+    }
+    MPI_Bcast(&nerrs, 1, MPI_INT, 0, MPI_COMM_WORLD);
+    if (nerrs > 0) {
+        MPI_Finalize();
+        return 1;
+    }
+        
+    if (rank == 0) {
+	len = strlen(fbasename);
 	MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD);
-	MPI_Bcast(fbasename, len+1, MPI_CHAR, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&num_sf, 1, MPI_INT, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&par_dim_id, 1, MPI_INT, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&nvars, 1, MPI_INT, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&do_read, 1, MPI_INT, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&length, 1, MPI_INT, 0, MPI_COMM_WORLD);
     }
     else {
-	fbasename1 = (char *) malloc (MAXLINE);
 	MPI_Bcast(&len, 1, MPI_INT, 0, MPI_COMM_WORLD);
-	MPI_Bcast(fbasename1, len+1, MPI_CHAR, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&num_sf, 1, MPI_INT, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&par_dim_id, 1, MPI_INT, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&nvars, 1, MPI_INT, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&do_read, 1, MPI_INT, 0, MPI_COMM_WORLD);
-        MPI_Bcast(&length, 1, MPI_INT, 0, MPI_COMM_WORLD);
+	fbasename = (char *) malloc(len+1);
     }
+    MPI_Bcast(fbasename, len+1, MPI_CHAR, 0, MPI_COMM_WORLD);
+    MPI_Bcast(&num_sf, 1, MPI_INT, 0, MPI_COMM_WORLD);
+    MPI_Bcast(&par_dim_id, 1, MPI_INT, 0, MPI_COMM_WORLD);
+    MPI_Bcast(&nvars, 1, MPI_INT, 0, MPI_COMM_WORLD);
+    MPI_Bcast(&do_read, 1, MPI_INT, 0, MPI_COMM_WORLD);
+    MPI_Bcast(&length, 1, MPI_INT, 0, MPI_COMM_WORLD);
 
     if (rank == 0) {
         char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
@@ -125,39 +117,39 @@ int main(int argc, char **argv)
     buf = (int **)malloc(nvars*sizeof(int*));
     if (buf == NULL){
         printf("buf malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     bufcount_list = (MPI_Offset *)malloc(nvars*sizeof(MPI_Offset));
     if (bufcount_list == NULL){
         printf("bufcount_list malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     starts_list = (MPI_Offset **)malloc(nvars*sizeof(MPI_Offset *));
     if (starts_list== NULL){
         printf("starts_list malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     count_list = (MPI_Offset **)malloc(nvars*sizeof(MPI_Offset *));
     if (count_list == NULL){
         printf("count_list malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
     datatype_list = (MPI_Datatype*)malloc(nvars*sizeof(MPI_Datatype));
     if (datatype_list == NULL){
         printf("count_list malloc error\n");
-        return 0;
+        nerrs++; goto fn_exit;
     }
 
     for (i=0; i<nvars; i++) {
 	starts_list[i] = (MPI_Offset *)malloc(ndims*sizeof(MPI_Offset));
 	if (starts_list[i] == NULL){
 	    printf("starts_list[%d] malloc error\n", i);
-	    return 0;
+	    nerrs++; goto fn_exit;
 	}
 	count_list[i] = (MPI_Offset *)malloc(ndims*sizeof(MPI_Offset));
 	if (count_list[i] == NULL){
 	    printf("count_list[%d] malloc error\n", i);
-	    return 0;
+	    nerrs++; goto fn_exit;
 	}
     }
 
@@ -197,7 +189,7 @@ int main(int argc, char **argv)
 	buf[i] = (int *) malloc(bufcount * sizeof(int));
 	if (buf[i] == NULL){
 	    printf("buf[i]malloc error\n");
-	    return 0;
+	    nerrs++; goto fn_exit;
 	}
 
 	for (j=0; j<bufcount; j++)
@@ -209,15 +201,14 @@ int main(int argc, char **argv)
     char tmp[10];
     sprintf(tmp, "%d", num_sf);
     MPI_Info_set(info, "nc_num_subfiles", tmp);
-
-    sprintf(filename, "%s.%d.%d.%d.nc", fbasename1, length, 1, 0);
+    MPI_Info_set(info, "pnetcdf_subfiling", "enable");
 
     if (do_read == 1) goto read;
 
     stim = MPI_Wtime();
-    status = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
-                          info, &ncid);
-    TEST_HANDLE_ERR(status)
+    err = ncmpi_create(MPI_COMM_WORLD, fbasename, NC_CLOBBER|NC_64BIT_DATA,
+                       info, &ncid);
+    CHECK_ERR
 
     open_tim = MPI_Wtime() - stim;
 
@@ -229,35 +220,35 @@ int main(int argc, char **argv)
     /* define dimensions */
     for (i=0; i<ndims; i++){
         sprintf(dimname, "dim0_%d", i);
-        status = ncmpi_def_dim(ncid, dimname, array_of_gsizes[i], &dimids0[i]);
-        TEST_HANDLE_ERR(status)
+        err = ncmpi_def_dim(ncid, dimname, array_of_gsizes[i], &dimids0[i]);
+        CHECK_ERR
     }
 
     /* define variables */
     varid = (int *)malloc(nvars*sizeof(int));
     for (i=0; i<nvars; i++) {
 	sprintf(varname, "var0_%d", i);
-	status = ncmpi_def_var(ncid, varname, NC_INT, ndims, dimids0, &varid[i]);
-	TEST_HANDLE_ERR(status)
+	err = ncmpi_def_var(ncid, varname, NC_INT, ndims, dimids0, &varid[i]);
+	CHECK_ERR
     }
 
     if (par_dim_id != 0) {
         for (i=0; i<nvars; i++) {
-            status = ncmpi_put_att_int(ncid, varid[i], "par_dim_id",
-                                       NC_INT, 1, &dimids0[par_dim_id]);
-	    TEST_HANDLE_ERR(status)
+            err = ncmpi_put_att_int(ncid, varid[i], "par_dim_id",
+                                    NC_INT, 1, &dimids0[par_dim_id]);
+	    CHECK_ERR
         }
     }
 
     /* set all non-record variable to be subfiled */
     /*
     MPI_Info_set(info, "nc_num_subfiles", "2");
-    status = ncmpi_set_var_info(ncid, varid, info);
-    TEST_HANDLE_ERR(status);
+    err = ncmpi_set_var_info(ncid, varid, info);
+    CHECK_ERR
     */
 
-    status = ncmpi_enddef(ncid);
-    TEST_HANDLE_ERR(status)
+    err = ncmpi_enddef(ncid);
+    CHECK_ERR
 
     /* test ncmpi_inq_var() */
     for (i=0; i<nvars; i++) {
@@ -265,29 +256,33 @@ int main(int argc, char **argv)
         nc_type typep;
         int ndimsp, dimids[3], nattsp;
 
-        status = ncmpi_inq_var(ncid, varid[i], name, &typep, &ndimsp, dimids,
-                               &nattsp);
-        TEST_HANDLE_ERR(status)
+        err = ncmpi_inq_var(ncid, varid[i], name, &typep, &ndimsp, dimids,
+                            &nattsp);
+        CHECK_ERR
 
 	sprintf(varname, "var0_%d", i);
         if (strcmp(name, varname)) {
-            printf("Error: unexpected var[%d] name %s, should be %s\n",i,name,varname);
+            printf("Error at line %d in %s: unexpected var[%d] name %s, should be %s\n",
+            __LINE__,__FILE__,i,name,varname);
             nerrs++;
             continue;
         }
         if (typep != NC_INT) {
-            printf("Error: unexpected var[%d] type %d, should be %d\n",i,typep,NC_INT);
+            printf("Error at line %d in %s: unexpected var[%d] type %d, should be %d\n",
+            __LINE__,__FILE__,i,typep,NC_INT);
             nerrs++;
             continue;
         }
         if (ndimsp != ndims) {
-            printf("Error: unexpected var[%d] ndims %d, should be %d\n",i,ndimsp,ndims);
+            printf("Error at line %d in %s: unexpected var[%d] ndims %d, should be %d\n",
+            __LINE__,__FILE__,i,ndimsp,ndims);
             nerrs++;
             continue;
         }
         for (j=0; j<ndims; j++) {
             if (dimids[j] != dimids0[j]) {
-                printf("Error: unexpected var[%d] dimids[%d] %d, should be %d\n",i,j,dimids0[j],dimids[j]);
+                printf("Error at line %d in %s: unexpected var[%d] dimids[%d] %d, should be %d\n",
+            __LINE__,__FILE__,i,j,dimids0[j],dimids[j]);
                 nerrs++;
                 continue;
             }
@@ -303,11 +298,11 @@ int main(int argc, char **argv)
 #endif
     stim = MPI_Wtime();
     for (i=0; i<nvars; i++) {
-        status = ncmpi_put_vara_all(ncid, varid[i],
-                                    starts_list[i], count_list[i],
-                                    buf[i],
-                                    bufcount_list[i], MPI_INT);
-        TEST_HANDLE_ERR(status)
+        err = ncmpi_put_vara_all(ncid, varid[i],
+                                 starts_list[i], count_list[i],
+                                 buf[i],
+                                 bufcount_list[i], MPI_INT);
+        CHECK_ERR
     }
     write_tim = MPI_Wtime() - stim;
 
@@ -320,12 +315,12 @@ int main(int argc, char **argv)
         printf("Collective write time = %f sec, Collective write bandwidth = %f Mbytes/sec\n", new_write_tim, write_bw);
     }
 
-    status = ncmpi_inq_file_info(ncid, &info_used);
-    TEST_HANDLE_ERR(status)
+    err = ncmpi_inq_file_info(ncid, &info_used);
+    CHECK_ERR
 
     stim = MPI_Wtime();
-    status = ncmpi_close(ncid);
-    TEST_HANDLE_ERR(status)
+    err = ncmpi_close(ncid);
+    CHECK_ERR
     close_tim = MPI_Wtime() - stim;
 
     MPI_Allreduce(&close_tim, &new_close_tim, 1, MPI_DOUBLE, MPI_MAX,
@@ -338,8 +333,8 @@ int main(int argc, char **argv)
     goto end;
 
 read:
-    status = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid);
-    TEST_HANDLE_ERR(status)
+    err = ncmpi_open(MPI_COMM_WORLD, fbasename, NC_NOWRITE, info, &ncid);
+    CHECK_ERR
 
     stim = MPI_Wtime();
 
@@ -348,14 +343,14 @@ read:
      * Add dataset definitions for output dataset.
      */
 
-    status = ncmpi_inq(ncid, &ndims, &nvars, &ngatts, &unlimdimid);
-    TEST_HANDLE_ERR(status)
+    err = ncmpi_inq(ncid, &ndims, &nvars, &ngatts, &unlimdimid);
+    CHECK_ERR
 
     for (i=0; i<nvars; i++) {
-        status = ncmpi_get_vara_all(ncid, i,
-                                    starts_list[i], count_list[i],
-                                    buf[i], bufcount_list[i], MPI_INT);
-        TEST_HANDLE_ERR(status)
+        err = ncmpi_get_vara_all(ncid, i,
+                                 starts_list[i], count_list[i],
+                                 buf[i], bufcount_list[i], MPI_INT);
+        CHECK_ERR
     }
     read_tim = MPI_Wtime() - stim;
 
@@ -367,11 +362,11 @@ read:
         printf("Collective read time = %f sec, Collective read bandwidth = %f Mbytes/sec\n", new_read_tim, read_bw);
     }
 
-    status = ncmpi_inq_file_info(ncid, &info_used);
-    TEST_HANDLE_ERR(status)
+    err = ncmpi_inq_file_info(ncid, &info_used);
+    CHECK_ERR
 
-    status = ncmpi_close(ncid);
-    TEST_HANDLE_ERR(status)
+    err = ncmpi_close(ncid);
+    CHECK_ERR
 
 end:
     if (info      != MPI_INFO_NULL) MPI_Info_free(&info);
@@ -388,14 +383,14 @@ end:
     if (!do_read) free(varid);
     free(starts_list);
     free(count_list);
-    free(fbasename1);
+    if (rank > 0) free(fbasename);
 
     MPI_Offset malloc_size, sum_size;
-    int err, nfiles, ncids[10];
+    int nfiles, ncids[10];
 
     /* check if there are files still left opened */
     err = ncmpi_inq_files_opened(&nfiles, ncids);
-    TEST_HANDLE_ERR(err)
+    CHECK_ERR
     if (nfiles > 0) printf("nfiles %d still opened\n",nfiles);
 
     /* check for any PnetCDF internal malloc residues */
@@ -413,7 +408,7 @@ end:
         else       printf(PASS_STR);
     }
 
+fn_exit:
     MPI_Finalize();
-
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/Makefile.am b/test/testcases/Makefile.am
new file mode 100644
index 0000000..f660539
--- /dev/null
+++ b/test/testcases/Makefile.am
@@ -0,0 +1,179 @@
+#
+# Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+# See COPYRIGHT notice in top-level directory.
+#
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
+#
+# @configure_input@
+
+SUFFIXES = .o .c .f .F .f90
+
+AM_DEFAULT_SOURCE_EXT = .c
+
+AM_CPPFLAGS  = -I$(top_srcdir)/src/include
+AM_CPPFLAGS += -I$(srcdir)/../common
+AM_CPPFLAGS += -I$(top_builddir)/src/include
+AM_FFLAGS    = -I$(top_builddir)/src/binding/f77
+AM_FCFLAGS   = $(FC_MODINC)$(top_builddir)/src/binding/f90
+AM_FCFLAGS  += $(FC_MODINC)$(srcdir)/../common
+AM_FCFLAGS  += -I$(top_builddir)/src/binding/f77 
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la -lm
+
+if SIZEOF_MPI_AINT_IS_4
+   AM_FFLAGS += $(FC_DEFINE)SIZEOF_MPI_AINT_IS_4
+endif
+
+if DECL_MPI_OFFSET
+   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
+   AM_CFLAGS   = -DHAVE_DECL_MPI_OFFSET
+   AM_FFLAGS  += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+   AM_FCFLAGS += $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+endif
+
+NCMPIGEN  = $(top_builddir)/src/utils/ncmpigen/ncmpigen
+NCMPIDIFF = $(top_builddir)/src/utils/ncmpidiff/ncmpidiff
+
+TESTPROGRAMS = ncmpi_vars_null_stride \
+               vectors \
+               collective_error \
+               test_varm \
+               alignment_test \
+               flexible \
+               flexible2 \
+               flexible_varm \
+               nonblocking \
+               noclobber \
+               record \
+               inq_num_vars \
+               varn_int \
+               modes \
+               one_record \
+               inq_recsize \
+               test_vard \
+               varn_contig \
+               ivarn \
+               check_striping \
+               add_var \
+               buftype_free \
+               last_large_var \
+               check_type \
+               test_erange \
+               scalar \
+               null_args \
+               tst_dimsizes \
+               mix_collectives \
+               large_var_cdf5 \
+               tst_max_var_dims
+
+M4_SRCS  = put_all_kinds.m4 erange_fill.m4
+
+TESTPROGRAMS += put_all_kinds
+nodist_put_all_kinds_SOURCES = put_all_kinds.c
+nodist_erange_fill_SOURCES = erange_fill.c
+
+if ENABLE_ERANGE_FILL
+   M4FLAGS += -DERANGE_FILL
+   TESTPROGRAMS += erange_fill
+endif
+
+M4FLAGS += -I${top_srcdir}/m4
+
+$(M4_SRCS:.m4=.c): Makefile
+
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
+
+if HAS_FORTRAN
+   TESTPROGRAMS += varn_intf \
+                   attrf \
+                   buftype_freef \
+                   put_parameter \
+                   test_vardf
+
+       varn_intf_SOURCES = varn_intf.f
+           attrf_SOURCES = attrf.f
+   buftype_freef_SOURCES = buftype_freef.f
+   put_parameter_SOURCES = put_parameter.f
+      test_vardf_SOURCES = test_vardf.F
+if HAVE_MPI_MOD
+   TESTPROGRAMS += inq_num_varsf \
+                   inq_recsizef \
+                   test_vardf90 \
+                   varn_real
+
+   inq_num_varsf_SOURCES = inq_num_varsf.f90
+    inq_recsizef_SOURCES = inq_recsizef.f90
+    test_vardf90_SOURCES = test_vardf90.f90
+       varn_real_SOURCES = varn_real.f90
+endif
+   check_PROGRAMS = $(TESTPROGRAMS)
+   check_PROGRAMS += bigrecords
+if RUN_LARGE_FILE_TEST
+   TESTPROGRAMS += bigrecords
+endif
+   bigrecords_SOURCES = bigrecords.f
+else
+   check_PROGRAMS = $(TESTPROGRAMS)
+endif
+
+check_PROGRAMS += redef1
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+
+TESTS = seq_runs.sh
+
+CLEANFILES = $(M4_SRCS:.m4=.c) core core.* *.gcda *.gcno *.gcov gmon.out \
+             testfile.nc testfile.nc.cdf1 testfile.nc.cdf2 testfile.nc.cdf5 \
+             redef1.nc redef2.nc
+
+EXTRA_DIST = $(M4_SRCS) seq_runs.sh redef-good.ncdump
+
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
+
+# Some of these tests are designed to run on one process,
+# Run them on 4 processes to see if they can handle well
+# Some of these tests are designed to run on 4 processes,
+# Run them on 2, 4, and 6 processes to see if they can handle well
+
+TESTMPIRUN2  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN6  = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/6/g'`
+
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest2: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptest6: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN_6) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
+
+ptests: ptest2 ptest4 ptest6
+ptest8 ptest10:
+
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
+
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
+
diff --git a/test/testcases/Makefile.in b/test/testcases/Makefile.in
index b4e548a..3b9128d 100644
--- a/test/testcases/Makefile.in
+++ b/test/testcases/Makefile.in
@@ -1,265 +1,1729 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
 #
 # Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 # See COPYRIGHT notice in top-level directory.
 #
-# $Id: Makefile.in 2730 2016-12-19 00:09:18Z wkliao $
+# $Id: Makefile.am 3496 2017-11-01 20:35:21Z wkliao $
 #
 # @configure_input@
-
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at SIZEOF_MPI_AINT_IS_4_TRUE@am__append_1 = $(FC_DEFINE)SIZEOF_MPI_AINT_IS_4
+ at DECL_MPI_OFFSET_TRUE@am__append_2 = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at DECL_MPI_OFFSET_TRUE@am__append_3 = $(FC_DEFINE)HAVE_DECL_MPI_OFFSET
+ at ENABLE_ERANGE_FILL_TRUE@am__append_4 = -DERANGE_FILL
+ at ENABLE_ERANGE_FILL_TRUE@am__append_5 = erange_fill
+ at HAS_FORTRAN_TRUE@am__append_6 = varn_intf \
+ at HAS_FORTRAN_TRUE@                   attrf \
+ at HAS_FORTRAN_TRUE@                   buftype_freef \
+ at HAS_FORTRAN_TRUE@                   put_parameter \
+ at HAS_FORTRAN_TRUE@                   test_vardf
+
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__append_7 = inq_num_varsf \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@                   inq_recsizef \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@                   test_vardf90 \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@                   varn_real
+
+ at HAS_FORTRAN_FALSE@check_PROGRAMS = $(am__EXEEXT_5) redef1$(EXEEXT)
+ at HAS_FORTRAN_TRUE@check_PROGRAMS = $(am__EXEEXT_5) bigrecords$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@	redef1$(EXEEXT)
+ at HAS_FORTRAN_TRUE@@RUN_LARGE_FILE_TEST_TRUE at am__append_8 = bigrecords
+subdir = test/testcases
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/aclocal_coverage.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/acinclude.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+ at ENABLE_ERANGE_FILL_TRUE@am__EXEEXT_1 = erange_fill$(EXEEXT)
+ at HAS_FORTRAN_TRUE@am__EXEEXT_2 = varn_intf$(EXEEXT) attrf$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@	buftype_freef$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@	put_parameter$(EXEEXT) test_vardf$(EXEEXT)
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am__EXEEXT_3 =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	inq_num_varsf$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	inq_recsizef$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	test_vardf90$(EXEEXT) \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	varn_real$(EXEEXT)
+ at HAS_FORTRAN_TRUE@@RUN_LARGE_FILE_TEST_TRUE at am__EXEEXT_4 = bigrecords$(EXEEXT)
+am__EXEEXT_5 = ncmpi_vars_null_stride$(EXEEXT) vectors$(EXEEXT) \
+	collective_error$(EXEEXT) test_varm$(EXEEXT) \
+	alignment_test$(EXEEXT) flexible$(EXEEXT) flexible2$(EXEEXT) \
+	flexible_varm$(EXEEXT) nonblocking$(EXEEXT) noclobber$(EXEEXT) \
+	record$(EXEEXT) inq_num_vars$(EXEEXT) varn_int$(EXEEXT) \
+	modes$(EXEEXT) one_record$(EXEEXT) inq_recsize$(EXEEXT) \
+	test_vard$(EXEEXT) varn_contig$(EXEEXT) ivarn$(EXEEXT) \
+	check_striping$(EXEEXT) add_var$(EXEEXT) buftype_free$(EXEEXT) \
+	last_large_var$(EXEEXT) check_type$(EXEEXT) \
+	test_erange$(EXEEXT) scalar$(EXEEXT) null_args$(EXEEXT) \
+	tst_dimsizes$(EXEEXT) mix_collectives$(EXEEXT) \
+	large_var_cdf5$(EXEEXT) tst_max_var_dims$(EXEEXT) \
+	put_all_kinds$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) \
+	$(am__EXEEXT_3) $(am__EXEEXT_4)
+add_var_SOURCES = add_var.c
+add_var_OBJECTS = add_var.$(OBJEXT)
+add_var_LDADD = $(LDADD)
+add_var_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+alignment_test_SOURCES = alignment_test.c
+alignment_test_OBJECTS = alignment_test.$(OBJEXT)
+alignment_test_LDADD = $(LDADD)
+alignment_test_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__attrf_SOURCES_DIST = attrf.f
+ at HAS_FORTRAN_TRUE@am_attrf_OBJECTS = attrf.$(OBJEXT)
+attrf_OBJECTS = $(am_attrf_OBJECTS)
+attrf_LDADD = $(LDADD)
+attrf_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__bigrecords_SOURCES_DIST = bigrecords.f
+ at HAS_FORTRAN_TRUE@am_bigrecords_OBJECTS = bigrecords.$(OBJEXT)
+bigrecords_OBJECTS = $(am_bigrecords_OBJECTS)
+bigrecords_LDADD = $(LDADD)
+bigrecords_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+buftype_free_SOURCES = buftype_free.c
+buftype_free_OBJECTS = buftype_free.$(OBJEXT)
+buftype_free_LDADD = $(LDADD)
+buftype_free_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__buftype_freef_SOURCES_DIST = buftype_freef.f
+ at HAS_FORTRAN_TRUE@am_buftype_freef_OBJECTS = buftype_freef.$(OBJEXT)
+buftype_freef_OBJECTS = $(am_buftype_freef_OBJECTS)
+buftype_freef_LDADD = $(LDADD)
+buftype_freef_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+check_striping_SOURCES = check_striping.c
+check_striping_OBJECTS = check_striping.$(OBJEXT)
+check_striping_LDADD = $(LDADD)
+check_striping_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+check_type_SOURCES = check_type.c
+check_type_OBJECTS = check_type.$(OBJEXT)
+check_type_LDADD = $(LDADD)
+check_type_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+collective_error_SOURCES = collective_error.c
+collective_error_OBJECTS = collective_error.$(OBJEXT)
+collective_error_LDADD = $(LDADD)
+collective_error_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+nodist_erange_fill_OBJECTS = erange_fill.$(OBJEXT)
+erange_fill_OBJECTS = $(nodist_erange_fill_OBJECTS)
+erange_fill_LDADD = $(LDADD)
+erange_fill_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+flexible_SOURCES = flexible.c
+flexible_OBJECTS = flexible.$(OBJEXT)
+flexible_LDADD = $(LDADD)
+flexible_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+flexible2_SOURCES = flexible2.c
+flexible2_OBJECTS = flexible2.$(OBJEXT)
+flexible2_LDADD = $(LDADD)
+flexible2_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+flexible_varm_SOURCES = flexible_varm.c
+flexible_varm_OBJECTS = flexible_varm.$(OBJEXT)
+flexible_varm_LDADD = $(LDADD)
+flexible_varm_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+inq_num_vars_SOURCES = inq_num_vars.c
+inq_num_vars_OBJECTS = inq_num_vars.$(OBJEXT)
+inq_num_vars_LDADD = $(LDADD)
+inq_num_vars_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__inq_num_varsf_SOURCES_DIST = inq_num_varsf.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am_inq_num_varsf_OBJECTS =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	inq_num_varsf.$(OBJEXT)
+inq_num_varsf_OBJECTS = $(am_inq_num_varsf_OBJECTS)
+inq_num_varsf_LDADD = $(LDADD)
+inq_num_varsf_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+inq_recsize_SOURCES = inq_recsize.c
+inq_recsize_OBJECTS = inq_recsize.$(OBJEXT)
+inq_recsize_LDADD = $(LDADD)
+inq_recsize_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__inq_recsizef_SOURCES_DIST = inq_recsizef.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am_inq_recsizef_OBJECTS =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	inq_recsizef.$(OBJEXT)
+inq_recsizef_OBJECTS = $(am_inq_recsizef_OBJECTS)
+inq_recsizef_LDADD = $(LDADD)
+inq_recsizef_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+ivarn_SOURCES = ivarn.c
+ivarn_OBJECTS = ivarn.$(OBJEXT)
+ivarn_LDADD = $(LDADD)
+ivarn_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+large_var_cdf5_SOURCES = large_var_cdf5.c
+large_var_cdf5_OBJECTS = large_var_cdf5.$(OBJEXT)
+large_var_cdf5_LDADD = $(LDADD)
+large_var_cdf5_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+last_large_var_SOURCES = last_large_var.c
+last_large_var_OBJECTS = last_large_var.$(OBJEXT)
+last_large_var_LDADD = $(LDADD)
+last_large_var_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+mix_collectives_SOURCES = mix_collectives.c
+mix_collectives_OBJECTS = mix_collectives.$(OBJEXT)
+mix_collectives_LDADD = $(LDADD)
+mix_collectives_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+modes_SOURCES = modes.c
+modes_OBJECTS = modes.$(OBJEXT)
+modes_LDADD = $(LDADD)
+modes_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+ncmpi_vars_null_stride_SOURCES = ncmpi_vars_null_stride.c
+ncmpi_vars_null_stride_OBJECTS = ncmpi_vars_null_stride.$(OBJEXT)
+ncmpi_vars_null_stride_LDADD = $(LDADD)
+ncmpi_vars_null_stride_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+noclobber_SOURCES = noclobber.c
+noclobber_OBJECTS = noclobber.$(OBJEXT)
+noclobber_LDADD = $(LDADD)
+noclobber_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+nonblocking_SOURCES = nonblocking.c
+nonblocking_OBJECTS = nonblocking.$(OBJEXT)
+nonblocking_LDADD = $(LDADD)
+nonblocking_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+null_args_SOURCES = null_args.c
+null_args_OBJECTS = null_args.$(OBJEXT)
+null_args_LDADD = $(LDADD)
+null_args_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+one_record_SOURCES = one_record.c
+one_record_OBJECTS = one_record.$(OBJEXT)
+one_record_LDADD = $(LDADD)
+one_record_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+nodist_put_all_kinds_OBJECTS = put_all_kinds.$(OBJEXT)
+put_all_kinds_OBJECTS = $(nodist_put_all_kinds_OBJECTS)
+put_all_kinds_LDADD = $(LDADD)
+put_all_kinds_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__put_parameter_SOURCES_DIST = put_parameter.f
+ at HAS_FORTRAN_TRUE@am_put_parameter_OBJECTS = put_parameter.$(OBJEXT)
+put_parameter_OBJECTS = $(am_put_parameter_OBJECTS)
+put_parameter_LDADD = $(LDADD)
+put_parameter_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+record_SOURCES = record.c
+record_OBJECTS = record.$(OBJEXT)
+record_LDADD = $(LDADD)
+record_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+redef1_SOURCES = redef1.c
+redef1_OBJECTS = redef1.$(OBJEXT)
+redef1_LDADD = $(LDADD)
+redef1_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+scalar_SOURCES = scalar.c
+scalar_OBJECTS = scalar.$(OBJEXT)
+scalar_LDADD = $(LDADD)
+scalar_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+test_erange_SOURCES = test_erange.c
+test_erange_OBJECTS = test_erange.$(OBJEXT)
+test_erange_LDADD = $(LDADD)
+test_erange_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+test_vard_SOURCES = test_vard.c
+test_vard_OBJECTS = test_vard.$(OBJEXT)
+test_vard_LDADD = $(LDADD)
+test_vard_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__test_vardf_SOURCES_DIST = test_vardf.F
+ at HAS_FORTRAN_TRUE@am_test_vardf_OBJECTS = test_vardf.$(OBJEXT)
+test_vardf_OBJECTS = $(am_test_vardf_OBJECTS)
+test_vardf_LDADD = $(LDADD)
+test_vardf_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__test_vardf90_SOURCES_DIST = test_vardf90.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am_test_vardf90_OBJECTS =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	test_vardf90.$(OBJEXT)
+test_vardf90_OBJECTS = $(am_test_vardf90_OBJECTS)
+test_vardf90_LDADD = $(LDADD)
+test_vardf90_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+test_varm_SOURCES = test_varm.c
+test_varm_OBJECTS = test_varm.$(OBJEXT)
+test_varm_LDADD = $(LDADD)
+test_varm_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_dimsizes_SOURCES = tst_dimsizes.c
+tst_dimsizes_OBJECTS = tst_dimsizes.$(OBJEXT)
+tst_dimsizes_LDADD = $(LDADD)
+tst_dimsizes_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+tst_max_var_dims_SOURCES = tst_max_var_dims.c
+tst_max_var_dims_OBJECTS = tst_max_var_dims.$(OBJEXT)
+tst_max_var_dims_LDADD = $(LDADD)
+tst_max_var_dims_DEPENDENCIES =  \
+	${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+varn_contig_SOURCES = varn_contig.c
+varn_contig_OBJECTS = varn_contig.$(OBJEXT)
+varn_contig_LDADD = $(LDADD)
+varn_contig_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+varn_int_SOURCES = varn_int.c
+varn_int_OBJECTS = varn_int.$(OBJEXT)
+varn_int_LDADD = $(LDADD)
+varn_int_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__varn_intf_SOURCES_DIST = varn_intf.f
+ at HAS_FORTRAN_TRUE@am_varn_intf_OBJECTS = varn_intf.$(OBJEXT)
+varn_intf_OBJECTS = $(am_varn_intf_OBJECTS)
+varn_intf_LDADD = $(LDADD)
+varn_intf_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+am__varn_real_SOURCES_DIST = varn_real.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at am_varn_real_OBJECTS =  \
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE@	varn_real.$(OBJEXT)
+varn_real_OBJECTS = $(am_varn_real_OBJECTS)
+varn_real_LDADD = $(LDADD)
+varn_real_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+vectors_SOURCES = vectors.c
+vectors_OBJECTS = vectors.$(OBJEXT)
+vectors_LDADD = $(LDADD)
+vectors_DEPENDENCIES = ${top_builddir}/src/libs/libpnetcdf.la \
+	../common/libtestutils.la
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/./scripts/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+PPF77COMPILE = $(F77) $(FC_DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)
+LTPPF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(F77) $(FC_DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_FFLAGS) $(FFLAGS)
+AM_V_PPF77 = $(am__v_PPF77_ at AM_V@)
+am__v_PPF77_ = $(am__v_PPF77_ at AM_DEFAULT_V@)
+am__v_PPF77_0 = @echo "  PPF77   " $@;
+am__v_PPF77_1 = 
+F77LD = $(F77)
+F77LINK = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(F77LD) $(AM_FFLAGS) $(FFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_F77LD = $(am__v_F77LD_ at AM_V@)
+am__v_F77LD_ = $(am__v_F77LD_ at AM_DEFAULT_V@)
+am__v_F77LD_0 = @echo "  F77LD   " $@;
+am__v_F77LD_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+F77COMPILE = $(F77) $(AM_FFLAGS) $(FFLAGS)
+LTF77COMPILE = $(LIBTOOL) $(AM_V_lt) --tag=F77 $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(F77) $(AM_FFLAGS) $(FFLAGS)
+AM_V_F77 = $(am__v_F77_ at AM_V@)
+am__v_F77_ = $(am__v_F77_ at AM_DEFAULT_V@)
+am__v_F77_0 = @echo "  F77     " $@;
+am__v_F77_1 = 
+FCCOMPILE = $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+LTFCCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(FC) $(AM_FCFLAGS) $(FCFLAGS)
+AM_V_FC = $(am__v_FC_ at AM_V@)
+am__v_FC_ = $(am__v_FC_ at AM_DEFAULT_V@)
+am__v_FC_0 = @echo "  FC      " $@;
+am__v_FC_1 = 
+FCLD = $(FC)
+FCLINK = $(LIBTOOL) $(AM_V_lt) --tag=FC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_FCLD = $(am__v_FCLD_ at AM_V@)
+am__v_FCLD_ = $(am__v_FCLD_ at AM_DEFAULT_V@)
+am__v_FCLD_0 = @echo "  FCLD    " $@;
+am__v_FCLD_1 = 
+SOURCES = add_var.c alignment_test.c $(attrf_SOURCES) \
+	$(bigrecords_SOURCES) buftype_free.c $(buftype_freef_SOURCES) \
+	check_striping.c check_type.c collective_error.c \
+	$(nodist_erange_fill_SOURCES) flexible.c flexible2.c \
+	flexible_varm.c inq_num_vars.c $(inq_num_varsf_SOURCES) \
+	inq_recsize.c $(inq_recsizef_SOURCES) ivarn.c large_var_cdf5.c \
+	last_large_var.c mix_collectives.c modes.c \
+	ncmpi_vars_null_stride.c noclobber.c nonblocking.c null_args.c \
+	one_record.c $(nodist_put_all_kinds_SOURCES) \
+	$(put_parameter_SOURCES) record.c redef1.c scalar.c \
+	test_erange.c test_vard.c $(test_vardf_SOURCES) \
+	$(test_vardf90_SOURCES) test_varm.c tst_dimsizes.c \
+	tst_max_var_dims.c varn_contig.c varn_int.c \
+	$(varn_intf_SOURCES) $(varn_real_SOURCES) vectors.c
+DIST_SOURCES = add_var.c alignment_test.c $(am__attrf_SOURCES_DIST) \
+	$(am__bigrecords_SOURCES_DIST) buftype_free.c \
+	$(am__buftype_freef_SOURCES_DIST) check_striping.c \
+	check_type.c collective_error.c flexible.c flexible2.c \
+	flexible_varm.c inq_num_vars.c \
+	$(am__inq_num_varsf_SOURCES_DIST) inq_recsize.c \
+	$(am__inq_recsizef_SOURCES_DIST) ivarn.c large_var_cdf5.c \
+	last_large_var.c mix_collectives.c modes.c \
+	ncmpi_vars_null_stride.c noclobber.c nonblocking.c null_args.c \
+	one_record.c $(am__put_parameter_SOURCES_DIST) record.c \
+	redef1.c scalar.c test_erange.c test_vard.c \
+	$(am__test_vardf_SOURCES_DIST) \
+	$(am__test_vardf90_SOURCES_DIST) test_varm.c tst_dimsizes.c \
+	tst_max_var_dims.c varn_contig.c varn_int.c \
+	$(am__varn_intf_SOURCES_DIST) $(am__varn_real_SOURCES_DIST) \
+	vectors.c
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__extra_recursive_targets = tests-recursive
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red=''; \
+    grn=''; \
+    lgn=''; \
+    blu=''; \
+    mgn=''; \
+    brg=''; \
+    std=''; \
+  fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__recheck_rx = ^[ 	]*:recheck:[ 	]*
+am__global_test_result_rx = ^[ 	]*:global-test-result:[ 	]*
+am__copy_in_global_log_rx = ^[ 	]*:copy-in-global-log:[ 	]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+	    recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[ 	]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);					\
+$(am__vpath_adj_setup) $(am__vpath_adj)			\
+$(am__tty_colors);					\
+srcdir=$(srcdir); export srcdir;			\
+case "$@" in						\
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;	\
+    *) am__odir=.;; 					\
+esac;							\
+test "x$$am__odir" = x"." || test -d "$$am__odir" 	\
+  || $(MKDIR_P) "$$am__odir" || exit $$?;		\
+if test -f "./$$f"; then dir=./;			\
+elif test -f "$$f"; then dir=;				\
+else dir="$(srcdir)/"; fi;				\
+tst=$$dir$$f; log='$@'; 				\
+if test -n '$(DISABLE_HARD_ERRORS)'; then		\
+  am__enable_hard_errors=no; 				\
+else							\
+  am__enable_hard_errors=yes; 				\
+fi; 							\
+case " $(XFAIL_TESTS) " in				\
+  *[\ \	]$$f[\ \	]* | *[\ \	]$$dir$$f[\ \	]*) \
+    am__expect_failure=yes;;				\
+  *)							\
+    am__expect_failure=no;;				\
+esac; 							\
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT at .log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/./scripts/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+	$(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+	$(top_srcdir)/./scripts/depcomp \
+	$(top_srcdir)/./scripts/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ABIVERSION = @ABIVERSION@
+ABIVERSIONFLAGS = @ABIVERSIONFLAGS@
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CONFIGURE_ARGS_CLEAN = @CONFIGURE_ARGS_CLEAN@
+CONFIG_DATE = @CONFIG_DATE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+DVIPDF = @DVIPDF@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENABLE_ERANGE_FILL = @ENABLE_ERANGE_FILL@
+ENABLE_SUBFILING = @ENABLE_SUBFILING@
+EXEEXT = @EXEEXT@
+F77 = @F77@
+FC = @FC@
+FCFLAGS = @FCFLAGS@
+FCFLAGS_F = @FCFLAGS_F@
+FCFLAGS_F90 = @FCFLAGS_F90@
+FCFLAGS_f = @FCFLAGS_f@
+FCFLAGS_f90 = @FCFLAGS_f90@
+FCLIBS = @FCLIBS@
+FC_DEFINE = @FC_DEFINE@
+FC_DEFS = @FC_DEFS@
+FC_MODEXT = @FC_MODEXT@
+FC_MODINC = @FC_MODINC@
+FFIXEDFORMFLAG = @FFIXEDFORMFLAG@
+FFLAGS = @FFLAGS@
+FFREEFORMFLAG = @FFREEFORMFLAG@
+FGREP = @FGREP@
+GCOV = @GCOV@
+GREP = @GREP@
+HAVE_F77_GNU_INT = @HAVE_F77_GNU_INT@
+HAVE_F77_INT1 = @HAVE_F77_INT1@
+HAVE_F77_INT2 = @HAVE_F77_INT2@
+HAVE_F77_INT8 = @HAVE_F77_INT8@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTENTV = @INTENTV@
+LATEX = @LATEX@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+M4 = @M4@
+M4FFLAGS = @M4FFLAGS@
+M4FLAGS = @M4FLAGS@ $(am__append_4) -I${top_srcdir}/m4
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MPICC = @MPICC@
+MPICXX = @MPICXX@
+MPIF77 = @MPIF77@
+MPIF90 = @MPIF90@
+NF_INT1_T = @NF_INT1_T@
+NF_INT2_T = @NF_INT2_T@
+NF_INT8_T = @NF_INT8_T@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NMFLAGS = @NMFLAGS@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PNETCDF_DEBUG = @PNETCDF_DEBUG@
+PNETCDF_VERSION = @PNETCDF_VERSION@
+PNETCDF_VERSION_MAJOR = @PNETCDF_VERSION_MAJOR@
+PNETCDF_VERSION_MINOR = @PNETCDF_VERSION_MINOR@
+PNETCDF_VERSION_PRE = @PNETCDF_VERSION_PRE@
+PNETCDF_VERSION_SUB = @PNETCDF_VERSION_SUB@
+PNF_FILL_INT64 = @PNF_FILL_INT64@
+PNF_FILL_UINT = @PNF_FILL_UINT@
+PNF_FILL_UINT64 = @PNF_FILL_UINT64@
+PNF_INT8_MODIFIER = @PNF_INT8_MODIFIER@
+PNF_X_INT8_MAX = @PNF_X_INT8_MAX@
+PNF_X_INT8_MIN = @PNF_X_INT8_MIN@
+PNF_X_UINT8_MAX = @PNF_X_UINT8_MAX@
+PNF_X_UINT_MAX = @PNF_X_UINT_MAX@
+RANLIB = @RANLIB@
+RELAX_COORD_BOUND = @RELAX_COORD_BOUND@
+RM = @RM@
+SED = @SED@
+SED_I = @SED_I@
+SEQ_CC = @SEQ_CC@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIZEOF_MPI_OFFSET = @SIZEOF_MPI_OFFSET@
+STRIP = @STRIP@
+TESTMPIRUN = @TESTMPIRUN@
+TESTOUTDIR = @TESTOUTDIR@
+TESTSEQRUN = @TESTSEQRUN@
+USE_MPIF_HEADER = @USE_MPIF_HEADER@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+ac_ct_F77 = @ac_ct_F77@
+ac_ct_FC = @ac_ct_FC@
+ac_cv_c_bigendian = @ac_cv_c_bigendian@
+ac_empty = @ac_empty@
+ac_mpi_prog_MPICC = @ac_mpi_prog_MPICC@
+ac_mpi_prog_MPICXX = @ac_mpi_prog_MPICXX@
+ac_mpi_prog_MPIF77 = @ac_mpi_prog_MPIF77@
+ac_mpi_prog_MPIF90 = @ac_mpi_prog_MPIF90@
+ac_mpi_prog_TESTMPIRUN = @ac_mpi_prog_TESTMPIRUN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+enable_shared = @enable_shared@
+enable_static = @enable_static@
+exec_prefix = @exec_prefix@
+has_fortran = @has_fortran@
+has_mpicxx = @has_mpicxx@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+in_place_swap = @in_place_swap@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+rm_cmd = @rm_cmd@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
-VPATH  = @srcdir@
-
-include ../../macros.make
-
-INCLUDES  = -I../../src/lib -I$(srcdir)/../common
-FPPFLAGS += -I../../src/libf @FC_MODINC at ../../src/libf90
-ifeq (@SIZEOF_MPI_AINT_IS_4@, yes)
-FPPFLAGS += $(FC_DEFINE)SIZEOF_MPI_AINT_IS_4
-endif
-LDFLAGS  := $(LDFLAGS) -L../common
-LIBS     := $(LIBRARY) -ltestutils $(LIBS) @LCOV_LIB@
-
-NCMPIGEN  = ../../src/utils/ncmpigen/ncmpigen
-NCMPIDIFF = ../../src/utils/ncmpidiff/ncmpidiff
-
-M4_SRCS  = erange_fill.m4
-
-C_SRCS   = ncmpi_vars_null_stride.c \
-           vectors.c \
-           collective_error.c \
-           test_varm.c \
-           alignment_test.c \
-           flexible.c \
-           flexible2.c \
-           flexible_varm.c \
-           nonblocking.c \
-           noclobber.c \
-           record.c \
-           inq_num_vars.c \
-           varn_int.c \
-           modes.c \
-           one_record.c \
-           inq_recsize.c \
-           test_vard.c \
-           varn_contig.c \
-           ivarn.c \
-           check_striping.c \
-           add_var.c \
-           buftype_free.c \
-           last_large_var.c \
-           check_type.c \
-           test_erange.c \
-           scalar.c \
-           redef1.c
-
-F77_SRCS = varn_intf.f \
-           attrf.f \
-           buftype_freef.f \
-           put_parameter.f
-
-F77F_SRCS = test_vardf.F
-
-F90_SRCS = inq_num_varsf.f90 \
-           inq_recsizef.f90 \
-           test_vardf90.f90 \
-           varn_real.f90
-
-PROGS    = $(C_SRCS:.c=)
-OBJS     = $(C_SRCS:.c=.o) $(M4_SRCS:.m4=.o)
-
-ifeq (@has_fortran@, yes)
-PROGS   += $(F77_SRCS:.f=)   $(F77F_SRCS:.F=)
-OBJS    += $(F77_SRCS:.f=.o) $(F77F_SRCS:.F=.o)
-ifeq (@mpi_mod@, yes)
-PROGS   += $(F90_SRCS:.f90=)
-OBJS    += $(F90_SRCS:.f90=.o)
-endif
-ifeq (@large_file_test@, yes)
-PROGS   += bigrecords
-OBJS    += bigrecords.o
-endif
-endif
-
-ifeq (@enable_erange_fill@, yes)
-PROGS   += $(M4_SRCS:.m4=)
-endif
-
-GARBAGE      = $(PROGS) *.nc $(M4_SRCS:.m4=.c)
-PACKING_LIST = $(C_SRCS) $(M4_SRCS) $(F77_SRCS) $(F77F_SRCS) $(F90_SRCS) \
-               bigrecords.f \
-               Makefile.in depend \
-               geopotential.ncdump \
-               redef-good.ncdump \
-               interop1.sh \
-               redef1.sh
-
-all: $(PROGS)
-
-$(C_SRCS:.c=.o): $(srcdir)/../common/testutils.h
-
-$(PROGS): ../common/libtestutils.a
-
-../common/libtestutils.a:
-	set -e; cd ../common && $(MAKE) $(MFLAGS) all
-
-ncmpi_vars_null_stride: ncmpi_vars_null_stride.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUFFIXES = .o .c .f .F .f90
+AM_DEFAULT_SOURCE_EXT = .c
+AM_CPPFLAGS = -I$(top_srcdir)/src/include -I$(srcdir)/../common \
+	-I$(top_builddir)/src/include
+AM_FFLAGS = -I$(top_builddir)/src/binding/f77 $(am__append_1) \
+	$(am__append_2)
+AM_FCFLAGS = $(FC_MODINC)$(top_builddir)/src/binding/f90 \
+	$(FC_MODINC)$(srcdir)/../common \
+	-I$(top_builddir)/src/binding/f77 $(am__append_3)
+LDADD = ${top_builddir}/src/libs/libpnetcdf.la ../common/libtestutils.la -lm
+ at DECL_MPI_OFFSET_TRUE@AM_CFLAGS = -DHAVE_DECL_MPI_OFFSET
+NCMPIGEN = $(top_builddir)/src/utils/ncmpigen/ncmpigen
+NCMPIDIFF = $(top_builddir)/src/utils/ncmpidiff/ncmpidiff
+TESTPROGRAMS = ncmpi_vars_null_stride vectors collective_error \
+	test_varm alignment_test flexible flexible2 flexible_varm \
+	nonblocking noclobber record inq_num_vars varn_int modes \
+	one_record inq_recsize test_vard varn_contig ivarn \
+	check_striping add_var buftype_free last_large_var check_type \
+	test_erange scalar null_args tst_dimsizes mix_collectives \
+	large_var_cdf5 tst_max_var_dims put_all_kinds $(am__append_5) \
+	$(am__append_6) $(am__append_7) $(am__append_8)
+M4_SRCS = put_all_kinds.m4 erange_fill.m4
+nodist_put_all_kinds_SOURCES = put_all_kinds.c
+nodist_erange_fill_SOURCES = erange_fill.c
+ at HAS_FORTRAN_TRUE@varn_intf_SOURCES = varn_intf.f
+ at HAS_FORTRAN_TRUE@attrf_SOURCES = attrf.f
+ at HAS_FORTRAN_TRUE@buftype_freef_SOURCES = buftype_freef.f
+ at HAS_FORTRAN_TRUE@put_parameter_SOURCES = put_parameter.f
+ at HAS_FORTRAN_TRUE@test_vardf_SOURCES = test_vardf.F
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at inq_num_varsf_SOURCES = inq_num_varsf.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at inq_recsizef_SOURCES = inq_recsizef.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at test_vardf90_SOURCES = test_vardf90.f90
+ at HAS_FORTRAN_TRUE@@HAVE_MPI_MOD_TRUE at varn_real_SOURCES = varn_real.f90
+ at HAS_FORTRAN_TRUE@bigrecords_SOURCES = bigrecords.f
+
+# autimake 1.11.3 has not yet implemented AM_TESTS_ENVIRONMENT
+# For newer versions, we can use AM_TESTS_ENVIRONMENT instead
+# AM_TESTS_ENVIRONMENT  = TESTPROGRAMS="$(TESTPROGRAMS)" ; export TESTPROGRAMS;
+# AM_TESTS_ENVIRONMENT += TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN;
+# AM_TESTS_ENVIRONMENT += TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS_ENVIRONMENT = TESTPROGRAMS="$(TESTPROGRAMS)" ; export \
+	TESTPROGRAMS; TESTSEQRUN="$(TESTSEQRUN)" ; export TESTSEQRUN; \
+	TESTOUTDIR="$(TESTOUTDIR)" ; export TESTOUTDIR;
+TESTS = seq_runs.sh
+CLEANFILES = $(M4_SRCS:.m4=.c) core core.* *.gcda *.gcno *.gcov gmon.out \
+             testfile.nc testfile.nc.cdf1 testfile.nc.cdf2 testfile.nc.cdf5 \
+             redef1.nc redef2.nc
+
+EXTRA_DIST = $(M4_SRCS) seq_runs.sh redef-good.ncdump
 
-vectors: vectors.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-bigrecords: bigrecords.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
-
-redef1: redef1.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-collective_error: collective_error.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-test_varm: test_varm.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
-
-alignment_test: alignment_test.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+# Some of these tests are designed to run on one process,
+# Run them on 4 processes to see if they can handle well
+# Some of these tests are designed to run on 4 processes,
+# Run them on 2, 4, and 6 processes to see if they can handle well
+TESTMPIRUN2 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/2/g'`
+TESTMPIRUN4 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/4/g'`
+TESTMPIRUN6 = `echo $(TESTMPIRUN) | $(SED) -e 's/NP/6/g'`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .o .c .f .F .f90 .lo .log .m4 .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/testcases/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu test/testcases/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+	@list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+add_var$(EXEEXT): $(add_var_OBJECTS) $(add_var_DEPENDENCIES) $(EXTRA_add_var_DEPENDENCIES) 
+	@rm -f add_var$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(add_var_OBJECTS) $(add_var_LDADD) $(LIBS)
+
+alignment_test$(EXEEXT): $(alignment_test_OBJECTS) $(alignment_test_DEPENDENCIES) $(EXTRA_alignment_test_DEPENDENCIES) 
+	@rm -f alignment_test$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(alignment_test_OBJECTS) $(alignment_test_LDADD) $(LIBS)
+
+attrf$(EXEEXT): $(attrf_OBJECTS) $(attrf_DEPENDENCIES) $(EXTRA_attrf_DEPENDENCIES) 
+	@rm -f attrf$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(attrf_OBJECTS) $(attrf_LDADD) $(LIBS)
+
+bigrecords$(EXEEXT): $(bigrecords_OBJECTS) $(bigrecords_DEPENDENCIES) $(EXTRA_bigrecords_DEPENDENCIES) 
+	@rm -f bigrecords$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(bigrecords_OBJECTS) $(bigrecords_LDADD) $(LIBS)
+
+buftype_free$(EXEEXT): $(buftype_free_OBJECTS) $(buftype_free_DEPENDENCIES) $(EXTRA_buftype_free_DEPENDENCIES) 
+	@rm -f buftype_free$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(buftype_free_OBJECTS) $(buftype_free_LDADD) $(LIBS)
+
+buftype_freef$(EXEEXT): $(buftype_freef_OBJECTS) $(buftype_freef_DEPENDENCIES) $(EXTRA_buftype_freef_DEPENDENCIES) 
+	@rm -f buftype_freef$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(buftype_freef_OBJECTS) $(buftype_freef_LDADD) $(LIBS)
+
+check_striping$(EXEEXT): $(check_striping_OBJECTS) $(check_striping_DEPENDENCIES) $(EXTRA_check_striping_DEPENDENCIES) 
+	@rm -f check_striping$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(check_striping_OBJECTS) $(check_striping_LDADD) $(LIBS)
+
+check_type$(EXEEXT): $(check_type_OBJECTS) $(check_type_DEPENDENCIES) $(EXTRA_check_type_DEPENDENCIES) 
+	@rm -f check_type$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(check_type_OBJECTS) $(check_type_LDADD) $(LIBS)
+
+collective_error$(EXEEXT): $(collective_error_OBJECTS) $(collective_error_DEPENDENCIES) $(EXTRA_collective_error_DEPENDENCIES) 
+	@rm -f collective_error$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(collective_error_OBJECTS) $(collective_error_LDADD) $(LIBS)
+
+erange_fill$(EXEEXT): $(erange_fill_OBJECTS) $(erange_fill_DEPENDENCIES) $(EXTRA_erange_fill_DEPENDENCIES) 
+	@rm -f erange_fill$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(erange_fill_OBJECTS) $(erange_fill_LDADD) $(LIBS)
+
+flexible$(EXEEXT): $(flexible_OBJECTS) $(flexible_DEPENDENCIES) $(EXTRA_flexible_DEPENDENCIES) 
+	@rm -f flexible$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(flexible_OBJECTS) $(flexible_LDADD) $(LIBS)
+
+flexible2$(EXEEXT): $(flexible2_OBJECTS) $(flexible2_DEPENDENCIES) $(EXTRA_flexible2_DEPENDENCIES) 
+	@rm -f flexible2$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(flexible2_OBJECTS) $(flexible2_LDADD) $(LIBS)
+
+flexible_varm$(EXEEXT): $(flexible_varm_OBJECTS) $(flexible_varm_DEPENDENCIES) $(EXTRA_flexible_varm_DEPENDENCIES) 
+	@rm -f flexible_varm$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(flexible_varm_OBJECTS) $(flexible_varm_LDADD) $(LIBS)
+
+inq_num_vars$(EXEEXT): $(inq_num_vars_OBJECTS) $(inq_num_vars_DEPENDENCIES) $(EXTRA_inq_num_vars_DEPENDENCIES) 
+	@rm -f inq_num_vars$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(inq_num_vars_OBJECTS) $(inq_num_vars_LDADD) $(LIBS)
+
+inq_num_varsf$(EXEEXT): $(inq_num_varsf_OBJECTS) $(inq_num_varsf_DEPENDENCIES) $(EXTRA_inq_num_varsf_DEPENDENCIES) 
+	@rm -f inq_num_varsf$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(inq_num_varsf_OBJECTS) $(inq_num_varsf_LDADD) $(LIBS)
+
+inq_recsize$(EXEEXT): $(inq_recsize_OBJECTS) $(inq_recsize_DEPENDENCIES) $(EXTRA_inq_recsize_DEPENDENCIES) 
+	@rm -f inq_recsize$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(inq_recsize_OBJECTS) $(inq_recsize_LDADD) $(LIBS)
+
+inq_recsizef$(EXEEXT): $(inq_recsizef_OBJECTS) $(inq_recsizef_DEPENDENCIES) $(EXTRA_inq_recsizef_DEPENDENCIES) 
+	@rm -f inq_recsizef$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(inq_recsizef_OBJECTS) $(inq_recsizef_LDADD) $(LIBS)
+
+ivarn$(EXEEXT): $(ivarn_OBJECTS) $(ivarn_DEPENDENCIES) $(EXTRA_ivarn_DEPENDENCIES) 
+	@rm -f ivarn$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ivarn_OBJECTS) $(ivarn_LDADD) $(LIBS)
+
+large_var_cdf5$(EXEEXT): $(large_var_cdf5_OBJECTS) $(large_var_cdf5_DEPENDENCIES) $(EXTRA_large_var_cdf5_DEPENDENCIES) 
+	@rm -f large_var_cdf5$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(large_var_cdf5_OBJECTS) $(large_var_cdf5_LDADD) $(LIBS)
+
+last_large_var$(EXEEXT): $(last_large_var_OBJECTS) $(last_large_var_DEPENDENCIES) $(EXTRA_last_large_var_DEPENDENCIES) 
+	@rm -f last_large_var$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(last_large_var_OBJECTS) $(last_large_var_LDADD) $(LIBS)
+
+mix_collectives$(EXEEXT): $(mix_collectives_OBJECTS) $(mix_collectives_DEPENDENCIES) $(EXTRA_mix_collectives_DEPENDENCIES) 
+	@rm -f mix_collectives$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(mix_collectives_OBJECTS) $(mix_collectives_LDADD) $(LIBS)
+
+modes$(EXEEXT): $(modes_OBJECTS) $(modes_DEPENDENCIES) $(EXTRA_modes_DEPENDENCIES) 
+	@rm -f modes$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(modes_OBJECTS) $(modes_LDADD) $(LIBS)
+
+ncmpi_vars_null_stride$(EXEEXT): $(ncmpi_vars_null_stride_OBJECTS) $(ncmpi_vars_null_stride_DEPENDENCIES) $(EXTRA_ncmpi_vars_null_stride_DEPENDENCIES) 
+	@rm -f ncmpi_vars_null_stride$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(ncmpi_vars_null_stride_OBJECTS) $(ncmpi_vars_null_stride_LDADD) $(LIBS)
+
+noclobber$(EXEEXT): $(noclobber_OBJECTS) $(noclobber_DEPENDENCIES) $(EXTRA_noclobber_DEPENDENCIES) 
+	@rm -f noclobber$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(noclobber_OBJECTS) $(noclobber_LDADD) $(LIBS)
+
+nonblocking$(EXEEXT): $(nonblocking_OBJECTS) $(nonblocking_DEPENDENCIES) $(EXTRA_nonblocking_DEPENDENCIES) 
+	@rm -f nonblocking$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(nonblocking_OBJECTS) $(nonblocking_LDADD) $(LIBS)
+
+null_args$(EXEEXT): $(null_args_OBJECTS) $(null_args_DEPENDENCIES) $(EXTRA_null_args_DEPENDENCIES) 
+	@rm -f null_args$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(null_args_OBJECTS) $(null_args_LDADD) $(LIBS)
+
+one_record$(EXEEXT): $(one_record_OBJECTS) $(one_record_DEPENDENCIES) $(EXTRA_one_record_DEPENDENCIES) 
+	@rm -f one_record$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(one_record_OBJECTS) $(one_record_LDADD) $(LIBS)
+
+put_all_kinds$(EXEEXT): $(put_all_kinds_OBJECTS) $(put_all_kinds_DEPENDENCIES) $(EXTRA_put_all_kinds_DEPENDENCIES) 
+	@rm -f put_all_kinds$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(put_all_kinds_OBJECTS) $(put_all_kinds_LDADD) $(LIBS)
+
+put_parameter$(EXEEXT): $(put_parameter_OBJECTS) $(put_parameter_DEPENDENCIES) $(EXTRA_put_parameter_DEPENDENCIES) 
+	@rm -f put_parameter$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(put_parameter_OBJECTS) $(put_parameter_LDADD) $(LIBS)
+
+record$(EXEEXT): $(record_OBJECTS) $(record_DEPENDENCIES) $(EXTRA_record_DEPENDENCIES) 
+	@rm -f record$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(record_OBJECTS) $(record_LDADD) $(LIBS)
+
+redef1$(EXEEXT): $(redef1_OBJECTS) $(redef1_DEPENDENCIES) $(EXTRA_redef1_DEPENDENCIES) 
+	@rm -f redef1$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(redef1_OBJECTS) $(redef1_LDADD) $(LIBS)
+
+scalar$(EXEEXT): $(scalar_OBJECTS) $(scalar_DEPENDENCIES) $(EXTRA_scalar_DEPENDENCIES) 
+	@rm -f scalar$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(scalar_OBJECTS) $(scalar_LDADD) $(LIBS)
+
+test_erange$(EXEEXT): $(test_erange_OBJECTS) $(test_erange_DEPENDENCIES) $(EXTRA_test_erange_DEPENDENCIES) 
+	@rm -f test_erange$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(test_erange_OBJECTS) $(test_erange_LDADD) $(LIBS)
+
+test_vard$(EXEEXT): $(test_vard_OBJECTS) $(test_vard_DEPENDENCIES) $(EXTRA_test_vard_DEPENDENCIES) 
+	@rm -f test_vard$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(test_vard_OBJECTS) $(test_vard_LDADD) $(LIBS)
+
+test_vardf$(EXEEXT): $(test_vardf_OBJECTS) $(test_vardf_DEPENDENCIES) $(EXTRA_test_vardf_DEPENDENCIES) 
+	@rm -f test_vardf$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(test_vardf_OBJECTS) $(test_vardf_LDADD) $(LIBS)
+
+test_vardf90$(EXEEXT): $(test_vardf90_OBJECTS) $(test_vardf90_DEPENDENCIES) $(EXTRA_test_vardf90_DEPENDENCIES) 
+	@rm -f test_vardf90$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(test_vardf90_OBJECTS) $(test_vardf90_LDADD) $(LIBS)
+
+test_varm$(EXEEXT): $(test_varm_OBJECTS) $(test_varm_DEPENDENCIES) $(EXTRA_test_varm_DEPENDENCIES) 
+	@rm -f test_varm$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(test_varm_OBJECTS) $(test_varm_LDADD) $(LIBS)
+
+tst_dimsizes$(EXEEXT): $(tst_dimsizes_OBJECTS) $(tst_dimsizes_DEPENDENCIES) $(EXTRA_tst_dimsizes_DEPENDENCIES) 
+	@rm -f tst_dimsizes$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_dimsizes_OBJECTS) $(tst_dimsizes_LDADD) $(LIBS)
+
+tst_max_var_dims$(EXEEXT): $(tst_max_var_dims_OBJECTS) $(tst_max_var_dims_DEPENDENCIES) $(EXTRA_tst_max_var_dims_DEPENDENCIES) 
+	@rm -f tst_max_var_dims$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(tst_max_var_dims_OBJECTS) $(tst_max_var_dims_LDADD) $(LIBS)
+
+varn_contig$(EXEEXT): $(varn_contig_OBJECTS) $(varn_contig_DEPENDENCIES) $(EXTRA_varn_contig_DEPENDENCIES) 
+	@rm -f varn_contig$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(varn_contig_OBJECTS) $(varn_contig_LDADD) $(LIBS)
+
+varn_int$(EXEEXT): $(varn_int_OBJECTS) $(varn_int_DEPENDENCIES) $(EXTRA_varn_int_DEPENDENCIES) 
+	@rm -f varn_int$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(varn_int_OBJECTS) $(varn_int_LDADD) $(LIBS)
+
+varn_intf$(EXEEXT): $(varn_intf_OBJECTS) $(varn_intf_DEPENDENCIES) $(EXTRA_varn_intf_DEPENDENCIES) 
+	@rm -f varn_intf$(EXEEXT)
+	$(AM_V_F77LD)$(F77LINK) $(varn_intf_OBJECTS) $(varn_intf_LDADD) $(LIBS)
+
+varn_real$(EXEEXT): $(varn_real_OBJECTS) $(varn_real_DEPENDENCIES) $(EXTRA_varn_real_DEPENDENCIES) 
+	@rm -f varn_real$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(varn_real_OBJECTS) $(varn_real_LDADD) $(LIBS)
+
+vectors$(EXEEXT): $(vectors_OBJECTS) $(vectors_DEPENDENCIES) $(EXTRA_vectors_DEPENDENCIES) 
+	@rm -f vectors$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(vectors_OBJECTS) $(vectors_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/add_var.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/alignment_test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/buftype_free.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_striping.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/check_type.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/collective_error.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/erange_fill.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flexible.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flexible2.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/flexible_varm.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/inq_num_vars.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/inq_recsize.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ivarn.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/large_var_cdf5.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/last_large_var.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/mix_collectives.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/modes.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ncmpi_vars_null_stride.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/noclobber.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/nonblocking.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/null_args.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/one_record.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/put_all_kinds.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/record.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/redef1.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/scalar.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_erange.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_vard.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test_varm.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_dimsizes.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/tst_max_var_dims.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/varn_contig.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/varn_int.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/vectors.Po at am__quote@
+
+.F.o:
+	$(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ $<
+
+.F.obj:
+	$(AM_V_PPF77)$(PPF77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.F.lo:
+	$(AM_V_PPF77)$(LTPPF77COMPILE) -c -o $@ $<
+.F.f:
+	$(F77COMPILE) -F $<
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+.f.o:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ $<
+
+.f.obj:
+	$(AM_V_F77)$(F77COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.f.lo:
+	$(AM_V_F77)$(LTF77COMPILE) -c -o $@ $<
+
+.f90.o:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+.f90.obj:
+	$(AM_V_FC)$(FCCOMPILE) -c -o $@ $(FCFLAGS_f90) `$(CYGPATH_W) '$<'`
+
+.f90.lo:
+	$(AM_V_FC)$(LTFCCOMPILE) -c -o $@ $(FCFLAGS_f90) $<
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tests-local: 
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+	rm -f $< $@
+	$(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+	@:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+	@$(am__set_TESTS_bases); \
+	am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+	redo_bases=`for i in $$bases; do \
+	              am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+	            done`; \
+	if test -n "$$redo_bases"; then \
+	  redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+	  redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+	  if $(am__make_dryrun); then :; else \
+	    rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+	  fi; \
+	fi; \
+	if test -n "$$am__remaking_logs"; then \
+	  echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+	       "recursion detected" >&2; \
+	elif test -n "$$redo_logs"; then \
+	  am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+	fi; \
+	if $(am__make_dryrun); then :; else \
+	  st=0;  \
+	  errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+	  for i in $$redo_bases; do \
+	    test -f $$i.trs && test -r $$i.trs \
+	      || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+	    test -f $$i.log && test -r $$i.log \
+	      || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+	  done; \
+	  test $$st -eq 0 || exit 1; \
+	fi
+	@$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+	ws='[ 	]'; \
+	results=`for b in $$bases; do echo $$b.trs; done`; \
+	test -n "$$results" || results=/dev/null; \
+	all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+	pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+	fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+	skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+	xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+	xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+	error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+	if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+	  success=true; \
+	else \
+	  success=false; \
+	fi; \
+	br='==================='; br=$$br$$br$$br$$br; \
+	result_count () \
+	{ \
+	    if test x"$$1" = x"--maybe-color"; then \
+	      maybe_colorize=yes; \
+	    elif test x"$$1" = x"--no-color"; then \
+	      maybe_colorize=no; \
+	    else \
+	      echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+	    fi; \
+	    shift; \
+	    desc=$$1 count=$$2; \
+	    if test $$maybe_colorize = yes && test $$count -gt 0; then \
+	      color_start=$$3 color_end=$$std; \
+	    else \
+	      color_start= color_end=; \
+	    fi; \
+	    echo "$${color_start}# $$desc $$count$${color_end}"; \
+	}; \
+	create_testsuite_report () \
+	{ \
+	  result_count $$1 "TOTAL:" $$all   "$$brg"; \
+	  result_count $$1 "PASS: " $$pass  "$$grn"; \
+	  result_count $$1 "SKIP: " $$skip  "$$blu"; \
+	  result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+	  result_count $$1 "FAIL: " $$fail  "$$red"; \
+	  result_count $$1 "XPASS:" $$xpass "$$red"; \
+	  result_count $$1 "ERROR:" $$error "$$mgn"; \
+	}; \
+	{								\
+	  echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |	\
+	    $(am__rst_title);						\
+	  create_testsuite_report --no-color;				\
+	  echo;								\
+	  echo ".. contents:: :depth: 2";				\
+	  echo;								\
+	  for b in $$bases; do echo $$b; done				\
+	    | $(am__create_global_log);					\
+	} >$(TEST_SUITE_LOG).tmp || exit 1;				\
+	mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);			\
+	if $$success; then						\
+	  col="$$grn";							\
+	 else								\
+	  col="$$red";							\
+	  test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);		\
+	fi;								\
+	echo "$${col}$$br$${std}"; 					\
+	echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";	\
+	echo "$${col}$$br$${std}"; 					\
+	create_testsuite_report --maybe-color;				\
+	echo "$$col$$br$$std";						\
+	if $$success; then :; else					\
+	  echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";		\
+	  if test -n "$(PACKAGE_BUGREPORT)"; then			\
+	    echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}";	\
+	  fi;								\
+	  echo "$$col$$br$$std";					\
+	fi;								\
+	$$success || exit 1
+
+check-TESTS:
+	@list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+	@list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+	log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+	exit $$?;
+recheck: all $(check_PROGRAMS)
+	@test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+	@set +e; $(am__set_TESTS_bases); \
+	bases=`for i in $$bases; do echo $$i; done \
+	         | $(am__list_recheck_tests)` || exit 1; \
+	log_list=`for i in $$bases; do echo $$i.log; done`; \
+	log_list=`echo $$log_list`; \
+	$(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+	        am__force_recheck=am--force-recheck \
+	        TEST_LOGS="$$log_list"; \
+	exit $$?
+seq_runs.sh.log: seq_runs.sh
+	@p='seq_runs.sh'; \
+	b='seq_runs.sh'; \
+	$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+	@p='$<'; \
+	$(am__set_b); \
+	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+	--log-file $$b.log --trs-file $$b.trs \
+	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+	"$$tst" $(AM_TESTS_FD_REDIRECT)
+ at am__EXEEXT_TRUE@.test$(EXEEXT).log:
+ at am__EXEEXT_TRUE@	@p='$<'; \
+ at am__EXEEXT_TRUE@	$(am__set_b); \
+ at am__EXEEXT_TRUE@	$(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ at am__EXEEXT_TRUE@	--log-file $$b.log --trs-file $$b.trs \
+ at am__EXEEXT_TRUE@	$(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ at am__EXEEXT_TRUE@	"$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+	$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+	-test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+	-test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
 
-flexible: flexible.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-dvi-am:
 
-flexible2: flexible2.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-exec-am:
 
-flexible_varm: flexible_varm.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-html: install-html-am
 
-nonblocking: nonblocking.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-html-am:
 
-noclobber: noclobber.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-info: install-info-am
 
-record: record.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-info-am:
 
-inq_num_vars: inq_num_vars.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-man:
 
-varn_int: varn_int.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-pdf: install-pdf-am
 
-varn_contig: varn_contig.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-pdf-am:
 
-modes: modes.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-ps: install-ps-am
 
-one_record: one_record.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+install-ps-am:
 
-inq_recsize: inq_recsize.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+installcheck-am:
 
-test_vard: test_vard.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
 
-profile: profile.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mostlyclean: mostlyclean-am
 
-ivarn: ivarn.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
 
-check_striping: check_striping.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+pdf: pdf-am
 
-add_var: add_var.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+pdf-am:
 
-buftype_free: buftype_free.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+ps: ps-am
 
-last_large_var: last_large_var.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+ps-am:
 
-check_type: check_type.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tests: tests-am
 
-test_erange: test_erange.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+tests-am: tests-local
 
-scalar: scalar.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+uninstall-am:
 
-erange_fill: erange_fill.o $(LIBRARY)
-	$(LINK.c) $< $(LDFLAGS) $(LIBS)
+.MAKE: check-am install-am install-strip
 
-inq_num_varsf: inq_num_varsf.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+	clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+	ctags ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	recheck tags tags-am tests-am tests-local uninstall \
+	uninstall-am
 
-inq_recsizef: inq_recsizef.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+.PRECIOUS: Makefile
 
-test_vardf: test_vardf.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
 
-varn_intf: varn_intf.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+ at DECL_MPI_OFFSET_TRUE@   # Do not add to AM_CPPFLAGS, as it will also be used by Fortran programs
+ at DECL_MPI_OFFSET_TRUE@   # AM_CPPFLAGS += -DHAVE_DECL_MPI_OFFSET
 
-attrf: attrf.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+$(M4_SRCS:.m4=.c): Makefile
 
-buftype_freef: buftype_freef.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+.m4.c:
+	$(M4) $(AM_M4FLAGS) $(M4FLAGS) $< >$@
 
-put_parameter: put_parameter.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+../common/libtestutils.la:
+	set -e; cd ../common && $(MAKE) $(MFLAGS) tests
 
-test_vardf90: test_vardf90.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+ptest ptest4: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN4) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
-varn_real: varn_real.o $(LIBRARY)
-	$(LINK.F90) $< $(LDFLAGS) $(LIBS)
+ptest2: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN2) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
-testing check verbose_testing : $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/redef1.nc
-	for i in $(PROGS); do ( \
-	$(TEST_SEQRUN) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-	$(TEST_SEQRUN) $(NCMPIGEN) -v 2 -o $(TEST_OUTDIR)/redef1.nc $(srcdir)/redef-good.ncdump
-	$(TEST_SEQRUN) ./redef1 $(TEST_OUTDIR)/testfile.nc
-	$(TEST_SEQRUN) $(NCMPIDIFF) -q $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/redef1.nc
+ptest6: $(TESTPROGRAMS)
+	for j in 0 1 ; do { \
+	export PNETCDF_SAFE_MODE=$$j ; \
+	set -e; for i in $(TESTPROGRAMS); do ( \
+	$(TESTMPIRUN_6) ./$$i $(TESTOUTDIR)/testfile.nc ; \
+	) ; done ; } ; done
 
-# Some of these tests are designed to run on one process,
-# Run them on 4 processes to see if they can handle well
-# Some of these tests are designed to run on 4 processes,
-# Run them on 2, 4, and 6 processes to see if they can handle well
-TEST_MPIRUN_2  = $(subst NP,2,$(TEST_MPIRUN))
-TEST_MPIRUN_4  = $(subst NP,4,$(TEST_MPIRUN))
-TEST_MPIRUN_6  = $(subst NP,6,$(TEST_MPIRUN))
-
-ptest4: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/redef1.nc
-	for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_4) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest2: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/redef1.nc
-	for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_2) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest6: $(PROGS)
-	$(RM) -f $(TEST_OUTDIR)/testfile.nc $(TEST_OUTDIR)/redef1.nc
-	for i in $(PROGS); do ( \
-	$(TEST_MPIRUN_6) ./$$i $(TEST_OUTDIR)/testfile.nc \
-	; ) ; done
-
-ptest: ptest4
 ptests: ptest2 ptest4 ptest6
 ptest8 ptest10:
 
-include $(srcdir)/../../rules.make
-include $(srcdir)/depend
+# build check targets but not invoke
+tests-local: all $(check_PROGRAMS)
 
-$(LIBRARY): ;
+.PHONY: ptest ptests ptest2 ptest4 ptest6 ptest8 ptest10
 
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/testcases/add_var.c b/test/testcases/add_var.c
index 458198a..eea0c6c 100644
--- a/test/testcases/add_var.c
+++ b/test/testcases/add_var.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: add_var.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: add_var.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -28,8 +28,6 @@
 
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}}
-
 int main(int argc, char** argv) {
     char filename[256], var_name[NC_MAX_NAME];
     int i, nvars, rank, nprocs, err, nerrs=0;
@@ -43,7 +41,7 @@ int main(int argc, char** argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -56,45 +54,45 @@ int main(int argc, char** argv) {
         free(cmd_str);
     }
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
 
     /* define dimensions */
-    err = ncmpi_def_dim(ncid, "dim_1", 5, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "dim_2", 4, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "dim_1", 5, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim_2", 4, &dimid[1]); CHECK_ERR
 
     /* define a bunch of variables */
     for (i=0; i<10; i++) {
         sprintf(var_name, "var_%d", i);
-        err = ncmpi_def_var(ncid, var_name, NC_INT, 2, dimid, &varid); ERR
+        err = ncmpi_def_var(ncid, var_name, NC_INT, 2, dimid, &varid); CHECK_ERR
     }
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* re-enter define mode */
-    err = ncmpi_redef(ncid); ERR
+    err = ncmpi_redef(ncid); CHECK_ERR
 
     /* add 2 new dimensions */
-    err = ncmpi_def_dim(ncid, "new_dim_1", 5, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "new_dim_2", 4, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "new_dim_1", 5, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "new_dim_2", 4, &dimid[1]); CHECK_ERR
 
     /* add 2 new variables */
-    err = ncmpi_def_var(ncid, "new_var1", NC_INT,   2, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "new_var2", NC_FLOAT, 2, dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_var(ncid, "new_var1", NC_INT,   2, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "new_var2", NC_FLOAT, 2, dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
-    err = ncmpi_inq_nvars(ncid, &nvars); ERR
-    err = ncmpi_inq_varoffset(ncid, 0, &prev_off); ERR
+    err = ncmpi_inq_nvars(ncid, &nvars); CHECK_ERR
+    err = ncmpi_inq_varoffset(ncid, 0, &prev_off); CHECK_ERR
     for (i=1; i<nvars; i++) {
-        err = ncmpi_inq_varoffset(ncid, i, &off); ERR
+        err = ncmpi_inq_varoffset(ncid, i, &off); CHECK_ERR
         if (off < prev_off + 5*4*4) { /* each variable is of size 5*4*4 bytes */
-            err = ncmpi_inq_varname(ncid, i, var_name); ERR
-            printf("Error in %s line %d: variable %s offset is set incorrectly\n",
-                   __FILE__,__LINE__,var_name);
+            err = ncmpi_inq_varname(ncid, i, var_name); CHECK_ERR
+            printf("Error at line %d in %s: variable %s offset is set incorrectly\n",
+                   __LINE__,__FILE__,var_name);
             nerrs++;
         }
         prev_off = off;
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -113,6 +111,6 @@ int main(int argc, char** argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/alignment_test.c b/test/testcases/alignment_test.c
index 5306614..1be5a26 100644
--- a/test/testcases/alignment_test.c
+++ b/test/testcases/alignment_test.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: alignment_test.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: alignment_test.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -33,8 +33,6 @@
 #define NVARS 8
 #define NX 5
 
-#define ERR {if(err!=NC_NOERR){nerrs++;printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}}
-
 int main(int argc, char** argv) {
     char filename[256];
     int i, j, rank, nprocs, err, verbose=0, nerrs=0;
@@ -52,7 +50,7 @@ int main(int argc, char** argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "redef1.nc");
@@ -66,11 +64,11 @@ int main(int argc, char** argv) {
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
 
     /* define dimension */
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX*nprocs, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX*nprocs, &dimid[1]); CHECK_ERR
 
 #define TEST_FIXED_VAR
 #define TEST_RECORD_VAR
@@ -79,17 +77,17 @@ int main(int argc, char** argv) {
 #ifdef TEST_FIXED_VAR
         if (i%2) {
             sprintf(str,"fixed_var_%d",i);
-            err = ncmpi_def_var(ncid, str, NC_INT, 1, dimid+1, &varid[i]); ERR
+            err = ncmpi_def_var(ncid, str, NC_INT, 1, dimid+1, &varid[i]); CHECK_ERR
         }
 #endif
 #ifdef TEST_RECORD_VAR
         if (i%2 == 0) {
             sprintf(str,"record_var_%d",i);
-            err = ncmpi_def_var(ncid, str, NC_INT, 2, dimid, &varid[i]); ERR
+            err = ncmpi_def_var(ncid, str, NC_INT, 2, dimid, &varid[i]); CHECK_ERR
         }
 #endif
     }
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* write all variables */
     buf = (int*) malloc(NX * sizeof(int));
@@ -99,12 +97,12 @@ int main(int argc, char** argv) {
         if (i%2) {
             start[0] = NX*rank;
             count[0] = NX;
-            err = ncmpi_put_vara_int_all(ncid, varid[i], start, count, buf); ERR
+            err = ncmpi_put_vara_int_all(ncid, varid[i], start, count, buf); CHECK_ERR
             /* check if user put buffer contents altered */
             for (j=0; j<NX; j++) {
                 if (buf[j] != rank*1000 + i*10 + j) {
-                    printf("Error: user put buffer[%d] altered from %d to %d\n",
-                           j, rank*1000 + i*10 + j, buf[j]);
+                    printf("Error at line %d in %s: user put buffer[%d] altered from %d to %d\n",
+                           __LINE__,__FILE__,j, rank*1000 + i*10 + j, buf[j]);
                     nerrs++;
                 }
             }
@@ -114,22 +112,22 @@ int main(int argc, char** argv) {
         if (i%2 == 0) {
             start[0] = 0; start[1] = NX*rank;
             count[0] = 1; count[1] = NX;
-            err = ncmpi_put_vara_int_all(ncid, varid[i], start, count, buf); ERR
+            err = ncmpi_put_vara_int_all(ncid, varid[i], start, count, buf); CHECK_ERR
             for (j=0; j<NX; j++) buf[j] = rank*1000 + 100 + i*10 + j;
             start[0] = 1; /* write 2nd record */
-            err = ncmpi_put_vara_int_all(ncid, varid[i], start, count, buf); ERR
+            err = ncmpi_put_vara_int_all(ncid, varid[i], start, count, buf); CHECK_ERR
             /* check if user put buffer contents altered */
             for (j=0; j<NX; j++) {
                 if (buf[j] != rank*1000 + 100 + i*10 + j) {
-                    printf("Error: user put buffer[%d] altered from %d to %d\n",
-                           j, rank*1000 + 100 + i*10 + j, buf[j]);
+                    printf("Error at line %d in %s: user put buffer[%d] altered from %d to %d\n",
+                           __LINE__,__FILE__,j, rank*1000 + 100 + i*10 + j, buf[j]);
                     nerrs++;
                 }
             }
         }
 #endif
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* Now, reopen the file and grow the header and read data back */
 
@@ -139,11 +137,11 @@ int main(int argc, char** argv) {
     MPI_Info_set(info, "nc_var_align_size",    "197"); /* size in bytes */
 
     /* open the file for adding more metadata */
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_WRITE, info, &ncid); ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_WRITE, info, &ncid); CHECK_ERR
 
     /* get header size and extent, and offsets of all variables */
-    err = ncmpi_inq_header_size(ncid, &header_size[0]); ERR
-    err = ncmpi_inq_header_extent(ncid, &header_extent[0]); ERR
+    err = ncmpi_inq_header_size(ncid, &header_size[0]); CHECK_ERR
+    err = ncmpi_inq_header_extent(ncid, &header_extent[0]); CHECK_ERR
     for (i=0; i<NVARS; i++) {
 #ifdef TEST_FIXED_VAR
         if (i%2)
@@ -153,11 +151,11 @@ int main(int argc, char** argv) {
         if (i%2==0)
             err = ncmpi_inq_varoffset(ncid, varid[i], &old_var_off[i]);
 #endif
-        ERR
+        CHECK_ERR
     }
 
     /* enter redef mode */
-    err = ncmpi_redef(ncid); ERR
+    err = ncmpi_redef(ncid); CHECK_ERR
 
     /* add attributes to make header grow */
     for (i=0; i<NVARS; i++) {
@@ -170,14 +168,14 @@ int main(int argc, char** argv) {
         if (i%2==0)
             err = ncmpi_put_att_text(ncid, varid[i], "text_attr", strlen(str), str);
 #endif
-        ERR
+        CHECK_ERR
     }
 
     /* add new dimensions */
     int new_dimid[3];
-    err = ncmpi_def_dim(ncid, "new_dim_a", 5,         &new_dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "new_dim_b", 4,         &new_dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "new_dim_c", NX*nprocs, &new_dimid[2]); ERR
+    err = ncmpi_def_dim(ncid, "new_dim_a", 5,         &new_dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "new_dim_b", 4,         &new_dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "new_dim_c", NX*nprocs, &new_dimid[2]); CHECK_ERR
 
     /* add new variables */
     int new_varid[NVARS];
@@ -185,22 +183,22 @@ int main(int argc, char** argv) {
 #ifdef TEST_FIXED_VAR
         if (i%2 == 0) {
             sprintf(str,"fixed_var_%d",i+NVARS);
-            err = ncmpi_def_var(ncid, str, NC_INT, 1, new_dimid+2, &new_varid[i]); ERR
+            err = ncmpi_def_var(ncid, str, NC_INT, 1, new_dimid+2, &new_varid[i]); CHECK_ERR
         }
 #endif
 #ifdef TEST_RECORD_VAR
         if (i%2 == 1) {
             sprintf(str,"record_var_%d",i+NVARS);
-            err = ncmpi_def_var(ncid, str, NC_INT, 2, dimid, &new_varid[i]); ERR
+            err = ncmpi_def_var(ncid, str, NC_INT, 2, dimid, &new_varid[i]); CHECK_ERR
         }
 #endif
     }
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* get the new header size and extent, also all variables' starting
        file offsets */
-    err = ncmpi_inq_header_size(ncid, &header_size[1]); ERR
-    err = ncmpi_inq_header_extent(ncid, &header_extent[1]); ERR
+    err = ncmpi_inq_header_size(ncid, &header_size[1]); CHECK_ERR
+    err = ncmpi_inq_header_extent(ncid, &header_extent[1]); CHECK_ERR
     if (rank == 0 && verbose) {
         printf("NX = %d (integer type)\n",NX);
         printf("old header_size  =%lld new header_size  =%lld\n",header_size[0],header_size[1]);
@@ -208,24 +206,24 @@ int main(int argc, char** argv) {
 
 #ifdef TEST_FIXED_VAR
         for (i=1; i<NVARS; i+=2) {
-            err = ncmpi_inq_varoffset(ncid, varid[i], &new_var_off[i]); ERR
+            err = ncmpi_inq_varoffset(ncid, varid[i], &new_var_off[i]); CHECK_ERR
             printf("old fixed  var[%2d] old offset=%4lld new offset=%4lld\n",i,old_var_off[i],new_var_off[i]);
         }
         for (i=NVARS; i<2*NVARS; i++) {
             if (i%2 == 0) {
-                err = ncmpi_inq_varoffset(ncid, new_varid[i-NVARS], &new_var_off[i]); ERR
+                err = ncmpi_inq_varoffset(ncid, new_varid[i-NVARS], &new_var_off[i]); CHECK_ERR
                 printf("new fixed  var[%2d]                 new offset=%4lld\n",i,new_var_off[i]);
             }
         }
 #endif
 #ifdef TEST_RECORD_VAR
         for (i=0; i<NVARS; i+=2) {
-            err = ncmpi_inq_varoffset(ncid, varid[i], &new_var_off[i]); ERR
+            err = ncmpi_inq_varoffset(ncid, varid[i], &new_var_off[i]); CHECK_ERR
             printf("old record var[%2d] old offset=%4lld new offset=%4lld\n",i,old_var_off[i],new_var_off[i]);
         }
         for (i=NVARS; i<2*NVARS; i++) {
             if (i%2) {
-                err = ncmpi_inq_varoffset(ncid, new_varid[i-NVARS], &new_var_off[i]); ERR
+                err = ncmpi_inq_varoffset(ncid, new_varid[i-NVARS], &new_var_off[i]); CHECK_ERR
                 printf("new record var[%2d]                 new offset=%4lld\n",i,new_var_off[i]);
             }
         }
@@ -239,12 +237,12 @@ int main(int argc, char** argv) {
         if (i%2 == 0) {
             start[0] = NX*rank;
             count[0] = NX;
-            err = ncmpi_put_vara_int_all(ncid, new_varid[i], start, count, buf); ERR
+            err = ncmpi_put_vara_int_all(ncid, new_varid[i], start, count, buf); CHECK_ERR
             /* check if user put buffer contents altered */
             for (j=0; j<NX; j++) {
                 if (buf[j] != -1 * (i*10 + j)) {
-                    printf("Error: user put buffer[%d] altered from %d to %d\n",
-                           j, -1 * (i*10 + j), buf[j]);
+                    printf("Error at line %d in %s: user put buffer[%d] altered from %d to %d\n",
+                           __LINE__,__FILE__,j, -1 * (i*10 + j), buf[j]);
                     nerrs++;
                 }
             }
@@ -254,15 +252,15 @@ int main(int argc, char** argv) {
         if (i%2 == 1) {
             start[0] = 0; start[1] = NX*rank;
             count[0] = 1; count[1] = NX;
-            err = ncmpi_put_vara_int_all(ncid, new_varid[i], start, count, buf); ERR
+            err = ncmpi_put_vara_int_all(ncid, new_varid[i], start, count, buf); CHECK_ERR
             for (j=0; j<NX; j++) buf[j] = -1 * (100 + i*10 + j);
             start[0] = 1; /* write 2nd record */
-            err = ncmpi_put_vara_int_all(ncid, new_varid[i], start, count, buf); ERR
+            err = ncmpi_put_vara_int_all(ncid, new_varid[i], start, count, buf); CHECK_ERR
             /* check if user put buffer contents altered */
             for (j=0; j<NX; j++) {
                 if (buf[j] != -1 * (100 + i*10 + j)) {
-                    printf("Error: user put buffer[%d] altered from %d to %d\n",
-                           j, -1 * (100 + i*10 + j), buf[j]);
+                    printf("Error at line %d in %s: user put buffer[%d] altered from %d to %d\n",
+                           __LINE__,__FILE__,j, -1 * (100 + i*10 + j), buf[j]);
                     nerrs++;
                 }
             }
@@ -276,7 +274,7 @@ int main(int argc, char** argv) {
         if (i%2) {
             start[0] = NX*rank;
             count[0] = NX;
-            err = ncmpi_get_vara_int_all(ncid, varid[i], start, count, buf); ERR
+            err = ncmpi_get_vara_int_all(ncid, varid[i], start, count, buf); CHECK_ERR
             for (j=0; j<NX; j++)
                 if (buf[j] != rank*1000 + i*10 + j) {
                     printf("read error i=%d buf[j=%d]=%d != %d\n",i,j,buf[j],rank*1000+i*10+j);
@@ -288,14 +286,14 @@ int main(int argc, char** argv) {
         if (i%2 == 0) {
             start[0] = 0; start[1] = NX*rank;
             count[0] = 1; count[1] = NX;
-            err = ncmpi_get_vara_int_all(ncid, varid[i], start, count, buf); ERR
+            err = ncmpi_get_vara_int_all(ncid, varid[i], start, count, buf); CHECK_ERR
             for (j=0; j<NX; j++)
                 if (buf[j] != rank*1000+i*10+j) {
                     printf("read error i=%d buf[j=%d]=%d != %d\n",i,j,buf[j],rank*1000+i*10+j);
                     nerrs++;
                 }
             start[0] = 1;
-            err = ncmpi_get_vara_int_all(ncid, varid[i], start, count, buf); ERR
+            err = ncmpi_get_vara_int_all(ncid, varid[i], start, count, buf); CHECK_ERR
             for (j=0; j<NX; j++)
                 if (buf[j] != rank*1000 + 100 + i*10 + j) {
                     printf("read error i=%d buf[j=%d]=%d != %d\n",i,j,buf[j],rank*1000+100+i*10+j);
@@ -304,7 +302,7 @@ int main(int argc, char** argv) {
         }
 #endif
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     MPI_Info_free(&info);
     free(buf);
 
@@ -325,6 +323,6 @@ int main(int argc, char** argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/attrf.f b/test/testcases/attrf.f
index 35a7f3f..6d77d6a 100644
--- a/test/testcases/attrf.f
+++ b/test/testcases/attrf.f
@@ -2,7 +2,7 @@
 !   Copyright (C) 2015, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: attrf.f 2638 2016-11-18 14:51:02Z wkliao $
+! $Id: attrf.f 3341 2017-08-25 22:29:08Z wkliao $
 
 ! This program tests if NF_ERANGE is properly returned with a coredump
 ! when an out-of-range value is used to write to a global attribute.
@@ -192,4 +192,6 @@
 
  999      call MPI_Finalize(ierr)
 
+          if (nerrs .GT. 0) STOP 2
+
       end ! program main
diff --git a/test/testcases/bigrecords.f b/test/testcases/bigrecords.f
index 75fdd46..b4c4f83 100644
--- a/test/testcases/bigrecords.f
+++ b/test/testcases/bigrecords.f
@@ -2,7 +2,7 @@
 !  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-!  $Id: bigrecords.f 2313 2016-02-01 21:24:42Z wkliao $
+!  $Id: bigrecords.f 3446 2017-10-19 05:35:54Z wkliao $
 
 !
 ! this test case came from Annette Koonts at PNNL
@@ -107,6 +107,8 @@
 
       call MPI_Bcast(filename, 256, MPI_CHARACTER, 0, MPI_COMM_WORLD,
      +               ierr)
+      call MPI_Bcast(cmd,      256, MPI_CHARACTER, 0, MPI_COMM_WORLD,
+     +               ierr)
 
       iret = nfmpi_create( MPI_COMM_WORLD, filename,
      +                       IOR(NF_CLOBBER,NF_64BIT_DATA), 
@@ -335,6 +337,6 @@
           msg = '*** TESTING F77 '//cmd(1:XTRIM(cmd))//
      +          ' for NF_64BIT_DATA'
           call pass_fail(1, msg)
-          stop
+          stop 2
       endif
       end ! subroutine check_err
diff --git a/test/testcases/buftype_free.c b/test/testcases/buftype_free.c
index ecb732a..5eb7dda 100644
--- a/test/testcases/buftype_free.c
+++ b/test/testcases/buftype_free.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: buftype_free.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: buftype_free.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /*
@@ -22,7 +22,6 @@
 
 #define NY 4
 #define NX 4
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__,ncmpi_strerror(err)); exit(-1);}
 
 /*----< main() >------------------------------------------------------------*/
 int main(int argc, char **argv) {
@@ -41,7 +40,7 @@ int main(int argc, char **argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -54,16 +53,16 @@ int main(int argc, char **argv) {
         free(cmd_str);
     }
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
 
     /* define a 2D array */
-    err = ncmpi_def_dim(ncid, "Y", NY*nprocs, &dimids[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX,        &dimids[1]); ERR
-    err = ncmpi_def_var(ncid, "var0", NC_INT, 2, dimids, &varid[0]); ERR
-    err = ncmpi_def_var(ncid, "var1", NC_INT, 2, dimids, &varid[1]); ERR
-    err = ncmpi_def_var(ncid, "var2", NC_INT, 2, dimids, &varid[2]); ERR
-    err = ncmpi_def_var(ncid, "var3", NC_INT, 2, dimids, &varid[3]); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY*nprocs, &dimids[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX,        &dimids[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var0", NC_INT, 2, dimids, &varid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT, 2, dimids, &varid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var2", NC_INT, 2, dimids, &varid[2]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var3", NC_INT, 2, dimids, &varid[3]); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* initialize the contents of the array */
     for (i=0; i<4; i++) for (j=0; j<(NY+4)*(NX+4); j++) buf[i][j] = rank+10;
@@ -71,17 +70,17 @@ int main(int argc, char **argv) {
     start[0] = NY*rank; start[1] = 0;
     count[0] = NY;      count[1] = NX;
 
-    err = ncmpi_put_vara_int_all(ncid, varid[0], start, count, buf[0]); ERR
-    err = ncmpi_put_vara_int_all(ncid, varid[1], start, count, buf[1]); ERR
-    err = ncmpi_put_vara_int_all(ncid, varid[2], start, count, buf[2]); ERR
-    err = ncmpi_put_vara_int_all(ncid, varid[3], start, count, buf[3]); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid[0], start, count, buf[0]); CHECK_ERR
+    err = ncmpi_put_vara_int_all(ncid, varid[1], start, count, buf[1]); CHECK_ERR
+    err = ncmpi_put_vara_int_all(ncid, varid[2], start, count, buf[2]); CHECK_ERR
+    err = ncmpi_put_vara_int_all(ncid, varid[3], start, count, buf[3]); CHECK_ERR
 
     /* check if user write buffer contents altered */
     for (i=0; i<4; i++) {
         for (j=0; j<(NY+4)*(NX+4); j++) {
             if (buf[i][j] != rank+10) {
-                printf("Error: user put buffer[%d][%d] altered from %d to %d\n",
-                       i,j, rank+10, buf[i][j]);
+                printf("Error at line %d in %s: user put buffer[%d][%d] altered from %d to %d\n",
+                       __LINE__,__FILE__,i,j, rank+10, buf[i][j]);
                 nerrs++;
             }
         }
@@ -102,19 +101,19 @@ int main(int argc, char **argv) {
         MPI_Type_create_subarray(2, gsize, subsize, a_start, MPI_ORDER_C, MPI_INT, &buftype[i]);
         MPI_Type_commit(&buftype[i]);
 
-        err = ncmpi_iget_vara(ncid, varid[i], start, count, buf[i], 1, buftype[i], &req[i]); ERR
+        err = ncmpi_iget_vara(ncid, varid[i], start, count, buf[i], 1, buftype[i], &req[i]); CHECK_ERR
         MPI_Type_free(&buftype[i]);
     }
 
-    err = ncmpi_wait_all(ncid, 4, req, st); ERR
+    err = ncmpi_wait_all(ncid, 4, req, st); CHECK_ERR
     for (i=0; i<4; i++) {
         if (st[i] != NC_NOERR) {
-            printf("Error: ncmpi_wait_all st[%d] %s\n",i, ncmpi_strerror(st[i]));
-            nerrs++;
+            err = st[i];
+            CHECK_ERR
         }
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -133,6 +132,6 @@ int main(int argc, char **argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/buftype_freef.f b/test/testcases/buftype_freef.f
index eac3d04..3a65985 100644
--- a/test/testcases/buftype_freef.f
+++ b/test/testcases/buftype_freef.f
@@ -2,7 +2,7 @@
 !   Copyright (C) 2015, Northwestern University
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: buftype_freef.f 2638 2016-11-18 14:51:02Z wkliao $
+! $Id: buftype_freef.f 3341 2017-08-25 22:29:08Z wkliao $
 
 ! This example tests if PnetCDF duplicates the MPI derived data type supplied
 ! by the user, when calling the flexible APIs. It tests a PnetCDF bug
@@ -37,7 +37,7 @@
               write(6,*) message(1:XTRIM(message)), nfmpi_strerror(err)
               msg = '*** TESTING F77 buftype_freef.f for flexible API '
               call pass_fail(1, msg)
-              call MPI_Abort(MPI_COMM_WORLD, -1, err)
+              STOP 2
           end if
       end ! subroutine check
 
@@ -174,5 +174,7 @@
           endif
 
  999      call MPI_Finalize(ierr)
+          if (nerrs .GT. 0) stop 2
+
       end ! program main
 
diff --git a/test/testcases/check_striping.c b/test/testcases/check_striping.c
index 09af47a..1b8b2e2 100644
--- a/test/testcases/check_striping.c
+++ b/test/testcases/check_striping.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: check_striping.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: check_striping.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -28,8 +28,6 @@
 
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR){nerrs++;printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}}
-
 int main(int argc, char** argv) {
     char filename[256];
     int rank, nprocs, err, nerrs=0, ncid, cmode;
@@ -42,7 +40,7 @@ int main(int argc, char** argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -55,10 +53,10 @@ int main(int argc, char** argv) {
     }
 
     cmode = NC_CLOBBER;
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
-    err = ncmpi_inq_striping(ncid, &striping_size, &striping_count); ERR
+    err = ncmpi_inq_striping(ncid, &striping_size, &striping_count); CHECK_ERR
 
     root_striping_size  = striping_size;
     root_striping_count = striping_count;
@@ -67,13 +65,13 @@ int main(int argc, char** argv) {
     err = MPI_Bcast(&root_striping_count, 1, MPI_INT, 0, MPI_COMM_WORLD);
     MPI_ERR(err)
     if (root_striping_size != striping_size) {
-        printf("Error at PE %2d: inconsistent striping_size (root=%d local=%d)\n",
-               rank, root_striping_size, striping_size);
+        printf("Error at line %d in %s: inconsistent striping_size (root=%d local=%d)\n",
+               __LINE__,__FILE__, root_striping_size, striping_size);
         nerrs++;
     }
     if (root_striping_count != striping_count) {
-        printf("Error at PE %2d: inconsistent striping_count (root=%d local=%d)\n",
-               rank, root_striping_count, striping_count);
+        printf("Error at line %d in %s: inconsistent striping_count (root=%d local=%d)\n",
+               __LINE__,__FILE__, root_striping_count, striping_count);
         nerrs++;
     }
 /*
@@ -81,7 +79,7 @@ int main(int argc, char** argv) {
         printf("Success: striping_size=%d striping_count=%d\n",striping_size,striping_count);
 */
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -99,6 +97,6 @@ int main(int argc, char** argv) {
         else       printf(PASS_STR);
     }
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/check_type.c b/test/testcases/check_type.c
index 3f14fa1..50ad44d 100644
--- a/test/testcases/check_type.c
+++ b/test/testcases/check_type.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2015, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: check_type.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: check_type.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -25,7 +25,13 @@
 
 #include <testutils.h>
 
-static char* err_code_name(int err);
+#define EXP_ERR_N_TYPE(expect_err,itype,etype) { \
+    if (err != expect_err) { \
+        printf("Error at line %d in %s: itype=%9s etype=%-9s err=%s\n", \
+               __LINE__,__FILE__,itype,etype_name(etype),ncmpi_strerrno(err)); \
+        nerrs++; \
+    }  \
+} 
 
 static char* etype_name(nc_type etype) {
     switch (etype) {
@@ -46,21 +52,6 @@ static char* etype_name(nc_type etype) {
     }
 }
 
-#define ERR0 { \
-    if (err != NC_NOERR) { \
-        printf("Error at line %d err=%s\n",__LINE__,err_code_name(err)); \
-        nerrs++; \
-    } \
-}
-
-#define ERR(expect_err,itype,etype) { \
-    if (err != expect_err) { \
-        printf("Error at line %3d: itype=%9s etype=%-9s err=%s\n", \
-               __LINE__,itype,etype_name(etype),err_code_name(err)); \
-        nerrs++; \
-    }  \
-} 
-
 int main(int argc, char* argv[])
 {
     char filename[256], *varname[12], buf[1024], attname[256];
@@ -72,7 +63,7 @@ int main(int argc, char* argv[])
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -85,8 +76,8 @@ int main(int argc, char* argv[])
         free(cmd_str);
     }
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA, MPI_INFO_NULL, &ncid); ERR0
-    err = ncmpi_def_dim(ncid, "x", 2, &dimid); ERR0
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "x", 2, &dimid); CHECK_ERR
 
     varname[0]  = "var_nat";
     varname[1]  = "var_byte";
@@ -101,12 +92,12 @@ int main(int argc, char* argv[])
     varname[10] = "var_int64";
     varname[11] = "var_uint64";
     for (i=NC_BYTE; i<=NC_UINT64; i++) {
-        err = ncmpi_def_var(ncid, varname[i], i, 1, &dimid, &varid[i]); ERR0
+        err = ncmpi_def_var(ncid, varname[i], i, 1, &dimid, &varid[i]); CHECK_ERR
     }
 
     for (i=0; i<1024; i++) buf[i]=i;
-    err = ncmpi_put_att_text(ncid, NC_GLOBAL, "att_text", 3, (char*)buf); ERR0
-    ERR(NC_NOERR, "text", NC_CHAR)
+    err = ncmpi_put_att_text(ncid, NC_GLOBAL, "att_text", 3, (char*)buf); CHECK_ERR
+    EXP_ERR_N_TYPE(NC_NOERR, "text", NC_CHAR)
 
     for (i=0; i<1024; i++) buf[i]=0;
     for (i=NC_BYTE; i<=NC_UINT64; i++) {
@@ -116,34 +107,34 @@ int main(int argc, char* argv[])
 
         sprintf(attname,"att_uchar_for_var_%s",varname[i]);
         err = ncmpi_put_att_uchar    (ncid, NC_GLOBAL, attname, i, 3, (unsigned char*)      buf);
-        ERR(expect_err, "uchar", i)
+        EXP_ERR_N_TYPE(expect_err, "uchar", i)
         sprintf(attname,"att_schar_for_var_%s",varname[i]);
         err = ncmpi_put_att_schar    (ncid, NC_GLOBAL, attname, i, 3, (signed char*)        buf);
-        ERR(expect_err, "schar", i)
+        EXP_ERR_N_TYPE(expect_err, "schar", i)
         sprintf(attname,"att_short_for_var_%s",varname[i]);
         err = ncmpi_put_att_short    (ncid, NC_GLOBAL, attname, i, 3, (short*)              buf);
-        ERR(expect_err, "short", i)
+        EXP_ERR_N_TYPE(expect_err, "short", i)
         sprintf(attname,"att_int_for_var_%s",varname[i]);
         err = ncmpi_put_att_int      (ncid, NC_GLOBAL, attname, i, 3, (int*)                buf);
-        ERR(expect_err, "int", i)
+        EXP_ERR_N_TYPE(expect_err, "int", i)
         sprintf(attname,"att_float_for_var_%s",varname[i]);
         err = ncmpi_put_att_float    (ncid, NC_GLOBAL, attname, i, 3, (float*)              buf);
-        ERR(expect_err, "float", i)
+        EXP_ERR_N_TYPE(expect_err, "float", i)
         sprintf(attname,"att_double_for_var_%s",varname[i]);
         err = ncmpi_put_att_double   (ncid, NC_GLOBAL, attname, i, 3, (double*)             buf);
-        ERR(expect_err, "double", i)
+        EXP_ERR_N_TYPE(expect_err, "double", i)
         sprintf(attname,"att_ushort_for_var_%s",varname[i]);
         err = ncmpi_put_att_ushort   (ncid, NC_GLOBAL, attname, i, 3, (unsigned short*)     buf);
-        ERR(expect_err, "ushort", i)
+        EXP_ERR_N_TYPE(expect_err, "ushort", i)
         sprintf(attname,"att_uint_for_var_%s",varname[i]);
         err = ncmpi_put_att_uint     (ncid, NC_GLOBAL, attname, i, 3, (unsigned int*)       buf);
-        ERR(expect_err, "uint", i)
+        EXP_ERR_N_TYPE(expect_err, "uint", i)
         sprintf(attname,"att_longlong_for_var_%s",varname[i]);
         err = ncmpi_put_att_longlong (ncid, NC_GLOBAL, attname, i, 3, (long long*)          buf);
-        ERR(expect_err, "longlong", i)
+        EXP_ERR_N_TYPE(expect_err, "longlong", i)
         sprintf(attname,"att_ulonglong_for_var_%s",varname[i]);
         err = ncmpi_put_att_ulonglong(ncid, NC_GLOBAL, attname, i, 3, (unsigned long long*) buf);
-        ERR(expect_err, "ulonglong", i)
+        EXP_ERR_N_TYPE(expect_err, "ulonglong", i)
     }
 
     for (i=NC_BYTE; i<=NC_UINT64; i++) {
@@ -153,37 +144,37 @@ int main(int argc, char* argv[])
 
         sprintf(attname,"att_uchar_for_var_%s",varname[i]);
         err = ncmpi_get_att_uchar    (ncid, NC_GLOBAL, attname, (unsigned char*)      buf);
-        ERR(expect_err, "uchar", i)
+        EXP_ERR_N_TYPE(expect_err, "uchar", i)
         sprintf(attname,"att_schar_for_var_%s",varname[i]);
         err = ncmpi_get_att_schar    (ncid, NC_GLOBAL, attname, (signed char*)        buf);
-        ERR(expect_err, "schar", i)
+        EXP_ERR_N_TYPE(expect_err, "schar", i)
         sprintf(attname,"att_short_for_var_%s",varname[i]);
         err = ncmpi_get_att_short    (ncid, NC_GLOBAL, attname, (short*)              buf);
-        ERR(expect_err, "short", i)
+        EXP_ERR_N_TYPE(expect_err, "short", i)
         sprintf(attname,"att_int_for_var_%s",varname[i]);
         err = ncmpi_get_att_int      (ncid, NC_GLOBAL, attname, (int*)                buf);
-        ERR(expect_err, "int", i)
+        EXP_ERR_N_TYPE(expect_err, "int", i)
         sprintf(attname,"att_float_for_var_%s",varname[i]);
         err = ncmpi_get_att_float    (ncid, NC_GLOBAL, attname, (float*)              buf);
-        ERR(expect_err, "float", i)
+        EXP_ERR_N_TYPE(expect_err, "float", i)
         sprintf(attname,"att_double_for_var_%s",varname[i]);
         err = ncmpi_get_att_double   (ncid, NC_GLOBAL, attname, (double*)             buf);
-        ERR(expect_err, "double", i)
+        EXP_ERR_N_TYPE(expect_err, "double", i)
         sprintf(attname,"att_ushort_for_var_%s",varname[i]);
         err = ncmpi_get_att_ushort   (ncid, NC_GLOBAL, attname, (unsigned short*)     buf);
-        ERR(expect_err, "ushort", i)
+        EXP_ERR_N_TYPE(expect_err, "ushort", i)
         sprintf(attname,"att_uint_for_var_%s",varname[i]);
         err = ncmpi_get_att_uint     (ncid, NC_GLOBAL, attname, (unsigned int*)       buf);
-        ERR(expect_err, "uint", i)
+        EXP_ERR_N_TYPE(expect_err, "uint", i)
         sprintf(attname,"att_longlong_for_var_%s",varname[i]);
         err = ncmpi_get_att_longlong (ncid, NC_GLOBAL, attname, (long long*)          buf);
-        ERR(expect_err, "longlong", i)
+        EXP_ERR_N_TYPE(expect_err, "longlong", i)
         sprintf(attname,"att_ulonglong_for_var_%s",varname[i]);
         err = ncmpi_get_att_ulonglong(ncid, NC_GLOBAL, attname, (unsigned long long*) buf);
-        ERR(expect_err, "ulonglong", i)
+        EXP_ERR_N_TYPE(expect_err, "ulonglong", i)
     }
 
-    err = ncmpi_close(ncid); ERR0
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -203,49 +194,6 @@ int main(int argc, char* argv[])
 
     MPI_Finalize();
 
-    return 0;
-}
-
-static char* err_code_name(int err)
-{
-    static char unknown_str[32];
-    switch (err) {
-        case (NC_NOERR):			return "NC_NOERR";
-        case (NC_EBADID):			return "NC_EBADID";
-        case (NC_ENFILE):			return "NC_ENFILE";
-        case (NC_EEXIST):			return "NC_EEXIST";
-        case (NC_EINVAL):			return "NC_EINVAL";
-        case (NC_EPERM):			return "NC_EPERM";
-        case (NC_ENOTINDEFINE):			return "NC_ENOTINDEFINE";
-        case (NC_EINDEFINE):			return "NC_EINDEFINE";
-        case (NC_EINVALCOORDS):			return "NC_EINVALCOORDS";
-        case (NC_EMAXDIMS):			return "NC_EMAXDIMS";
-        case (NC_ENAMEINUSE):			return "NC_ENAMEINUSE";
-        case (NC_ENOTATT):			return "NC_ENOTATT";
-        case (NC_EMAXATTS):			return "NC_EMAXATTS";
-        case (NC_EBADTYPE):			return "NC_EBADTYPE";
-        case (NC_EBADDIM):			return "NC_EBADDIM";
-        case (NC_EUNLIMPOS):			return "NC_EUNLIMPOS";
-        case (NC_EMAXVARS):			return "NC_EMAXVARS";
-        case (NC_ENOTVAR):			return "NC_ENOTVAR";
-        case (NC_EGLOBAL):			return "NC_EGLOBAL";
-        case (NC_ENOTNC):			return "NC_ENOTNC";
-        case (NC_ESTS):				return "NC_ESTS";
-        case (NC_EMAXNAME):			return "NC_EMAXNAME";
-        case (NC_EUNLIMIT):			return "NC_EUNLIMIT";
-        case (NC_ENORECVARS):			return "NC_ENORECVARS";
-        case (NC_ECHAR):			return "NC_ECHAR";
-        case (NC_EEDGE):			return "NC_EEDGE";
-        case (NC_ESTRIDE):			return "NC_ESTRIDE";
-        case (NC_EBADNAME):			return "NC_EBADNAME";
-        case (NC_ERANGE):			return "NC_ERANGE";
-        case (NC_ENOMEM):			return "NC_ENOMEM";
-        case (NC_EVARSIZE):			return "NC_EVARSIZE";
-        case (NC_EDIMSIZE):			return "NC_EDIMSIZE";
-        case (NC_ETRUNC):			return "NC_ETRUNC";
-        default:
-              sprintf(unknown_str,"Unknown code %d",err);
-    }
-    return unknown_str;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/collective_error.c b/test/testcases/collective_error.c
index c0bc11a..bb6c527 100644
--- a/test/testcases/collective_error.c
+++ b/test/testcases/collective_error.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: collective_error.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: collective_error.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /* This test program checks whether a collective API can be nicely aborted
@@ -30,15 +30,6 @@
 
 #include <testutils.h>
 
-#define ERR { if (err!=NC_NOERR){printf("PE %d: error at line %d (%s)\n",rank,__LINE__,ncmpi_strerror(err)); nerrs++;}}
-
-#define EXP_ERR(e) { \
-    if (err!=e) { \
-        printf("PE %d: error at line %d expecting %s but got %s\n",rank,__LINE__,nc_err_code_name(e),nc_err_code_name(err)); \
-        nerrs++; \
-    } \
-}
-
 static
 int test_collective_error(char *filename, int safe_mode)
 {
@@ -51,10 +42,10 @@ int test_collective_error(char *filename, int safe_mode)
     MPI_Comm_size(MPI_COMM_WORLD, &nproc);
 
     /* Create a 2 element vector of doubles */
-    err = ncmpi_create(comm, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "dim", 2, &dimids[0]); ERR
-    err = ncmpi_def_var(ncid, "var", NC_DOUBLE, 1, dimids, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_create(comm, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim", 2, &dimids[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_DOUBLE, 1, dimids, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     if (rank == 0) {
         start[0] = 0;
@@ -82,13 +73,13 @@ int test_collective_error(char *filename, int safe_mode)
 
     /* check if user put buffer contents altered */
     if (buf[0] != 1.0) {
-        printf("Error: user put buffer[%d] altered from %f to %f\n",
-               0, 1.0, buf[0]);
+        printf("Error at line %d in %s: user put buffer[%d] altered from %f to %f\n",
+               __LINE__,__FILE__,0, 1.0, buf[0]);
         nerrs++;
     }
     if (buf[1] != 2.0) {
-        printf("Error: user put buffer[%d] altered from %f to %f\n",
-               1, 2.0, buf[1]);
+        printf("Error at line %d in %s: user put buffer[%d] altered from %f to %f\n",
+               __LINE__,__FILE__,1, 2.0, buf[1]);
         nerrs++;
     }
 
@@ -98,13 +89,13 @@ int test_collective_error(char *filename, int safe_mode)
 
     /* check if user put buffer contents altered */
     if (buf[0] != 1.0) {
-        printf("Error: user put buffer[%d] altered from %f to %f\n",
-               0, 1.0, buf[0]);
+        printf("Error at line %d in %s: user put buffer[%d] altered from %f to %f\n",
+               __LINE__,__FILE__,0, 1.0, buf[0]);
         nerrs++;
     }
     if (buf[1] != 2.0) {
-        printf("Error: user put buffer[%d] altered from %f to %f\n",
-               1, 2.0, buf[1]);
+        printf("Error at line %d in %s: user put buffer[%d] altered from %f to %f\n",
+               __LINE__,__FILE__,1, 2.0, buf[1]);
         nerrs++;
     }
 
@@ -114,17 +105,17 @@ int test_collective_error(char *filename, int safe_mode)
     else
         EXP_ERR(NC_NOERR)
 
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
 
     /* check if user put buffer contents altered */
     if (buf[0] != 1.0) {
-        printf("Error: user put buffer[%d] altered from %f to %f\n",
-               0, 1.0, buf[0]);
+        printf("Error at line %d in %s: user put buffer[%d] altered from %f to %f\n",
+               __LINE__,__FILE__,0, 1.0, buf[0]);
         nerrs++;
     }
     if (buf[1] != 2.0) {
-        printf("Error: user put buffer[%d] altered from %f to %f\n",
-               1, 2.0, buf[1]);
+        printf("Error at line %d in %s: user put buffer[%d] altered from %f to %f\n",
+               __LINE__,__FILE__,1, 2.0, buf[1]);
         nerrs++;
     }
 
@@ -143,9 +134,9 @@ int test_collective_error(char *filename, int safe_mode)
     else
         EXP_ERR(NC_NOERR)
 
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -161,7 +152,7 @@ int main(int argc, char *argv[])
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -198,5 +189,5 @@ int main(int argc, char *argv[])
     }
 
     MPI_Finalize();
-    return (nerrs == 0) ? 0 : 1;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/depend b/test/testcases/depend
deleted file mode 100644
index 6eafbf2..0000000
--- a/test/testcases/depend
+++ /dev/null
@@ -1,39 +0,0 @@
-alignment_test.o: alignment_test.c
-bigrecords.o: bigrecords.f
-collective_error.o: collective_error.c
-flexible.o: flexible.c
-flexible2.o: flexible2.c
-flexible_varm.o: flexible_varm.c
-inq_num_vars.o: inq_num_vars.c
-inq_num_varsf.o: inq_num_varsf.f90
-inq_recsize.o: inq_recsize.c
-inq_recsizef.o: inq_recsizef.f90
-ivarn.o: ivarn.c
-modes.o: modes.c
-ncmpi_vars_null_stride.o: ncmpi_vars_null_stride.c
-noclobber.o: noclobber.c
-nonblocking.o: nonblocking.c
-one_record.o: one_record.c
-profile.o: profile.c
-varn_int.o: varn_int.c
-varn_contig.o: varn_contig.c
-varn_intf.o: varn_intf.f
-varn_real.o: varn_real.f90
-record.o: record.c
-redef1.o: redef1.c
-test_vard.o: test_vard.c
-test_vardf.o: test_vardf.F
-test_vardf90.o: test_vardf90.f90
-test_varm.o: test_varm.c
-vectors.o: vectors.c
-check_striping.o: check_striping.c
-attrf.o: attrf.f
-add_var.o: add_var.c
-buftype_free.o: buftype_free.c
-buftype_freef.o: buftype_freef.f
-put_parameter.o: put_parameter.f
-last_large_var.o: last_large_var.c
-check_type.o: check_type.c
-test_erange.o: test_erange.c
-scalar.o: scalar.c
-erange_fill.o: erange_fill.c
diff --git a/test/testcases/erange_fill.m4 b/test/testcases/erange_fill.m4
index d20a5ac..23e962d 100644
--- a/test/testcases/erange_fill.m4
+++ b/test/testcases/erange_fill.m4
@@ -1,8 +1,13 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
 /*
  *  Copyright (C) 2016, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: erange_fill.m4 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: erange_fill.m4 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -29,16 +34,6 @@
 
 #define LEN 10
 
-#define ERR {if(err!=NC_NOERR){printf("Error at %s line %d: %s\n",__func__,__LINE__, ncmpi_strerror(err)); nerrs++;}}
-
-#define ERR_EXPECT(expect) { \
-    if (err != expect) { \
-        printf("Error at %s line %d: expect %s but got %s\n", \
-               __func__,__LINE__,nc_err_code_name(NC_ERANGE),nc_err_code_name(err)); \
-        nerrs++; \
-    } \
-}
-
 include(`foreach.m4')dnl
 include(`utils.m4')dnl
 
@@ -84,13 +79,13 @@ int test_default_fill_mode(char* filename) {
     MPI_Comm comm=MPI_COMM_WORLD;
 
     /* create a new file */
-    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); ERR
-    err = ncmpi_set_fill(ncid, NC_FILL, &old_mode); ERR
+    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); CHECK_ERR
+    err = ncmpi_set_fill(ncid, NC_FILL, &old_mode); CHECK_ERR
     if (old_mode == NC_FILL) {
         printf("Error at %s line %d: expected NC_NOFILL but got NC_FILL\n",__func__,__LINE__);
         nerrs++;
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 
@@ -104,17 +99,17 @@ int test_default_fill_$1(char* filename) {
     MPI_Comm comm=MPI_COMM_WORLD;
 
     /* create a new file */
-    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); ERR
-    err = ncmpi_set_fill(ncid, NC_FILL, NULL); ERR
-    err = ncmpi_def_dim(ncid, "X", LEN, &dimid); ERR
-    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 1, &dimid, &varid); ERR
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); CHECK_ERR
+    err = ncmpi_set_fill(ncid, NC_FILL, NULL); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", LEN, &dimid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 1, &dimid, &varid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* reopen the file and check the contents of variable */
     omode = NC_NOWRITE;
-    err = ncmpi_open(comm, filename, omode, info, &ncid); ERR
-    err = ncmpi_inq_varid(ncid, "var", &varid); ERR
-    err = GET_VAR($1)(ncid, varid, buf); ERR
+    err = ncmpi_open(comm, filename, omode, info, &ncid); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "var", &varid); CHECK_ERR
+    err = GET_VAR($1)(ncid, varid, buf); CHECK_ERR
     for (i=0; i<LEN; i++) {
         if (buf[i] != NC_FILL_VALUE($1)) {
             printf("Error at %s line %d: expect buf[%d]=IFMT($1) but got IFMT($1)\n",
@@ -122,7 +117,7 @@ int test_default_fill_$1(char* filename) {
             nerrs++;
         }
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 ')dnl
@@ -139,25 +134,28 @@ int test_user_fill_$1(char* filename, $1 fillv) {
     MPI_Comm comm=MPI_COMM_WORLD;
 
     /* create a new file */
-    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "X", LEN, &dimid); ERR
-    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 1, &dimid, &varid); ERR
-    err = ncmpi_put_att(ncid, varid, "_FillValue", NC_TYPE($1), 1, &fillv); ERR
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", LEN, &dimid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 1, &dimid, &varid); CHECK_ERR
+    /* put attribute _FillValue does not automatically enable file mode */
+    err = ncmpi_put_att(ncid, varid, "_FillValue", NC_TYPE($1), 1, &fillv); CHECK_ERR
+    /* err = ncmpi_def_var_fill(ncid, varid, 0, &fillv); CHECK_ERR */
+    err = ncmpi_def_var_fill(ncid, varid, 0, NULL); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* reopen the file and check the contents of variable */
     omode = NC_NOWRITE;
-    err = ncmpi_open(comm, filename, omode, info, &ncid); ERR
-    err = ncmpi_inq_varid(ncid, "var", &varid); ERR
-    err = GET_VAR($1)(ncid, varid, buf); ERR
+    err = ncmpi_open(comm, filename, omode, info, &ncid); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "var", &varid); CHECK_ERR
+    err = GET_VAR($1)(ncid, varid, buf); CHECK_ERR
     for (i=0; i<LEN; i++) {
-        if (memcmp(&buf[i], &fillv, ITYPE_SIZE($1))) {
+        if (buf[i] != fillv) {
             printf("Error at %s line %d: expect buf[%d]=IFMT($1) but got IFMT($1)\n",
                    __func__,__LINE__,i,($1)fillv,buf[i]);
             nerrs++;
         }
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 ')dnl
@@ -168,33 +166,38 @@ define(`TEST_ERANGE_PUT',dnl
 `dnl
 static
 int test_erange_put_$1_$2(char* filename) {
-    int i, err, nerrs=0, ncid, dimid, omode, varid, cdf;
-    $1 buf[LEN];
+    int i, err, nerrs=0, ncid, dimid, omode, varid1, varid2, cdf;
+    $1 buf[LEN], fillv=99;
     MPI_Info info=MPI_INFO_NULL;
     MPI_Comm comm=MPI_COMM_WORLD;
 
     /* create a new file */
-    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); ERR
-    err = ncmpi_set_fill(ncid, NC_FILL, NULL); ERR
-    err = ncmpi_def_dim(ncid, "X", LEN, &dimid); ERR
-    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 1, &dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); CHECK_ERR
+    err = ncmpi_set_fill(ncid, NC_FILL, NULL); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", LEN, &dimid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1", NC_TYPE($1), 1, &dimid, &varid1); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var2", NC_TYPE($1), 1, &dimid, &varid2); CHECK_ERR
+    /* use non-default fill value */
+    err = ncmpi_put_att(ncid, varid2, "_FillValue", NC_TYPE($1), 1, &fillv); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
-    err = ncmpi_inq_format(ncid, &cdf); ERR
+    err = ncmpi_inq_format(ncid, &cdf); CHECK_ERR
 
     /* put data with ERANGE values */
     $2 wbuf[LEN];
     for (i=0; i<LEN; i++) wbuf[i] = ($2) ifelse(index(`$1',`u'), 0, `-1', `XTYPE_MAX($2)');
-    err = PUT_VAR($2)(ncid, varid, wbuf);
-    ifelse(`$1',`schar',`ifelse(`$2',`uchar',`if (cdf == NC_FORMAT_CDF2) ERR',`ERR_EXPECT(NC_ERANGE)')',`ERR_EXPECT(NC_ERANGE)')
+    err = PUT_VAR($2)(ncid, varid1, wbuf);
+    ifelse(`$1',`schar',`ifelse(`$2',`uchar',`if (cdf == NC_FORMAT_CDF2) CHECK_ERR',`EXP_ERR(NC_ERANGE)')',`EXP_ERR(NC_ERANGE)')
+    err = PUT_VAR($2)(ncid, varid2, wbuf);
+    ifelse(`$1',`schar',`ifelse(`$2',`uchar',`if (cdf == NC_FORMAT_CDF2) CHECK_ERR',`EXP_ERR(NC_ERANGE)')',`EXP_ERR(NC_ERANGE)')
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* reopen the file and check the contents of variable */
     omode = NC_NOWRITE;
-    err = ncmpi_open(comm, filename, omode, info, &ncid); ERR
-    err = ncmpi_inq_varid(ncid, "var", &varid); ERR
-    err = GET_VAR($1)(ncid, varid, buf); ERR
+    err = ncmpi_open(comm, filename, omode, info, &ncid); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "var1", &varid1); CHECK_ERR
+    err = GET_VAR($1)(ncid, varid1, buf); CHECK_ERR
     for (i=0; i<LEN; i++) {
         $1 expect = ($1)NC_FILL_VALUE($1);
         ifelse(`$1',`schar',`ifelse(`$2',`uchar',`if (cdf != NC_FORMAT_CDF5) expect = ($1)wbuf[i];')')
@@ -204,7 +207,19 @@ int test_erange_put_$1_$2(char* filename) {
             nerrs++;
         }
     }
-    err = ncmpi_close(ncid); ERR
+    /* test non-default fill value */
+    err = ncmpi_inq_varid(ncid, "var2", &varid2); CHECK_ERR
+    err = GET_VAR($1)(ncid, varid2, buf); CHECK_ERR
+    for (i=0; i<LEN; i++) {
+        $1 expect = fillv;
+        ifelse(`$1',`schar',`ifelse(`$2',`uchar',`if (cdf != NC_FORMAT_CDF5) expect = ($1)wbuf[i];')')
+        if (buf[i] != expect) {
+            printf("Error at %s line %d: expect buf[%d]=IFMT($1) but got IFMT($1)\n",
+                   __func__,__LINE__,i,expect,buf[i]);
+            nerrs++;
+        }
+    }
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 ')dnl
@@ -227,28 +242,28 @@ int test_erange_get_$1_$2(char* filename) {
     MPI_Comm comm=MPI_COMM_WORLD;
 
     /* create a new file */
-    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); ERR
-    err = ncmpi_def_dim(ncid, "X", LEN, &dimid); ERR
-    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 1, &dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_create(comm, filename, NC_CLOBBER, info, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", LEN, &dimid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_TYPE($1), 1, &dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
-    err = ncmpi_inq_format(ncid, &cdf); ERR
+    err = ncmpi_inq_format(ncid, &cdf); CHECK_ERR
 
     /* write MAX values */
     for (i=0; i<LEN; i++)
         wbuf[i] = ($1) ifelse(index(`$1',`u'), 0,`XTYPE_MAX($1)',`ifelse(index(`$2',`u'), 0,`-1', `XTYPE_MAX($1)')');
-    err = PUT_VAR($1)(ncid, varid, wbuf); ERR
-    err = ncmpi_close(ncid); ERR
+    err = PUT_VAR($1)(ncid, varid, wbuf); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* reopen the file and check the contents of variable */
     omode = NC_NOWRITE;
-    err = ncmpi_open(comm, filename, omode, info, &ncid); ERR
-    err = ncmpi_inq_varid(ncid, "var", &varid); ERR
+    err = ncmpi_open(comm, filename, omode, info, &ncid); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "var", &varid); CHECK_ERR
 
     /* get data with ERANGE values */
     $2 rbuf[LEN];
     err = GET_VAR($2)(ncid, varid, rbuf);
-    ifelse(`$1',`schar',`ifelse(`$2',`uchar',`if (cdf == NC_FORMAT_CDF2) ERR',`ERR_EXPECT(NC_ERANGE)')',`ERR_EXPECT(NC_ERANGE)')
+    ifelse(`$1',`schar',`ifelse(`$2',`uchar',`if (cdf == NC_FORMAT_CDF2) CHECK_ERR',`EXP_ERR(NC_ERANGE)')',`EXP_ERR(NC_ERANGE)')
 
     for (i=0; i<LEN; i++) {
         $2 expect = ($2)NC_FILL_VALUE($2);
@@ -259,7 +274,7 @@ int test_erange_get_$1_$2(char* filename) {
             nerrs++;
         }
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 ')dnl
@@ -282,7 +297,7 @@ int main(int argc, char** argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -406,6 +421,6 @@ int main(int argc, char** argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs == 0) ? 0 : 1;
 }
 
diff --git a/test/testcases/flexible.c b/test/testcases/flexible.c
index 83eba84..ac00b90 100644
--- a/test/testcases/flexible.c
+++ b/test/testcases/flexible.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: flexible.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: flexible.c 3422 2017-09-25 05:42:52Z wkliao $
  */
 
 /*
@@ -11,9 +11,9 @@
  * The MPI data type for the buffer is defined by swapping the 1st and 2nd
  * rows of the array. It uses MPI_Type_create_hindex(). After the write, this
  * test reads back the array using regular and flexible get APIs (blocking and
- * nonblokcing) and check the contents.
+ * nonblocking) and check the contents.
  *
- * The expected reults from the output file contents are:
+ * The expected results from the output file contents are:
  * (when running on 1 MPI process)
  *
  *  % ncmpidump testfile.nc
@@ -43,7 +43,6 @@
 
 #define NY 2
 #define NX 5
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__,ncmpi_strerror(err)); nerrs++;}
 
 /*----< main() >------------------------------------------------------------*/
 int main(int argc, char **argv) {
@@ -64,7 +63,7 @@ int main(int argc, char **argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -78,13 +77,13 @@ int main(int argc, char **argv) {
     }
 
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL,
-                       &ncid); ERR
+                       &ncid); CHECK_ERR
 
     /* define a 2D array */
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimids[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX*nprocs,    &dimids[1]); ERR
-    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimids, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimids[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX*nprocs,    &dimids[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimids, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* initialize the contents of the array */
     for (j=0; j<NY; j++) for (i=0; i<NX; i++) buf[j][i] = j+10;
@@ -105,7 +104,7 @@ int main(int argc, char **argv) {
     if (debug) printf("put start=%lld %lld count=%lld %lld\n",start[0],start[1],count[0],count[1]);
 
     /* call flexible API */
-    err = ncmpi_put_vara_all(ncid, varid, start, count, bufptr, 1, buftype); ERR
+    err = ncmpi_put_vara_all(ncid, varid, start, count, bufptr, 1, buftype); CHECK_ERR
     MPI_Type_free(&buftype);
 
     /* check if the contents of buf are altered */
@@ -115,15 +114,15 @@ int main(int argc, char **argv) {
                 printf("buf[%d][%d] != %d\n",j,i,buf[j][i]);
  
     /* check if root process can write to file header in data mode */
-    err = ncmpi_rename_var(ncid, varid, "VAR"); ERR
+    err = ncmpi_rename_var(ncid, varid, "VAR"); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* open the same file and read back for validate */
     err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
-                     &ncid); ERR
+                     &ncid); CHECK_ERR
 
-    err = ncmpi_inq_varid(ncid, "VAR", &varid); ERR
+    err = ncmpi_inq_varid(ncid, "VAR", &varid); CHECK_ERR
 
     /* initialize the contents of the array to a different value */
     for (j=0; j<NY; j++) for (i=0; i<NX; i++) buf[j][i] = -1;
@@ -133,7 +132,7 @@ int main(int argc, char **argv) {
     count[0] = 2; count[1] = NX;
     if (debug) printf("get start=%lld %lld count=%lld %lld\n",start[0],start[1],count[0],count[1]);
 
-    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf[0]); ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf[0]); CHECK_ERR
 
     /* check if the contents of buf are expected */
     for (j=0; j<2; j++) {
@@ -157,26 +156,26 @@ int main(int argc, char **argv) {
                              array_of_starts, MPI_ORDER_C,
                              MPI_INT, &buftype);
     MPI_Type_commit(&buftype);
-    err = ncmpi_get_vara_all(ncid, varid, start, count, ncbuf, 1, buftype); ERR
+    err = ncmpi_get_vara_all(ncid, varid, start, count, ncbuf, 1, buftype); CHECK_ERR
 
     for (j=0; j<count[0]; j++) {
         for (i=0; i<count[1]; i++)
             if (buf[j][i] != ncbuf[(j+2)*(count[1]+4)+(i+2)]) {
-                printf("Error: expecting ncbuf[%d][%d]=%d but got %d\n",
-                       j,i,buf[j][i],ncbuf[(j+2)*(count[1]+4)+(i+2)]);
+                printf("Error at line %d in %s: expecting ncbuf[%d][%d]=%d but got %d\n",
+                       __LINE__,__FILE__,j,i,buf[j][i],ncbuf[(j+2)*(count[1]+4)+(i+2)]);
                 nerrs++;
             }
     }
     for (i=0; i<(count[0]+4)*(count[1]+4); i++) ncbuf[i] = -1;
 
-    err = ncmpi_iget_vara(ncid, varid, start, count, ncbuf, 1, buftype, &req); ERR
-    err = ncmpi_wait_all(ncid, 1, &req, &st); ERR
+    err = ncmpi_iget_vara(ncid, varid, start, count, ncbuf, 1, buftype, &req); CHECK_ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &st); CHECK_ERR
 
     for (j=0; j<count[0]; j++) {
         for (i=0; i<count[1]; i++)
             if (buf[j][i] != ncbuf[(j+2)*(count[1]+4)+(i+2)]) {
-                printf("Error: expecting ncbuf[%d][%d]=%d but got %d\n",
-                       j,i,buf[j][i],ncbuf[(j+2)*(count[1]+4)+(i+2)]);
+                printf("Error at line %d in %s: expecting ncbuf[%d][%d]=%d but got %d\n",
+                       __LINE__,__FILE__,j,i,buf[j][i],ncbuf[(j+2)*(count[1]+4)+(i+2)]);
                 nerrs++;
             }
     }
@@ -184,7 +183,7 @@ int main(int argc, char **argv) {
     MPI_Type_free(&buftype);
     free(ncbuf);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -203,5 +202,5 @@ int main(int argc, char **argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/flexible2.c b/test/testcases/flexible2.c
index 5f22dc3..f9a9748 100644
--- a/test/testcases/flexible2.c
+++ b/test/testcases/flexible2.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: flexible2.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: flexible2.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -86,8 +86,6 @@
 #define NY 5
 #define NX 5
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 int main(int argc, char** argv)
 {
     char filename[256];
@@ -105,7 +103,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -121,18 +119,18 @@ int main(int argc, char** argv)
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* define 3 dimensions */
-    err = ncmpi_def_dim(ncid, "Z", NZ*nprocs, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "Y", NY,        &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX*nprocs, &dimid[2]); ERR
+    err = ncmpi_def_dim(ncid, "Z", NZ*nprocs, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", NY,        &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX*nprocs, &dimid[2]); CHECK_ERR
 
     /* define a variable of size (NZ * nprocs) * NY */
-    err = ncmpi_def_var(ncid, "var_zy", NC_INT,   2, &dimid[0], &varid0); ERR
+    err = ncmpi_def_var(ncid, "var_zy", NC_INT,   2, &dimid[0], &varid0); CHECK_ERR
     /* define a variable of size NY * (NX * nprocs) */
-    err = ncmpi_def_var(ncid, "var_yx", NC_FLOAT, 2, &dimid[1], &varid1); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_var(ncid, "var_yx", NC_FLOAT, 2, &dimid[1], &varid1); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* var_zy is partitioned along Z dimension */
     array_of_sizes[0]    = NZ + 2*ghost_len;
@@ -153,12 +151,12 @@ int main(int argc, char** argv)
     count[0] = NZ;        count[1] = NY;
     /* calling a blocking flexible API */
     err = ncmpi_put_vara_all(ncid, varid0, start, count, buf_zy, 1, subarray);
-    ERR
+    CHECK_ERR
 
     /* check the contents of put buffer */
     for (i=0; i<buffer_len; i++) {
         if (buf_zy[i] != rank+10) {
-            printf("Error put buffer[%d] is altered\n",i);
+            printf("Error at line %d in %s: put buffer[%d] is altered\n",__LINE__,__FILE__,i);
             nerrs++;
         }
     }
@@ -166,7 +164,7 @@ int main(int argc, char** argv)
     for (i=0; i<buffer_len; i++) buf_zy[i] = -1;
     /* calling a blocking flexible API */
     err = ncmpi_get_vara_all(ncid, varid0, start, count, buf_zy, 1, subarray);
-    ERR
+    CHECK_ERR
 
     /* check the contents of get buffer */
     for (i=0; i<array_of_sizes[0]; i++) {
@@ -213,14 +211,14 @@ int main(int argc, char** argv)
 
     /* calling a non-blocking flexible API */
     err = ncmpi_iput_vara(ncid, varid1, start, count, buf_yx, 1, subarray,&req);
-    ERR
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
-    err = status; ERR
+    CHECK_ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
+    err = status; CHECK_ERR
 
     /* check the contents of put buffer */
     for (i=0; i<buffer_len; i++) {
         if (buf_yx[i] != rank+10) {
-            printf("Error iput buffer[%d]=%f is altered\n",i,buf_yx[i]);
+            printf("Error at line %d in %s: iput buffer[%d]=%f is altered\n",__LINE__,__FILE__,i,buf_yx[i]);
             nerrs++;
         }
     }
@@ -229,9 +227,9 @@ int main(int argc, char** argv)
 
     /* calling a non-blocking flexible API */
     err = ncmpi_iget_vara(ncid, varid1, start, count, buf_yx, 1, subarray,&req);
-    ERR
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
-    err = status; ERR
+    CHECK_ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
+    err = status; CHECK_ERR
 
     /* check the contents of iget buffer */
     for (i=0; i<array_of_sizes[0]; i++) {
@@ -257,7 +255,7 @@ int main(int argc, char** argv)
     free(buf_yx);
     MPI_Type_free(&subarray);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -276,6 +274,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/flexible_varm.c b/test/testcases/flexible_varm.c
index 9b22224..f2d8641 100644
--- a/test/testcases/flexible_varm.c
+++ b/test/testcases/flexible_varm.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: flexible_varm.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: flexible_varm.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *
@@ -56,8 +56,6 @@
 #define NX 4
 #define GHOST 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 #define INIT_PUT_BUF \
     for (i=0; i<array_of_sizes[0]; i++) { \
         for (j=0; j<array_of_sizes[1]; j++) { \
@@ -75,15 +73,15 @@
             if (i < GHOST || GHOST+array_of_subsizes[0] <= i || \
                 j < GHOST || GHOST+array_of_subsizes[1] <= j) { \
                 if (buf[i][j] != -1) { \
-                    printf("Error: put buffer altered buffer[%d][%d]=%d\n", \
-                           i,j,buf[i][j]); \
+                    printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%d\n", \
+                           __LINE__,__FILE__,i,j,buf[i][j]); \
                     nerrs++; \
                 } \
             } \
             else { \
                 if (buf[i][j] != (i-GHOST)*array_of_subsizes[1]+(j-GHOST)) { \
-                    printf("Error: put buffer altered buffer[%d][%d]=%d\n", \
-                           i,j,buf[i][j]); \
+                    printf("Error at line %d in %s: put buffer altered buffer[%d][%d]=%d\n", \
+                           __LINE__,__FILE__,i,j,buf[i][j]); \
                     nerrs++; \
                 } \
             } \
@@ -133,7 +131,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -149,15 +147,15 @@ int main(int argc, char** argv)
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* define 2 dimensions */
-    err = ncmpi_def_dim(ncid, "Y", NY,        &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX*nprocs, &dimid[1]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NY,        &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX*nprocs, &dimid[1]); CHECK_ERR
 
     /* define a variable of size NY * (NX * nprocs) */
-    err = ncmpi_def_var(ncid, "var", NC_DOUBLE, 2, dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_var(ncid, "var", NC_DOUBLE, 2, dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
      start[0] = 0;  start[1] = NX * rank;
      count[0] = NY; count[1] = NX;
@@ -180,7 +178,7 @@ int main(int argc, char** argv)
     INIT_PUT_BUF
     err = ncmpi_put_varm_all(ncid, varid, start, count, stride, imap, buf,
                              1, subarray);
-    ERR
+    CHECK_ERR
 
     /* check the contents of put buffer */
     CHECK_PUT_BUF
@@ -190,9 +188,9 @@ int main(int argc, char** argv)
     INIT_PUT_BUF
     err = ncmpi_iput_varm(ncid, varid, start, count, stride, imap, buf,
                           1, subarray, &req);
-    ERR
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
-    err = status; ERR
+    CHECK_ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
+    err = status; CHECK_ERR
 
     /* check the contents of put buffer */
     CHECK_PUT_BUF
@@ -204,7 +202,7 @@ int main(int argc, char** argv)
     /* calling a blocking flexible API */
     err = ncmpi_get_varm_all(ncid, varid, start, count, stride, imap, buf,
                              1, subarray);
-    ERR
+    CHECK_ERR
 
     /* check the contents of get buffer */
     CHECK_GET_BUF
@@ -216,16 +214,16 @@ int main(int argc, char** argv)
     /* calling a blocking flexible API */
     err = ncmpi_iget_varm(ncid, varid, start, count, stride, imap, buf,
                           1, subarray, &req);
-    ERR
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
-    err = status; ERR
+    CHECK_ERR
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
+    err = status; CHECK_ERR
 
     /* check the contents of get buffer */
     CHECK_GET_BUF
 
     MPI_Type_free(&subarray);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -244,6 +242,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/geopotential.ncdump b/test/testcases/geopotential.ncdump
deleted file mode 100644
index 511bef7..0000000
--- a/test/testcases/geopotential.ncdump
+++ /dev/null
@@ -1,48 +0,0 @@
-netcdf r6_geopotential_19010101_100000 {
-dimensions:
-	time = UNLIMITED ; // (3 currently)
-	cells = 40962 ;
-	cellneighbors = 6 ;
-	interfaces = 26 ;
-	cellcorners = 6 ;
-variables:
-	double time(time) ;
-		time:long_name = "Time" ;
-		time:units = "days since 01-01-1901" ;
-		time:standard_name = "time" ;
-		time:calendar = "no leap year" ;
-	float grid_center_lat(cells) ;
-		grid_center_lat:long_name = "Latitude of cell center" ;
-		grid_center_lat:units = "radians" ;
-		grid_center_lat:standard_name = "latitude" ;
-		grid_center_lat:bounds = "grid_corner_lat" ;
-	float grid_center_lon(cells) ;
-		grid_center_lon:long_name = "Longitude of cell center" ;
-		grid_center_lon:units = "radians" ;
-		grid_center_lon:standard_name = "longitude" ;
-		grid_center_lon:bounds = "grid_corner_lon" ;
-	float area(cells) ;
-		area:long_name = "Cell area" ;
-		area:units = "square radians" ;
-	int cell_neighbors(cells, cellneighbors) ;
-		cell_neighbors:long_name = "List of neighbors to this cell" ;
-		cell_neighbors:units = "unitless" ;
-	float interfaces(interfaces) ;
-		interfaces:long_name = "Vertical interfaces, in terms of pressure" ;
-		interfaces:units = "Pa" ;
-		interfaces:positive = "down" ;
-		interfaces:axis = "Z" ;
-	float geopotential(time, cells, interfaces) ;
-		geopotential:long_name = "Geo Potential" ;
-		geopotential:units = "m**2/sec**2" ;
-		geopotential:coordinates = "grid_center_lat grid_center_lon" ;
-	float grid_corner_lat(cells, cellcorners) ;
-		grid_corner_lat:long_name = "Latitude of cell corner" ;
-		grid_corner_lat:units = "radians" ;
-	float grid_corner_lon(cells, cellcorners) ;
-		grid_corner_lon:long_name = "Longitude of cell corner" ;
-		grid_corner_lon:units = "radians" ;
-
-// global attributes:
-		:history = "Fri Jan 23 15:41:48 2009: ncks -v grid_corner_lat,grid_corner_lon wind_19010101_100000.nc -A geopotential_19010101_100000.nc" ;
-}
diff --git a/test/testcases/inq_num_vars.c b/test/testcases/inq_num_vars.c
index 7b2358a..d39e584 100644
--- a/test/testcases/inq_num_vars.c
+++ b/test/testcases/inq_num_vars.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: inq_num_vars.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: inq_num_vars.c 3422 2017-09-25 05:42:52Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -11,7 +11,7 @@
  * sized variables correctly. It first defines some number of fixed-size and
  * record variables and then calls the APIs
  *     ncmpi_inq_num_rec_vars() and ncmpi_inq_num_fix_vars()
- * to varify if the numbers are correct.
+ * to verify if the numbers are correct.
  *
  * The compile and run commands are given below. This program is to be run on
  * one MPI process.
@@ -30,38 +30,39 @@
 
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR)printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}
-
 static
-void check_num_vars(int  ncid,
+int check_num_vars(int  ncid,
                     int  expected_nvars,
                     int  expected_num_rec_vars,
-                    int  expected_num_fix_vars,
-                    int *nerrs)
+                    int  expected_num_fix_vars)
 {
-    int err, nvars, num_rec_vars, num_fix_vars;
+    int err, nerrs=0, nvars, num_rec_vars, num_fix_vars;
 
-    err = ncmpi_inq_nvars(ncid, &nvars); ERR
-    err = ncmpi_inq_num_rec_vars(ncid, &num_rec_vars); ERR
-    err = ncmpi_inq_num_fix_vars(ncid, &num_fix_vars); ERR
+    err = ncmpi_inq_nvars(ncid, &nvars); CHECK_ERR
+    err = ncmpi_inq_num_rec_vars(ncid, &num_rec_vars); CHECK_ERR
+    err = ncmpi_inq_num_fix_vars(ncid, &num_fix_vars); CHECK_ERR
 
     if (nvars != expected_nvars) {
-        printf("Error: expecting %d number of variables defined, but got %d\n", expected_nvars, nvars);
-        (*nerrs)++;
+        printf("Error at line %d in %s: expecting %d number of variables defined, but got %d\n",
+        __LINE__,__FILE__,expected_nvars, nvars);
+        nerrs++;
     }
     if (num_rec_vars != expected_num_rec_vars) {
-        printf("Error: expecting %d number of record variables defined, but got %d\n", expected_num_rec_vars, num_rec_vars);
-        (*nerrs)++;
+        printf("Error at line %d in %s: expecting %d number of record variables defined, but got %d\n",
+        __LINE__,__FILE__,expected_num_rec_vars, num_rec_vars);
+        nerrs++;
     }
     if (num_fix_vars != expected_num_fix_vars) {
-        printf("Error: expecting %d number of fixed-size variables defined, but got %d\n", expected_num_fix_vars, num_fix_vars);
-        (*nerrs)++;
+        printf("Error at line %d in %s: expecting %d number of fixed-size variables defined, but got %d\n",
+        __LINE__,__FILE__,expected_num_fix_vars, num_fix_vars);
+        nerrs++;
     }
+    return nerrs;
 }
 
 int main(int argc, char** argv) {
     char filename[256];
-    int nerrs, rank, nprocs, err;
+    int nerrs=0, rank, nprocs, err;
     int ncid, cmode, varid[7], dimid[3];
     MPI_Info info=MPI_INFO_NULL;
 
@@ -87,33 +88,33 @@ int main(int argc, char** argv) {
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER;
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
 
     /* define dimension and variable */
-    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "Y",       2,            &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "X",       10,           &dimid[2]); ERR
+    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y",       2,            &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X",       10,           &dimid[2]); CHECK_ERR
 
     nerrs = 0;
 
-    err = ncmpi_def_var(ncid, "REC_VAR_1", NC_INT, 1, dimid, &varid[0]); ERR
-    err = ncmpi_def_var(ncid, "REC_VAR_2", NC_INT, 3, dimid, &varid[1]); ERR
-    err = ncmpi_def_var(ncid, "REC_VAR_3", NC_INT, 2, dimid, &varid[2]); ERR
-    err = ncmpi_def_var(ncid, "REC_VAR_4", NC_INT, 1, dimid, &varid[3]); ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_1", NC_INT, 1, dimid, &varid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_2", NC_INT, 3, dimid, &varid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_3", NC_INT, 2, dimid, &varid[2]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_4", NC_INT, 1, dimid, &varid[3]); CHECK_ERR
 
-    check_num_vars(ncid, 4, 4, 0, &nerrs);
+    nerrs += check_num_vars(ncid, 4, 4, 0);
 
-    err = ncmpi_def_var(ncid, "FIX_VAR_1", NC_INT, 2, dimid+1, &varid[4]); ERR
-    err = ncmpi_def_var(ncid, "FIX_VAR_2", NC_INT, 1, dimid+1, &varid[5]); ERR
-    err = ncmpi_def_var(ncid, "FIX_VAR_3", NC_INT, 1, dimid+2, &varid[6]); ERR
+    err = ncmpi_def_var(ncid, "FIX_VAR_1", NC_INT, 2, dimid+1, &varid[4]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "FIX_VAR_2", NC_INT, 1, dimid+1, &varid[5]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "FIX_VAR_3", NC_INT, 1, dimid+2, &varid[6]); CHECK_ERR
 
-    check_num_vars(ncid, 7, 4, 3, &nerrs);
+    nerrs += check_num_vars(ncid, 7, 4, 3);
 
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
-    check_num_vars(ncid, 7, 4, 3, &nerrs);
+    nerrs += check_num_vars(ncid, 7, 4, 3);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -133,6 +134,6 @@ int main(int argc, char** argv) {
 
 fn_exit:
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/inq_num_varsf.f90 b/test/testcases/inq_num_varsf.f90
index 319cfdc..9782f69 100644
--- a/test/testcases/inq_num_varsf.f90
+++ b/test/testcases/inq_num_varsf.f90
@@ -2,14 +2,14 @@
 !   Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: inq_num_varsf.f90 2638 2016-11-18 14:51:02Z wkliao $
+! $Id: inq_num_varsf.f90 3422 2017-09-25 05:42:52Z wkliao $
 
 !
 ! This program tests if one can get the number of record variables and
 ! fixed-size variables correctly. It first defines some number of
 ! fixed-size and record variables and then calls the APIs
 !     ncmpi_inq_num_rec_vars() and ncmpi_inq_num_fix_vars()
-! to varify if the numbers are correct.
+! to verify if the numbers are correct.
 !
 ! The compile and run commands are given below. This program is to be
 ! run on one MPI process.
@@ -165,5 +165,7 @@
           endif
 
  999      call MPI_Finalize(ierr)
+          if (nerrs .GT. 0) stop 2
+
       end program main
 
diff --git a/test/testcases/inq_recsize.c b/test/testcases/inq_recsize.c
index a62256b..f5e3511 100644
--- a/test/testcases/inq_recsize.c
+++ b/test/testcases/inq_recsize.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: inq_recsize.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: inq_recsize.c 3422 2017-09-25 05:42:52Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -10,7 +10,7 @@
  * This program tests if one can get the size of record block correctly. The
  * record block size is the sum of individual record of all record variables.
  * It first defines some number of record and fixed-size variables and then
- * calls the API ncmpi_inq_recsize() and varify if the numbers are correct.
+ * calls the API ncmpi_inq_recsize() and verify if the numbers are correct.
  *
  * The compile and run commands are given below. This program is to be run on
  * one MPI process.
@@ -29,11 +29,9 @@
 
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR)printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}
-
 int main(int argc, char** argv) {
     char filename[256];
-    int nerrs, rank, nprocs, err;
+    int nerrs=0, rank, nprocs, err;
     int ncid, cmode, varid[7], dimid[3];
     MPI_Offset expected_recsize, recsize;
     MPI_Info info=MPI_INFO_NULL;
@@ -60,40 +58,41 @@ int main(int argc, char** argv) {
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER;
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, info, &ncid); CHECK_ERR
 
     /* define dimension and variable */
-    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "Y",       2,            &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "X",       10,           &dimid[2]); ERR
+    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y",       2,            &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X",       10,           &dimid[2]); CHECK_ERR
 
     nerrs = 0;
     expected_recsize = 0;
 
     /* define some record variables */
-    err = ncmpi_def_var(ncid, "REC_VAR_1", NC_INT, 1, dimid, &varid[0]); ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_1", NC_INT, 1, dimid, &varid[0]); CHECK_ERR
     expected_recsize += sizeof(int);
-    err = ncmpi_def_var(ncid, "REC_VAR_2", NC_INT, 3, dimid, &varid[1]); ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_2", NC_INT, 3, dimid, &varid[1]); CHECK_ERR
     expected_recsize += 2 * 10 * sizeof(int);
-    err = ncmpi_def_var(ncid, "REC_VAR_3", NC_INT, 2, dimid, &varid[2]); ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_3", NC_INT, 2, dimid, &varid[2]); CHECK_ERR
     expected_recsize += 2 * sizeof(int);
-    err = ncmpi_def_var(ncid, "REC_VAR_4", NC_INT, 1, dimid, &varid[3]); ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_4", NC_INT, 1, dimid, &varid[3]); CHECK_ERR
     expected_recsize += sizeof(int);
 
     /* define some fixed-size variables */
-    err = ncmpi_def_var(ncid, "FIX_VAR_1", NC_INT, 2, dimid+1, &varid[4]); ERR
-    err = ncmpi_def_var(ncid, "FIX_VAR_2", NC_INT, 1, dimid+1, &varid[5]); ERR
-    err = ncmpi_def_var(ncid, "FIX_VAR_3", NC_INT, 1, dimid+2, &varid[6]); ERR
+    err = ncmpi_def_var(ncid, "FIX_VAR_1", NC_INT, 2, dimid+1, &varid[4]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "FIX_VAR_2", NC_INT, 1, dimid+1, &varid[5]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "FIX_VAR_3", NC_INT, 1, dimid+2, &varid[6]); CHECK_ERR
 
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
-    err = ncmpi_inq_recsize(ncid, &recsize); ERR
+    err = ncmpi_inq_recsize(ncid, &recsize); CHECK_ERR
     if (expected_recsize != recsize) {
-        printf("Error at line %d: expecting record size %lld but got %lld\n", __LINE__,expected_recsize, recsize);
+        printf("Error at line %d in %s: expecting record size %lld but got %lld\n",
+        __LINE__,__FILE__,expected_recsize, recsize);
         nerrs++;
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -113,6 +112,6 @@ int main(int argc, char** argv) {
 
 fn_exit:
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/inq_recsizef.f90 b/test/testcases/inq_recsizef.f90
index 522ee8c..1d35b78 100644
--- a/test/testcases/inq_recsizef.f90
+++ b/test/testcases/inq_recsizef.f90
@@ -2,13 +2,13 @@
 !   Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: inq_recsizef.f90 2638 2016-11-18 14:51:02Z wkliao $
+! $Id: inq_recsizef.f90 3422 2017-09-25 05:42:52Z wkliao $
 
 !
 ! This program tests if one can get the size of record block correctly.
 ! The record block size is the sum of individual record of all record
 ! variables. It first defines some number of record and fixed-size
-! variables and then calls the API ncmpi_inq_recsize() and varify if
+! variables and then calls the API ncmpi_inq_recsize() and verify if
 ! the numbers are ! correct.
 !
 ! The compile and run commands are given below. This program is to be
@@ -140,5 +140,7 @@
           endif
 
  999      call MPI_Finalize(ierr)
+          if (nerrs .GT. 0) stop 2
+
       end program main
 
diff --git a/test/testcases/interop1.sh b/test/testcases/interop1.sh
deleted file mode 100755
index 77225fc..0000000
--- a/test/testcases/interop1.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-# a test to ensure we can work with files created by serial netcdf.  does
-# require both ncgen and ncdump to be in your path.
-
-# Step 0: see if we have the utilities in our path:
-
-which ncgen >/dev/null 
-
-if [ $? -ne 0 ] ; then
-	echo "could not find 'ncgen' (from serial netcdf) in path. exiting"
-	exit 1
-fi
-
-which ncmpidump >/dev/null
-
-if [ $? -ne 0 ] ; then
-	echo "could not find 'ncmpidump' (from parallel-netcdf) in path. exiting"
-	exit 1
-fi
-
-OUTPUT=geo-${RANDOM}-${RANDOM}.nc
-rm -f $OUTPUT
-
-# Step 1: create the file:
-ncgen -b -v 2 -o $OUTPUT geopotential.ncdump
-
-# step 2: ensure we can at least parse the header
-ncmpidump -h $OUTPUT >/dev/null
-
-if [ $? -ne 0 ] ; then
-	echo "error parsing generated netcdf file!"
-	exit 1
-else
-	echo " No Errors"
-	rm $OUTPUT
-	exit 0
-fi
diff --git a/test/testcases/ivarn.c b/test/testcases/ivarn.c
index 3a366c8..5b52e19 100644
--- a/test/testcases/ivarn.c
+++ b/test/testcases/ivarn.c
@@ -4,13 +4,13 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: ivarn.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: ivarn.c 3422 2017-09-25 05:42:52Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests using calls to ncmpi_iput_varn_int(),
  * ncmpi_iput_varn_float(), ncmpi_iput_varn_double() to write a sequence of
  * requests with arbitrary array indices and lengths. Note that the request IDs
- * in the argument array_of_requests[] of ncmpi_wait_all() are in an arbitray
+ * in the argument array_of_requests[] of ncmpi_wait_all() are in an arbitrary
  * order (instead in an increasing order).
  *
  * The compile and run commands are given below, together with an ncmpidump of
@@ -65,7 +65,6 @@
 #include <testutils.h>
 
 #define LEN 16
-#define ERR {if(err!=NC_NOERR)printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}
 
 static
 int check_int_buf(int *buffer)
@@ -173,7 +172,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -193,17 +192,17 @@ int main(int argc, char** argv)
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
-    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
-
-    err = ncmpi_def_dim(ncid, "dim000001", LEN, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "time", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_var(ncid, "vari0001", NC_INT, 2, dimid, &vari0001); ERR
-    err = ncmpi_def_var(ncid, "varr0001", NC_FLOAT, 2, dimid, &varr0001); ERR
-    err = ncmpi_def_var(ncid, "vard0001", NC_DOUBLE, 2, dimid, &vard0001); ERR
-    err = ncmpi_def_var(ncid, "vari0002", NC_INT, 2, dimid, &vari0002); ERR
-    err = ncmpi_def_var(ncid, "varr0002", NC_FLOAT, 2, dimid, &varr0002); ERR
-    err = ncmpi_def_var(ncid, "vard0002", NC_DOUBLE, 2, dimid, &vard0002); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); CHECK_ERR
+
+    err = ncmpi_def_dim(ncid, "dim000001", LEN, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "time", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "vari0001", NC_INT, 2, dimid, &vari0001); CHECK_ERR
+    err = ncmpi_def_var(ncid, "varr0001", NC_FLOAT, 2, dimid, &varr0001); CHECK_ERR
+    err = ncmpi_def_var(ncid, "vard0001", NC_DOUBLE, 2, dimid, &vard0001); CHECK_ERR
+    err = ncmpi_def_var(ncid, "vari0002", NC_INT, 2, dimid, &vari0002); CHECK_ERR
+    err = ncmpi_def_var(ncid, "varr0002", NC_FLOAT, 2, dimid, &varr0002); CHECK_ERR
+    err = ncmpi_def_var(ncid, "vard0002", NC_DOUBLE, 2, dimid, &vard0002); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     starts    = (MPI_Offset**) malloc(2 *    sizeof(MPI_Offset*));
     counts    = (MPI_Offset**) malloc(2 *    sizeof(MPI_Offset*));
@@ -219,44 +218,44 @@ int main(int argc, char** argv)
         /* vari0001 and vari0002 */
         starts[0][0] = 0; starts[0][1] = 1; counts[0][0] = 1; counts[0][1] = 1;
         ibuf1[0] = NC_FILL_INT;
-        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1, &req[1]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1, &req[1]); CHECK_ERR
         ibuf2[0] = NC_FILL_INT;
-        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2, &req[7]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2, &req[7]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 0; counts[0][0] = 1; counts[0][1] = 1;
         starts[1][0] = 0; starts[1][1] = 2; counts[1][0] = 1; counts[1][1] = 2;
         ibuf1[1] = 1; ibuf1[2] = 3; ibuf1[3] = 4;
-        err = ncmpi_iput_varn_int(ncid, vari0001, 2, starts, counts, ibuf1+1, &req[0]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0001, 2, starts, counts, ibuf1+1, &req[0]); CHECK_ERR
         ibuf2[1] = 1; ibuf2[2] = 3; ibuf2[3] = 4;
-        err = ncmpi_iput_varn_int(ncid, vari0002, 2, starts, counts, ibuf2+1, &req[6]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0002, 2, starts, counts, ibuf2+1, &req[6]); CHECK_ERR
 
         /* varr0001 and varr0002 */
         starts[0][0] = 0; starts[0][1] = 1; counts[0][0] = 1; counts[0][1] = 1;
         rbuf1[0] = NC_FILL_FLOAT;
-        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1, &req[3]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1, &req[3]); CHECK_ERR
         rbuf2[0] = NC_FILL_FLOAT;
-        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2, &req[9]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2, &req[9]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 0; counts[0][0] = 1; counts[0][1] = 1;
         starts[1][0] = 0; starts[1][1] = 2; counts[1][0] = 1; counts[1][1] = 2;
         rbuf1[1] = 1.1; rbuf1[2] = 3.1; rbuf1[3] = 4.1;
-        err = ncmpi_iput_varn_float(ncid, varr0001, 2, starts, counts, rbuf1+1, &req[2]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0001, 2, starts, counts, rbuf1+1, &req[2]); CHECK_ERR
         rbuf2[1] = 1.2; rbuf2[2] = 3.2; rbuf2[3] = 4.2;
-        err = ncmpi_iput_varn_float(ncid, varr0002, 2, starts, counts, rbuf2+1, &req[8]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0002, 2, starts, counts, rbuf2+1, &req[8]); CHECK_ERR
 
         /* vard0001 and vard0002 */
         starts[0][0] = 0; starts[0][1] = 1; counts[0][0] = 1; counts[0][1] = 1;
         dbuf1[0] = NC_FILL_DOUBLE;
-        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1, &req[5]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1, &req[5]); CHECK_ERR
         dbuf2[0] = NC_FILL_DOUBLE;
-        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2, &req[11]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2, &req[11]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 0; counts[0][0] = 1; counts[0][1] = 1;
         starts[1][0] = 0; starts[1][1] = 2; counts[1][0] = 1; counts[1][1] = 2;
         dbuf1[1] = 1.3; dbuf1[2] = 3.3; dbuf1[3] = 4.3;
-        err = ncmpi_iput_varn_double(ncid, vard0001, 2, starts, counts, dbuf1+1, &req[4]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0001, 2, starts, counts, dbuf1+1, &req[4]); CHECK_ERR
         dbuf2[1] = 1.4; dbuf2[2] = 3.4; dbuf2[3] = 4.4;
-        err = ncmpi_iput_varn_double(ncid, vard0002, 2, starts, counts, dbuf2+1, &req[10]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0002, 2, starts, counts, dbuf2+1, &req[10]); CHECK_ERR
 
         num_reqs = 12;
         /* rank 0 is writing the followings: ("x" means skip, "-" means fill value)
@@ -266,41 +265,41 @@ int main(int argc, char** argv)
         /* vari0001 and vari0002 */
         starts[0][0] = 0; starts[0][1] = 7; counts[0][0] = 1; counts[0][1] = 1;
         ibuf1[0] = NC_FILL_INT;
-        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1, &req[1]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1, &req[1]); CHECK_ERR
         ibuf2[0] = NC_FILL_INT;
-        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2, &req[7]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2, &req[7]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 8; counts[0][0] = 1; counts[0][1] = 4;
         ibuf1[1] = 9; ibuf1[2] = 10; ibuf1[3] = 11; ibuf1[4] = 12;
-        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1+1, &req[0]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1+1, &req[0]); CHECK_ERR
         ibuf2[1] = 9; ibuf2[2] = 10; ibuf2[3] = 11; ibuf2[4] = 12;
-        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2+1, &req[6]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2+1, &req[6]); CHECK_ERR
 
         /* varr0001 and varr0002 */
         starts[0][0] = 0; starts[0][1] = 7; counts[0][0] = 1; counts[0][1] = 1;
         rbuf1[0] = NC_FILL_FLOAT;
-        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1, &req[3]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1, &req[3]); CHECK_ERR
         rbuf2[0] = NC_FILL_FLOAT;
-        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2, &req[9]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2, &req[9]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 8; counts[0][0] = 1; counts[0][1] = 4;
         rbuf1[1] = 9.1; rbuf1[2] = 10.1; rbuf1[3] = 11.1; rbuf1[4] = 12.1;
-        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1+1, &req[2]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1+1, &req[2]); CHECK_ERR
         rbuf2[1] = 9.2; rbuf2[2] = 10.2; rbuf2[3] = 11.2; rbuf2[4] = 12.2;
-        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2+1, &req[8]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2+1, &req[8]); CHECK_ERR
 
         /* vard0001 and vard0002 */
         starts[0][0] = 0; starts[0][1] = 7; counts[0][0] = 1; counts[0][1] = 1;
         dbuf1[0] = NC_FILL_DOUBLE;
-        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1, &req[5]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1, &req[5]); CHECK_ERR
         dbuf2[0] = NC_FILL_DOUBLE;
-        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2, &req[11]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2, &req[11]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 8; counts[0][0] = 1; counts[0][1] = 4;
         dbuf1[1] = 9.3; dbuf1[2] = 10.3; dbuf1[3] = 11.3; dbuf1[4] = 12.3;
-        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1+1, &req[4]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1+1, &req[4]); CHECK_ERR
         dbuf2[1] = 9.4; dbuf2[2] = 10.4; dbuf2[3] = 11.4; dbuf2[4] = 12.4;
-        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2+1, &req[10]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2+1, &req[10]); CHECK_ERR
 
         num_reqs = 12;
         /* rank 1 is writing the followings: ("x" means skip, "-" means fill value)
@@ -311,21 +310,21 @@ int main(int argc, char** argv)
         /* vari0001 and vari0002 */
         starts[0][0] = 0; starts[0][1] = 4; counts[0][0] = 1; counts[0][1] = 3;
         ibuf1[0] = 5; ibuf1[1] = 6; ibuf1[2] = 7;
-        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1, &req[0]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1, &req[0]); CHECK_ERR
         ibuf2[0] = 5; ibuf2[1] = 6; ibuf2[2] = 7;
-        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2, &req[1]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2, &req[1]); CHECK_ERR
 
         /* varr0001 and varr0002 */
         rbuf1[0] = 5.1; rbuf1[1] = 6.1; rbuf1[2] = 7.1;
-        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1, &req[2]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1, &req[2]); CHECK_ERR
         rbuf2[0] = 5.2; rbuf2[1] = 6.2; rbuf2[2] = 7.2;
-        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2, &req[3]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2, &req[3]); CHECK_ERR
 
         /* vard0001 and vard0002 */
         dbuf1[0] = 5.3; dbuf1[1] = 6.3; dbuf1[2] = 7.3;
-        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1, &req[4]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1, &req[4]); CHECK_ERR
         dbuf2[0] = 5.4; dbuf2[1] = 6.4; dbuf2[2] = 7.4;
-        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2, &req[5]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2, &req[5]); CHECK_ERR
 
         num_reqs = 6;
         /* rank 2 is writing the followings: ("x" means skip, "-" means fill value)
@@ -336,44 +335,44 @@ int main(int argc, char** argv)
         /* vari0001 and vari0002 */
         starts[0][0] = 0; starts[0][1] = 14; counts[0][0] = 1; counts[0][1] = 1;
         ibuf1[0] = NC_FILL_INT;
-        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1, &req[0]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0001, 1, starts, counts, ibuf1, &req[0]); CHECK_ERR
         ibuf2[0] = NC_FILL_INT;
-        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2, &req[1]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0002, 1, starts, counts, ibuf2, &req[1]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 12; counts[0][0] = 1; counts[0][1] = 2;
         starts[1][0] = 0; starts[1][1] = 15; counts[1][0] = 1; counts[1][1] = 1;
         ibuf1[1] = 13; ibuf1[2] = 14; ibuf1[3] = 16;
-        err = ncmpi_iput_varn_int(ncid, vari0001, 2, starts, counts, ibuf1+1, &req[2]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0001, 2, starts, counts, ibuf1+1, &req[2]); CHECK_ERR
         ibuf2[1] = 13; ibuf2[2] = 14; ibuf2[3] = 16;
-        err = ncmpi_iput_varn_int(ncid, vari0002, 2, starts, counts, ibuf2+1, &req[3]); ERR
+        err = ncmpi_iput_varn_int(ncid, vari0002, 2, starts, counts, ibuf2+1, &req[3]); CHECK_ERR
 
         /* varr0001 and varr0002 */
         starts[0][0] = 0; starts[0][1] = 14; counts[0][0] = 1; counts[0][1] = 1;
         rbuf1[0] = NC_FILL_FLOAT;
-        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1, &req[4]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0001, 1, starts, counts, rbuf1, &req[4]); CHECK_ERR
         rbuf2[0] = NC_FILL_FLOAT;
-        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2, &req[5]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0002, 1, starts, counts, rbuf2, &req[5]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 12; counts[0][0] = 1; counts[0][1] = 2;
         starts[1][0] = 0; starts[1][1] = 15; counts[1][0] = 1; counts[1][1] = 1;
         rbuf1[1] = 13.1; rbuf1[2] = 14.1; rbuf1[3] = 16.1;
-        err = ncmpi_iput_varn_float(ncid, varr0001, 2, starts, counts, rbuf1+1, &req[6]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0001, 2, starts, counts, rbuf1+1, &req[6]); CHECK_ERR
         rbuf2[1] = 13.2; rbuf2[2] = 14.2; rbuf2[3] = 16.2;
-        err = ncmpi_iput_varn_float(ncid, varr0002, 2, starts, counts, rbuf2+1, &req[7]); ERR
+        err = ncmpi_iput_varn_float(ncid, varr0002, 2, starts, counts, rbuf2+1, &req[7]); CHECK_ERR
 
         /* vard0001 and vard0002 */
         starts[0][0] = 0; starts[0][1] = 14; counts[0][0] = 1; counts[0][1] = 1;
         dbuf1[0] = NC_FILL_DOUBLE;
-        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1, &req[8]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0001, 1, starts, counts, dbuf1, &req[8]); CHECK_ERR
         dbuf2[0] = NC_FILL_DOUBLE;
-        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2, &req[9]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0002, 1, starts, counts, dbuf2, &req[9]); CHECK_ERR
 
         starts[0][0] = 0; starts[0][1] = 12; counts[0][0] = 1; counts[0][1] = 2;
         starts[1][0] = 0; starts[1][1] = 15; counts[1][0] = 1; counts[1][1] = 1;
         dbuf1[1] = 13.3; dbuf1[2] = 14.3; dbuf1[3] = 16.3;
-        err = ncmpi_iput_varn_double(ncid, vard0001, 2, starts, counts, dbuf1+1, &req[10]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0001, 2, starts, counts, dbuf1+1, &req[10]); CHECK_ERR
         dbuf2[1] = 13.4; dbuf2[2] = 14.4; dbuf2[3] = 16.4;
-        err = ncmpi_iput_varn_double(ncid, vard0002, 2, starts, counts, dbuf2+1, &req[11]); ERR
+        err = ncmpi_iput_varn_double(ncid, vard0002, 2, starts, counts, dbuf2+1, &req[11]); CHECK_ERR
 
         num_reqs = 12;
         /* rank 3 is writing the followings: ("x" means skip, "-" means fill value)
@@ -382,52 +381,52 @@ int main(int argc, char** argv)
          */
     }
 
-    err = ncmpi_wait_all(ncid, num_reqs, req, st); ERR
+    err = ncmpi_wait_all(ncid, num_reqs, req, st); CHECK_ERR
     for (i=0; i<num_reqs; i++) {
-        err = st[i]; ERR
+        err = st[i]; CHECK_ERR
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     free(starts[0]);
     free(counts[0]);
     free(starts);
     free(counts);
 
-    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); ERR
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); CHECK_ERR
 
-    err = ncmpi_inq_varid(ncid, "vari0001", &vari0001); ERR
-    err = ncmpi_inq_varid(ncid, "varr0001", &varr0001); ERR
-    err = ncmpi_inq_varid(ncid, "vard0001", &vard0001); ERR
-    err = ncmpi_inq_varid(ncid, "vari0002", &vari0002); ERR
-    err = ncmpi_inq_varid(ncid, "varr0002", &varr0002); ERR
-    err = ncmpi_inq_varid(ncid, "vard0002", &vard0002); ERR
+    err = ncmpi_inq_varid(ncid, "vari0001", &vari0001); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "varr0001", &varr0001); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "vard0001", &vard0001); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "vari0002", &vari0002); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "varr0002", &varr0002); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "vard0002", &vard0002); CHECK_ERR
 
     for (i=0; i<LEN; i++) ibuf1[i] = -1;
-    err = ncmpi_get_var_int_all(ncid, vari0001, ibuf1); ERR
+    err = ncmpi_get_var_int_all(ncid, vari0001, ibuf1); CHECK_ERR
     nerrs += check_int_buf(ibuf1);
 
     for (i=0; i<LEN; i++) ibuf2[i] = -1;
-    err = ncmpi_get_var_int_all(ncid, vari0002, ibuf2); ERR
+    err = ncmpi_get_var_int_all(ncid, vari0002, ibuf2); CHECK_ERR
     nerrs += check_int_buf(ibuf2);
 
     for (i=0; i<LEN; i++) rbuf1[i] = -1;
-    err = ncmpi_get_var_float_all(ncid, varr0001, rbuf1); ERR
+    err = ncmpi_get_var_float_all(ncid, varr0001, rbuf1); CHECK_ERR
     nerrs += check_flt_buf(rbuf1, 0.1);
 
     for (i=0; i<LEN; i++) rbuf2[i] = -1;
-    err = ncmpi_get_var_float_all(ncid, varr0002, rbuf2); ERR
+    err = ncmpi_get_var_float_all(ncid, varr0002, rbuf2); CHECK_ERR
     nerrs += check_flt_buf(rbuf2, 0.2);
 
     for (i=0; i<LEN; i++) dbuf1[i] = -1;
-    err = ncmpi_get_var_double_all(ncid, vard0001, dbuf1); ERR
+    err = ncmpi_get_var_double_all(ncid, vard0001, dbuf1); CHECK_ERR
     nerrs += check_dbl_buf(dbuf1, 0.3);
 
     for (i=0; i<LEN; i++) dbuf2[i] = -1;
-    err = ncmpi_get_var_double_all(ncid, vard0002, dbuf2); ERR
+    err = ncmpi_get_var_double_all(ncid, vard0002, dbuf2); CHECK_ERR
     nerrs += check_dbl_buf(dbuf2, 0.4);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -446,6 +445,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/large_var_cdf5.c b/test/testcases/large_var_cdf5.c
new file mode 100644
index 0000000..25ce5b3
--- /dev/null
+++ b/test/testcases/large_var_cdf5.c
@@ -0,0 +1,90 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *****************************************************************************/
+/* $Id: large_var_cdf5.c 3446 2017-10-19 05:35:54Z wkliao $ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This program tests whether NC_EVARSIZE is thrown when defining large
+ * variables of size > NC_MAX_INT64 - 3.
+ *
+ *    To compile:
+ *        mpicc -O2 large_var_cdf5.c -o large_var_cdf5 -lpnetcdf
+ *
+ * Example commands for MPI run and outputs from running ncmpidump on the
+ * NC file produced by this example program:
+ *
+ *    % mpiexec -n 4 ./large_var_cdf5 /pvfs2/wkliao/testfile.nc
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libgen.h> /* basename() */
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+int main(int argc, char** argv)
+{
+    char filename[256];
+    int  rank, nprocs, err, nerrs=0, ncid, dimid[2], varid[2];
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+    MPI_Bcast(filename, 256, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for large var in CDF-5", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA,
+                       MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim0", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", NC_MAX_INT64, &dimid[1]); CHECK_ERR
+
+    err = ncmpi_def_var(ncid, "var0", NC_UINT, 1, &dimid[1], &varid[0]);
+    EXP_ERR(NC_EVARSIZE)
+
+    err = ncmpi_def_var(ncid, "var1", NC_UINT, 2, &dimid[0], &varid[1]);
+    EXP_ERR(NC_EVARSIZE)
+
+    err = ncmpi_set_fill(ncid, NC_NOFILL, NULL); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+        if (malloc_size > 0) ncmpi_inq_malloc_list();
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
+
diff --git a/test/testcases/last_large_var.c b/test/testcases/last_large_var.c
index 7926359..728daf6 100644
--- a/test/testcases/last_large_var.c
+++ b/test/testcases/last_large_var.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: last_large_var.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: last_large_var.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This program tests the special case when there is no record variable, the
@@ -49,8 +49,6 @@
 
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR){printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 static
 int check_last_var(char *filename)
 {
@@ -59,19 +57,19 @@ int check_last_var(char *filename)
     /* create a new file ---------------------------------------------------*/
     cmode = NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); ERR
-    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); CHECK_ERR
 
     /* define only fixed-size variables and the last one is "big" */
-    err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid+1, &varid); ERR
-    err = ncmpi_def_var(ncid, "var_last", NC_FLOAT, 2, dimid+2, &varid); ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid+1, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_last", NC_FLOAT, 2, dimid+2, &varid); CHECK_ERR
 
-    err = ncmpi_enddef(ncid); ERR
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -84,41 +82,38 @@ int check_fix_var(char *filename)
     /* create a new CDF-1 file ----------------------------------------------*/
     cmode = NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "X", 536870911, &dimid[0]); ERR
+    err = ncmpi_def_dim(ncid, "X", 536870911, &dimid[0]); CHECK_ERR
 
     /* define only fixed-size variables and no one is "big"
      * make the starting offset of last one > 2GiB (illegal for CDF-1)
      */
-    err = ncmpi_def_var(ncid, "var1", NC_INT,   1, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var2", NC_FLOAT, 1, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var3", NC_SHORT, 1, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var4", NC_INT,   1, dimid, &varid); ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT,   1, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var2", NC_FLOAT, 1, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var3", NC_SHORT, 1, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var4", NC_INT,   1, dimid, &varid); CHECK_ERR
 
     err = ncmpi_close(ncid);
-    if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_EVARSIZE)
 
     /* create a new CDF-2 file ----------------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_OFFSET;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "X", 536870911, &dimid[0]); ERR
+    err = ncmpi_def_dim(ncid, "X", 536870911, &dimid[0]); CHECK_ERR
 
     /* define only fixed-size variables and no one is "big"
      * make the starting offset of last one > 2GiB (legal for CDF-2)
      */
-    err = ncmpi_def_var(ncid, "var1", NC_INT,   1, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var2", NC_FLOAT, 1, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var3", NC_SHORT, 1, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var4", NC_INT,   1, dimid, &varid); ERR
+    err = ncmpi_def_var(ncid, "var1", NC_INT,   1, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var2", NC_FLOAT, 1, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var3", NC_SHORT, 1, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var4", NC_INT,   1, dimid, &varid); CHECK_ERR
 
-    err = ncmpi_enddef(ncid); ERR
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -131,27 +126,22 @@ int check_fix_rec_var(char *filename)
     /* create a new file ---------------------------------------------------*/
     cmode = NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); ERR
-    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); CHECK_ERR
 
     /* define a record variable */
-    err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var_last", NC_FLOAT, 2, dimid+2, &varid); ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_last", NC_FLOAT, 2, dimid+2, &varid); CHECK_ERR
 
     err = ncmpi_enddef(ncid);
-    if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_EVARSIZE)
+
     err = ncmpi_close(ncid);
-    if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_EVARSIZE)
 
     return nerrs;
 }
@@ -169,54 +159,51 @@ int check_rec_var(char *filename, int cmode)
     /* create a new file ---------------------------------------------------*/
     cmode |= NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Z", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "Y", 66661,        &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "X", 66661,        &dimid[2]); ERR
+    err = ncmpi_def_dim(ncid, "Z", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", 66661,        &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 66661,        &dimid[2]); CHECK_ERR
 
     /* define record variables: last one is large */
-    err = ncmpi_def_var(ncid, "var",       NC_INT,   1, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var_large", NC_FLOAT, 3, dimid, &varid); ERR
+    err = ncmpi_def_var(ncid, "var",       NC_INT,   1, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_large", NC_FLOAT, 3, dimid, &varid); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* create a new file ---------------------------------------------------*/
     cmode |= NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Z", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "Y", 1048576, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "X", 1000, &dimid[2]); ERR
+    err = ncmpi_def_dim(ncid, "Z", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", 1048576, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 1000, &dimid[2]); CHECK_ERR
 
     /* define record variables: both starting offsets are < 2^31-4 */
-    err = ncmpi_def_var(ncid, "var1", NC_SHORT, 3, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var2", NC_SHORT, 3, dimid, &varid); ERR
+    err = ncmpi_def_var(ncid, "var1", NC_SHORT, 3, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var2", NC_SHORT, 3, dimid, &varid); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* create a new file ---------------------------------------------------*/
     cmode |= NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Z", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "Y", 1048576, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "X", 1024, &dimid[2]); ERR
+    err = ncmpi_def_dim(ncid, "Z", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y", 1048576, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 1024, &dimid[2]); CHECK_ERR
 
     /* define record variables: some starting offsets are > 2^31-4 */
-    err = ncmpi_def_var(ncid, "var1", NC_SHORT, 3, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var2", NC_SHORT, 3, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var3", NC_SHORT, 3, dimid, &varid); ERR
-    err = ncmpi_def_var(ncid, "var4", NC_SHORT, 3, dimid, &varid); ERR
+    err = ncmpi_def_var(ncid, "var1", NC_SHORT, 3, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var2", NC_SHORT, 3, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var3", NC_SHORT, 3, dimid, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var4", NC_SHORT, 3, dimid, &varid); CHECK_ERR
 
     err = ncmpi_close(ncid);
-    if (cmode & NC_64BIT_OFFSET || cmode & NC_64BIT_DATA) ERR
-    else if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    if (cmode & NC_64BIT_OFFSET || cmode & NC_64BIT_DATA) CHECK_ERR
+    else EXP_ERR(NC_EVARSIZE)
 
     return nerrs;
 }
@@ -235,28 +222,23 @@ int check_not_last_var(char *filename)
     /* create a new file ---------------------------------------------------*/
     cmode = NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); ERR
-    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); CHECK_ERR
 
     /* the large variable is not the last */
-    err = ncmpi_def_var(ncid, "var_large", NC_FLOAT, 2, dimid+2, &varid); ERR
-    err = ncmpi_def_var(ncid, "var",       NC_INT,   1, dimid+1, &varid); ERR
+    err = ncmpi_def_var(ncid, "var_large", NC_FLOAT, 2, dimid+2, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var",       NC_INT,   1, dimid+1, &varid); CHECK_ERR
 
     err = ncmpi_enddef(ncid);
-    if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_EVARSIZE)
 
     err = ncmpi_close(ncid);
-    if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_EVARSIZE)
+
     return nerrs;
 }
 
@@ -268,33 +250,28 @@ int check_add_var(char *filename)
     /* create a new file ---------------------------------------------------*/
     cmode = NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); ERR
-    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); CHECK_ERR
 
-    err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid+1, &varid); ERR
-    err = ncmpi_def_var(ncid, "var_last", NC_FLOAT, 2, dimid+2, &varid); ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid+1, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_last", NC_FLOAT, 2, dimid+2, &varid); CHECK_ERR
 
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* add a new fixed-size variable */
-    err = ncmpi_redef(ncid); ERR
-    err = ncmpi_def_var(ncid, "var_new", NC_INT, 2, dimid, &varid); ERR
+    err = ncmpi_redef(ncid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_new", NC_INT, 2, dimid, &varid); CHECK_ERR
 
     err = ncmpi_enddef(ncid);
-    if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_EVARSIZE)
 
     err = ncmpi_close(ncid);
-    if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_EVARSIZE)
+
     return nerrs;
 }
 
@@ -306,24 +283,25 @@ int check_var_offset(char *filename)
     /* create a new file ---------------------------------------------------*/
     cmode = NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); ERR
-    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 5, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "YY", 66661, &dimid[2]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "XX", 66661, &dimid[3]); CHECK_ERR
 
-    err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid+1, &varid); ERR
-    err = ncmpi_def_var(ncid, "var_last", NC_FLOAT, 2, dimid+2, &varid); ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 1, dimid+1, &varid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_last", NC_FLOAT, 2, dimid+2, &varid); CHECK_ERR
 
     /* make the file header size larger than 2 GiB */
     err = ncmpi__enddef(ncid, 2147483648LL, 1, 1, 1);
-    if (err != NC_EVARSIZE) {
-        printf("\nError at line=%d: expecting error code NC_EVARSIZE but got %s\n",__LINE__,nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_EVARSIZE)
+
+    /* the above error keeps the program in define mode, thus close will
+     * call enddef again
+     */
+    err = ncmpi_close(ncid); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
     return nerrs;
 }
 
@@ -339,7 +317,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -379,6 +357,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/mix_collectives.c b/test/testcases/mix_collectives.c
new file mode 100644
index 0000000..ddfe064
--- /dev/null
+++ b/test/testcases/mix_collectives.c
@@ -0,0 +1,299 @@
+/*
+ *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *  $Id: mix_collectives.c 3341 2017-08-25 22:29:08Z wkliao $
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <libgen.h> /* basename() */
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+/*----< main() >------------------------------------------------------------*/
+int main(int argc, char **argv)
+{
+    char filename[256];
+    int i, j, err, nerrs=0, rank, nprocs;
+    int ncid, dimid[2], varid, varids[4];
+    MPI_Offset start[2], count[2], stride[2], imap[2];
+    int   *check_buf, buf[6][4];
+    int   g_buf[96] = {
+    NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, 100, 101, 102, 103,
+    NC_FILL_INT, 0,           NC_FILL_INT, NC_FILL_INT, 104, 105, 106, 107,
+    NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, 108, 109, 110, 111,
+    NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, 112, 113, 114, 115,
+    NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, 116, 117, 118, 119,
+    NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, 120, 121, 122, 123,
+    200,         NC_FILL_INT,         201, NC_FILL_INT, 300, 306, 312, 318,
+    NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, 301, 307, 313, 319,
+    202,         NC_FILL_INT,         203, NC_FILL_INT, 302, 308, 314, 320,
+    NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, 303, 309, 315, 321,
+    204,         NC_FILL_INT,         205, NC_FILL_INT, 304, 310, 316, 322,
+    NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, NC_FILL_INT, 305, 311, 317, 323};
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for get/put varm ", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+#ifdef DEBUG
+    if (nprocs > 1 && rank == 0)
+        printf("Warning: %s is designed to run on 1 process\n", argv[0]);
+#endif
+
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER | NC_64BIT_DATA,
+                       MPI_INFO_NULL, &ncid); CHECK_ERR
+
+    /* define a variable of a 6 x 4 integer array in the nc file */
+    err = ncmpi_def_dim(ncid, "Y", 12, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 8, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimid, &varid); CHECK_ERR
+    err = ncmpi_set_fill(ncid, NC_FILL, NULL); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
+
+    for (j=0; j<6; j++) for (i=0; i<4; i++) buf[j][i] = j*4+i + rank*100;
+
+    /* now, each of 4 processes makes a call to different kinds of put APIs */
+    if (rank == 0) {
+        /* write a 1 x 1 subarray with contents:
+               _, _, _, _, _, _, _, _,
+               _, 0, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _
+         */
+        start[0] = 1; start[1] = 1;
+        err = ncmpi_put_var1_int_all(ncid, varid, start, &buf[0][0]); CHECK_ERR
+    }
+    else if (rank == 1) {
+        /* write a 6 x 4 subarray with contents:
+               _, _, _, _, 100, 101, 102, 103,
+               _, _, _, _, 104, 105, 106, 107,
+               _, _, _, _, 108, 109, 110, 111,
+               _, _, _, _, 112, 113, 114, 115,
+               _, _, _, _, 116, 117, 118, 119,
+               _, _, _, _, 120, 121, 122, 123,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _
+         */
+        start[0] = 0; start[1] = 4;
+        count[0] = 6; count[1] = 4;
+        err = ncmpi_put_vara_int_all(ncid, varid, start, count, &buf[0][0]); CHECK_ERR
+    }
+    else if (rank == 2) {
+        /* write a strided 6 x 4 subarray with contents:
+                 _, _,   _, _, _, _, _, _,
+                 _, _,   _, _, _, _, _, _,
+                 _, _,   _, _, _, _, _, _,
+                 _, _,   _, _, _, _, _, _,
+                 _, _,   _, _, _, _, _, _,
+                 _, _,   _, _, _, _, _, _,
+               200, _, 201, _, _, _, _, _,
+                 _, _,   _, _, _, _, _, _,
+               202, _, 203, _, _, _, _, _,
+                 _, _,   _, _, _, _, _, _,
+               204, _, 205, _, _, _, _, _,
+                 _, _,   _, _, _, _, _, _
+         */
+        start[0]  = 6; start[1]  = 0;
+        count[0]  = 3; count[1]  = 2;
+        stride[0] = 2; stride[1] = 2;
+        err = ncmpi_put_vars_int_all(ncid, varid, start, count, stride, &buf[0][0]); CHECK_ERR
+    }
+    else if (rank == 3) {
+        /* write a 6 x 4 transported subarray with contents:
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, _, _, _, _,
+               _, _, _, _, 300, 306, 312, 318,
+               _, _, _, _, 301, 307, 313, 319,
+               _, _, _, _, 302, 308, 314, 320,
+               _, _, _, _, 303, 309, 315, 321,
+               _, _, _, _, 304, 310, 316, 322,
+               _, _, _, _, 305, 311, 317, 323
+
+         */
+        start[0]  = 6; start[1]  = 4;
+        count[0]  = 6; count[1]  = 4;
+        stride[0] = 1; stride[1] = 1;
+        imap[0]   = 1; imap[1]   = 6;   /* would be {4, 1} if not transposing */
+        err = ncmpi_put_varm_int_all(ncid, varid, start, count, stride, imap, &buf[0][0]); CHECK_ERR
+    }
+    else {
+        start[0] = 6; start[1] = 4;
+        count[0] = 0; count[1] = 0;
+        err = ncmpi_put_vara_all(ncid, varid, start, count, &buf[0][0], 0, MPI_DATATYPE_NULL); CHECK_ERR
+    }
+
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_WRITE, MPI_INFO_NULL, &ncid); CHECK_ERR
+
+    err = ncmpi_inq_varid(ncid, "var", &varid); CHECK_ERR
+
+    check_buf = (int*) calloc(96, sizeof(int));
+
+    err = ncmpi_get_var_int_all(ncid, varid, check_buf); CHECK_ERR
+
+    /* read the whole variable and check contents */
+    if (nprocs == 4) {
+        for (i=0; i<96; i++) {
+            if (check_buf[i] != g_buf[i]) {
+#ifdef PRINT_ERR_ON_SCREEN
+                printf("Error at line %d in %s: expecting var[%d]=%d but got %d\n",
+                __LINE__,__FILE__,i,g_buf[i],check_buf[i]);
+#endif
+                nerrs++;
+                break;
+            }
+        }
+    }
+    free(check_buf);
+
+    /* now, each of 4 processes makes a call to different kinds of get APIs */
+    for (j=0; j<6; j++) for (i=0; i<4; i++) buf[j][i] = -1;
+    if (rank == 0) {
+        start[0] = 1; start[1] = 1;
+        err = ncmpi_get_var1_int_all(ncid, varid, start, &buf[0][0]); CHECK_ERR
+        if (buf[0][0] != rank) {
+#ifdef PRINT_ERR_ON_SCREEN
+            printf("Error at line %d in %s: expecting buf[0][0]=%d but got %d\n",
+            __LINE__,__FILE__,rank,buf[0][0]);
+#endif
+            nerrs++;
+        }
+    }
+    else if (rank == 1) {
+        start[0] = 0; start[1] = 4;
+        count[0] = 6; count[1] = 4;
+        err = ncmpi_get_vara_int_all(ncid, varid, start, count, &buf[0][0]); CHECK_ERR
+        for (j=0; j<6; j++) for (i=0; i<4; i++) {
+            if (buf[j][i] != j*4+i + rank*100) {
+#ifdef PRINT_ERR_ON_SCREEN
+                printf("Error at line %d in %s: expecting var[%d]=%d but got %d\n",
+                __LINE__,__FILE__,i, j*4+i + rank*100, buf[j][i]);
+#endif
+                nerrs++;
+            }
+        }
+    }
+    else if (rank == 2) {
+        start[0]  = 6; start[1]  = 0;
+        count[0]  = 3; count[1]  = 2;
+        stride[0] = 2; stride[1] = 2;
+        err = ncmpi_get_vars_int_all(ncid, varid, start, count, stride, &buf[0][0]); CHECK_ERR
+        int *val = &buf[0][0];
+        for (j=0; j<count[0]*count[1]; j++) {
+            if (*val != j + rank*100) {
+#ifdef PRINT_ERR_ON_SCREEN
+                printf("Error at line %d in %s: expecting var[%d]=%d but got %d\n",
+                __LINE__,__FILE__,j, j+rank*100, *val);
+#endif
+                nerrs++;
+            }
+            val++;
+        }
+    }
+    else if (rank == 3) {
+        start[0]  = 6; start[1]  = 4;
+        count[0]  = 6; count[1]  = 4;
+        stride[0] = 1; stride[1] = 1;
+        imap[0]   = 1; imap[1]   = 6;   /* would be {4, 1} if not transposing */
+        err = ncmpi_get_varm_int_all(ncid, varid, start, count, stride, imap, &buf[0][0]); CHECK_ERR
+        for (j=0; j<6; j++) for (i=0; i<4; i++) {
+            if (buf[j][i] != j*4+i + rank*100) {
+#ifdef PRINT_ERR_ON_SCREEN
+                printf("Error at line %d in %s: expecting var[%d][%d]=%d but got %d\n",
+                __LINE__,__FILE__,j,i, j*4+i + rank*100, buf[j][i]);
+#endif
+                nerrs++;
+            }
+        }
+    }
+    else {
+        start[0] = 6; start[1] = 4;
+        count[0] = 0; count[1] = 0;
+        err = ncmpi_get_vara_all(ncid, varid, start, count, &buf[0][0], 0, MPI_DATATYPE_NULL); CHECK_ERR
+        for (j=0; j<6; j++) for (i=0; i<4; i++) {
+            if (buf[j][i] != -1) {
+#ifdef PRINT_ERR_ON_SCREEN
+                printf("Error at line %d in %s: expecting var[%d][%d]=%d but got %d\n",
+                __LINE__,__FILE__,j,i, -1, buf[j][i]);
+#endif
+                nerrs++;
+            }
+        }
+    }
+
+    /* test when different processes call put APIs with different varid */
+    err = ncmpi_redef(ncid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "scalar0", NC_INT, 0, NULL, &varids[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "scalar1", NC_INT, 0, NULL, &varids[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "scalar2", NC_INT, 0, NULL, &varids[2]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "scalar3", NC_INT, 0, NULL, &varids[3]); CHECK_ERR
+    err = ncmpi_set_fill(ncid, NC_FILL, NULL); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
+    
+    if (rank < 4) {
+        err = ncmpi_put_var_int_all(ncid, varids[rank], &rank); CHECK_ERR
+    }
+    else { /* make zero-length request */
+        start[0] = 0; start[1] = 0;
+        count[0] = 0; count[1] = 0;
+        err = ncmpi_put_vara_int_all(ncid, varid, start, count, &rank); CHECK_ERR
+    }
+
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
+
diff --git a/test/testcases/modes.c b/test/testcases/modes.c
index ca275d4..bbbf460 100644
--- a/test/testcases/modes.c
+++ b/test/testcases/modes.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: modes.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: modes.c 3383 2017-09-17 18:26:44Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This program tests if the correct error codes are returns given various
@@ -25,20 +25,11 @@
 
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR)printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}
-
-#define EXPECT_ERR(err_no) \
-    if (err != err_no) { \
-        nerrs++; \
-        printf("Error at line %d: expect error code %s but got %s\n", \
-               __LINE__,nc_err_code_name(err_no),nc_err_code_name(err)); \
-    }
-
 #define EXPECT_ERR2(err_no1, err_no2) \
     if (err != err_no1 && err != err_no2) { \
         nerrs++; \
-        printf("Error at line %d: expect error code %s but got %s\n", \
-               __LINE__,nc_err_code_name(err_no1),nc_err_code_name(err)); \
+        printf("Error at line %d in %s: expect error code %s or %s but got %s\n", \
+               __LINE__,__FILE__,ncmpi_strerrno(err_no1),ncmpi_strerrno(err_no2),ncmpi_strerrno(err)); \
     }
 
 static
@@ -50,7 +41,7 @@ int check_modes(char *filename)
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
     /* delete the file and ignore error */
-    unlink(filename);
+    if (rank == 0) unlink(filename);
     MPI_Barrier(MPI_COMM_WORLD);
 
     /* create a new file and test various cmodes ----------------------------*/
@@ -60,13 +51,13 @@ int check_modes(char *filename)
     cmode |= NC_64BIT_OFFSET | NC_64BIT_DATA;
 
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    EXPECT_ERR(NC_EINVAL_CMODE)
+    EXP_ERR(NC_EINVAL_CMODE)
 
     /* The file should not be created */
     if (rank == 0) {
         if (access(filename, F_OK) == 0) {
-            printf("Error at line %d: file (%s) should not be created\n",
-                   __LINE__, filename);
+            printf("Error at line %d in %s: file (%s) should not be created\n",
+                   __LINE__,__FILE__, filename);
             nerrs++;
             /* delete the file and ignore error */
             unlink(filename);
@@ -78,43 +69,69 @@ int check_modes(char *filename)
     /* Collectively opening a non-existing file for read, expect error code
      * NC_ENOENT on all processes */
     err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid);
-    /* older version of OpenMPI and MPICH may return MPI_ERR_IO instead of
-     * MPI_ERR_NO_SUCH_FILE */
-    EXPECT_ERR2(NC_ENOENT, NC_EFILE)
 
-    /* The file should not be created */
-    if (rank == 0) {
-        if (access(filename, F_OK) == 0) {
-            printf("Error at line %d: file (%s) should not be created\n",
-                   __LINE__, filename);
-            nerrs++;
-            /* delete the file and ignore error */
-            unlink(filename);
+    /* When using MVAPICH2 2.2, its Lustre driver adds O_CREAT to all open
+     * calls. This is considered a bug in an MPI-IO implementation. Due to this
+     * bug, the non-existing file will be created with zero-length and thus
+     * PnetCDF spews NC_ENOTNC */
+    if (err == NC_ENOTNC) {
+        /* ignore the error and delete the file */
+        if (rank == 0) unlink(filename);
+    }
+    else {
+        /* older version of OpenMPI and MPICH may return MPI_ERR_IO instead of
+         * MPI_ERR_NO_SUCH_FILE */
+        EXPECT_ERR2(NC_ENOENT, NC_EFILE)
+
+        /* The file should not be created */
+        if (rank == 0) {
+            if (access(filename, F_OK) == 0) {
+                printf("Error at line %d in %s: file (%s) should not be created\n",
+                       __LINE__,__FILE__, filename);
+                nerrs++;
+                /* delete the file and ignore error */
+                unlink(filename);
+            }
+            /* else : file does not exist */
         }
-        /* else : file does not exist */
     }
     MPI_Barrier(MPI_COMM_WORLD);
 
     /* Collectively opening a non-existing file for write, expect error code
      * NC_ENOENT on all processes */
     err = ncmpi_open(MPI_COMM_WORLD, filename, NC_WRITE, MPI_INFO_NULL, &ncid);
-    /* older version of OpenMPI and MPICH may return MPI_ERR_IO instead of
-     * MPI_ERR_NO_SUCH_FILE */
-    EXPECT_ERR2(NC_ENOENT, NC_EFILE)
 
-    /* The file should not be created */
-    if (rank == 0) {
-        if (access(filename, F_OK) == 0) {
-            printf("Error at line %d: file (%s) should not be created\n",
-                   __LINE__, filename);
-            nerrs++;
-            /* delete the file and ignore error */
-            unlink(filename);
+    /* When using MVAPICH2 2.2, its Lustre driver adds O_CREAT to all open
+     * calls. This is considered a bug in an MPI-IO implementation. Due to this
+     * bug, the non-existing file will be created with zero-length and thus
+     * PnetCDF spews NC_ENOTNC */
+    if (err == NC_ENOTNC) {
+        /* ignore the error and delete the file */
+        if (rank == 0) unlink(filename);
+    }
+    else {
+        /* older version of OpenMPI and MPICH may return MPI_ERR_IO instead of
+         * MPI_ERR_NO_SUCH_FILE */
+        EXPECT_ERR2(NC_ENOENT, NC_EFILE)
+
+        /* The file should not be created */
+        if (rank == 0) {
+            if (access(filename, F_OK) == 0) {
+                printf("Error at line %d in %s: file (%s) should not be created\n",
+                       __LINE__,__FILE__, filename);
+                nerrs++;
+                /* delete the file and ignore error */
+                unlink(filename);
+            }
+            /* else : file does not exist */
         }
-        /* else : file does not exist */
     }
     MPI_Barrier(MPI_COMM_WORLD);
 
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid);
+    CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
     return nerrs;
 }
 
@@ -129,11 +146,11 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
-    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
-    else           strcpy(filename, "testfile.nc");
-    MPI_Bcast(filename, 256, MPI_CHAR, 0, MPI_COMM_WORLD);
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]); 
+    else           strcpy(filename, "testfile.nc"); 
+    MPI_Bcast(filename, 256, MPI_CHAR, 0, MPI_COMM_WORLD); 
 
     if (rank == 0) {
         char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
@@ -167,6 +184,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/ncmpi_vars_null_stride.c b/test/testcases/ncmpi_vars_null_stride.c
index b20b902..6666b45 100644
--- a/test/testcases/ncmpi_vars_null_stride.c
+++ b/test/testcases/ncmpi_vars_null_stride.c
@@ -2,30 +2,24 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: ncmpi_vars_null_stride.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: ncmpi_vars_null_stride.c 3422 2017-09-25 05:42:52Z wkliao $
  */
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>  /* memset() */
+#include <string.h> /* memset() */
 #include <libgen.h> /* basename() */
 #include <mpi.h>
 #include <pnetcdf.h>
 
 #include <testutils.h>
 
-#define HANDLE_ERROR(err) { \
-    nerrs++; \
-    fprintf(stderr, "Error at line %d: %s\n", __LINE__, ncmpi_strerror(err)); \
-    goto fn_exit; \
-}
-
 /* check if user put buffer contents altered */
 #define CHECK_PUT_BUF \
     for (i=0; i<NY*NX; i++) { \
         if (buf[i] != rank+10) { \
-            printf("Error at line %d: user put buffer[%d] altered from %d to %d\n", \
-                   __LINE__, i, rank+10, buf[i]); \
+            printf("Error at line %d in %s: user put buffer[%d] altered from %d to %d\n", \
+                   __LINE__,__FILE__, i, rank+10, buf[i]); \
             nerrs++; \
         } \
     }
@@ -50,7 +44,7 @@ int main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -63,31 +57,31 @@ int main(int argc, char **argv)
     }
 
     err = ncmpi_create(MPI_COMM_WORLD, filename, 0, MPI_INFO_NULL, &ncid);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_def_dim(ncid, "X", nprocs*NX, &dimid[1]);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_def_var(ncid, "v0", NC_INT, ndims, dimid, &varid[0]);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_def_var(ncid, "v1", NC_INT, ndims, dimid, &varid[1]);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_def_var(ncid, "v2", NC_INT, ndims, dimid, &varid[2]);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_def_var(ncid, "v3", NC_INT, ndims, dimid, &varid[3]);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_def_var(ncid, "v4", NC_INT, ndims, dimid, &varid[4]);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_enddef(ncid);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     start[0] = 0;
     start[1] = rank*NX;
@@ -97,11 +91,11 @@ int main(int argc, char **argv)
     for (i=0; i<NY*NX; i++) buf[i] = rank+10;
 
     err = ncmpi_put_vara_int_all(ncid, varid[0], start, count, buf);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
     CHECK_PUT_BUF
 
     err = ncmpi_put_vars_int_all(ncid, varid[1], start, count, NULL, buf);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
     CHECK_PUT_BUF
 
     start[0] = 0;
@@ -111,22 +105,22 @@ int main(int argc, char **argv)
     stride[0] = 1;
     stride[1] = nprocs;
     err = ncmpi_put_vars_int_all(ncid, varid[2], start, count, stride, buf);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
     CHECK_PUT_BUF
 
     /* test bput_vars */
     err = ncmpi_buffer_attach(ncid, NY*NX*sizeof(int));
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     start[0] = 0;
     start[1] = rank*NX;
     count[0] = NY;
     count[1] = NX;
     err = ncmpi_bput_vars_int(ncid, varid[3], start, count, NULL, buf, &req);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_wait_all(ncid, 1, &req, NULL);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
     CHECK_PUT_BUF
 
     start[0] = 0;
@@ -136,20 +130,20 @@ int main(int argc, char **argv)
     stride[0] = 1;
     stride[1] = nprocs;
     err = ncmpi_bput_vars_int(ncid, varid[4], start, count, stride, buf, &req);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     err = ncmpi_wait_all(ncid, 1, &req, NULL);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
     CHECK_PUT_BUF
     free(buf);
 
     err = ncmpi_buffer_detach(ncid);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     buf = (int*) malloc((size_t)NY * NX * nprocs * sizeof(int));
     memset(buf, 0, (size_t)NY * NX * nprocs * sizeof(int));
     err = ncmpi_get_var_int_all(ncid, varid[0], buf);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     /* check read buffer contents */
     /*  v0 =
@@ -162,8 +156,8 @@ int main(int argc, char **argv)
         for (j=0; j<nprocs; j++) {
             for (k=0; k<NX; k++) {
                 if (buf[i*nprocs*NX+j*NX+k] != j+10) {
-                    printf("Error at line %d: expected buffer[%d]=%d but got %d\n",
-                           __LINE__,i*nprocs*NX+j*NX+k, j+10, buf[i*nprocs*NX+j*NX+k]);
+                    printf("Error at line %d in %s: expected buffer[%d]=%d but got %d\n",
+                           __LINE__,__FILE__,i*nprocs*NX+j*NX+k, j+10, buf[i*nprocs*NX+j*NX+k]);
                     nerrs++;
                 }
             }
@@ -172,7 +166,7 @@ int main(int argc, char **argv)
 
     memset(buf, 0, (size_t)NY * NX * nprocs * sizeof(int));
     err = ncmpi_get_var_int_all(ncid, varid[1], buf);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     /* check read buffer contents */
     /*  v1 =
@@ -185,8 +179,8 @@ int main(int argc, char **argv)
         for (j=0; j<nprocs; j++) {
             for (k=0; k<NX; k++) {
                 if (buf[i*nprocs*NX+j*NX+k] != j+10) {
-                    printf("Error at line %d: expected buffer[%d]=%d but got %d\n",
-                           __LINE__,i*nprocs*NX+j*NX+k, j+10, buf[i*nprocs*NX+j*NX+k]);
+                    printf("Error at line %d in %s: expected buffer[%d]=%d but got %d\n",
+                           __LINE__,__FILE__,i*nprocs*NX+j*NX+k, j+10, buf[i*nprocs*NX+j*NX+k]);
                     nerrs++;
                 }
             }
@@ -195,7 +189,7 @@ int main(int argc, char **argv)
 
     memset(buf, 0, (size_t)NY * NX * nprocs * sizeof(int));
     err = ncmpi_get_var_int_all(ncid, varid[2], buf);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     /* check read buffer contents */
     /*  v2 =
@@ -208,8 +202,8 @@ int main(int argc, char **argv)
         for (k=0; k<NX; k++) {
             for (j=0; j<nprocs; j++) {
                 if (buf[i*nprocs*NX+k*nprocs+j] != j+10) {
-                    printf("Error at line %d: expected buffer[%d]=%d but got %d\n",
-                           __LINE__,i*nprocs*NX+k*nprocs+j, j+10, buf[i*nprocs*NX+k*nprocs+j]);
+                    printf("Error at line %d in %s: expected buffer[%d]=%d but got %d\n",
+                           __LINE__,__FILE__,i*nprocs*NX+k*nprocs+j, j+10, buf[i*nprocs*NX+k*nprocs+j]);
                     nerrs++;
                 }
             }
@@ -218,7 +212,7 @@ int main(int argc, char **argv)
 
     memset(buf, 0, (size_t)NY * NX * nprocs * sizeof(int));
     err = ncmpi_get_var_int_all(ncid, varid[3], buf);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     /* check read buffer contents */
     /*  v3 =
@@ -231,8 +225,8 @@ int main(int argc, char **argv)
         for (j=0; j<nprocs; j++) {
             for (k=0; k<NX; k++) {
                 if (buf[i*nprocs*NX+j*NX+k] != j+10) {
-                    printf("Error at line %d: expected buffer[%d]=%d but got %d\n",
-                           __LINE__,i*nprocs*NX+j*NX+k, j+10, buf[i*nprocs*NX+j*NX+k]);
+                    printf("Error at line %d in %s: expected buffer[%d]=%d but got %d\n",
+                           __LINE__,__FILE__,i*nprocs*NX+j*NX+k, j+10, buf[i*nprocs*NX+j*NX+k]);
                     nerrs++;
                 }
             }
@@ -241,7 +235,7 @@ int main(int argc, char **argv)
 
     memset(buf, 0, (size_t)NY * NX * nprocs * sizeof(int));
     err = ncmpi_get_var_int_all(ncid, varid[4], buf);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     /* check read buffer contents */
     /*  v4 =
@@ -254,8 +248,8 @@ int main(int argc, char **argv)
         for (k=0; k<NX; k++) {
             for (j=0; j<nprocs; j++) {
                 if (buf[i*nprocs*NX+k*nprocs+j] != j+10) {
-                    printf("Error at line %d: expected buffer[%d]=%d but got %d\n",
-                           __LINE__,i*nprocs*NX+k*nprocs+j, j+10, buf[i*nprocs*NX+k*nprocs+j]);
+                    printf("Error at line %d in %s: expected buffer[%d]=%d but got %d\n",
+                           __LINE__,__FILE__,i*nprocs*NX+k*nprocs+j, j+10, buf[i*nprocs*NX+k*nprocs+j]);
                     nerrs++;
                 }
             }
@@ -263,7 +257,7 @@ int main(int argc, char **argv)
     }
 
     err = ncmpi_close(ncid);
-    if (err != NC_NOERR) HANDLE_ERROR(err)
+    CHECK_ERR
 
     free(buf);
 
@@ -277,7 +271,6 @@ int main(int argc, char **argv)
                    sum_size);
     }
 
-fn_exit:
     MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
     if (rank == 0) {
         if (nerrs) printf(FAIL_STR,nerrs);
@@ -285,5 +278,5 @@ fn_exit:
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/noclobber.c b/test/testcases/noclobber.c
index e2e0550..42c327e 100644
--- a/test/testcases/noclobber.c
+++ b/test/testcases/noclobber.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: noclobber.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: noclobber.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /*
@@ -19,8 +19,6 @@
 
 #include <testutils.h>
 
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__,ncmpi_strerror(err)); exit(-1);}
-
 int main(int argc, char **argv) {
     char filename[256];
     int  err, nerrs=0, ncid, cmode, rank, nprocs;
@@ -32,7 +30,7 @@ int main(int argc, char **argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -48,14 +46,13 @@ int main(int argc, char **argv) {
     /* create a file if it does not exist */
     cmode = NC_CLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
-    err = ncmpi_close(ncid); ERR
+    CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* now the file exists, test if PnetCDF can return correct error code */
     cmode = NC_NOCLOBBER;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    if (err != NC_EEXIST) /* err == NC_EOFILE */
-        nerrs++;
+    EXP_ERR(NC_EEXIST) /* err == NC_EOFILE */
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -74,5 +71,5 @@ int main(int argc, char **argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/nonblocking.c b/test/testcases/nonblocking.c
index 8547d29..22113d7 100644
--- a/test/testcases/nonblocking.c
+++ b/test/testcases/nonblocking.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2013, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: nonblocking.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: nonblocking.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /*
@@ -42,7 +42,6 @@
 
 #define NY 4
 #define NX 5
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__,ncmpi_strerror(err)); exit(-1);}
 
 /*----< main() >------------------------------------------------------------*/
 int main(int argc, char **argv) {
@@ -60,7 +59,7 @@ int main(int argc, char **argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -80,14 +79,14 @@ int main(int argc, char **argv) {
      * Fix: Add ROMIO hint to force ADIO driever to use POSIX I/O */
     /* MPI_Info_set(info, "romio_pvfs2_posix_write", "enable"); */
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, info, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, info, &ncid); CHECK_ERR
     MPI_Info_free(&info);
 
     /* define a 2D array */
-    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimids[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", NX,    &dimids[1]); ERR
-    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimids, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimids[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", NX,    &dimids[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimids, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* initialize the contents of the array */
     for (j=0; j<NY+1; j++) for (i=0; i<NX; i++) buf[j][i] = j;
@@ -96,32 +95,33 @@ int main(int argc, char **argv) {
     count[0] = 1;      count[1] = NX;
 
     /* call nonblocking API */
-    err = ncmpi_iput_vara_int(ncid, varid, start, count, buf[1], &req[0]); ERR
+    err = ncmpi_iput_vara_int(ncid, varid, start, count, buf[1], &req[0]); CHECK_ERR
 
     start[0] += 1;
-    err = ncmpi_iput_vara_int(ncid, varid, start, count, buf[0], &req[1]); ERR
+    err = ncmpi_iput_vara_int(ncid, varid, start, count, buf[0], &req[1]); CHECK_ERR
 
     st[0] = st[1] = NC_NOERR;
-    err = ncmpi_wait_all(ncid, 2, req, st); ERR
-    err = st[0]; ERR
-    err = st[1]; ERR
+    err = ncmpi_wait_all(ncid, 2, req, st); CHECK_ERR
+    err = st[0]; CHECK_ERR
+    err = st[1]; CHECK_ERR
 
     /* check if the contents of buf are altered */
     for (j=0; j<NY; j++)
         for (i=0; i<NX; i++)
             if (buf[j][i] != j)
-                printf("Error: buf[%d][%d]=%d != %d\n",j,i,buf[j][i],j);
+                printf("Error at line %d in %s: buf[%d][%d]=%d != %d\n",
+                __LINE__,__FILE__,j,i,buf[j][i],j);
  
     /* check if root process can write to file header in data mode */
-    err = ncmpi_rename_var(ncid, varid, "VAR"); ERR
+    err = ncmpi_rename_var(ncid, varid, "VAR"); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* open the same file and read back for validate */
     err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
-                     &ncid); ERR
+                     &ncid); CHECK_ERR
 
-    err = ncmpi_inq_varid(ncid, "VAR", &varid); ERR
+    err = ncmpi_inq_varid(ncid, "VAR", &varid); CHECK_ERR
 
     /* initialize the contents of the array to a different value */
     for (j=0; j<NY; j++) for (i=0; i<NX; i++) buf[j][i] = -1;
@@ -129,9 +129,9 @@ int main(int argc, char **argv) {
     /* read back variable */
     start[0] = 2*rank; start[1] = 0;
     count[0] = 2;      count[1] = NX;
-    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf[0]); ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf[0]); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if the contents of buf are expected */
     for (j=0; j<2; j++) {
@@ -161,5 +161,5 @@ int main(int argc, char **argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/null_args.c b/test/testcases/null_args.c
new file mode 100644
index 0000000..9831180
--- /dev/null
+++ b/test/testcases/null_args.c
@@ -0,0 +1,278 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *  $Id: null_args.c 3345 2017-08-26 00:16:31Z wkliao $
+ */
+
+/* This program tests whether the correct error codes can be returned when
+ * using NULL arguments for start, count, stride, or imap
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <libgen.h> /* basename() */
+#include <mpi.h>
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+#define EXP_ERR_MSG(exp,msg) { \
+    if (err != exp) { \
+        nerrs++; \
+        fprintf(stderr, "Error at line %d in %s: (%s) expect %s but got %s\n", \
+                __LINE__, __FILE__, msg, \
+                ncmpi_strerrno(exp), ncmpi_strerrno(err)); \
+    } \
+}
+
+int main(int argc, char **argv)
+{
+    char filename[256];
+    int err, nerrs=0, ncid, dimid[2], varid;
+    int nprocs, rank, buf[100];
+    MPI_Offset start[2], count[2], stride[2], imap[2];
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for NULL arguments ", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    err = ncmpi_create(MPI_COMM_WORLD, filename, 0, MPI_INFO_NULL, &ncid);
+    EXP_ERR_MSG(NC_NOERR, "create")
+    err = ncmpi_def_dim(ncid, "Y", NC_UNLIMITED, &dimid[0]);
+    EXP_ERR_MSG(NC_NOERR,"def_dim Y")
+    err = ncmpi_def_dim(ncid, "X", 10, &dimid[1]);
+    EXP_ERR_MSG(NC_NOERR,"def_dim X")
+    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimid, &varid);
+    EXP_ERR_MSG(NC_NOERR,"def_var")
+    err = ncmpi_enddef(ncid);
+    EXP_ERR_MSG(NC_NOERR,"enddef")
+    err = ncmpi_begin_indep_data(ncid);
+    EXP_ERR_MSG(NC_NOERR,"begin_indep_data")
+
+     start[0] =  start[1] = 0;
+     count[0] =  count[1] = 1;
+    stride[0] = stride[1] = 1;
+      imap[0] =   imap[1] = 1;
+
+    memset(buf, 0, 100*sizeof(int));
+
+    /*---- test put_var1 ---- */
+    err = ncmpi_put_var1_int(ncid, varid, start, buf);
+    EXP_ERR_MSG(NC_NOERR, "put_var1")
+
+    err = ncmpi_put_var1_int(ncid, varid, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_var1 start=NULL")
+
+    /*---- test put_vara ---- */
+    err = ncmpi_put_vara_int(ncid, varid, start, count, buf);
+    EXP_ERR_MSG(NC_NOERR, "put_vara")
+
+    err = ncmpi_put_vara_int(ncid, varid, NULL, count, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_vara start=NULL")
+
+    err = ncmpi_put_vara_int(ncid, varid, start, NULL, buf);
+    EXP_ERR_MSG(NC_EEDGE, "put_vara count=NULL")
+
+    err = ncmpi_put_vara_int(ncid, varid, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_vara start=count=NULL")
+
+    /*---- test put_vars ---- */
+    err = ncmpi_put_vars_int(ncid, varid, start, count, stride, buf);
+    EXP_ERR_MSG(NC_NOERR, "put_vars")
+
+    err = ncmpi_put_vars_int(ncid, varid, NULL, count, stride, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_vars start=NULL")
+
+    err = ncmpi_put_vars_int(ncid, varid, start, NULL, stride, buf);
+    EXP_ERR_MSG(NC_EEDGE, "put_vars count=NULL")
+
+    err = ncmpi_put_vars_int(ncid, varid, start, count, NULL, buf);
+    EXP_ERR_MSG(NC_NOERR, "put_vars stride=NULL")
+
+    err = ncmpi_put_vars_int(ncid, varid, NULL, NULL, stride, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_vars start=count=NULL")
+
+    err = ncmpi_put_vars_int(ncid, varid, NULL, count, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_vars start=stride=NULL")
+
+    err = ncmpi_put_vars_int(ncid, varid, start, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EEDGE, "put_vars count=stride=NULL")
+
+    err = ncmpi_put_vars_int(ncid, varid, NULL, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_vars start=count=stride=NULL")
+
+    /*---- test put_varm ---- */
+    err = ncmpi_put_varm_int(ncid, varid, start, count, stride, imap, buf);
+    EXP_ERR_MSG(NC_NOERR, "put_varm")
+
+    err = ncmpi_put_varm_int(ncid, varid, NULL, count, stride, imap, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_varm start=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, start, NULL, stride, imap, buf);
+    EXP_ERR_MSG(NC_EEDGE, "put_varm count=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, start, count, NULL, imap, buf);
+    EXP_ERR_MSG(NC_NOERR, "put_varm stride=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, start, count, stride, NULL, buf);
+    EXP_ERR_MSG(NC_NOERR, "put_varm imap=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, NULL, NULL, stride, imap, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_varm start=count=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, NULL, count, NULL, imap, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_varm start=stride=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, NULL, count, stride, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_varm start=imap=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, start, NULL, NULL, imap, buf);
+    EXP_ERR_MSG(NC_EEDGE, "put_varm count=stride=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, start, NULL, stride, NULL, buf);
+    EXP_ERR_MSG(NC_EEDGE, "put_varm count=imap=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, start, count, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_NOERR, "put_varm stride=imap=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, NULL, NULL, NULL, imap, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_varm start=count=stride=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, NULL, NULL, stride, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_varm start=count=imap=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, start, NULL, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EEDGE, "put_varm count=stride=imap=NULL")
+
+    err = ncmpi_put_varm_int(ncid, varid, NULL, NULL, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "put_varm start=count=stride=imap=NULL")
+
+    /*---- test get_var1 ---- */
+    err = ncmpi_get_var1_int(ncid, varid, start, buf);
+    EXP_ERR_MSG(NC_NOERR, "get_var1")
+
+    err = ncmpi_get_var1_int(ncid, varid, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_var1 start=NULL")
+
+    /*---- test get_vara ---- */
+    err = ncmpi_get_vara_int(ncid, varid, start, count, buf);
+    EXP_ERR_MSG(NC_NOERR, "get_vara")
+
+    err = ncmpi_get_vara_int(ncid, varid, NULL, count, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_vara start=NULL")
+
+    err = ncmpi_get_vara_int(ncid, varid, start, NULL, buf);
+    EXP_ERR_MSG(NC_EEDGE, "get_vara count=NULL")
+
+    err = ncmpi_get_vara_int(ncid, varid, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_vara start=count=NULL")
+
+    /*---- test get_vars ---- */
+    err = ncmpi_get_vars_int(ncid, varid, start, count, stride, buf);
+    EXP_ERR_MSG(NC_NOERR, "get_vars")
+
+    err = ncmpi_get_vars_int(ncid, varid, NULL, count, stride, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_vars start=NULL")
+
+    err = ncmpi_get_vars_int(ncid, varid, start, NULL, stride, buf);
+    EXP_ERR_MSG(NC_EEDGE, "get_vars count=NULL")
+
+    err = ncmpi_get_vars_int(ncid, varid, start, count, NULL, buf);
+    EXP_ERR_MSG(NC_NOERR, "get_vars stride=NULL")
+
+    err = ncmpi_get_vars_int(ncid, varid, NULL, NULL, stride, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_vars start=count=NULL")
+
+    err = ncmpi_get_vars_int(ncid, varid, NULL, count, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_vars start=stride=NULL")
+
+    err = ncmpi_get_vars_int(ncid, varid, start, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EEDGE, "get_vars count=stride=NULL")
+
+    err = ncmpi_get_vars_int(ncid, varid, NULL, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_vars start=count=stride=NULL")
+
+    /*---- test get_varm ---- */
+    err = ncmpi_get_varm_int(ncid, varid, start, count, stride, imap, buf);
+    EXP_ERR_MSG(NC_NOERR, "get_varm")
+
+    err = ncmpi_get_varm_int(ncid, varid, NULL, count, stride, imap, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_varm start=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, start, NULL, stride, imap, buf);
+    EXP_ERR_MSG(NC_EEDGE, "get_varm count=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, start, count, NULL, imap, buf);
+    EXP_ERR_MSG(NC_NOERR, "get_varm stride=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, start, count, stride, NULL, buf);
+    EXP_ERR_MSG(NC_NOERR, "get_varm imap=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, NULL, NULL, stride, imap, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_varm start=count=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, NULL, count, NULL, imap, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_varm start=stride=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, NULL, count, stride, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_varm start=imap=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, start, NULL, NULL, imap, buf);
+    EXP_ERR_MSG(NC_EEDGE, "get_varm count=stride=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, start, NULL, stride, NULL, buf);
+    EXP_ERR_MSG(NC_EEDGE, "get_varm count=imap=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, start, count, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_NOERR, "get_varm stride=imap=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, NULL, NULL, NULL, imap, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_varm start=count=stride=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, NULL, NULL, stride, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_varm start=count=imap=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, start, NULL, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EEDGE, "get_varm count=stride=imap=NULL")
+
+    err = ncmpi_get_varm_int(ncid, varid, NULL, NULL, NULL, NULL, buf);
+    EXP_ERR_MSG(NC_EINVALCOORDS, "get_varm start=count=stride=imap=NULL")
+
+    err = ncmpi_close(ncid);
+    EXP_ERR_MSG(NC_NOERR, "close")
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
diff --git a/test/testcases/one_record.c b/test/testcases/one_record.c
index 1e84e40..0de836b 100644
--- a/test/testcases/one_record.c
+++ b/test/testcases/one_record.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: one_record.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: one_record.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /*
@@ -23,9 +23,6 @@
 
 #include <testutils.h>
 
-#define ERRCODE 2
-#define ERR if (err != NC_NOERR) {printf("Error at line %d: err=%d %s\n", __LINE__, err, ncmpi_strerror(err));}
-
 #define STR_LEN 19
 #define NUM_VALS 2
 
@@ -46,7 +43,7 @@ int main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -62,16 +59,16 @@ int main(int argc, char **argv)
     strcpy(data[1], "2005-04-11_13:00:00");
 
     cmode = NC_CLOBBER;
-    err  = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); ERR
+    err  = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid); CHECK_ERR
 
-    err = ncmpi_def_dim(ncid, "time", NC_UNLIMITED, dimids); ERR
-    err = ncmpi_def_dim(ncid, "text_dim", STR_LEN, &dimids[1]); ERR
+    err = ncmpi_def_dim(ncid, "time", NC_UNLIMITED, dimids); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "text_dim", STR_LEN, &dimids[1]); CHECK_ERR
 
     /* create ONLY one record variable of type NC_CHAR and make sure each
      * record is of size not aligned with 4-byte boundary.
      */
-    err = ncmpi_def_var(ncid, "text_var", NC_CHAR, 2, dimids, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_var(ncid, "text_var", NC_CHAR, 2, dimids, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* Write some records of var data. */
     count[0] = 1;
@@ -80,22 +77,28 @@ int main(int argc, char **argv)
     start[1] = 0;
     for (i=0; i<NUM_VALS; i++) {
         err = ncmpi_put_vara_text_all(ncid, varid, start, count, data[start[0]]);
-        ERR
+        CHECK_ERR
         start[0]++;
     }
 
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    err  = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); CHECK_ERR
+
+    err = ncmpi_inq_varid(ncid, "text_var", &varid); CHECK_ERR
+
     /* read the entire data back */
-    err = ncmpi_get_var_text_all(ncid, varid, data_in); ERR
+    err = ncmpi_get_var_text_all(ncid, varid, data_in); CHECK_ERR
 
     /* check the contents */
     for (i=0; i<NUM_VALS; i++)
       if (strncmp(data[i], data_in+i*STR_LEN, STR_LEN)) {
-          printf("Error: expecting %s but got %s\n", data[i],data_in+i*STR_LEN);
+          printf("Error at line %d in %s: expecting %s but got %s\n",
+          __LINE__,__FILE__,data[i],data_in+i*STR_LEN);
           nerrs++;
       }
 
-    err = ncmpi_close(ncid);
-    ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -114,7 +117,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-
-    return nerrs;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/put_all_kinds.m4 b/test/testcases/put_all_kinds.m4
new file mode 100644
index 0000000..758db22
--- /dev/null
+++ b/test/testcases/put_all_kinds.m4
@@ -0,0 +1,251 @@
+dnl Process this m4 file to produce 'C' language file.
+dnl
+dnl If you see this line, you can ignore the next one.
+/* Do not edit this file. It is produced from the corresponding .m4 source */
+dnl
+/*********************************************************************
+ *
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *********************************************************************/
+/* $Id: transpose.c 3078 2017-05-29 22:46:50Z wkliao $ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h> /* strcpy(), strncpy() */
+#include <unistd.h> /* getopt() */
+#include <libgen.h> /* basename() */
+#include <mpi.h>
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+#define NDIMS 3
+#define LEN   2
+
+include(`foreach.m4')dnl
+include(`utils.m4')dnl
+
+#define text char
+#ifndef schar
+#define schar signed char
+#endif
+#ifndef uchar
+#define uchar unsigned char
+#endif
+#ifndef ushort
+#define ushort unsigned short
+#endif
+#ifndef uint
+#define uint unsigned int
+#endif
+#ifndef longlong
+#define longlong long long
+#endif
+#ifndef ulonglong
+#define ulonglong unsigned long long
+#endif
+
+define(`TEST_BLOCKING_PUT',dnl
+`dnl
+static int
+blocking_put_$1(int         rank,
+                int         ncid,
+                int        *dimids,
+                MPI_Offset *start,
+                MPI_Offset *count,
+                MPI_Offset *startS,
+                MPI_Offset *countS,
+                MPI_Offset *stride,
+                MPI_Offset *startM,
+                MPI_Offset *countM,
+                MPI_Offset *imap,
+                double     *buf)
+{
+    int err, nerrs=0;
+    int var1_id, vara_id, vars_id, varm_id;
+    int dimid, dimidsT[NDIMS];
+    MPI_Offset start1;
+
+    /* re-enter define mode, so we can add more variables */
+    err = ncmpi_redef(ncid); CHECK_ERR
+    err = ncmpi_inq_dimid(ncid, "nprocs", &dimid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var1_$1", NC_TYPE($1),     1, &dimid, &var1_id); CHECK_ERR
+    err = ncmpi_def_var(ncid, "vara_$1", NC_TYPE($1), NDIMS, dimids, &vara_id); CHECK_ERR
+    err = ncmpi_def_var(ncid, "vars_$1", NC_TYPE($1), NDIMS, dimids, &vars_id); CHECK_ERR
+
+    /* define variable with transposed file layout: ZYX -> YXZ */
+    dimidsT[0] = dimids[1]; dimidsT[1] = dimids[2]; dimidsT[2] = dimids[0];
+    err = ncmpi_def_var(ncid, "varm_$1", NC_TYPE($1), NDIMS, dimidsT, &varm_id); CHECK_ERR
+
+    /* exit the define mode */
+    err = ncmpi_enddef(ncid); CHECK_ERR
+
+    /* write the whole variable in parallel */
+    start1 = rank;
+    err = ncmpi_put_var1_double_all(ncid, var1_id, &start1, buf); CHECK_ERR
+
+    err = ncmpi_put_vara_double_all(ncid, vara_id, start, count, buf); CHECK_ERR
+
+    err = ncmpi_put_vars_double_all(ncid, vars_id, startS, countS, stride, buf);
+    CHECK_ERR
+
+    err = ncmpi_put_varm_double_all(ncid, varm_id, startM, countM, NULL, imap, buf);
+    CHECK_ERR
+
+    return nerrs;
+}
+')dnl
+
+foreach(`itype', (`schar, uchar, short, ushort, int, uint, long, float, double, longlong, ulonglong'), `TEST_BLOCKING_PUT(itype)')
+
+define(`TEST_CDF_FORMAT',dnl
+`dnl
+    /* create a new file */
+    cmode = NC_CLOBBER;
+    ifelse(`$1', `NC_FORMAT_64BIT_OFFSET', `cmode |= NC_64BIT_OFFSET;',
+           `$1', `NC_FORMAT_64BIT_DATA',   `cmode |= NC_64BIT_DATA;')
+ 
+    sprintf(fname, "%s.cdf%d",filename, $1);
+    err = ncmpi_create(MPI_COMM_WORLD, fname, cmode, info, &ncid);
+    if (err != NC_NOERR) {
+        printf("Error at line %d in %s: ncmpi_create() file %s (%s)\n",
+        __LINE__,__FILE__,fname,ncmpi_strerror(err));
+        MPI_Abort(MPI_COMM_WORLD, -1);
+        exit(1);
+    }
+
+    /* define dimensions */
+    err = ncmpi_def_dim(ncid, "nprocs", nprocs,   &dimids[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Z",      gsize[0], &dimids[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "Y",      gsize[1], &dimids[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X",      gsize[2], &dimids[2]); CHECK_ERR
+    err = ncmpi_enddef(ncid);
+
+ifelse(`$1', `NC_FORMAT_64BIT_DATA', 
+    foreach(`itype',
+    (`schar, uchar, short, ushort, int, uint, long, float, double, longlong, ulonglong'),`
+    _CAT(`nerrs += blocking_put_',itype)'`(rank, ncid, dimids, start, count,
+             startS, countS, stride, startM, countM, imap, buf);'),
+    foreach(`itype',
+    (`schar, short, int, long, float, double'),`
+    _CAT(`nerrs += blocking_put_',itype)'`(rank, ncid, dimids, start, count,
+             startS, countS, stride, startM, countM, imap, buf);'))
+
+    /* close the file */
+    err = ncmpi_close(ncid);
+    CHECK_ERR
+')dnl
+
+/*----< main() >------------------------------------------------------------*/
+int main(int argc, char **argv)
+{
+    extern int optind;
+    char filename[256], fname[512];
+    int i, j, k, rank, nprocs, ncid, bufsize, err, nerrs=0, cmode;
+    int psize[NDIMS], dimids[NDIMS], dim_rank[NDIMS];
+    double *buf;
+    MPI_Offset gsize[NDIMS], stride[NDIMS], imap[NDIMS];
+    MPI_Offset start[NDIMS], count[NDIMS];
+    MPI_Offset startS[NDIMS], countS[NDIMS];
+    MPI_Offset startM[NDIMS], countM[NDIMS];
+    MPI_Info info;
+
+    MPI_Init(&argc,&argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+    MPI_Bcast(filename, 256, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for all kinds put APIs ", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    /* calculate number of processes along each dimension */
+    for (i=0; i<NDIMS; i++) psize[i] = 0;
+    MPI_Dims_create(nprocs, NDIMS, psize);
+
+    /* for each MPI rank, find its local rank IDs along each dimension in
+     * dim_rank[] */
+    int lower_dims=1;
+    for (i=NDIMS-1; i>=0; i--) {
+        dim_rank[i] = rank / lower_dims % psize[i];
+        lower_dims *= psize[i];
+    }
+
+    /* calculate gsize[], global array sizes and set arguments start and count
+     * for vara APIs */
+    bufsize = 1;
+    for (i=0; i<NDIMS; i++) {
+        gsize[i]  = (MPI_Offset)LEN * psize[i];    /* global array size */
+        start[i]  = (MPI_Offset)LEN * dim_rank[i]; /* start indices */
+        count[i]  = (MPI_Offset)LEN;               /* array elements */
+        bufsize  *= LEN;
+    }
+
+    /* allocate buffer and initialize with contiguous numbers */
+    buf = (double *) malloc(bufsize * sizeof(double));
+    for (k=0; k<count[0]; k++)
+    for (j=0; j<count[1]; j++)
+    for (i=0; i<count[2]; i++)
+        buf[k*count[1]*count[2] +
+                     j*count[2] + i] = (start[0]+k)*gsize[1]*gsize[2]
+                                     + (start[1]+j)*gsize[2]
+                                     + (start[2]+i); // + 1000*(rank+1);
+
+    /* set an MPI-IO hint to disable file offset alignment for fixed-size
+     * variables */
+    MPI_Info_create(&info);
+    MPI_Info_set(info, "nc_var_align_size", "1");
+
+    /* set arguments start, count, stride for vars APIs */
+    for (i=0; i<NDIMS; i++) {
+        startS[i] = dim_rank[i];
+        countS[i] = gsize[i] / psize[i];
+        stride[i] = psize[i];
+    }
+
+    /* ZYX -> YXZ: (this is borrowed from examples/C/transpose.c */
+    imap[1] = 1; imap[0] = count[2]; imap[2] = count[1]*count[2];
+    startM[0] = start[1]; startM[1] = start[2]; startM[2] = start[0];
+    countM[0] = count[1]; countM[1] = count[2]; countM[2] = count[0];
+
+    /* test CDF-1, 2, and 5 formats separately */
+    TEST_CDF_FORMAT(NC_FORMAT_CLASSIC)
+    TEST_CDF_FORMAT(NC_FORMAT_64BIT_OFFSET)
+    TEST_CDF_FORMAT(NC_FORMAT_64BIT_DATA)
+
+    free(buf);
+    MPI_Info_free(&info);
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
+
diff --git a/test/testcases/put_parameter.f b/test/testcases/put_parameter.f
index 402daf6..3b9b035 100644
--- a/test/testcases/put_parameter.f
+++ b/test/testcases/put_parameter.f
@@ -3,7 +3,7 @@
 !   Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: put_parameter.f 2638 2016-11-18 14:51:02Z wkliao $
+! $Id: put_parameter.f 3341 2017-08-25 22:29:08Z wkliao $
 
 ! This example tests PnetCDF's avoiding in-place Endianness byte swap when
 ! the user's write buffer is immutable, i.e. defined as PARAMETER.
@@ -63,7 +63,7 @@
               write(6,*) message(1:XTRIM(message)), nfmpi_strerror(err)
               msg = '*** TESTING F77 put_parameter.f for immutable put '
               call pass_fail(1, msg)
-              call MPI_Abort(MPI_COMM_WORLD, -1, err)
+              STOP 2
           end if
       end ! subroutine check
 
@@ -164,5 +164,7 @@
           endif
 
  999      call MPI_Finalize(ierr)
+          if (nerrs .GT. 0) stop 2
+
       end ! program main
 
diff --git a/test/testcases/record.c b/test/testcases/record.c
index a2fd0d8..ed43d2b 100644
--- a/test/testcases/record.c
+++ b/test/testcases/record.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: record.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: record.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -33,8 +33,6 @@
 
 #include <testutils.h>
 
-#define ERR {if(err!=NC_NOERR) {nerrs++; printf("Error at line=%d: %s\n", __LINE__, ncmpi_strerror(err));}}
-
 static
 int test_only_record_var_1D(char *filename)
 {
@@ -44,50 +42,51 @@ int test_only_record_var_1D(char *filename)
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER;
-    err = ncmpi_create(MPI_COMM_SELF, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_SELF, filename, cmode, info, &ncid); CHECK_ERR
 
     /* define dimension and variable */
-    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid); ERR
-    err = ncmpi_def_var(ncid, "REC_VAR_1D", NC_INT, 1, &dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_1D", NC_INT, 1, &dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* write the 2nd record first */
     buf[0] = 91;
     start[0] = 1; count[0] = 1;
-    err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf); CHECK_ERR
 
     /* write the 1st record now */
     buf[0] = 90;
     start[0] = 0; count[0] = 1;
-    err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf); CHECK_ERR
 
-    err = ncmpi_inq_dimlen(ncid, dimid, &length); ERR
+    err = ncmpi_inq_dimlen(ncid, dimid, &length); CHECK_ERR
     if (length != 2) {
-        printf("Error: expecting 2 records, but got %lld record(s)\n",length);
+        printf("Error at line %d in %s: expecting 2 records, but got %lld record(s)\n",
+        __LINE__,__FILE__,length);
         nerrs++;
     }
 
     if (nerrs == 0) { /* test independent data mode */
-        err = ncmpi_begin_indep_data(ncid); ERR
+        err = ncmpi_begin_indep_data(ncid); CHECK_ERR
         /* write the 4th record */
         buf[0] = 93;
         start[0] = 3; count[0] = 1;
-        err = ncmpi_put_vara_int(ncid, varid, start, count, buf); ERR
+        err = ncmpi_put_vara_int(ncid, varid, start, count, buf); CHECK_ERR
 
         /* write the 3rd record */
         buf[0] = 92; buf[1] = 93;
         start[0] = 2; count[0] = 2;
-        err = ncmpi_put_vara_int(ncid, varid, start, count, buf); ERR
+        err = ncmpi_put_vara_int(ncid, varid, start, count, buf); CHECK_ERR
 
-        err = ncmpi_inq_dimlen(ncid, dimid, &length); ERR
+        err = ncmpi_inq_dimlen(ncid, dimid, &length); CHECK_ERR
         if (length != 4) {
-            printf("Error: expecting 4 records, but got %lld record(s)\n",
-                   length);
+            printf("Error at line %d in %s: expecting 4 records, but got %lld record(s)\n",
+                   __LINE__,__FILE__,length);
             nerrs++;
         }
-        err = ncmpi_end_indep_data(ncid); ERR
+        err = ncmpi_end_indep_data(ncid); CHECK_ERR
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 
@@ -100,54 +99,55 @@ int test_only_record_var_3D(char *filename)
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER;
-    err = ncmpi_create(MPI_COMM_SELF, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_SELF, filename, cmode, info, &ncid); CHECK_ERR
 
     /* define dimension and variable */
-    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "FIX_DIM_Y", 2,          &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "FIX_DIM_X", 10,         &dimid[2]); ERR
-    err = ncmpi_def_var(ncid, "REC_VAR_3D", NC_INT, 3, dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "FIX_DIM_Y", 2,          &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "FIX_DIM_X", 10,         &dimid[2]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_3D", NC_INT, 3, dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     start[1] = 0; start[2] = 0; count[0] = 1; count[1] = 2; count[2] = 5;
 
     /* write the 2nd record first */
     for (i=0; i<20; i++) buf[i] = 91;
     start[0] = 1;
-    err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf); CHECK_ERR
 
     /* write the 1st record now */
     for (i=0; i<20; i++) buf[i] = 90;
     start[0] = 0;
-    err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, start, count, buf); CHECK_ERR
 
-    err = ncmpi_inq_dimlen(ncid, dimid[0], &length); ERR
+    err = ncmpi_inq_dimlen(ncid, dimid[0], &length); CHECK_ERR
     if (length != 2) {
-        printf("Error: expecting 2 records, but got %lld record(s)\n",length);
+        printf("Error at line %d in %s: expecting 2 records, but got %lld record(s)\n",
+        __LINE__,__FILE__,length);
         nerrs++;
     }
 
     if (nerrs == 0) { /* test independent data mode */
-        err = ncmpi_begin_indep_data(ncid); ERR
+        err = ncmpi_begin_indep_data(ncid); CHECK_ERR
         /* write the 4th record */
         for (i=0; i<20; i++) buf[i] = 93;
         start[0] = 3;
-        err = ncmpi_put_vara_int(ncid, varid, start, count, buf); ERR
+        err = ncmpi_put_vara_int(ncid, varid, start, count, buf); CHECK_ERR
 
         /* write the 3rd record */
         for (i=0; i<20; i++) buf[i] = 92;
         start[0] = 2;
-        err = ncmpi_put_vara_int(ncid, varid, start, count, buf); ERR
+        err = ncmpi_put_vara_int(ncid, varid, start, count, buf); CHECK_ERR
 
-        err = ncmpi_inq_dimlen(ncid, dimid[0], &length); ERR
+        err = ncmpi_inq_dimlen(ncid, dimid[0], &length); CHECK_ERR
         if (length != 4) {
-            printf("Error: expecting 4 records, but got %lld record(s)\n",
-                   length);
+            printf("Error at line %d in %s: expecting 4 records, but got %lld record(s)\n",
+                   __LINE__,__FILE__,length);
             nerrs++;
         }
-        err = ncmpi_end_indep_data(ncid); ERR
+        err = ncmpi_end_indep_data(ncid); CHECK_ERR
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 
@@ -160,51 +160,52 @@ int test_two_record_var(char *filename)
 
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER;
-    err = ncmpi_create(MPI_COMM_SELF, filename, cmode, info, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_SELF, filename, cmode, info, &ncid); CHECK_ERR
 
     /* define dimension and variable */
-    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "FIX_DIM_Y", 2,          &dimid[1]); ERR
-    err = ncmpi_def_dim(ncid, "FIX_DIM_X", 10,         &dimid[2]); ERR
-    err = ncmpi_def_var(ncid, "REC_VAR_1D", NC_INT, 1, dimid, &varid[0]); ERR
-    err = ncmpi_def_var(ncid, "REC_VAR_3D", NC_INT, 3, dimid, &varid[1]); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "FIX_DIM_Y", 2,          &dimid[1]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "FIX_DIM_X", 10,         &dimid[2]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_1D", NC_INT, 1, dimid, &varid[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "REC_VAR_3D", NC_INT, 3, dimid, &varid[1]); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* REC_VAR_1D: write the 2nd record first */
     buf[0] = 91;
     start[0] = 1; count[0] = 1;
-    err = ncmpi_put_vara_int_all(ncid, varid[0], start, count, buf); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid[0], start, count, buf); CHECK_ERR
 
     /* write the 1st record now */
     buf[0] = 90;
     start[0] = 0; count[0] = 1;
-    err = ncmpi_put_vara_int_all(ncid, varid[0], start, count, buf); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid[0], start, count, buf); CHECK_ERR
 
-    err = ncmpi_inq_dimlen(ncid, dimid[0], &length); ERR
+    err = ncmpi_inq_dimlen(ncid, dimid[0], &length); CHECK_ERR
     if (length != 2) {
-        printf("Error: expecting 2 records, but got %lld record(s)\n",length);
+        printf("Error at line %d in %s: expecting 2 records, but got %lld record(s)\n",
+        __LINE__,__FILE__,length);
         nerrs++;
     }
 
     if (nerrs == 0) { /* test independent data mode */
-        err = ncmpi_begin_indep_data(ncid); ERR
+        err = ncmpi_begin_indep_data(ncid); CHECK_ERR
         /* write the 4th record */
         buf[0] = 93;
         start[0] = 3; count[0] = 1;
-        err = ncmpi_put_vara_int(ncid, varid[0], start, count, buf); ERR
+        err = ncmpi_put_vara_int(ncid, varid[0], start, count, buf); CHECK_ERR
 
         /* write the 3rd and 4th records */
         buf[0] = 92; buf[1] = 93;
         start[0] = 2; count[0] = 2;
-        err = ncmpi_put_vara_int(ncid, varid[0], start, count, buf); ERR
+        err = ncmpi_put_vara_int(ncid, varid[0], start, count, buf); CHECK_ERR
 
-        err = ncmpi_inq_dimlen(ncid, dimid[0], &length); ERR
+        err = ncmpi_inq_dimlen(ncid, dimid[0], &length); CHECK_ERR
         if (length != 4) {
-            printf("Error: expecting 4 records, but got %lld record(s)\n",
-                   length);
+            printf("Error at line %d in %s: expecting 4 records, but got %lld record(s)\n",
+                   __LINE__,__FILE__,length);
             nerrs++;
         }
-        err = ncmpi_end_indep_data(ncid); ERR
+        err = ncmpi_end_indep_data(ncid); CHECK_ERR
     }
 
     /* REC_VAR_3D: write the 2nd record first */
@@ -212,40 +213,41 @@ int test_two_record_var(char *filename)
 
     for (i=0; i<20; i++) buf[i] = 91;
     start[0] = 1;
-    err = ncmpi_put_vara_int_all(ncid, varid[1], start, count, buf); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid[1], start, count, buf); CHECK_ERR
 
     /* write the 1st record now */
     for (i=0; i<20; i++) buf[i] = 90;
     start[0] = 0;
-    err = ncmpi_put_vara_int_all(ncid, varid[1], start, count, buf); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid[1], start, count, buf); CHECK_ERR
 
-    err = ncmpi_inq_dimlen(ncid, dimid[0], &length); ERR
+    err = ncmpi_inq_dimlen(ncid, dimid[0], &length); CHECK_ERR
     if (length != 4) {
-        printf("Error: expecting 4 records, but got %lld record(s)\n",length);
+        printf("Error at line %d in %s: expecting 4 records, but got %lld record(s)\n",
+        __LINE__,__FILE__,length);
         nerrs++;
     }
 
     if (nerrs == 0) { /* test independent data mode */
-        err = ncmpi_begin_indep_data(ncid); ERR
+        err = ncmpi_begin_indep_data(ncid); CHECK_ERR
         /* write the 4th record */
         for (i=0; i<20; i++) buf[i] = 93;
         start[0] = 3;
-        err = ncmpi_put_vara_int(ncid, varid[1], start, count, buf); ERR
+        err = ncmpi_put_vara_int(ncid, varid[1], start, count, buf); CHECK_ERR
 
         /* write the 3rd record */
         for (i=0; i<20; i++) buf[i] = 92;
         start[0] = 2;
-        err = ncmpi_put_vara_int(ncid, varid[1], start, count, buf); ERR
+        err = ncmpi_put_vara_int(ncid, varid[1], start, count, buf); CHECK_ERR
 
-        err = ncmpi_inq_dimlen(ncid, dimid[0], &length); ERR
+        err = ncmpi_inq_dimlen(ncid, dimid[0], &length); CHECK_ERR
         if (length != 4) {
-            printf("Error: expecting 4 records, but got %lld record(s)\n",
-                   length);
+            printf("Error at line %d in %s: expecting 4 records, but got %lld record(s)\n",
+                   __LINE__,__FILE__,length);
             nerrs++;
         }
-        err = ncmpi_end_indep_data(ncid); ERR
+        err = ncmpi_end_indep_data(ncid); CHECK_ERR
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
     return nerrs;
 }
 
@@ -297,6 +299,6 @@ fn_exit:
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/redef1.c b/test/testcases/redef1.c
index a75ba41..d7e1075 100644
--- a/test/testcases/redef1.c
+++ b/test/testcases/redef1.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: redef1.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: redef1.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -25,13 +25,6 @@
 
 #include <testutils.h>
 
-#define PNCDF_Error(err, msg) \
-    if (err != NC_NOERR) { \
-        printf("Error: %s (%s)\n", msg, ncmpi_strerror(err)); \
-        nerrs++; \
-        goto fn_exit; \
-    }  
-
 int main(int argc, char** argv)
 {
     char filename[256];
@@ -51,7 +44,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "redef2.nc");
@@ -70,37 +63,37 @@ int main(int argc, char** argv)
   
     err = ncmpi_create(comm, filename, NC_CLOBBER|NC_64BIT_OFFSET,
                           MPI_INFO_NULL, &ncid);
-    PNCDF_Error(err, "create")
+    CHECK_ERR
   
     err = ncmpi_def_dim(ncid, "dim0", len0, &dim0id);
-    PNCDF_Error(err, "def_dim0")
+    CHECK_ERR
 
     err = ncmpi_def_dim(ncid, "dim1", len1, &dim1id);
-    PNCDF_Error(err, "def_dim1")
+    CHECK_ERR
 
     err = ncmpi_def_dim(ncid, "dim5", len5, &dim5id);
-    PNCDF_Error(err, "def_dim5")
+    CHECK_ERR
 
     err = ncmpi_def_dim(ncid, "dim9", len9, &dim9id);
-    PNCDF_Error(err, "def_dim9")
+    CHECK_ERR
   
     dimsid[0] = dim0id;
     dimsid[1] = dim1id;
     err = ncmpi_def_var(ncid, "xyz", NC_INT, 2, dimsid, &varid);
-    PNCDF_Error(err, "def_var")
+    CHECK_ERR
  
     dimsid[0] = dim0id;
     dimsid[1] = dim5id;
     err = ncmpi_def_var(ncid, "connect", NC_INT, 2, dimsid, &var3id);
-    PNCDF_Error(err, "def_var3")
+    CHECK_ERR
 
     dimsid[0] = dim0id;
     dimsid[1] = dim9id;
     err = ncmpi_def_var(ncid, "connect_exterior", NC_INT, 2, dimsid, &var4id);
-    PNCDF_Error(err, "def_var4")
+    CHECK_ERR
 
     err = ncmpi_enddef(ncid);
-    PNCDF_Error(err, "enddef")
+    CHECK_ERR
 
     /* put data */
     start[0] = 0;
@@ -115,7 +108,7 @@ int main(int argc, char** argv)
             data[i*len1+j] = k++;
     if (rank > 0) count[0] = count[1] = 0;
     err = ncmpi_put_vara_int_all(ncid, varid, start, count, &data[0]);
-    PNCDF_Error(err, "put1")
+    CHECK_ERR
     free(data);
     
     count[0] = len0;
@@ -127,7 +120,7 @@ int main(int argc, char** argv)
             data[i*len5+j] = k++;
     if (rank > 0) count[0] = count[1] = 0;
     err = ncmpi_put_vara_int_all(ncid, var3id, start, count, &data[0]);
-    PNCDF_Error(err, "put3")
+    CHECK_ERR
     free(data);
 
     count[0] = len0;
@@ -139,28 +132,28 @@ int main(int argc, char** argv)
             data[i*len9+j] = k++;
     if (rank > 0) count[0] = count[1] = 0;
     err = ncmpi_put_vara_int_all(ncid, var4id, start, count, &data[0]);
-    PNCDF_Error(err, "put4")
+    CHECK_ERR
     free(data);
 
     err = ncmpi_close(ncid);
-    PNCDF_Error(err, "close")
+    CHECK_ERR
 
     err = ncmpi_open(comm, filename, NC_WRITE, MPI_INFO_NULL, &ncid);
-    PNCDF_Error(err, "ncmpi_open")
+    CHECK_ERR
 
     err = ncmpi_redef(ncid);
-    PNCDF_Error(err, "redef")
+    CHECK_ERR
 
     err = ncmpi_def_dim(ncid, "dim2", len2, &dim2id);
-    PNCDF_Error(err, "def_dim")
+    CHECK_ERR
   
     dims2id[0] = dim0id;
     dims2id[1] = dim2id;
     err = ncmpi_def_var(ncid, "xyz_r", NC_DOUBLE, 2, dims2id, &var2id);
-    PNCDF_Error(err, "def_var")
+    CHECK_ERR
 
     err = ncmpi_enddef(ncid);
-    PNCDF_Error(err, "enddef")
+    CHECK_ERR
 
     start[0] = 0;
     start[1] = 0;
@@ -175,11 +168,11 @@ int main(int argc, char** argv)
         }
     if (rank > 0) count[0] = count[1] = 0;
     err = ncmpi_put_vara_double_all(ncid, var2id, start, count, &dbl_data[0]);
-    PNCDF_Error(err, "put2")
+    CHECK_ERR
     free(dbl_data);
 
     err = ncmpi_close(ncid);
-    PNCDF_Error(err, "close")
+    CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -191,7 +184,6 @@ int main(int argc, char** argv)
                    sum_size);
     }
 
-fn_exit:
     MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
     if (rank == 0) {
         if (nerrs) printf(FAIL_STR,nerrs);
@@ -199,5 +191,5 @@ fn_exit:
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/redef1.sh b/test/testcases/redef1.sh
deleted file mode 100755
index b3b0360..0000000
--- a/test/testcases/redef1.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/bin/bash
-# quick test of re-entering define mode: the file created by ncmpigen and the
-# file created by test program should be bit-for-bit identical, else there is
-# an error
-
-if [ $# -ne 2 ] ; then
-	echo "usage: $0 <executable> <reference>"
-	echo "example: $0 redef1 redef-good.ncdump"
-	exit -1
-fi
-
-REFERENCE=redef1-a-${RANDOM}-${RANDOM}-${RANDOM}.nc
-
-# dataset via ncmpigen:
-../../src/utils/ncmpigen/ncmpigen -v 2 -o $REFERENCE $2
-
-# dataset via test
-$1
-
-# now compare
-
-diff $REFERENCE redef1.nc
diff --git a/test/testcases/scalar.c b/test/testcases/scalar.c
index abc4d71..6cdaa79 100644
--- a/test/testcases/scalar.c
+++ b/test/testcases/scalar.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: scalar.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: scalar.c 3341 2017-08-25 22:29:08Z wkliao $
  *
  *  Check if arguments start, count, stride, and imap are properly ignored
  *  when get/put a scalar variable.
@@ -17,11 +17,6 @@
 
 #include <testutils.h>
 
-#define PRINT_ERR_ON_SCREEN
-
-#define ERRCODE 2
-#define ERR {if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 /*----< main() >------------------------------------------------------------*/
 int main(int argc, char **argv)
 {
@@ -37,7 +32,7 @@ int main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -55,11 +50,11 @@ int main(int argc, char **argv)
 #endif
 
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER | NC_64BIT_DATA,
-                       MPI_INFO_NULL, &ncid); ERR
+                       MPI_INFO_NULL, &ncid); CHECK_ERR
 
     /* define a scalar variable of integer type */
-    err = ncmpi_def_var(ncid, "scalar_var", NC_INT, 0, NULL, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_var(ncid, "scalar_var", NC_INT, 0, NULL, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     buf = 1;
     start[0] = 1;
@@ -68,42 +63,48 @@ int main(int argc, char **argv)
     imap[0] = 2;
 
     /* put */
-    err = ncmpi_put_var1_int_all(ncid, varid, NULL,  &buf); ERR
-    err = ncmpi_put_var1_int_all(ncid, varid, start, &buf); ERR
+    err = ncmpi_put_var1_int_all(ncid, varid, NULL,  &buf); CHECK_ERR
+    err = ncmpi_put_var1_int_all(ncid, varid, start, &buf); CHECK_ERR
+
+    err = ncmpi_put_vara_int_all(ncid, varid, start, count, &buf); CHECK_ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, NULL, count, &buf); CHECK_ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, start, NULL, &buf); CHECK_ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, NULL, NULL, &buf); CHECK_ERR
 
-    err = ncmpi_put_vara_int_all(ncid, varid, start, count, &buf); ERR
-    err = ncmpi_put_vara_int_all(ncid, varid, NULL, count, &buf); ERR
-    err = ncmpi_put_vara_int_all(ncid, varid, start, NULL, &buf); ERR
-    err = ncmpi_put_vara_int_all(ncid, varid, NULL, NULL, &buf); ERR
+    err = ncmpi_put_vars_int_all(ncid, varid, start, count, stride, &buf); CHECK_ERR
+    err = ncmpi_put_vars_int_all(ncid, varid, NULL, count, stride, &buf); CHECK_ERR
+    err = ncmpi_put_vars_int_all(ncid, varid, start, NULL, stride, &buf); CHECK_ERR
+    err = ncmpi_put_vars_int_all(ncid, varid, start, count, NULL, &buf); CHECK_ERR
+    err = ncmpi_put_vars_int_all(ncid, varid, NULL, NULL, NULL, &buf); CHECK_ERR
 
-    err = ncmpi_put_vars_int_all(ncid, varid, start, count, stride, &buf); ERR
-    err = ncmpi_put_vars_int_all(ncid, varid, NULL, count, stride, &buf); ERR
-    err = ncmpi_put_vars_int_all(ncid, varid, start, NULL, stride, &buf); ERR
-    err = ncmpi_put_vars_int_all(ncid, varid, start, count, NULL, &buf); ERR
-    err = ncmpi_put_vars_int_all(ncid, varid, NULL, NULL, NULL, &buf); ERR
+    err = ncmpi_put_varm_int_all(ncid, varid, start, count, stride, imap, &buf); CHECK_ERR
+    err = ncmpi_put_varm_int_all(ncid, varid, NULL, NULL, NULL, NULL, &buf); CHECK_ERR
 
-    err = ncmpi_put_varm_int_all(ncid, varid, start, count, stride, imap, &buf); ERR
-    err = ncmpi_put_varm_int_all(ncid, varid, NULL, NULL, NULL, NULL, &buf); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); CHECK_ERR
+
+    err = ncmpi_inq_varid(ncid, "scalar_var", &varid); CHECK_ERR
 
     /* get */
-    err = ncmpi_get_var1_int_all(ncid, varid, NULL,  &buf); ERR
-    err = ncmpi_get_var1_int_all(ncid, varid, start, &buf); ERR
+    err = ncmpi_get_var1_int_all(ncid, varid, NULL,  &buf); CHECK_ERR
+    err = ncmpi_get_var1_int_all(ncid, varid, start, &buf); CHECK_ERR
 
-    err = ncmpi_get_vara_int_all(ncid, varid, start, count, &buf); ERR
-    err = ncmpi_get_vara_int_all(ncid, varid, NULL, count, &buf); ERR
-    err = ncmpi_get_vara_int_all(ncid, varid, start, NULL, &buf); ERR
-    err = ncmpi_get_vara_int_all(ncid, varid, NULL, NULL, &buf); ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, start, count, &buf); CHECK_ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, NULL, count, &buf); CHECK_ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, start, NULL, &buf); CHECK_ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, NULL, NULL, &buf); CHECK_ERR
 
-    err = ncmpi_get_vars_int_all(ncid, varid, start, count, stride, &buf); ERR
-    err = ncmpi_get_vars_int_all(ncid, varid, NULL, count, stride, &buf); ERR
-    err = ncmpi_get_vars_int_all(ncid, varid, start, NULL, stride, &buf); ERR
-    err = ncmpi_get_vars_int_all(ncid, varid, start, count, NULL, &buf); ERR
-    err = ncmpi_get_vars_int_all(ncid, varid, NULL, NULL, NULL, &buf); ERR
+    err = ncmpi_get_vars_int_all(ncid, varid, start, count, stride, &buf); CHECK_ERR
+    err = ncmpi_get_vars_int_all(ncid, varid, NULL, count, stride, &buf); CHECK_ERR
+    err = ncmpi_get_vars_int_all(ncid, varid, start, NULL, stride, &buf); CHECK_ERR
+    err = ncmpi_get_vars_int_all(ncid, varid, start, count, NULL, &buf); CHECK_ERR
+    err = ncmpi_get_vars_int_all(ncid, varid, NULL, NULL, NULL, &buf); CHECK_ERR
 
-    err = ncmpi_get_varm_int_all(ncid, varid, start, count, stride, imap, &buf); ERR
-    err = ncmpi_get_varm_int_all(ncid, varid, NULL, NULL, NULL, NULL, &buf); ERR
+    err = ncmpi_get_varm_int_all(ncid, varid, start, count, stride, imap, &buf); CHECK_ERR
+    err = ncmpi_get_varm_int_all(ncid, varid, NULL, NULL, NULL, NULL, &buf); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -122,7 +123,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-
-    return (nerrs == 0) ? 0 : 1;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/seq_runs.sh b/test/testcases/seq_runs.sh
new file mode 100755
index 0000000..9b8dd66
--- /dev/null
+++ b/test/testcases/seq_runs.sh
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -e
+
+VALIDATOR=../../src/utils/ncmpivalid/ncmpivalid
+
+for j in 0 1 ; do { \
+    export PNETCDF_SAFE_MODE=$$j ; \
+    for i in ${TESTPROGRAMS}; do { \
+        ${TESTSEQRUN} ./$i            ${TESTOUTDIR}/testfile.nc ; \
+        ${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc ; \
+} ; done ; } ; done
+
+NCMPIGEN=../../src/utils/ncmpigen/ncmpigen
+NCMPIDIFF=../../src/utils/ncmpidiff/ncmpidiff
+
+rm -f ${TESTOUTDIR}/testfile.nc ${TESTOUTDIR}/redef1.nc
+${TESTSEQRUN} ${NCMPIGEN} -v 2 -o ${TESTOUTDIR}/redef1.nc ${srcdir}/redef-good.ncdump
+${TESTSEQRUN} ./redef1 ${TESTOUTDIR}/testfile.nc
+${TESTSEQRUN} ${NCMPIDIFF} -q ${TESTOUTDIR}/testfile.nc ${TESTOUTDIR}/redef1.nc
+diff -q ${TESTOUTDIR}/testfile.nc ${TESTOUTDIR}/redef1.nc
+
+${TESTSEQRUN} ${VALIDATOR} -q ${TESTOUTDIR}/testfile.nc
+
diff --git a/test/testcases/test_erange.c b/test/testcases/test_erange.c
index 9d02a91..0cddbfa 100644
--- a/test/testcases/test_erange.c
+++ b/test/testcases/test_erange.c
@@ -36,9 +36,6 @@
 
 #include <testutils.h>
 
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: %s\n",__LINE__,ncmpi_strerror(err));nerrs++;}
-#define EXPECT_ERR if (err != NC_ERANGE) {printf("Error at line %d: expecting NC_ERANGE, but got %d\n",__LINE__,err);nerrs++;}
-
 static
 int test_cdf2(char *filename)
 {
@@ -47,7 +44,7 @@ int test_cdf2(char *filename)
     signed char sc[1];
     int si[1];
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
 
     /* for CDF-1 and CDF-2, a special case is made: there is no NC_ERANGE
      * error can occur converting between NC_BYTE and unsigned char.
@@ -56,31 +53,31 @@ int test_cdf2(char *filename)
      * all unsigned APIs. In CDF-2, there is only one unsigned API, _uchar.
      */
     uc[0] = 255;
-    err = ncmpi_put_att_uchar(ncid, NC_GLOBAL, "att1", NC_BYTE, 1, uc); ERR
+    err = ncmpi_put_att_uchar(ncid, NC_GLOBAL, "att1", NC_BYTE, 1, uc); CHECK_ERR
     uc[0] = 0; /* initialize with a number that is not 0 */
-    err = ncmpi_get_att_uchar(ncid, NC_GLOBAL, "att1", uc); ERR
+    err = ncmpi_get_att_uchar(ncid, NC_GLOBAL, "att1", uc); CHECK_ERR
     if (uc[0] != 255) {
         printf("Error at line %d: unexpected read value %d (expecting 255)\n",__LINE__,(int)uc[0]);
         nerrs++;
     }
     sc[0] = 3; /* initialize with a number that is not -1 or -0 */
     /* No NC_ERANGE as the internal and external types are considered the same */
-    err = ncmpi_get_att_schar(ncid, NC_GLOBAL, "att1", sc); ERR
+    err = ncmpi_get_att_schar(ncid, NC_GLOBAL, "att1", sc); CHECK_ERR
     if (   sc[0] != -1     /* 2-complement bit representation */
         && sc[0] != -0) {  /* 1-complement bit representation */
         printf("Error at line %d: unexpected read value %d (expecting 255)\n",__LINE__,(int)uc[0]);
         nerrs++;
     }
 
-    err = ncmpi_def_dim(ncid, "x", 1, &dimid); ERR
-    err = ncmpi_def_var(ncid, "var_byte", NC_BYTE, 1, &dimid, &vid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "x", 1, &dimid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_byte", NC_BYTE, 1, &dimid, &vid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* No NC_ERANGE should be returned for CDF-1 and 2 */
     uc[0] = 255;
-    err = ncmpi_put_var_uchar_all(ncid, vid, uc); ERR
+    err = ncmpi_put_var_uchar_all(ncid, vid, uc); CHECK_ERR
     uc[0] = 3; /* initialize with a number that is not -1 or -0 */
-    err = ncmpi_get_var_uchar_all(ncid, vid, uc); ERR
+    err = ncmpi_get_var_uchar_all(ncid, vid, uc); CHECK_ERR
     if (uc[0] != 255) {
         printf("Error at line %d: unexpected read value %d (expecting 255)\n",__LINE__,(int)uc[0]);
         nerrs++;
@@ -88,9 +85,9 @@ int test_cdf2(char *filename)
 
     /* No NC_ERANGE should be returned for CDF-1 and 2 */
     sc[0] = -128;
-    err = ncmpi_put_var_schar_all(ncid, vid, sc); ERR
+    err = ncmpi_put_var_schar_all(ncid, vid, sc); CHECK_ERR
     sc[0] = 0;
-    err = ncmpi_get_var_schar_all(ncid, vid, sc); ERR
+    err = ncmpi_get_var_schar_all(ncid, vid, sc); CHECK_ERR
     if (sc[0] != -128) {
         printf("Error at line %d: unexpected read value %d (expecting -128)\n",__LINE__,(int)sc[0]);
         nerrs++;
@@ -98,7 +95,7 @@ int test_cdf2(char *filename)
 
     /* expect NC_ERANGE */
     si[0] = -129;
-    err = ncmpi_put_var_int_all(ncid, vid, si); EXPECT_ERR
+    err = ncmpi_put_var_int_all(ncid, vid, si); EXP_ERR(NC_ERANGE)
     if (si[0] != -129) { /* check if put buffer content is altered */
         printf("Error at line %d: put buffer content altered %d (expecting -128)\n",__LINE__,si[0]);
         nerrs++;
@@ -106,7 +103,7 @@ int test_cdf2(char *filename)
 
     /* expect NC_ERANGE */
     si[0] = 256;
-    err = ncmpi_put_var_int_all(ncid, vid, si); EXPECT_ERR
+    err = ncmpi_put_var_int_all(ncid, vid, si); EXP_ERR(NC_ERANGE)
     if (si[0] != 256) { /* check if put buffer content is altered */
         printf("Error at line %d: put buffer content altered %d (expecting 256)\n",__LINE__,si[0]);
         nerrs++;
@@ -114,15 +111,15 @@ int test_cdf2(char *filename)
 
     /* expect no error */
     si[0] = -128;
-    err = ncmpi_put_var_int_all(ncid, vid, si); ERR
+    err = ncmpi_put_var_int_all(ncid, vid, si); CHECK_ERR
     si[0] = 0;
-    err = ncmpi_get_var_int_all(ncid, vid, si); ERR
+    err = ncmpi_get_var_int_all(ncid, vid, si); CHECK_ERR
     if (si[0] != -128) {
         printf("Error at line %d: unexpected read value %d (expecting -128)\n",__LINE__,si[0]);
         nerrs++;
     }
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -134,7 +131,7 @@ int test_cdf5(char *filename)
     unsigned char uc[1];
     signed char sc[1];
 
-    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA, MPI_INFO_NULL, &ncid); ERR
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER|NC_64BIT_DATA, MPI_INFO_NULL, &ncid); CHECK_ERR
 
     /* CDF-5 considers NC_BYTE a signed 1-byte integer and NC_UBYTE an
      * unsigned 1-byte integer. The special case in CDF-2 for skipping
@@ -142,37 +139,37 @@ int test_cdf5(char *filename)
      * char is no longer held.
      */
     uc[0] = 255;
-    err = ncmpi_put_att_uchar(ncid, NC_GLOBAL, "att1", NC_UBYTE, 1, uc); ERR
+    err = ncmpi_put_att_uchar(ncid, NC_GLOBAL, "att1", NC_UBYTE, 1, uc); CHECK_ERR
 
     /* in CDF-5, get 255 to a schar buffer should result in NC_ERANGE */
-    err = ncmpi_get_att_schar(ncid, NC_GLOBAL, "att1", sc); EXPECT_ERR
+    err = ncmpi_get_att_schar(ncid, NC_GLOBAL, "att1", sc); EXP_ERR(NC_ERANGE)
 
     sc[0] = -1; /* a value should cause NC_ERANGE */
-    err = ncmpi_put_att_schar(ncid, NC_GLOBAL, "att2", NC_UBYTE, 1, sc); EXPECT_ERR
+    err = ncmpi_put_att_schar(ncid, NC_GLOBAL, "att2", NC_UBYTE, 1, sc); EXP_ERR(NC_ERANGE)
 
-    err = ncmpi_def_dim(ncid, "x", 1, &dimid); ERR
-    err = ncmpi_def_var(ncid, "var_ubyte", NC_UBYTE, 1, &dimid, &uc_vid); ERR
-    err = ncmpi_def_var(ncid, "var_byte",  NC_BYTE,  1, &dimid, &sc_vid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "x", 1, &dimid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_ubyte", NC_UBYTE, 1, &dimid, &uc_vid); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var_byte",  NC_BYTE,  1, &dimid, &sc_vid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     uc[0] = 255;
-    err = ncmpi_put_var_uchar_all(ncid, uc_vid, uc); ERR
+    err = ncmpi_put_var_uchar_all(ncid, uc_vid, uc); CHECK_ERR
 
     /* in CDF-5, get 255 to an schar should result in NC_ERANGE */
-    err = ncmpi_get_var_schar_all(ncid, uc_vid, sc); EXPECT_ERR
+    err = ncmpi_get_var_schar_all(ncid, uc_vid, sc); EXP_ERR(NC_ERANGE)
 
     sc[0] = -1; /* in CDF-5, put -1 to an uchar should result in NC_ERANGE */
-    err = ncmpi_put_var_schar_all(ncid, uc_vid, sc); EXPECT_ERR
+    err = ncmpi_put_var_schar_all(ncid, uc_vid, sc); EXP_ERR(NC_ERANGE)
 
     uc[0] = 255; /* in CDF-5, put 255 to a schar should result in NC_ERANGE */
-    err = ncmpi_put_var_uchar_all(ncid, sc_vid, uc); EXPECT_ERR
+    err = ncmpi_put_var_uchar_all(ncid, sc_vid, uc); EXP_ERR(NC_ERANGE)
 
     sc[0] = -1;
-    err = ncmpi_put_var_schar_all(ncid, sc_vid, sc); ERR
+    err = ncmpi_put_var_schar_all(ncid, sc_vid, sc); CHECK_ERR
     uc[0] = 0; /* in CDF-5, get -1 to an uchar should result in NC_ERANGE */
-    err = ncmpi_get_var_uchar_all(ncid, sc_vid, uc); EXPECT_ERR
+    err = ncmpi_get_var_uchar_all(ncid, sc_vid, uc); EXP_ERR(NC_ERANGE)
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     return nerrs;
 }
@@ -188,7 +185,7 @@ int main(int argc, char* argv[])
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -221,6 +218,5 @@ int main(int argc, char* argv[])
     }
 
     MPI_Finalize();
-
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/test_vard.c b/test/testcases/test_vard.c
index bac4a5a..ded084e 100644
--- a/test/testcases/test_vard.c
+++ b/test/testcases/test_vard.c
@@ -2,19 +2,19 @@
  *  Copyright (C) 2014, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: test_vard.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: test_vard.c 3422 2017-09-25 05:42:52Z wkliao $
  */
 
 /*
  * This program tests the vard API.
  * The write buffer is a 2D array of size NY x NX
  * The MPI data type for the buffer is defined by swapping the 1st and 2nd
- * rows of the array using a butype constructed by MPI_Type_create_hindex().
+ * rows of the array using a buftype constructed by MPI_Type_create_hindex().
  * It also writes a fixed-size variable using a buftype constructed by
  * MPI_Type_create_subarray(). Both record and foxed-size variables are read
  * back using various filetypes and buftypes and check the contents.
  *
- * The expected reults from the output file contents are:
+ * The expected results from the output file contents are:
  * (when running on 1 MPI process)
  *
  *  % ncmpidump testfile.nc
@@ -55,7 +55,6 @@
 
 #define NY 2
 #define NX 5
-#define ERR if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__,ncmpi_strerror(err)); nerrs++;}
 
 #define CHECK_VALUE_PERMUTED { \
     for (j=0; j<count[0]; j++) { \
@@ -98,7 +97,7 @@ int get_var_and_verify(int ncid,
     for (j=0; j<count[0]; j++) for (i=0; i<count[1]; i++) buf[j][i] = -1;
 
     /* read back using regular vara API */
-    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf[0]); ERR
+    err = ncmpi_get_vara_int_all(ncid, varid, start, count, buf[0]); CHECK_ERR
 
     /* check if the contents of buf are expected */
     CHECK_VALUE_PERMUTED
@@ -107,7 +106,7 @@ int get_var_and_verify(int ncid,
     for (j=0; j<count[0]; j++) for (i=0; i<count[1]; i++) buf[j][i] = -1;
 
     /* read back using flexible vara API */
-    err = ncmpi_get_vara_all(ncid, varid, start, count, buf[1], 1, buftype); ERR
+    err = ncmpi_get_vara_all(ncid, varid, start, count, buf[1], 1, buftype); CHECK_ERR
 
     /* check if the contents of buf are expected */
     CHECK_VALUE
@@ -116,7 +115,7 @@ int get_var_and_verify(int ncid,
     for (j=0; j<count[0]; j++) for (i=0; i<count[1]; i++) buf[j][i] = -1;
 
     /* read back using vard API and permuted buftype */
-    err = ncmpi_get_vard_all(ncid, varid, filetype, buf[1], 1, buftype); ERR
+    err = ncmpi_get_vard_all(ncid, varid, filetype, buf[1], 1, buftype); CHECK_ERR
 
     /* check if the contents of buf are expected */
     CHECK_VALUE
@@ -125,7 +124,7 @@ int get_var_and_verify(int ncid,
     for (j=0; j<count[0]; j++) for (i=0; i<count[1]; i++) buf[j][i] = -1;
 
     /* read back using vard API and no buftype */
-    err = ncmpi_get_vard_all(ncid, varid, filetype, buf[0], 0, MPI_DATATYPE_NULL); ERR
+    err = ncmpi_get_vard_all(ncid, varid, filetype, buf[0], 0, MPI_DATATYPE_NULL); CHECK_ERR
 
     /* check if the contents of buf are expected */
     CHECK_VALUE_PERMUTED
@@ -134,13 +133,13 @@ int get_var_and_verify(int ncid,
     for (i=0; i<(count[0]+4)*(count[1]+4); i++) ncbuf[i] = -1;
 
     /* read back using ghost buftype */
-    err = ncmpi_get_vard_all(ncid, varid, filetype, ncbuf, 1, ghost_buftype); ERR
+    err = ncmpi_get_vard_all(ncid, varid, filetype, ncbuf, 1, ghost_buftype); CHECK_ERR
 
     for (j=0; j<count[0]; j++) {
         for (i=0; i<count[1]; i++)
             if (buf[j][i] != ncbuf[(j+2)*(count[1]+4)+(i+2)]) {
-                printf("Error at line %d: expecting ncbuf[%d][%d]=%d but got %d\n",
-                       __LINE__,j,i,buf[j][i],ncbuf[(j+2)*(count[1]+4)+(i+2)]);
+                printf("Error at line %d in %s: expecting ncbuf[%d][%d]=%d but got %d\n",
+                       __LINE__,__FILE__,j,i,buf[j][i],ncbuf[(j+2)*(count[1]+4)+(i+2)]);
                 nerrs++;
             }
     }
@@ -167,7 +166,7 @@ int main(int argc, char **argv) {
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -226,16 +225,16 @@ int main(int argc, char **argv) {
 
     /* create a new file for write */
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL,
-                       &ncid); ERR
+                       &ncid); CHECK_ERR
 
     /* define a 2D array */
-    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimids[0]); ERR
-    err = ncmpi_def_dim(ncid, "X",       NX*nprocs,    &dimids[1]); ERR
-    err = ncmpi_def_var(ncid, "rec_var", NC_INT, 2, dimids, &varid0); ERR
-    err = ncmpi_def_var(ncid, "dummy_rec", NC_INT, 2, dimids, &varid2); ERR
-    err = ncmpi_def_dim(ncid, "FIX_DIM", 2, &dimids[0]); ERR
-    err = ncmpi_def_var(ncid, "fix_var", NC_INT, 2, dimids, &varid1); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimids[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X",       NX*nprocs,    &dimids[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "rec_var", NC_INT, 2, dimids, &varid0); CHECK_ERR
+    err = ncmpi_def_var(ncid, "dummy_rec", NC_INT, 2, dimids, &varid2); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "FIX_DIM", 2, &dimids[0]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "fix_var", NC_INT, 2, dimids, &varid1); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* create a file type for the record variable */
     int *array_of_blocklengths=(int*) malloc(count[0]*sizeof(int));
@@ -256,24 +255,24 @@ int main(int argc, char **argv) {
     for (j=0; j<NY; j++) for (i=0; i<NX; i++) buf[j][i] = rank*100 + j*10 + i;
 
     /* get header size and put size by far */
-    err = ncmpi_inq_header_size(ncid, &header_size); ERR
-    err = ncmpi_inq_put_size(ncid, &put_size); ERR
+    err = ncmpi_inq_header_size(ncid, &header_size); CHECK_ERR
+    err = ncmpi_inq_put_size(ncid, &put_size); CHECK_ERR
 
     /* write the record variable */
-    err = ncmpi_put_vard_all(ncid, varid0, rec_filetype, bufptr, 1, buftype); ERR
+    err = ncmpi_put_vard_all(ncid, varid0, rec_filetype, bufptr, 1, buftype); CHECK_ERR
 
     /* check if put_size is correctly reported */
-    err = ncmpi_inq_put_size(ncid, &new_put_size); ERR
+    err = ncmpi_inq_put_size(ncid, &new_put_size); CHECK_ERR
     MPI_Type_size(buftype, &buftype_size);
-    err = ncmpi_inq_format(ncid, &format); ERR
+    err = ncmpi_inq_format(ncid, &format); CHECK_ERR
     expected_put_size = buftype_size;
 
     /* for writing a record variable, root process will update numrec to the
      * file header */
     if (rank == 0) expected_put_size += (format == NC_FORMAT_CDF5) ? 8 : 4;
     if (expected_put_size != new_put_size - put_size) {
-        printf("Error: unexpected put size (%lld) reported, expecting %d\n",
-               new_put_size-put_size, expected_put_size);
+        printf("Error at line %d in %s: unexpected put size (%lld) reported, expecting %d\n",
+               __LINE__,__FILE__,new_put_size-put_size, expected_put_size);
         nerrs++;
     }
 
@@ -281,19 +280,19 @@ int main(int argc, char **argv) {
     CHECK_VALUE
 
     /* check if root process can write to file header in data mode */
-    err = ncmpi_rename_var(ncid, varid0, "rec_VAR"); ERR
+    err = ncmpi_rename_var(ncid, varid0, "rec_VAR"); CHECK_ERR
 
-    err = ncmpi_inq_put_size(ncid, &put_size); ERR
+    err = ncmpi_inq_put_size(ncid, &put_size); CHECK_ERR
 
     /* write the fixed-size variable */
-    err = ncmpi_put_vard_all(ncid, varid1, fix_filetype, bufptr, 1, buftype); ERR
+    err = ncmpi_put_vard_all(ncid, varid1, fix_filetype, bufptr, 1, buftype); CHECK_ERR
 
     /* check if put_size is correctly reported */
-    err = ncmpi_inq_put_size(ncid, &new_put_size); ERR
+    err = ncmpi_inq_put_size(ncid, &new_put_size); CHECK_ERR
     expected_put_size = buftype_size;
     if (expected_put_size != new_put_size - put_size) {
-        printf("Error: unexpected put size (%lld) reported, expecting %d\n",
-               new_put_size-put_size, expected_put_size);
+        printf("Error at line %d in %s: unexpected put size (%lld) reported, expecting %d\n",
+               __LINE__,__FILE__,new_put_size-put_size, expected_put_size);
         nerrs++;
     }
 
@@ -301,31 +300,31 @@ int main(int argc, char **argv) {
     CHECK_VALUE
  
     /* check if root process can write to file header in data mode */
-    err = ncmpi_rename_var(ncid, varid0, "rec_var"); ERR
+    err = ncmpi_rename_var(ncid, varid0, "rec_var"); CHECK_ERR
 
     /* test the same routines in independent data mode */
-    err = ncmpi_begin_indep_data(ncid); ERR
-    err = ncmpi_put_vard(ncid, varid0, rec_filetype, bufptr, 1, buftype); ERR
+    err = ncmpi_begin_indep_data(ncid); CHECK_ERR
+    err = ncmpi_put_vard(ncid, varid0, rec_filetype, bufptr, 1, buftype); CHECK_ERR
     CHECK_VALUE
-    err = ncmpi_rename_var(ncid, varid0, "rec_VAR"); ERR
-    err = ncmpi_put_vard(ncid, varid1, fix_filetype, bufptr, 1, buftype); ERR
+    err = ncmpi_rename_var(ncid, varid0, "rec_VAR"); CHECK_ERR
+    err = ncmpi_put_vard(ncid, varid1, fix_filetype, bufptr, 1, buftype); CHECK_ERR
     CHECK_VALUE
-    err = ncmpi_rename_var(ncid, varid0, "rec_var"); ERR
-    err = ncmpi_end_indep_data(ncid); ERR
+    err = ncmpi_rename_var(ncid, varid0, "rec_var"); CHECK_ERR
+    err = ncmpi_end_indep_data(ncid); CHECK_ERR
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* open the same file and read back for validate */
     err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL,
-                     &ncid); ERR
+                     &ncid); CHECK_ERR
 
-    err = ncmpi_inq_varid(ncid, "rec_var", &varid0); ERR
-    err = ncmpi_inq_varid(ncid, "fix_var", &varid1); ERR
+    err = ncmpi_inq_varid(ncid, "rec_var", &varid0); CHECK_ERR
+    err = ncmpi_inq_varid(ncid, "fix_var", &varid1); CHECK_ERR
 
     nerrs += get_var_and_verify(ncid, varid0, start, count, buf, buftype, ghost_buftype, rec_filetype);
     nerrs += get_var_and_verify(ncid, varid1, start, count, buf, buftype, ghost_buftype, fix_filetype);
 
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_close(ncid); CHECK_ERR
 
     MPI_Type_free(&rec_filetype);
     MPI_Type_free(&fix_filetype);
@@ -350,5 +349,5 @@ int main(int argc, char **argv) {
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
diff --git a/test/testcases/test_vardf.F b/test/testcases/test_vardf.F
index 3f22f79..6ea48bd 100644
--- a/test/testcases/test_vardf.F
+++ b/test/testcases/test_vardf.F
@@ -2,18 +2,18 @@
 !   Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: test_vardf.F 2638 2016-11-18 14:51:02Z wkliao $
+! $Id: test_vardf.F 3422 2017-09-25 05:42:52Z wkliao $
 
 !
 ! This program tests the vard API.
 ! The write buffer is a 2D array of size NX x NY
 ! The MPI data type for the buffer is defined by swapping the 1st and 2nd
-! rows of the array using a butype constructed by MPI_Type_create_hindex().
+! rows of the array using a buftype constructed by MPI_Type_create_hindex().
 ! It also writes a fixed-size variable using a buftype constructed by
 ! MPI_Type_create_subarray(). Both record and foxed-size variables are read
 ! back using various filetypes and buftypes and check the contents.
 !
-! The expected reults from the output file contents are:
+! The expected results from the output file contents are:
 ! (when running on 1 MPI process)
 !
 !  % ncmpidump testfile.nc
@@ -391,5 +391,7 @@
           endif
 
  999      call MPI_Finalize(ierr)
+          if (nerrs .GT. 0) stop 2
+
       end ! program main
 
diff --git a/test/testcases/test_vardf90.f90 b/test/testcases/test_vardf90.f90
index 04bc76b..0f0482e 100644
--- a/test/testcases/test_vardf90.f90
+++ b/test/testcases/test_vardf90.f90
@@ -2,18 +2,18 @@
 !   Copyright (C) 2014, Northwestern University and Argonne National Laboratory
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: test_vardf90.f90 2639 2016-11-18 15:06:10Z wkliao $
+! $Id: test_vardf90.f90 3422 2017-09-25 05:42:52Z wkliao $
 
 !
 ! This program tests the vard API.
 ! The write buffer is a 2D array of size NX x NY
 ! The MPI data type for the buffer is defined by swapping the 1st and 2nd
-! rows of the array using a butype constructed by MPI_Type_create_hindex().
+! rows of the array using a buftype constructed by MPI_Type_create_hindex().
 ! It also writes a fixed-size variable using a buftype constructed by
 ! MPI_Type_create_subarray(). Both record and foxed-size variables are read
 ! back using various filetypes and buftypes and check the contents.
 !
-! The expected reults from the output file contents are:
+! The expected results from the output file contents are:
 ! (when running on 1 MPI process)
 !
 !  % ncmpidump testfile.nc
@@ -370,5 +370,7 @@
           endif
 
  999      call MPI_Finalize(ierr)
+          if (nerrs .GT. 0) stop 2
+
       end program main
 
diff --git a/test/testcases/test_varm.c b/test/testcases/test_varm.c
index 9ade07d..2fa945f 100644
--- a/test/testcases/test_varm.c
+++ b/test/testcases/test_varm.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: test_varm.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: test_varm.c 3422 2017-09-25 05:42:52Z wkliao $
  */
 
 #include <stdlib.h>
@@ -13,11 +13,6 @@
 
 #include <testutils.h>
 
-#define PRINT_ERR_ON_SCREEN
-
-#define ERRCODE 2
-#define ERR {if (err!=NC_NOERR) {printf("Error at line %d: %s\n", __LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 /*----< main() >------------------------------------------------------------*/
 int main(int argc, char **argv)
 {
@@ -26,7 +21,7 @@ int main(int argc, char **argv)
 
     MPI_Offset start[2], count[2], stride[2], imap[2];
     int   var[6][4];
-    float rh[4][6];
+    float k, rh[4][6];
     signed char  varT[4][6];
     char filename[256];
 
@@ -37,7 +32,7 @@ int main(int argc, char **argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -55,13 +50,13 @@ int main(int argc, char **argv)
 #endif
 
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER | NC_64BIT_DATA,
-                       MPI_INFO_NULL, &ncid); ERR
+                       MPI_INFO_NULL, &ncid); CHECK_ERR
 
     /* define a variable of a 6 x 4 integer array in the nc file */
-    err = ncmpi_def_dim(ncid, "Y", 6, &dimid[0]); ERR
-    err = ncmpi_def_dim(ncid, "X", 4, &dimid[1]); ERR
-    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimid, &varid); ERR
-    err = ncmpi_enddef(ncid); ERR
+    err = ncmpi_def_dim(ncid, "Y", 6, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "X", 4, &dimid[1]); CHECK_ERR
+    err = ncmpi_def_var(ncid, "var", NC_INT, 2, dimid, &varid); CHECK_ERR
+    err = ncmpi_enddef(ncid); CHECK_ERR
 
     /* create a 6 x 4 integer variable in the file with contents:
            0,  1,  2,  3,
@@ -76,32 +71,72 @@ int main(int argc, char **argv)
     start[0] = 0; start[1] = 0;
     count[0] = 6; count[1] = 4;
     if (rank > 0) count[0] = count[1] = 0;
-    err = ncmpi_put_vara_int_all(ncid, varid, start, count, &var[0][0]); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, start, count, &var[0][0]); CHECK_ERR
 
     if (nprocs > 1) MPI_Barrier(MPI_COMM_WORLD);
 
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid); CHECK_ERR
+
+    err = ncmpi_inq_varid(ncid, "var", &varid); CHECK_ERR
+
     /* read the variable back in the matrix transposed way, rh is 4 x 6 */
      count[0] = 6;  count[1] = 4;
     stride[0] = 1; stride[1] = 1;
       imap[0] = 1;   imap[1] = 6;   /* would be {4, 1} if not transposing */
-#define TEST_NON_BLOCKING_API
-#ifdef TEST_NON_BLOCKING_API
-    err = ncmpi_iget_varm_float(ncid, varid, start, count, stride, imap, &rh[0][0], &req); ERR
 
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
+    for (i=0; i<6; i++) for (j=0; j<4; j++) rh[j][i] = -1.0;
+
+    err = ncmpi_iget_varm_float(ncid, varid, start, count, stride, imap, &rh[0][0], &req); CHECK_ERR
+
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
+    err = status; CHECK_ERR
 
-    if (status != NC_NOERR) ERR
-#else
-    err = ncmpi_get_varm_float_all(ncid, varid, start, count, stride, imap, &rh[0][0]); ERR
+    /* check the contents of read */
+    k = 0.0;
+    for (i=0; i<6; i++) {
+        for (j=0; j<4; j++) {
+            if (rh[j][i] != k) {
+#ifdef PRINT_ERR_ON_SCREEN
+                printf("Error at line %d in %s: expecting rh[%d][%d]=%f but got %f\n",
+                __LINE__,__FILE__,j,i,k,rh[j][i]);
+#endif
+                nerrs++;
+                break;
+            }
+            k += 1.0;
+        }
+    }
+#ifdef PRINT_ON_SCREEN
+    /* print the contents of read */
+    for (j=0; j<4; j++) {
+        printf("[%2d]: ",j);
+        for (i=0; i<6; i++) {
+            printf("%5.1f",rh[j][i]);
+        }
+        printf("\n");
+    }
 #endif
+    /* the stdout should be:
+           [ 0]:   0.0  4.0  8.0 12.0 16.0 20.0
+           [ 1]:   1.0  5.0  9.0 13.0 17.0 21.0
+           [ 2]:   2.0  6.0 10.0 14.0 18.0 22.0
+           [ 3]:   3.0  7.0 11.0 15.0 19.0 23.0
+     */
+
+    for (i=0; i<6; i++) for (j=0; j<4; j++) rh[j][i] = -1.0;
+
+    err = ncmpi_get_varm_float_all(ncid, varid, start, count, stride, imap, &rh[0][0]); CHECK_ERR
 
     /* check the contents of read */
-    float k = 0.0;
+    k = 0.0;
     for (i=0; i<6; i++) {
         for (j=0; j<4; j++) {
             if (rh[j][i] != k) {
 #ifdef PRINT_ERR_ON_SCREEN
-                printf("Error: expecting rh[%d][%d]=%f but got %f\n",j,i,k,rh[j][i]);
+                printf("Error at line %d in %s: expecting rh[%d][%d]=%f but got %f\n",
+                __LINE__,__FILE__,j,i,k,rh[j][i]);
 #endif
                 nerrs++;
                 break;
@@ -126,12 +161,19 @@ int main(int argc, char **argv)
            [ 3]:   3.0  7.0 11.0 15.0 19.0 23.0
      */
 
+
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_WRITE, MPI_INFO_NULL, &ncid); CHECK_ERR
+
+    err = ncmpi_inq_varid(ncid, "var", &varid); CHECK_ERR
+
     /* testing get_varm(), first zero-out the variable in the file */
     memset(&var[0][0], 0, 6*4*sizeof(int));
     start[0] = 0; start[1] = 0;
     count[0] = 6; count[1] = 4;
     if (rank > 0) count[0] = count[1] = 0;
-    err = ncmpi_put_vara_int_all(ncid, varid, start, count, &var[0][0]); ERR
+    err = ncmpi_put_vara_int_all(ncid, varid, start, count, &var[0][0]); CHECK_ERR
 
     /* set the contents of the write buffer varT, a 4 x 6 char array
           50, 51, 52, 53, 54, 55,
@@ -147,15 +189,11 @@ int main(int argc, char **argv)
     stride[0] = 1; stride[1] = 1;
     imap[0]   = 1; imap[1]   = 6;   /* would be {4, 1} if not transposing */
     if (rank > 0) count[0] = count[1] = 0;
-#ifdef TEST_NON_BLOCKING_API
-    err = ncmpi_iput_varm_schar(ncid, varid, start, count, stride, imap, &varT[0][0], &req); ERR
 
-    err = ncmpi_wait_all(ncid, 1, &req, &status); ERR
+    err = ncmpi_iput_varm_schar(ncid, varid, start, count, stride, imap, &varT[0][0], &req); CHECK_ERR
 
-    if (status != NC_NOERR) ERR
-#else
-    err = ncmpi_put_varm_schar_all(ncid, varid, start, count, stride, imap, &varT[0][0]); ERR
-#endif
+    err = ncmpi_wait_all(ncid, 1, &req, &status); CHECK_ERR
+    err = status; CHECK_ERR
 
     /* the output from command "ncmpidump -v var test.nc" should be:
            var =
@@ -172,15 +210,33 @@ int main(int argc, char **argv)
         for (i=0; i<6; i++) {
             if (varT[j][i] != j*6+i + 50) {
 #ifdef PRINT_ERR_ON_SCREEN
-                /* this error is a pntecdf internal error, if occurs */
-                printf("Error: expecting varT[%d][%d]=%d but got %d\n",j,i,j*6+i + 50,varT[j][i]);
+                /* this error is a pnetcdf internal error, if occurs */
+                printf("Error at line %d in %s: expecting varT[%d][%d]=%d but got %d\n",
+                __LINE__,__FILE__,j,i,j*6+i + 50,varT[j][i]);
 #endif
                 nerrs++;
                 break;
             }
         }
     }
-    err = ncmpi_close(ncid); ERR
+    err = ncmpi_put_varm_schar_all(ncid, varid, start, count, stride, imap, &varT[0][0]); CHECK_ERR
+
+    /* check if the contents of write buffer have been altered */
+    for (j=0; j<4; j++) {
+        for (i=0; i<6; i++) {
+            if (varT[j][i] != j*6+i + 50) {
+#ifdef PRINT_ERR_ON_SCREEN
+                /* this error is a pnetcdf internal error, if occurs */
+                printf("Error at line %d in %s: expecting varT[%d][%d]=%d but got %d\n",
+                __LINE__,__FILE__,j,i,j*6+i + 50,varT[j][i]);
+#endif
+                nerrs++;
+                break;
+            }
+        }
+    }
+
+    err = ncmpi_close(ncid); CHECK_ERR
 
     /* check if PnetCDF freed all internal malloc */
     MPI_Offset malloc_size, sum_size;
@@ -199,7 +255,6 @@ int main(int argc, char **argv)
     }
 
     MPI_Finalize();
-
-    return (nerrs == 0) ? 0 : 1;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/tst_dimsizes.c b/test/testcases/tst_dimsizes.c
new file mode 100644
index 0000000..108fdc1
--- /dev/null
+++ b/test/testcases/tst_dimsizes.c
@@ -0,0 +1,145 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *  $Id: tst_dimsizes.c 3423 2017-09-26 06:43:37Z wkliao $
+ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program (borrowed from netCDF library) tests defining and inquiring the
+ * maximum allowable dimension size for CDF-1, 2, and 5 formats.
+ *
+ * The compile and run commands are given below.
+ *
+ *    % mpicc -g -o tst_dimsizes tst_dimsizes.c -lpnetcdf
+ *
+ *    % mpiexec -l -n 1 tst_dimsizes testfile.nc
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libgen.h> /* basename() */
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+#define DIMMAXCLASSIC (NC_MAX_INT - 3)
+#define DIMMAX64OFFSET (NC_MAX_UINT - 3)
+#define DIMMAX64DATA NC_MAX_INT64
+
+/*
+ * NC_CLASSIC => NC_INT_MAX - 3
+ * NC_64BIT_OFFSET => NC_UINT_MAX - 3
+ * NC_64BIT_DATA => NC_INT64_MAX
+ * Note that for NC_64BIT_DATA, the max dimension size is different from netCDF
+ * library. This is because PnetCDF uses MPI_Offset for dimension size and
+ * MPI_Offset is a signed long long.
+*/
+
+int
+main(int argc, char **argv)
+{
+    char filename[256];
+    int rank, nprocs, err, nerrs=0;
+    int ncid, dimid;
+    MPI_Offset dimsize;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+    MPI_Bcast(filename, 256, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for defining max dimension sizes ", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+    /* Writing Max Dimension Size For NC_CLASSIC */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
+    dimsize = DIMMAXCLASSIC;
+    err = ncmpi_def_dim(ncid, "testdim", dimsize, &dimid); CHECK_ERR
+    dimsize = -1;
+    err = ncmpi_def_dim(ncid, "testdim1", dimsize, &dimid); EXP_ERR(NC_EDIMSIZE)
+    dimsize = DIMMAXCLASSIC+1;
+    err = ncmpi_def_dim(ncid, "testdim1", dimsize, &dimid); EXP_ERR(NC_EDIMSIZE)
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* Reading Max Dimension Size For NC_CLASSIC */
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOCLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_inq_dimid(ncid, "testdim", &dimid); CHECK_ERR
+    err = ncmpi_inq_dimlen(ncid, dimid, &dimsize); CHECK_ERR
+    if (dimsize != DIMMAXCLASSIC) {
+        printf("Error at line %d in %s: expecting dimsize %d but got %lld\n", __LINE__,__FILE__,DIMMAXCLASSIC,dimsize);
+        nerrs++;
+    }
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* Writing Max Dimension Size For NC_64BIT_OFFSET */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER | NC_64BIT_OFFSET, MPI_INFO_NULL, &ncid); CHECK_ERR
+    dimsize = DIMMAX64OFFSET;
+    err = ncmpi_def_dim(ncid, "testdim", dimsize, &dimid); CHECK_ERR
+    dimsize = -1;
+    err = ncmpi_def_dim(ncid, "testdim1", dimsize, &dimid); EXP_ERR(NC_EDIMSIZE)
+    dimsize = DIMMAX64OFFSET+1;
+    err = ncmpi_def_dim(ncid, "testdim1", dimsize, &dimid); EXP_ERR(NC_EDIMSIZE)
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* Reading Max Dimension Size For NC_64BIT_OFFSET */
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOCLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_inq_dimid(ncid, "testdim", &dimid); CHECK_ERR
+    err = ncmpi_inq_dimlen(ncid, dimid, &dimsize); CHECK_ERR
+    if (dimsize != DIMMAX64OFFSET) {
+        printf("Error at line %d in %s: expecting dimsize %d but got %lld\n", __LINE__,__FILE__,DIMMAX64OFFSET,dimsize);
+        nerrs++;
+    }
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* Writing Max Dimension Size For NC_64BIT_DATA */
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER | NC_64BIT_DATA, MPI_INFO_NULL, &ncid); CHECK_ERR
+    dimsize = DIMMAX64DATA;
+    err = ncmpi_def_dim(ncid, "testdim", dimsize, &dimid); CHECK_ERR
+    dimsize = -1;
+    err = ncmpi_def_dim(ncid, "testdim1", dimsize, &dimid); EXP_ERR(NC_EDIMSIZE)
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* Reading Max Dimension Size For NC_64BIT_DATA */
+    err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOCLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
+    err = ncmpi_inq_dimid(ncid, "testdim", &dimid); CHECK_ERR
+    err = ncmpi_inq_dimlen(ncid, dimid, &dimsize); CHECK_ERR
+    if (dimsize != DIMMAX64DATA) {
+        printf("Error at line %d in %s: expecting dimsize %lld but got %lld\n", __LINE__,__FILE__,DIMMAX64DATA,dimsize);
+        nerrs++;
+    }
+    err = ncmpi_close(ncid); CHECK_ERR
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
diff --git a/test/testcases/tst_max_var_dims.c b/test/testcases/tst_max_var_dims.c
new file mode 100644
index 0000000..7dadc29
--- /dev/null
+++ b/test/testcases/tst_max_var_dims.c
@@ -0,0 +1,99 @@
+/*
+ *  Copyright (C) 2017, Northwestern University and Argonne National Laboratory
+ *  See COPYRIGHT notice in top-level directory.
+ *
+ *  $Id: tst_max_var_dims.c 3414 2017-09-24 01:39:49Z wkliao $
+ */
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ * This program check if error code NC_EMAXDIMS can be returned correctly, when
+ * defining a variable with more than NC_MAX_VAR_DIMS dimensions.
+ *
+ * The compile and run commands are given below.
+ *
+ *    % mpicc -g -o tst_max_var_dims tst_max_var_dims.c -lpnetcdf
+ *
+ *    % mpiexec -l -n 1 tst_max_var_dims testfile.nc
+ *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <libgen.h> /* basename() */
+#include <limits.h> /* INT_MAX */
+#include <pnetcdf.h>
+
+#include <testutils.h>
+
+int main(int argc, char** argv) {
+    char filename[256];
+    int rank, nprocs, nerrs=0;
+#if NC_MAX_VAR_DIMS < INT_MAX
+    int i, err, ncid, varid, *dimid;
+#endif
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (argc > 2) {
+        if (!rank) printf("Usage: %s [filename]\n",argv[0]);
+        MPI_Finalize();
+        return 1;
+    }
+    if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
+    else           strcpy(filename, "testfile.nc");
+    MPI_Bcast(filename, 256, MPI_CHAR, 0, MPI_COMM_WORLD);
+
+    if (rank == 0) {
+        char *cmd_str = (char*)malloc(strlen(argv[0]) + 256);
+        sprintf(cmd_str, "*** TESTING C   %s for checking NC_MAX_VAR_DIMS ", basename(argv[0]));
+        printf("%-66s ------ ", cmd_str); fflush(stdout);
+        free(cmd_str);
+    }
+
+#if NC_MAX_VAR_DIMS < INT_MAX
+    err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid); CHECK_ERR
+
+    /* define dimensions */
+    dimid = (int*) malloc((NC_MAX_VAR_DIMS+2) * sizeof(int));
+    err = ncmpi_def_dim(ncid, "dim0", NC_UNLIMITED, &dimid[0]); CHECK_ERR
+    err = ncmpi_def_dim(ncid, "dim1", 1, &dimid[1]); CHECK_ERR
+
+    for (i=2; i<NC_MAX_VAR_DIMS+2; i++) dimid[i] = dimid[1];
+
+    /* define variables */
+    err = ncmpi_def_var(ncid, "v0", NC_INT, NC_MAX_VAR_DIMS+1, &dimid[0], &varid);
+    EXP_ERR(NC_EMAXDIMS)
+
+    err = ncmpi_def_var(ncid, "v1", NC_INT, NC_MAX_VAR_DIMS+1, &dimid[1], &varid);
+    EXP_ERR(NC_EMAXDIMS)
+
+    err = ncmpi_set_fill(ncid, NC_NOFILL, NULL); CHECK_ERR
+    err = ncmpi_close(ncid); CHECK_ERR
+    free(dimid);
+
+    /* check if PnetCDF freed all internal malloc */
+    MPI_Offset malloc_size, sum_size;
+    err = ncmpi_inq_malloc_size(&malloc_size);
+    if (err == NC_NOERR) {
+        MPI_Reduce(&malloc_size, &sum_size, 1, MPI_OFFSET, MPI_SUM, 0, MPI_COMM_WORLD);
+        if (rank == 0 && sum_size > 0)
+            printf("heap memory allocated by PnetCDF internally has %lld bytes yet to be freed\n",
+                   sum_size);
+    }
+
+    MPI_Allreduce(MPI_IN_PLACE, &nerrs, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    if (rank == 0) {
+        if (nerrs) printf(FAIL_STR,nerrs);
+        else       printf(PASS_STR);
+    }
+#else
+    if (rank == 0) printf(SKIP_STR);
+#endif
+
+    MPI_Finalize();
+    return (nerrs > 0);
+}
+
diff --git a/test/testcases/varn_contig.c b/test/testcases/varn_contig.c
index 64ad4c8..b4199ec 100644
--- a/test/testcases/varn_contig.c
+++ b/test/testcases/varn_contig.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: varn_contig.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: varn_contig.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests using a single call of ncmpi_put_varn_int_all() to
@@ -47,8 +47,6 @@
 #define NX 10
 #define NDIMS 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at %s line=%d: %s\n", __FILE__,__LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 static
 int check_contents_for_fail(int *buffer)
 {
@@ -86,7 +84,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -107,17 +105,17 @@ int main(int argc, char** argv)
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* create a global array of size NY * NX */
     err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]);
-    ERR
+    CHECK_ERR
     err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]);
-    ERR
+    CHECK_ERR
     err = ncmpi_def_var(ncid, "var", NC_INT, NDIMS, dimid, &varid[0]);
-    ERR
+    CHECK_ERR
     err = ncmpi_enddef(ncid);
-    ERR
+    CHECK_ERR
 
     /* pick arbitrary numbers of requests for 4 processes */
     num_reqs = 0;
@@ -202,18 +200,18 @@ int main(int argc, char** argv)
 
     /* write using varn API */
     err = ncmpi_put_varn_int_all(ncid, varid[0], num_reqs, starts, counts, buffer);
-    ERR
+    CHECK_ERR
 
     if (nprocs > 4) MPI_Barrier(MPI_COMM_WORLD);
 
     /* read back and check contents */
     memset(r_buffer, 0, NY*NX*sizeof(int));
     err = ncmpi_get_var_int_all(ncid, varid[0], r_buffer);
-    ERR
+    CHECK_ERR
     nerrs += check_contents_for_fail(r_buffer);
 
     err = ncmpi_close(ncid);
-    ERR
+    CHECK_ERR
 
     free(buffer);
     free(r_buffer);
@@ -239,6 +237,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/varn_int.c b/test/testcases/varn_int.c
index a57ea28..0978435 100644
--- a/test/testcases/varn_int.c
+++ b/test/testcases/varn_int.c
@@ -4,7 +4,7 @@
  *  See COPYRIGHT notice in top-level directory.
  *
  *********************************************************************/
-/* $Id: varn_int.c 2744 2016-12-28 16:25:22Z wkliao $ */
+/* $Id: varn_int.c 3341 2017-08-25 22:29:08Z wkliao $ */
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * This example tests using a single call of ncmpi_put_varn_int_all() to
@@ -54,8 +54,6 @@
 #define NX 10
 #define NDIMS 2
 
-#define ERR {if(err!=NC_NOERR){printf("Error at %s line=%d: %s\n", __FILE__,__LINE__, ncmpi_strerror(err)); nerrs++;}}
-
 static
 int check_contents_for_fail(int *buffer)
 {
@@ -103,7 +101,7 @@ int main(int argc, char** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -124,21 +122,21 @@ int main(int argc, char** argv)
     /* create a new file for writing ----------------------------------------*/
     cmode = NC_CLOBBER | NC_64BIT_DATA;
     err = ncmpi_create(MPI_COMM_WORLD, filename, cmode, MPI_INFO_NULL, &ncid);
-    ERR
+    CHECK_ERR
 
     /* create a global array of size NY * NX */
     err = ncmpi_def_dim(ncid, "Y", NY, &dimid[0]);
-    ERR
+    CHECK_ERR
     err = ncmpi_def_dim(ncid, "X", NX, &dimid[1]);
-    ERR
+    CHECK_ERR
     err = ncmpi_def_var(ncid, "var", NC_INT, NDIMS, dimid, &varid[0]);
-    ERR
+    CHECK_ERR
     err = ncmpi_def_dim(ncid, "REC_DIM", NC_UNLIMITED, &dimid[0]);
-    ERR
+    CHECK_ERR
     err = ncmpi_def_var(ncid, "rec_var", NC_INT, NDIMS, dimid, &varid[1]);
-    ERR
+    CHECK_ERR
     err = ncmpi_enddef(ncid);
-    ERR
+    CHECK_ERR
 
     /* pick arbitrary numbers of requests for 4 processes */
     num_reqs = 0;
@@ -222,20 +220,17 @@ int main(int argc, char** argv)
 
     /* check error code: NC_ENULLSTART */
     err = ncmpi_put_varn_int_all(ncid, varid[0], 1, NULL, NULL, NULL);
-    if (err != NC_ENULLSTART) {
-        printf("expecting error code NC_ENULLSTART but got %s\n",nc_err_code_name(err));
-        nerrs++;
-    }
+    EXP_ERR(NC_ENULLSTART)
 
     /* write using varn API */
     err = ncmpi_put_varn_int_all(ncid, varid[0], num_reqs, starts, counts, buffer);
-    ERR
+    CHECK_ERR
 
     /* check if user put buffer contents altered */
     for (i=0; i<w_len; i++) {
         if (buffer[i] != rank+10) {
-            printf("Error: user put buffer[%d] altered from %d to %d\n",
-                   i, rank+10, buffer[i]);
+            printf("Error at line %d in %s: user put buffer[%d] altered from %d to %d\n",
+                   __LINE__,__FILE__,i, rank+10, buffer[i]);
             nerrs++;
         }
     }
@@ -244,7 +239,7 @@ int main(int argc, char** argv)
     /* read back and check contents */
     memset(r_buffer, 0, NY*NX*sizeof(int));
     err = ncmpi_get_var_int_all(ncid, varid[0], r_buffer);
-    ERR
+    CHECK_ERR
     nerrs += check_contents_for_fail(r_buffer);
 
     /* permute write order */
@@ -255,13 +250,13 @@ int main(int argc, char** argv)
 
     /* write using varn API */
     err = ncmpi_put_varn_int_all(ncid, varid[1], num_reqs, starts, counts, buffer);
-    ERR
+    CHECK_ERR
 
     /* check if user put buffer contents altered */
     for (i=0; i<w_len; i++) {
         if (buffer[i] != rank+10) {
-            printf("Error: user put buffer[%d] altered from %d to %d\n",
-                   i, rank+10, buffer[i]);
+            printf("Error at line %d in %s: user put buffer[%d] altered from %d to %d\n",
+                   __LINE__,__FILE__,i, rank+10, buffer[i]);
             nerrs++;
         }
     }
@@ -269,18 +264,18 @@ int main(int argc, char** argv)
     /* read back using get_var API and check contents */
     memset(r_buffer, 0, NY*NX*sizeof(int));
     err = ncmpi_get_var_int_all(ncid, varid[1], r_buffer);
-    ERR
+    CHECK_ERR
     nerrs += check_contents_for_fail(r_buffer);
 
     /* read back using get_varn API and check contents */
     for (i=0; i<w_len; i++) buffer[i] = -1;
     err = ncmpi_get_varn_int_all(ncid, varid[0], num_reqs, starts, counts, buffer);
-    ERR
+    CHECK_ERR
 
     for (i=0; i<w_len; i++) {
         if (buffer[i] != rank+10) {
-            printf("Error at line %d: expecting buffer[%d]=%d but got %d\n",
-                   __LINE__,i,rank+10,buffer[i]);
+            printf("Error at line %d in %s: expecting buffer[%d]=%d but got %d\n",
+                   __LINE__,__FILE__,i,rank+10,buffer[i]);
             nerrs++;
         }
     }
@@ -293,24 +288,24 @@ int main(int argc, char** argv)
     buffer = (int*) malloc(w_len * 2 * sizeof(int));
     for (i=0; i<2*w_len; i++) buffer[i] = -1;
     err = ncmpi_get_varn_all(ncid, varid[0], num_reqs, starts, counts, buffer, 1, buftype);
-    ERR
+    CHECK_ERR
     MPI_Type_free(&buftype);
 
     for (i=0; i<w_len*2; i++) {
         if (i%2 && buffer[i] != -1) {
-            printf("Error at line %d: expecting buffer[%d]=-1 but got %d\n",
-                   __LINE__,i,buffer[i]);
+            printf("Error at line %d in %s: expecting buffer[%d]=-1 but got %d\n",
+                   __LINE__,__FILE__,i,buffer[i]);
             nerrs++;
         }
         if (i%2 == 0 && buffer[i] != rank+10) {
-            printf("Error at line %d: expecting buffer[%d]=%d but got %d\n",
-                   __LINE__,i,rank+10,buffer[i]);
+            printf("Error at line %d in %s: expecting buffer[%d]=%d but got %d\n",
+                   __LINE__,__FILE__,i,rank+10,buffer[i]);
             nerrs++;
         }
     }
 
     err = ncmpi_close(ncid);
-    ERR
+    CHECK_ERR
 
     free(buffer);
     free(r_buffer);
@@ -336,6 +331,6 @@ int main(int argc, char** argv)
     }
 
     MPI_Finalize();
-    return 0;
+    return (nerrs > 0);
 }
 
diff --git a/test/testcases/varn_intf.f b/test/testcases/varn_intf.f
index 91c49e8..5203abe 100644
--- a/test/testcases/varn_intf.f
+++ b/test/testcases/varn_intf.f
@@ -2,7 +2,7 @@
 !   Copyright (C) 2013, Northwestern University
 !   See COPYRIGHT notice in top-level directory.
 !
-! $Id: varn_intf.f 2638 2016-11-18 14:51:02Z wkliao $
+! $Id: varn_intf.f 3341 2017-08-25 22:29:08Z wkliao $
 
 ! This example shows how to use a single call of nfmpi_put_varn_int_all() to
 ! write a sequence of requests with arbitrary array indices and lengths.
@@ -69,7 +69,7 @@
               write(6,*) message(1:XTRIM(message)), nfmpi_strerror(err)
               msg = '*** TESTING F77 varn_intf.f for varn API '
               call pass_fail(1, msg)
-              call MPI_Abort(MPI_COMM_WORLD, -1, err)
+              STOP 2
           end if
       end ! subroutine check
 
@@ -287,5 +287,7 @@
           endif
 
  999      call MPI_Finalize(ierr)
+          if (nerrs .GT. 0) stop 2
+
       end ! program main
 
diff --git a/test/testcases/varn_real.f90 b/test/testcases/varn_real.f90
index 3aaeebc..5a4fafe 100644
--- a/test/testcases/varn_real.f90
+++ b/test/testcases/varn_real.f90
@@ -2,7 +2,7 @@
 !  Copyright (C) 2012, Northwestern University and Argonne National Laboratory
 !  See COPYRIGHT notice in top-level directory.
 !
-! $Id: varn_real.f90 2638 2016-11-18 14:51:02Z wkliao $
+! $Id: varn_real.f90 3341 2017-08-25 22:29:08Z wkliao $
 
 !
 ! This example shows how to use a single call of nf90mpi_put_varn_all()
@@ -45,6 +45,7 @@
               msg = '*** TESTING F90 varn_real.f90 for varn API '
               call pass_fail(1, msg)
               ! call MPI_Abort(MPI_COMM_WORLD, -1, err)
+              STOP 2
           end if
       end subroutine check
 
@@ -296,6 +297,7 @@
           endif
 
  999      call MPI_Finalize(ierr)
+          if (nerrs .GT. 0) stop 2
 
       end program
 
diff --git a/test/testcases/vectors.c b/test/testcases/vectors.c
index 2ca8dd2..d01a1d9 100644
--- a/test/testcases/vectors.c
+++ b/test/testcases/vectors.c
@@ -2,7 +2,7 @@
  *  Copyright (C) 2003, Northwestern University and Argonne National Laboratory
  *  See COPYRIGHT notice in top-level directory.
  *
- *  $Id: vectors.c 2744 2016-12-28 16:25:22Z wkliao $
+ *  $Id: vectors.c 3341 2017-08-25 22:29:08Z wkliao $
  */
 
 #include <stdio.h>
@@ -14,11 +14,10 @@
 
 #include <testutils.h>
 
-#define HANDLE_ERR(err) { if (err!=NC_NOERR) {nerrs++; fprintf(stderr, "Error at line %d: %s\n",__LINE__,ncmpi_strerror(err));}}
-
 #define VECCOUNT 4
 #define BLOCKLEN  3
 #define STRIDE   5
+
 int main(int argc, char ** argv)
 {
     int ncid, dimid, varid, rank, nprocs;
@@ -37,7 +36,7 @@ int main(int argc, char ** argv)
     if (argc > 2) {
         if (!rank) printf("Usage: %s [filename]\n",argv[0]);
         MPI_Finalize();
-        return 0;
+        return 1;
     }
     if (argc == 2) snprintf(filename, 256, "%s", argv[1]);
     else           strcpy(filename, "testfile.nc");
@@ -55,14 +54,14 @@ int main(int argc, char ** argv)
 #endif
 
     err = ncmpi_create(MPI_COMM_WORLD, filename, NC_CLOBBER, MPI_INFO_NULL, &ncid);
-    HANDLE_ERR(err)
+    CHECK_ERR
     err = ncmpi_def_dim(ncid, "50k", 1024*50, &dimid);
-    HANDLE_ERR(err)
+    CHECK_ERR
     err = ncmpi_def_var(ncid, "vector", NC_DOUBLE, 1, &dimid, &varid);
-    HANDLE_ERR(err)
+    CHECK_ERR
 
     err = ncmpi_enddef(ncid);
-    HANDLE_ERR(err)
+    CHECK_ERR
 
     MPI_Type_vector(VECCOUNT, BLOCKLEN, STRIDE, MPI_INT, &vtype);
     MPI_Type_create_resized(vtype, 0, STRIDE*VECCOUNT*sizeof(int), &rtype);
@@ -81,25 +80,25 @@ int main(int argc, char ** argv)
 
     start = 10; acount = count*12;
     err = ncmpi_begin_indep_data(ncid);
-    HANDLE_ERR(err)
+    CHECK_ERR
     if (rank == 0) {
         err = ncmpi_put_vara(ncid, varid, &start, &acount, userbuf, 1, usertype);
-        HANDLE_ERR(err)
+        CHECK_ERR
     }
 
     err = ncmpi_close(ncid);
-    HANDLE_ERR(err)
+    CHECK_ERR
 
     err = ncmpi_open(MPI_COMM_WORLD, filename, NC_NOWRITE, MPI_INFO_NULL, &ncid);
-    HANDLE_ERR(err)
+    CHECK_ERR
     err = ncmpi_begin_indep_data(ncid);
-    HANDLE_ERR(err)
+    CHECK_ERR
     err = ncmpi_inq_varid(ncid, "vector", &varid);
-    HANDLE_ERR(err)
+    CHECK_ERR
     err = ncmpi_get_vara(ncid, varid, &start, &acount, cmpbuf, 1, usertype);
-    HANDLE_ERR(err)
+    CHECK_ERR
     err = ncmpi_close(ncid);
-    HANDLE_ERR(err)
+    CHECK_ERR
 
     for (i=0; errs < 10 &&  i < acount; i++) {
         /* vector of 4,3,5, so skip 4th and 5th items of every block */
@@ -132,6 +131,5 @@ int main(int argc, char ** argv)
     }
 
     MPI_Finalize();
-
-    return 0;
+    return (nerrs > 0);
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pnetcdf.git



More information about the debian-science-commits mailing list